Mapa de carpetas
shipabase/
├── app/ # Next.js App Router
│ ├── [contentType]/ # Listado de contenido (ej. /blog, /docs)
│ │ ├── [slug]/ # Post individual (ej. /blog/hello-world)
│ │ └── layout.tsx # Menú lateral para tipos en SIDEBAR_TYPES
│ ├── account/ # Gestión de cuenta del usuario
│ ├── api/
│ │ └── webhooks/ # Webhooks de Stripe
│ ├── llms.txt/ # Índice para crawlers de LLMs (auto)
│ ├── robots.ts # robots.txt (auto)
│ ├── sitemap.ts # sitemap.xml (auto)
│ ├── layout.tsx # Layout raíz
│ └── page.tsx # Landing page
├── content/ # Módulo de contenido MDX
│ ├── blog/ # Posts del blog (.mdx)
│ ├── docs/ # Páginas de docs (.mdx), con menú lateral
│ └── content.ts # Tipos, helpers y config del menú lateral
├── components/
│ └── ui/ # Componentes de UI
│ ├── Auth/ # Formularios de autenticación
│ ├── Account/ # Gestión de cuenta
│ ├── Pricing/ # Tarjetas de precios
│ ├── ContentSidebar/ # Menú lateral de docs
│ ├── Hero/ Features/ FAQ/ Navbar/
├── utils/
│ ├── supabase/
│ │ ├── client.ts # Cliente para el navegador
│ │ ├── server.ts # Cliente para Server Components
│ │ ├── middleware.ts # Cliente para el middleware
│ │ ├── admin.ts # Operaciones admin (service role)
│ │ └── queries.ts # Consultas a la base de datos
│ ├── stripe/
│ │ ├── config.ts # Instancia de Stripe
│ │ ├── client.ts # Helpers de cliente
│ │ └── server.ts # Server actions (checkout, portal)
│ └── auth-helpers/
│ └── access.ts # requireAuth() y requireAccess()
├── supabase/
│ └── migrations/init.sql # Esquema de la base de datos
├── scripts/
│ └── check-env.mjs # Preflight check (npm run check)
├── styles/ # CSS global y tokens de tema
└── types_db.ts # Tipos generados de la DB
Conceptos clave
Server Components vs Client Components
- Server Components (por defecto): para fetching de datos y rutas protegidas. Pueden usar el cliente de Supabase de servidor directamente.
- Client Components (
'use client'): para interactividad, formularios y estado.
Los tres clientes de Supabase
Cada contexto de Next.js necesita su propio cliente, y los tres ya vienen configurados:
utils/supabase/client.ts— en el navegador (Client Components)utils/supabase/server.ts— en Server Components y server actionsutils/supabase/middleware.ts— en el middleware de autenticación
La regla: nunca importes el cliente de servidor en un componente cliente, ni al revés. Y admin.ts (que usa la service role key) solo se usa en los webhooks.
Siguiente paso
Aprende cómo funciona la Autenticación.