# Catálogo de Servicios (builder) Builder de catálogo **multi-proveedor de servicios** (tours, A&B/banquetes, transportación) para Los Cabos, México. Hereda la filosofía del **Art4Hotel Hub**, pero aplicada a **servicios** (no productos físicos): capturar en una sola base de datos la oferta de varios touroperadores/proveedores, con fotos y todos los atributos, para luego generar **propuestas** y una **página web de catálogo online**. > Proyecto independiente. No toca el Hub. --- ## ✨ Qué hace - **Proveedores** — alta de touroperadores / proveedores (contacto, comisión default) - **Servicios** — la *fuente única de verdad*: identidad, operación, precios neto/público, condiciones, publicación - **Atributos flexibles por tipo** — extras específicos en JSON (no rompen el esquema) - **Disponibilidad** — 4 modos (salidas / rango / siempre / por evento) con editor adaptativo - **Fotos y menú** — galería por servicio + galería de menú separada por prefijo - **Dos vistas** — Builder (con margen/precio neto) y Vista cliente (catálogo limpio, oculta lo interno) - **Login** — usuario/contraseña (PBKDF2) + sesión firmada (HMAC) --- ## 🧱 Stack | Capa | Tecnología | |---|---| | Backend | **Python 3 stdlib** (`http.server` + `sqlite3`) — cero dependencias | | Base de datos | **SQLite** (WAL, foreign keys) | | Frontend | **Vanilla JS SPA** en un solo `index.html` | | Archivos | Filesystem (`uploads/servicio_{id}/`) | | Deploy | `scp` + `systemctl` | Mismo patrón que el Hub: CRUD genérico vía dict `TABLES` en `server.py` (un handler para todas las tablas). --- ## 🚀 Arranque rápido ```bash python3 server.py # → http://localhost:4403 ``` Primera vez: pantalla para **crear la cuenta admin** (genera `catalogo.db` y `secret.key`). Ver **[INSTALACION.md](./INSTALACION.md)** para el despliegue en servidor. --- ## 📁 Estructura ``` catalogo-borrador/ ├── server.py # Backend: HTTP + SQLite + API + auth ├── index.html # Frontend: SPA (builder + vista cliente) ├── README.md # Este archivo ├── MODELO_DATOS.md # Esquema de la base de datos ├── API.md # Referencia de endpoints ├── INSTALACION.md # Despliegue desde cero └── CLAUDE.md # Contexto técnico detallado (para asistentes IA) ``` > **No incluidos** (ver `.gitignore`): `catalogo.db`, `secret.key`, `uploads/`. --- ## 🔑 Principio de diseño: el servicio = fuente única de verdad Cada atributo de un servicio impacta hasta **3 funciones**. Antes de agregar/cambiar uno, define su impacto en: 1. **Operación** — disponibilidad, horarios, capacidad, precio neto 2. **Propuesta / cotizador** — lo que ve el cliente, precio público, términos 3. **Página web** — catálogo online **Neto vs público:** `precio_neto` = lo que cobra el proveedor · `precio_publico` = lo que paga el cliente. El margen vive en medio y **nunca** se muestra al cliente (la Vista cliente lo oculta). --- ## 🗺 Fases 1. ✅ **Builder** — proveedores + servicios con fotos y todos los campos *(actual)* 2. ⏳ **Propuestas/catálogos** — selección de servicios → documento → PDF (reusar patrón del Hub) 3. ⏳ **Web pública** — catálogo online optimizado (sync desde la DB) --- *Parte del ecosistema Art4Hotel · Los Cabos, BCS, México.*