# jdcar1241/viajaperu architecture

> Architecture diagram of the GitHub repository jdcar1241/viajaperu, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-12). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/jdcar1241/viajaperu
- Repository: https://github.com/jdcar1241/viajaperu

## Overview

ViajaPeru is a tourism-package booking and payment application: travelers browse packages, register or sign in, submit a reservation, and receive confirmation; staff-facing flows collect payments and issue receipts. The React app routes to these screens and its API helpers send requests to the Express backend, which handles authentication, bookings, payment, document verification, and receipts using Supabase. Major frontend and backend capabilities are represented, but some route implementations and integrations were not excerpted; those links are omitted or marked unverified.

Main entry points: [`react-turismo/src/App.jsx`](https://github.com/jdcar1241/viajaperu/blob/main/react-turismo/src/App.jsx) (Screen router), [`backend-turismo/src/index.js`](https://github.com/jdcar1241/viajaperu/blob/main/backend-turismo/src/index.js) (Express server and routes), [`react-turismo/src/api-reservas.js`](https://github.com/jdcar1241/viajaperu/blob/main/react-turismo/src/api-reservas.js) (Authenticated API client), [`backend-turismo/src/supabase.js`](https://github.com/jdcar1241/viajaperu/blob/main/backend-turismo/src/supabase.js) (Supabase services and data)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Traveler web app"]
  node_app["Screen router<br/>[App.jsx]"]
  node_catalog["Package catalog<br/>[Catalogo.jsx]"]
  node_package_detail["Package details<br/>[Detalle.jsx]"]
  node_package_api["Package API client<br/>[api.js]"]
  node_reservation_api["Authenticated API client<br/>[api-reservas.js]"]
end

subgraph group_api["Backend API"]
  node_server["Express server and routes<br/>[index.js]"]
  node_auth_middleware["Session and role checks<br/>[auth.middleware.js]"]
  node_supabase[("Supabase services and data<br/>[supabase.js]")]
end

subgraph group_identity["Identity and documents"]
  node_registration["Account registration<br/>[Registro.jsx]"]
  node_login["Sign in<br/>[Login.jsx]"]
  node_session["Session state<br/>[auth.js]"]
  node_document_helpers["Document validation<br/>[documentos.js]"]
  node_mrz_helpers["Passport MRZ<br/>[mrz.js]"]
  node_auth_routes["Authentication routes<br/>[auth.routes.js]"]
  node_customer_routes["Customer registration routes<br/>[clientes.routes.js]"]
  node_document_check["Document verification"]
  node_consult_routes["Document lookup routes"]
  node_foreign_consult_routes["Foreign document lookup"]
  node_backend_document_parser["MRZ parser<br/>[mrz.js]"]
end

subgraph group_booking["Package booking"]
  node_reservation_ui["Reservation form<br/>[Reserva.jsx]"]
  node_confirmation["Reservation confirmation<br/>[Confirmacion.jsx]"]
  node_booking_routes["Reservation routes<br/>[reservas.routes.js]"]
  node_package_routes["Package routes<br/>[paquetes.routes.js]"]
end

subgraph group_finance["Payments and receipts"]
  node_payment_list["Payment list<br/>[Cobros.jsx]"]
  node_payment_form["Collect payment<br/>[Cobrar.jsx]"]
  node_receipt_ui["Receipt and PDF view<br/>[Comprobante.jsx]"]
  node_payment_routes["Payment routes<br/>[cobros.routes.js]"]
  node_gateway["Culqi gateway adapter<br/>[culqi.js]"]
  node_receipt_routes["Receipt routes"]
  node_pdf["PDF generation<br/>[comprobante.pdf.js]"]
end

node_traveler(("Traveler or staff"))

node_traveler -->|"uses"| node_app
node_app -->|"routes to"| node_catalog
node_app -->|"routes to"| node_package_detail
node_app -->|"routes to"| node_registration
node_app -->|"routes to"| node_login
node_app -->|"routes to"| node_reservation_ui
node_app -->|"routes to"| node_confirmation
node_app -->|"routes to"| node_payment_list
node_app -->|"routes to"| node_payment_form
node_app -->|"routes to"| node_receipt_ui
node_catalog -->|"requests packages"| node_package_api
node_package_detail -->|"requests details"| node_package_api
node_registration -->|"submits registration"| node_reservation_api
node_registration -->|"validates documents"| node_document_helpers
node_registration -->|"parses passport MRZ"| node_mrz_helpers
node_login -->|"requests login"| node_reservation_api
node_login -.->|"sets session"| node_session
node_reservation_ui -->|"submits reservation"| node_reservation_api
node_reservation_ui -->|"validates documents"| node_document_helpers
node_reservation_ui -.->|"looks up documents"| node_consult_routes
node_reservation_api -->|"reads token"| node_session
node_reservation_api -.->|"sends API requests"| node_server
node_server -->|"mounts routes"| node_auth_routes
node_server -->|"mounts routes"| node_customer_routes
node_server -->|"mounts routes"| node_booking_routes
node_server -->|"mounts routes"| node_package_routes
node_server -->|"mounts routes"| node_consult_routes
node_server -->|"mounts routes"| node_foreign_consult_routes
node_server -->|"mounts routes"| node_payment_routes
node_server -->|"mounts routes"| node_receipt_routes
node_customer_routes -->|"verifies documents"| node_document_check
node_document_check -->|"parses MRZ"| node_backend_document_parser
node_customer_routes -->|"creates account and profile"| node_supabase
node_auth_routes -->|"uses auth service"| node_supabase
node_auth_middleware -->|"checks session and role"| node_supabase
node_booking_routes -->|"creates reservation"| node_supabase
node_package_routes -->|"queries packages"| node_supabase
node_payment_routes -->|"reads and records payments"| node_supabase
node_payment_routes -->|"charges or refunds"| node_gateway
node_receipt_routes -->|"issues and retrieves receipts"| node_supabase
node_receipt_routes -->|"generates PDF"| node_pdf
node_receipt_ui -->|"requests receipt data"| node_reservation_api
node_payment_list -.->|"requests payment data"| node_reservation_api
node_payment_form -.->|"submits payment"| node_reservation_api
node_confirmation -.->|"requests reservation data"| node_reservation_api

click node_app "https://github.com/jdcar1241/viajaperu/blob/main/react-turismo/src/App.jsx"
click node_catalog "https://github.com/jdcar1241/viajaperu/blob/main/react-turismo/src/Catalogo.jsx"
click node_package_detail "https://github.com/jdcar1241/viajaperu/blob/main/react-turismo/src/Detalle.jsx"
click node_registration "https://github.com/jdcar1241/viajaperu/blob/main/react-turismo/src/Registro.jsx"
click node_login "https://github.com/jdcar1241/viajaperu/blob/main/react-turismo/src/Login.jsx"
click node_session "https://github.com/jdcar1241/viajaperu/blob/main/react-turismo/src/auth.js"
click node_document_helpers "https://github.com/jdcar1241/viajaperu/blob/main/react-turismo/src/documentos.js"
click node_mrz_helpers "https://github.com/jdcar1241/viajaperu/blob/main/react-turismo/src/mrz.js"
click node_reservation_ui "https://github.com/jdcar1241/viajaperu/blob/main/react-turismo/src/Reserva.jsx"
click node_confirmation "https://github.com/jdcar1241/viajaperu/blob/main/react-turismo/src/Confirmacion.jsx"
click node_payment_list "https://github.com/jdcar1241/viajaperu/blob/main/react-turismo/src/Cobros.jsx"
click node_payment_form "https://github.com/jdcar1241/viajaperu/blob/main/react-turismo/src/Cobrar.jsx"
click node_receipt_ui "https://github.com/jdcar1241/viajaperu/blob/main/react-turismo/src/Comprobante.jsx"
click node_package_api "https://github.com/jdcar1241/viajaperu/blob/main/react-turismo/src/api.js"
click node_reservation_api "https://github.com/jdcar1241/viajaperu/blob/main/react-turismo/src/api-reservas.js"
click node_server "https://github.com/jdcar1241/viajaperu/blob/main/backend-turismo/src/index.js"
click node_auth_routes "https://github.com/jdcar1241/viajaperu/blob/main/backend-turismo/src/auth.routes.js"
click node_customer_routes "https://github.com/jdcar1241/viajaperu/blob/main/backend-turismo/src/clientes.routes.js"
click node_document_check "https://github.com/jdcar1241/viajaperu/blob/main/backend-turismo/src/verificacion-documentos.js"
click node_booking_routes "https://github.com/jdcar1241/viajaperu/blob/main/backend-turismo/src/reservas.routes.js"
click node_package_routes "https://github.com/jdcar1241/viajaperu/blob/main/backend-turismo/src/paquetes.routes.js"
click node_consult_routes "https://github.com/jdcar1241/viajaperu/blob/main/backend-turismo/src/consultas.routes.js"
click node_foreign_consult_routes "https://github.com/jdcar1241/viajaperu/blob/main/backend-turismo/src/consultas-ce.routes.js"
click node_payment_routes "https://github.com/jdcar1241/viajaperu/blob/main/backend-turismo/src/cobros.routes.js"
click node_gateway "https://github.com/jdcar1241/viajaperu/blob/main/backend-turismo/src/culqi.js"
click node_receipt_routes "https://github.com/jdcar1241/viajaperu/blob/main/backend-turismo/src/comprobantes.routes.js"
click node_pdf "https://github.com/jdcar1241/viajaperu/blob/main/backend-turismo/src/comprobante.pdf.js"
click node_auth_middleware "https://github.com/jdcar1241/viajaperu/blob/main/backend-turismo/src/auth.middleware.js"
click node_supabase "https://github.com/jdcar1241/viajaperu/blob/main/backend-turismo/src/supabase.js"
click node_backend_document_parser "https://github.com/jdcar1241/viajaperu/blob/main/backend-turismo/src/mrz.js"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_app,node_catalog,node_package_detail,node_package_api,node_reservation_api toneBlue
class node_server,node_auth_middleware,node_supabase toneAmber
class node_registration,node_login,node_session,node_document_helpers,node_mrz_helpers,node_auth_routes,node_customer_routes,node_document_check,node_consult_routes,node_foreign_consult_routes,node_backend_document_parser toneMint
class node_reservation_ui,node_confirmation,node_booking_routes,node_package_routes toneRose
class node_payment_list,node_payment_form,node_receipt_ui,node_payment_routes,node_gateway,node_receipt_routes,node_pdf,node_traveler toneIndigo
```

## Components

### Traveler web app

- [Screen router](https://github.com/jdcar1241/viajaperu/blob/main/react-turismo/src/App.jsx): `react-turismo/src/App.jsx`
- [Package catalog](https://github.com/jdcar1241/viajaperu/blob/main/react-turismo/src/Catalogo.jsx): `react-turismo/src/Catalogo.jsx`
- [Package details](https://github.com/jdcar1241/viajaperu/blob/main/react-turismo/src/Detalle.jsx): `react-turismo/src/Detalle.jsx`
- [Package API client](https://github.com/jdcar1241/viajaperu/blob/main/react-turismo/src/api.js): `react-turismo/src/api.js`
- [Authenticated API client](https://github.com/jdcar1241/viajaperu/blob/main/react-turismo/src/api-reservas.js): `react-turismo/src/api-reservas.js`

### Backend API

- [Express server and routes](https://github.com/jdcar1241/viajaperu/blob/main/backend-turismo/src/index.js): `backend-turismo/src/index.js`
- [Session and role checks](https://github.com/jdcar1241/viajaperu/blob/main/backend-turismo/src/auth.middleware.js): `backend-turismo/src/auth.middleware.js`
- [Supabase services and data](https://github.com/jdcar1241/viajaperu/blob/main/backend-turismo/src/supabase.js): `backend-turismo/src/supabase.js`

### Identity and documents

- [Account registration](https://github.com/jdcar1241/viajaperu/blob/main/react-turismo/src/Registro.jsx): `react-turismo/src/Registro.jsx`
- [Sign in](https://github.com/jdcar1241/viajaperu/blob/main/react-turismo/src/Login.jsx): `react-turismo/src/Login.jsx`
- [Session state](https://github.com/jdcar1241/viajaperu/blob/main/react-turismo/src/auth.js): `react-turismo/src/auth.js`
- [Document validation](https://github.com/jdcar1241/viajaperu/blob/main/react-turismo/src/documentos.js): `react-turismo/src/documentos.js`
- [Passport MRZ](https://github.com/jdcar1241/viajaperu/blob/main/react-turismo/src/mrz.js): `react-turismo/src/mrz.js`
- [Authentication routes](https://github.com/jdcar1241/viajaperu/blob/main/backend-turismo/src/auth.routes.js): `backend-turismo/src/auth.routes.js`
- [Customer registration routes](https://github.com/jdcar1241/viajaperu/blob/main/backend-turismo/src/clientes.routes.js): `backend-turismo/src/clientes.routes.js`
- [Document verification](https://github.com/jdcar1241/viajaperu/blob/main/backend-turismo/src/verificacion-documentos.js): `backend-turismo/src/verificacion-documentos.js`
- [Document lookup routes](https://github.com/jdcar1241/viajaperu/blob/main/backend-turismo/src/consultas.routes.js): `backend-turismo/src/consultas.routes.js`
- [Foreign document lookup](https://github.com/jdcar1241/viajaperu/blob/main/backend-turismo/src/consultas-ce.routes.js): `backend-turismo/src/consultas-ce.routes.js`
- [MRZ parser](https://github.com/jdcar1241/viajaperu/blob/main/backend-turismo/src/mrz.js): `backend-turismo/src/mrz.js`

### Package booking

- [Reservation form](https://github.com/jdcar1241/viajaperu/blob/main/react-turismo/src/Reserva.jsx): `react-turismo/src/Reserva.jsx`
- [Reservation confirmation](https://github.com/jdcar1241/viajaperu/blob/main/react-turismo/src/Confirmacion.jsx): `react-turismo/src/Confirmacion.jsx`
- [Reservation routes](https://github.com/jdcar1241/viajaperu/blob/main/backend-turismo/src/reservas.routes.js): `backend-turismo/src/reservas.routes.js`
- [Package routes](https://github.com/jdcar1241/viajaperu/blob/main/backend-turismo/src/paquetes.routes.js): `backend-turismo/src/paquetes.routes.js`

### Payments and receipts

- [Payment list](https://github.com/jdcar1241/viajaperu/blob/main/react-turismo/src/Cobros.jsx): `react-turismo/src/Cobros.jsx`
- [Collect payment](https://github.com/jdcar1241/viajaperu/blob/main/react-turismo/src/Cobrar.jsx): `react-turismo/src/Cobrar.jsx`
- [Receipt and PDF view](https://github.com/jdcar1241/viajaperu/blob/main/react-turismo/src/Comprobante.jsx): `react-turismo/src/Comprobante.jsx`
- [Payment routes](https://github.com/jdcar1241/viajaperu/blob/main/backend-turismo/src/cobros.routes.js): `backend-turismo/src/cobros.routes.js`
- [Culqi gateway adapter](https://github.com/jdcar1241/viajaperu/blob/main/backend-turismo/src/culqi.js): `backend-turismo/src/culqi.js`
- [Receipt routes](https://github.com/jdcar1241/viajaperu/blob/main/backend-turismo/src/comprobantes.routes.js): `backend-turismo/src/comprobantes.routes.js`
- [PDF generation](https://github.com/jdcar1241/viajaperu/blob/main/backend-turismo/src/comprobante.pdf.js): `backend-turismo/src/comprobante.pdf.js`

### Other components

- **Traveler or staff**

## Connections

- Traveler or staff → Screen router: uses (evidence: `react-turismo/src/App.jsx`)
- Screen router → Package catalog: routes to (evidence: `react-turismo/src/App.jsx`)
- Screen router → Package details: routes to (evidence: `react-turismo/src/App.jsx`)
- Screen router → Account registration: routes to (evidence: `react-turismo/src/App.jsx`)
- Screen router → Sign in: routes to (evidence: `react-turismo/src/App.jsx`)
- Screen router → Reservation form: routes to (evidence: `react-turismo/src/App.jsx`)
- Screen router → Reservation confirmation: routes to (evidence: `react-turismo/src/App.jsx`)
- Screen router → Payment list: routes to (evidence: `react-turismo/src/App.jsx`)
- Screen router → Collect payment: routes to (evidence: `react-turismo/src/App.jsx`)
- Screen router → Receipt and PDF view: routes to (evidence: `react-turismo/src/App.jsx`)
- Package catalog → Package API client: requests packages (evidence: `react-turismo/src/Catalogo.jsx`)
- Package details → Package API client: requests details (evidence: `react-turismo/src/Detalle.jsx`)
- Account registration → Authenticated API client: submits registration (evidence: `react-turismo/src/Registro.jsx`)
- Account registration → Document validation: validates documents (evidence: `react-turismo/src/Registro.jsx`)
- Account registration → Passport MRZ: parses passport MRZ (evidence: `react-turismo/src/Registro.jsx`)
- Sign in → Authenticated API client: requests login (evidence: `react-turismo/src/Login.jsx`)
- Sign in → Session state: sets session (evidence: `react-turismo/src/Login.jsx`)
- Reservation form → Authenticated API client: submits reservation (evidence: `react-turismo/src/Reserva.jsx`)
- Reservation form → Document validation: validates documents (evidence: `react-turismo/src/Reserva.jsx`)
- Reservation form → Document lookup routes: looks up documents
- Authenticated API client → Session state: reads token (evidence: `react-turismo/src/api-reservas.js`)
- Authenticated API client → Express server and routes: sends API requests
- Express server and routes → Authentication routes: mounts routes (evidence: `backend-turismo/src/index.js`)
- Express server and routes → Customer registration routes: mounts routes (evidence: `backend-turismo/src/index.js`)
- Express server and routes → Reservation routes: mounts routes (evidence: `backend-turismo/src/index.js`)
- Express server and routes → Package routes: mounts routes (evidence: `backend-turismo/src/index.js`)
- Express server and routes → Document lookup routes: mounts routes (evidence: `backend-turismo/src/index.js`)
- Express server and routes → Foreign document lookup: mounts routes (evidence: `backend-turismo/src/index.js`)
- Express server and routes → Payment routes: mounts routes (evidence: `backend-turismo/src/index.js`)
- Express server and routes → Receipt routes: mounts routes (evidence: `backend-turismo/src/index.js`)
- Customer registration routes → Document verification: verifies documents (evidence: `backend-turismo/src/clientes.routes.js`)
- Document verification → MRZ parser: parses MRZ (evidence: `backend-turismo/src/verificacion-documentos.js`)
- Customer registration routes → Supabase services and data: creates account and profile (evidence: `backend-turismo/src/clientes.routes.js`)
- Authentication routes → Supabase services and data: uses auth service (evidence: `backend-turismo/src/auth.routes.js`)
- Session and role checks → Supabase services and data: checks session and role (evidence: `backend-turismo/src/auth.middleware.js`)
- Reservation routes → Supabase services and data: creates reservation (evidence: `backend-turismo/src/reservas.routes.js`)
- Package routes → Supabase services and data: queries packages (evidence: `backend-turismo/src/paquetes.routes.js`)
- Payment routes → Supabase services and data: reads and records payments (evidence: `backend-turismo/src/cobros.routes.js`)
- Payment routes → Culqi gateway adapter: charges or refunds (evidence: `backend-turismo/src/cobros.routes.js`)
- Receipt routes → Supabase services and data: issues and retrieves receipts (evidence: `backend-turismo/src/comprobantes.routes.js`)
- Receipt routes → PDF generation: generates PDF (evidence: `backend-turismo/src/comprobantes.routes.js`)
- Receipt and PDF view → Authenticated API client: requests receipt data (evidence: `react-turismo/src/Comprobante.jsx`)
- Payment list → Authenticated API client: requests payment data (evidence: `react-turismo/src/Cobros.jsx`)
- Collect payment → Authenticated API client: submits payment (evidence: `react-turismo/src/Cobrar.jsx`)
- Reservation confirmation → Authenticated API client: requests reservation data (evidence: `react-turismo/src/Confirmacion.jsx`)
