# idnx1050/tesis-lux architecture

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

- Interactive diagram: https://gitdiagram.com/idnx1050/tesis-lux
- Repository: https://github.com/idnx1050/tesis-lux

## Overview

Luxx Producciones is an event-entertainment booking site where visitors browse performers (“vedetos”), choose a service tier and options, then proceed toward a reservation. Its visible booking path includes server-side price quotes and a booking submission endpoint; age verification gates access. The site also presents marketing galleries and company/information pages, with address geocoding available through a server proxy. Source excerpts were partial and the README was empty, so UI-to-API links not evidenced in the excerpts are omitted; checkout payment and calendar integrations are described as pending.

Main entry points: [`app/api/bookings/route.ts`](https://github.com/idnx1050/tesis-lux/blob/main/app/api/bookings/route.ts) (Booking API), [`app/api/checkout/quote/route.ts`](https://github.com/idnx1050/tesis-lux/blob/main/app/api/checkout/quote/route.ts) (Price quote API), [`app/api/geocode/route.ts`](https://github.com/idnx1050/tesis-lux/blob/main/app/api/geocode/route.ts) (Geocode API), [`lib/mock-data.ts`](https://github.com/idnx1050/tesis-lux/blob/main/lib/mock-data.ts) (Vedeto data)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_experience["Visitor experience"]
  node_home["Home page<br/>[page.tsx]"]
  node_catalog["Vedetos catalog<br/>[page.tsx]"]
  node_profile["Vedeto profile<br/>[page.tsx]"]
  node_checkout["Checkout<br/>[page.tsx]"]
  node_agegate["Age gate<br/>[age-gate.tsx]"]
  node_gallery["Photo galleries"]
  node_editorial["Marketing pages<br/>[page.tsx]"]
end

subgraph group_booking["Booking services"]
  node_quote["Price quote API<br/>[route.ts]"]
  node_bookings["Booking API<br/>[route.ts]"]
  node_vedetolist["Vedeto list API<br/>[route.ts]"]
  node_vedetodetail["Vedeto detail API<br/>[route.ts]"]
  node_geocode["Geocode API<br/>[route.ts]"]
  node_ageverify["Age verification API<br/>[route.ts]"]
end

subgraph group_platform["Shared services"]
  node_mockdata["Vedeto data<br/>[mock-data.ts]"]
  node_pricing["Regional pricing<br/>[regions.ts]"]
  node_coupons["Coupon validation<br/>[coupons.ts]"]
  node_validation["Booking validation<br/>[validations.ts]"]
  node_ratelimit["Rate limiting<br/>[rate-limiter.ts]"]
  node_ip["Client IP handling<br/>[get-client-ip.ts]"]
  node_agecrypto["Age token signing<br/>[age-gate.ts]"]
end

subgraph group_external["External services"]
  node_nominatim["Nominatim"]
end

node_visitor(("Visitor"))

node_visitor -->|"visits"| node_home
node_visitor -->|"browses"| node_catalog
node_visitor -->|"selects performer"| node_profile
node_profile -->|"links to booking"| node_checkout
node_visitor -->|"verifies age"| node_agegate
node_ageverify -->|"signs token"| node_agecrypto
node_visitor -->|"views"| node_gallery
node_visitor -->|"reads"| node_editorial
node_visitor -->|"requests quote"| node_quote
node_quote -->|"reads performer pricing"| node_mockdata
node_quote -->|"calculates location price"| node_pricing
node_quote -->|"validates coupon"| node_coupons
node_visitor -->|"submits reservation"| node_bookings
node_bookings -->|"checks limit"| node_ratelimit
node_bookings -->|"gets client IP"| node_ip
node_bookings -->|"validates request"| node_validation
node_bookings -->|"checks performer and availability"| node_mockdata
node_visitor -->|"requests listings"| node_vedetolist
node_vedetolist -->|"reads listing data"| node_mockdata
node_visitor -->|"requests performer"| node_vedetodetail
node_vedetodetail -->|"reads performer"| node_mockdata
node_visitor -->|"requests address search"| node_geocode
node_geocode -->|"checks limit"| node_ratelimit
node_geocode -->|"gets client IP"| node_ip
node_geocode -->|"queries"| node_nominatim

click node_home "https://github.com/idnx1050/tesis-lux/blob/main/app/page.tsx"
click node_catalog "https://github.com/idnx1050/tesis-lux/blob/main/app/vedetos/page.tsx"
click node_profile "https://github.com/idnx1050/tesis-lux/blob/main/app/vedetos/%5Bslug%5D/page.tsx"
click node_checkout "https://github.com/idnx1050/tesis-lux/blob/main/app/checkout/page.tsx"
click node_agegate "https://github.com/idnx1050/tesis-lux/blob/main/components/age-gate.tsx"
click node_gallery "https://github.com/idnx1050/tesis-lux/blob/main/components/client-photos-carousel.tsx"
click node_editorial "https://github.com/idnx1050/tesis-lux/blob/main/app/nosotros/page.tsx"
click node_quote "https://github.com/idnx1050/tesis-lux/blob/main/app/api/checkout/quote/route.ts"
click node_bookings "https://github.com/idnx1050/tesis-lux/blob/main/app/api/bookings/route.ts"
click node_vedetolist "https://github.com/idnx1050/tesis-lux/blob/main/app/api/vedetos/route.ts"
click node_vedetodetail "https://github.com/idnx1050/tesis-lux/blob/main/app/api/vedetos/%5Bslug%5D/route.ts"
click node_geocode "https://github.com/idnx1050/tesis-lux/blob/main/app/api/geocode/route.ts"
click node_ageverify "https://github.com/idnx1050/tesis-lux/blob/main/app/api/age-verify/route.ts"
click node_mockdata "https://github.com/idnx1050/tesis-lux/blob/main/lib/mock-data.ts"
click node_pricing "https://github.com/idnx1050/tesis-lux/blob/main/lib/regions.ts"
click node_coupons "https://github.com/idnx1050/tesis-lux/blob/main/lib/coupons.ts"
click node_validation "https://github.com/idnx1050/tesis-lux/blob/main/lib/validations.ts"
click node_ratelimit "https://github.com/idnx1050/tesis-lux/blob/main/lib/rate-limiter.ts"
click node_ip "https://github.com/idnx1050/tesis-lux/blob/main/lib/get-client-ip.ts"
click node_agecrypto "https://github.com/idnx1050/tesis-lux/blob/main/lib/age-gate.ts"

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_home,node_catalog,node_profile,node_checkout,node_agegate,node_gallery,node_editorial toneBlue
class node_quote,node_bookings,node_vedetolist,node_vedetodetail,node_geocode,node_ageverify toneAmber
class node_mockdata,node_pricing,node_coupons,node_validation,node_ratelimit,node_ip,node_agecrypto toneMint
class node_nominatim toneRose
class node_visitor toneIndigo
```

## Components

### Visitor experience

- [Home page](https://github.com/idnx1050/tesis-lux/blob/main/app/page.tsx): `app/page.tsx`
- [Vedetos catalog](https://github.com/idnx1050/tesis-lux/blob/main/app/vedetos/page.tsx): `app/vedetos/page.tsx`
- [Vedeto profile](https://github.com/idnx1050/tesis-lux/blob/main/app/vedetos/%5Bslug%5D/page.tsx): `app/vedetos/[slug]/page.tsx`
- [Checkout](https://github.com/idnx1050/tesis-lux/blob/main/app/checkout/page.tsx): `app/checkout/page.tsx`
- [Age gate](https://github.com/idnx1050/tesis-lux/blob/main/components/age-gate.tsx): `components/age-gate.tsx`
- [Photo galleries](https://github.com/idnx1050/tesis-lux/blob/main/components/client-photos-carousel.tsx): `components/client-photos-carousel.tsx`
- [Marketing pages](https://github.com/idnx1050/tesis-lux/blob/main/app/nosotros/page.tsx): `app/nosotros/page.tsx`

### Booking services

- [Price quote API](https://github.com/idnx1050/tesis-lux/blob/main/app/api/checkout/quote/route.ts): `app/api/checkout/quote/route.ts`
- [Booking API](https://github.com/idnx1050/tesis-lux/blob/main/app/api/bookings/route.ts): `app/api/bookings/route.ts`
- [Vedeto list API](https://github.com/idnx1050/tesis-lux/blob/main/app/api/vedetos/route.ts): `app/api/vedetos/route.ts`
- [Vedeto detail API](https://github.com/idnx1050/tesis-lux/blob/main/app/api/vedetos/%5Bslug%5D/route.ts): `app/api/vedetos/[slug]/route.ts`
- [Geocode API](https://github.com/idnx1050/tesis-lux/blob/main/app/api/geocode/route.ts): `app/api/geocode/route.ts`
- [Age verification API](https://github.com/idnx1050/tesis-lux/blob/main/app/api/age-verify/route.ts): `app/api/age-verify/route.ts`

### Shared services

- [Vedeto data](https://github.com/idnx1050/tesis-lux/blob/main/lib/mock-data.ts): `lib/mock-data.ts`
- [Regional pricing](https://github.com/idnx1050/tesis-lux/blob/main/lib/regions.ts): `lib/regions.ts`
- [Coupon validation](https://github.com/idnx1050/tesis-lux/blob/main/lib/coupons.ts): `lib/coupons.ts`
- [Booking validation](https://github.com/idnx1050/tesis-lux/blob/main/lib/validations.ts): `lib/validations.ts`
- [Rate limiting](https://github.com/idnx1050/tesis-lux/blob/main/lib/rate-limiter.ts): `lib/rate-limiter.ts`
- [Client IP handling](https://github.com/idnx1050/tesis-lux/blob/main/lib/get-client-ip.ts): `lib/get-client-ip.ts`
- [Age token signing](https://github.com/idnx1050/tesis-lux/blob/main/lib/age-gate.ts): `lib/age-gate.ts`

### External services

- **Nominatim**

### Other components

- **Visitor**

## Connections

- Visitor → Home page: visits
- Visitor → Vedetos catalog: browses
- Visitor → Vedeto profile: selects performer
- Vedeto profile → Checkout: links to booking
- Visitor → Age gate: verifies age
- Age verification API → Age token signing: signs token
- Visitor → Photo galleries: views
- Visitor → Marketing pages: reads
- Visitor → Price quote API: requests quote
- Price quote API → Vedeto data: reads performer pricing
- Price quote API → Regional pricing: calculates location price
- Price quote API → Coupon validation: validates coupon
- Visitor → Booking API: submits reservation
- Booking API → Rate limiting: checks limit
- Booking API → Client IP handling: gets client IP
- Booking API → Booking validation: validates request
- Booking API → Vedeto data: checks performer and availability
- Visitor → Vedeto list API: requests listings
- Vedeto list API → Vedeto data: reads listing data
- Visitor → Vedeto detail API: requests performer
- Vedeto detail API → Vedeto data: reads performer
- Visitor → Geocode API: requests address search
- Geocode API → Rate limiting: checks limit
- Geocode API → Client IP handling: gets client IP
- Geocode API → Nominatim: queries
