Delicias DOSSIER · delicias.xanflatest.com
Delicias · Dossier vivo · Badajoz · se actualiza en cada deploy

Dos productos, un camino: V1 sencilla ya, V2 completa después.

Con tus respuestas cerradas: sin pagos en la app, restaurantes de alta manual, comensal solo consulta, vídeos 100% tuyos (fotógrafo profesional), ES+EN, datos en la UE, presupuesto 20–30 €/mes, plazo total 4–6 semanas. Este dossier fija las decisiones, lista los requisitos rankeados (los puedes reordenar y excluir en la pestaña "Requisitos") y los convierte en un plan de tareas por semanas con seguimiento.

V1 · 2 semanas · ~0 €/mes V2 · 4 semanas · ~25 €/mes Supabase RLS multi-tenant Sin pagos en la app Vídeos propios · Bunny
01

¿Se puede partir de lo que ya teníamos? Sí — y esto es lo que se hereda

Preguntaste si V2 se construye "a partir de aquí" o de cero. Respuesta: V1 es el embrión de V2, no un desvío. Todo lo que se hace en las semanas 1–2 se reaprovecha:

V1 → V2

Se hereda tal cual

  • Motor de chat guiado (árbol JSON)
  • Componente de vídeo (Bunny + player)
  • Tokens de diseño y componentes de carta
  • Estructura ES/EN
  • QR y páginas públicas
Solo V2

Se añade encima

  • Supabase: BD multi-tenant + RLS + Auth + Storage
  • Panel admin (tú das de alta restaurantes)
  • Editor de carta para el restaurador
  • Camarero IA (Haiku 4.5 / Sonnet según plan)
  • Theming white-label por tenant
V2+ · futuro lejano

Aparcado a propósito

  • Pagos (restaurantes te pagan por transferencia)
  • Pedidos del comensal
  • Facturación Verifactu/SII
  • KDS (pantalla de cocina) y delivery
  • Generación de imagen IA (Nano Banana 2, extra puntual)

La clave del encaje

En V1 la carta vive en ficheros de contenido (un directorio por restaurante). En V2 pasa a Supabase. El frontend es el mismo; solo cambia de dónde leen los datos. Por eso V1 no es trabajo tirado: es la mitad del frontend de V2 ya validada con restaurantes reales de Badajoz.

02

V1 — la web sencilla: arquitectura y coste

Cómo se construye

Generador
Astro — sitio estático, HTML puro al final, contenido en ficheros. El framework más simple de mantener que existe hoy; perfecto para programar con IA.
Hosting
Cloudflare Pages — gratis, CDN global, HTTPS automático, deploy con git push.
Vídeos
Bunny — subes tus MP4 (o Bunny Stream si quieres HLS); el player los sirve por CDN europea. Tus vídeos, tu control.
Chat camarero
Árbol de decisión en JSON — el comensal solo pulsa botones predeterminados; cada nodo tiene respuesta fija. Cero IA, cero backend, cero coste, cero riesgo.
QR
Generado una vez por restaurante/mesa con qr-code-styling (gratis). Imprimes y listo.
Idiomas
Rutas /es y /en con el mismo contenido traducido.

Coste mensual V1

≈ 1–2 €/mes
  • Hosting Cloudflare Pages: 0 €
  • Bunny (vídeo + CDN): céntimos — una carta de 30 clips de 15 s ≈ 100 MB de storage (~0,01 €) + entrega a céntimos/GB
  • Dominio: ~10 €/año (lo registras tú)
  • Chat guiado: 0 € (sin LLM, sin servidor)

Todo el presupuesto queda libre para V2. Y si un restaurante de Badajoz te dice que sí mañana, V1 se le entrega en días.

// Ejemplo real del árbol del camarero guiado (V1 y tier base de V2)
{ "id": "inicio",
  "camarero": "¡Hola! Soy tu camarero. ¿Qué te apetece hoy?",
  "botones": [
    { "texto": "🌱 Opciones sin gluten",  "accion": "filtrar:sin_gluten" },
    { "texto": "🍷 Recomiéndame un vino", "ir_a": "maridaje" },
    { "texto": "⭐ Lo más pedido",         "ir_a": "populares" },
    { "texto": "🥗 Algo ligero",           "accion": "filtrar:ligero" } ] }
03

V2 — plataforma gestionada: por qué Supabase (investigado, no supuesto)

Me pediste investigar si Supabase "es lo más adecuado" o hay algo mejor para apoyarte en cosas hechas. Comparé las cuatro opciones serias:

PlataformaMulti-tenant sin datos cruzadosCosteUEVeredicto
Supabase (Postgres gestionado + Auth + Storage)✓✓ Row-Level Security nativo: la propia BD rechaza cualquier consulta fuera del tenant, aunque el código tenga un bugFree (desarrollo) → Pro 25 $/mes regiones AWS UE (Frankfurt, Irlanda, París…)Elegida
Firebase (Google) reglas NoSQL, más fáciles de romper; sin SQLvariable, difícil de predecir parcialNo — lock-in y modelo de datos peor para cartas
PocketBase (self-host) reglas propias sobre SQLitegratis + tu VPSNo — vuelves a mantener servidor tú, justo lo que quieres evitar
Appwrite Cloud permisos por documento, menos maduro que RLSFree → 15 $/mesAlternativa B — válida pero con menos ecosistema

Por qué Supabase gana para ti en concreto

  • Tu requisito nº1 (multi-tenant sin fugas) es literalmente su fortaleza: RLS de Postgres + políticas por tenant_id + tests de fuga automatizados.
  • Programas con IA: es la plataforma con más documentación, plantillas y ejemplos del mundo — los asistentes de código la conocen de memoria. Menos fricción que ninguna otra.
  • Te da Auth (login restauradores), Storage (imágenes de carta) y panel visual de la BD sin escribir un backend.
  • Desarrollo en plan Free (0 €); pasas a Pro (25 $/mes ≈ 23 €) solo al lanzar. Dentro de tu presupuesto de 20-30 €.

Avisos que te doy sin que los pidas

  • El plan Free se pausa tras 7 días sin actividad — vale para desarrollar, jamás para producción. Al lanzar: Pro.
  • En Pro, cada proyecto extra cuesta 10 $/mes — usa UN solo proyecto para todos los tenants (para eso está RLS). No un proyecto por restaurante.
  • Hay quejas documentadas de sobrecostes de cómputo por descuido: configura límite de gasto (spend cap) el primer día. Con tu volumen no deberías salir del tier incluido.
  • Vídeos fuera de Supabase Storage (su egress es caro: ~0,09 $/GB). Los vídeos siempre en Bunny.

Stack V2 completo

Frontend
Next.js en Cloudflare Pages/Vercel (gratis). Control total del front, que es lo único que exiges controlar. Es la pareja de Supabase con más ejemplos para programar con IA.
Backend
Supabase (Postgres+RLS, Auth, Storage) + funciones serverless para el proxy del camarero IA (la clave del LLM nunca toca el navegador).
Camarero por plan
Carta (29 €): guiado sin IA · Pedidos (49 €): Haiku 4.5 ($1/$5 MTok) · Premium (89 €): Sonnet (más "cerebro"). Un flag por tenant: waiter_engine.
Vídeo
Bunny (igual que V1): MP4+CDN de serie, Stream/HLS en premium.
Imagen IA (extra)
Nano Banana 2: $0,045–0,151/imagen según resolución (Batch −50%). Uso puntual y controlado; tus fotos profesionales son el estándar, esto es solo relleno de emergencia.
White-label
Preparado desde el día 1: tabla tenants con tema (colores/logo/tipografía) y dominio propio opcional. Meterlo después es carísimo; ahora es una columna más.
Alta de restaurantes
Manual, por ti, desde el panel admin. Sin auto-registro público = menos superficie de ataque y control comercial total.

COSTE V2 · DESARROLLO

~0 €/mes

Supabase Free + hosting gratis + Bunny céntimos. Semanas 3–6.

COSTE V2 · PRODUCCIÓN

~25–28 €/mes

Supabase Pro 25 $ + Bunny + IA (~1-3 € con decenas de conversaciones/día). En presupuesto.

INGRESO · 5 RESTAURANTES

145–445 €/mes

5×29 € a 5×89 € por transferencia. El coste técnico es ruido desde el primer cliente.

04

Multi-tenant sin datos cruzados — el diseño exacto

Lo marcaste como fundamental, así que lo dejo definido a nivel de implementación, no de intención:

Defensa en 4 capas

  • Capa 1 — Esquema: toda tabla lleva tenant_id NOT NULL con clave foránea a tenants.
  • Capa 2 — RLS: política en cada tabla: solo filas cuyo tenant_id coincide con el del usuario autenticado (JWT de Supabase Auth). La BD lo impone aunque el código falle.
  • Capa 3 — Público de solo lectura: la carta pública se sirve por vistas/consultas anónimas limitadas a publicado = true del slug pedido. El anónimo no puede listar tenants.
  • Capa 4 — Tests de fuga: suite automática que intenta leer datos del tenant B autenticado como A. Si un test pasa… falla el deploy.

La política RLS tipo

-- cada tabla del sistema:
ALTER TABLE platos ENABLE ROW LEVEL SECURITY;

CREATE POLICY aislamiento_tenant ON platos
  USING ( tenant_id = (
    SELECT tenant_id FROM perfiles
    WHERE user_id = auth.uid() ) );

-- lectura pública SOLO de lo publicado:
CREATE POLICY carta_publica ON platos
  FOR SELECT TO anon
  USING ( publicado = true );
05

Cómo usar este dossier

1 · Requisitos

En la pestaña Requisitos tienes los 36 requisitos rankeados por prioridad. Reordénalos con ▲▼, excluye los que no quieras y filtra por versión, prioridad o categoría.

2 · Plan semanal

En Plan semanal, cada requisito ya está convertido en tareas ancladas a las semanas 1–6. Marca casillas según avances; la barra de progreso se actualiza. Si excluyes un requisito, sus tareas se atenúan.

3 · Guardar tu estado

El orden, exclusiones y tareas hechas se guardan con Exportar JSON (descarga un fichero) y se recuperan con Importar. Así tu progreso vive contigo, no en el navegador.