Sitio bilingüe para una empresa de servicios premium en Ibiza, con catálogo de embarcaciones, blog, galerías y un panel para administrar contenido sin modificar código.
El sitio reúne servicios con estructuras distintas —lifestyle management, seguridad, alquiler y embarcaciones— y permite que el equipo mantenga contenido e imágenes desde un único panel.
- Navegación y contenido en español e inglés.
- Páginas dinámicas para servicios y elementos de catálogo.
- Catálogo de embarcaciones por categoría.
- Blog con rutas individuales.
- Panel autenticado para editar y ordenar contenido.
- Editor enriquecido para textos e imágenes.
- Galerías con subida firmada.
- Fallback local cuando Supabase no está configurado.
Next.js App Router
├── (site)/[locale] sitio público bilingüe
├── admin panel de contenido
├── content_items contenido publicado
└── Storage imágenes y galerías
Supabase Auth → acceso administrativo
Supabase RLS → autorización de datos y archivos
Supabase Storage → medios
| Decisión | Motivo |
|---|---|
| Contenido dinámico con fallback local | El sitio sigue siendo navegable durante una falla o configuración incompleta del CMS. |
| Auth y RLS en Supabase | La autorización se aplica en el backend, no solo en la interfaz. |
| Slugs y texto por idioma | Evita mezclar rutas o contenido entre locales. |
| Subida firmada desde el panel | Limita las operaciones de Storage al flujo autorizado. |
Next.js 16 · React 19 · TypeScript · Supabase Auth · PostgreSQL · Storage · Tailwind CSS · Tiptap
npm install
npm run devConfigura las variables en un archivo local:
NEXT_PUBLIC_SUPABASE_URL=
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY=
NEXT_PUBLIC_SUPABASE_GALLERY_BUCKET=fastservice-galleryPara inicializar una base nueva:
- Ejecuta
supabase/schema.sql. - Crea el usuario en Supabase Auth.
- Registra ese usuario en
public.admin_users. - Inicia sesión en
/admin/login.
npm run lint
npm run build- No se almacenan claves privadas en el repositorio.
- Las políticas RLS controlan escritura y subida de archivos.
- El usuario debe pertenecer a
admin_userspara operar el panel. - Los cambios se publican explícitamente desde el administrador.
La propuesta y las decisiones del sistema de contenido están documentadas en SDD-Content-System-Refactor.md.