Sistema Full Stack Next.js
Cuándo usar
Úsalo para inicio de sesión, registro, panel, datos por usuario, carga, facturación o API propia. Para landing pages y sitios institucionales, usa la skill site-estatico.
Crear un proyecto
git clone https://github.com/guibean/nextjs-fullstack-template.git <slug>
cd <slug>
pnpm install
cp .env.example .env
Genera BETTER_AUTH_SECRET con openssl rand -base64 48, configura DATABASE_URL y ejecuta:
pnpm db:migrate
pnpm dev
Orden de implementación
- Modela datos, relaciones, permisos y amenazas.
- Modifica
src/db/schema.tsy ejecutapnpm db:generate. - Aplica migraciones con
pnpm db:migrate. - Configura env en
src/env.ts; no uses fallback fuera deSKIP_ENV_VALIDATION. - Implementa autenticación y autorización en el servidor.
- Valida toda entrada con Zod en el servidor.
- Agrega rate limit, logs, respaldo y observabilidad.
- Solo entonces construye la UI del panel.
Reglas de seguridad
- Nunca expongas
DATABASE_URL,BETTER_AUTH_SECRET,RESEND_API_KEYoTURNSTILE_SECRET_KEY. - Usa
auth.api.getSession({ headers: await headers() })en Server Components protegidos. - Protege también Route Handlers y Server Actions.
- No confíes en la validación del cliente.
- No uses
output: "export"cuando haya autenticación, base de datos o mutaciones. - En producción, activa verificación de correo, rate limit y recuperación de contraseña.
Despliegue en VPS
- Compila con
pnpm buildy salida.next/standalone. - Dockerfile multi-etapa incluido.
- Aplica migraciones antes de cambiar la versión.
- Usa HTTPS, proxy inverso y proceso gestionado.
- Haz respaldo de PostgreSQL antes de migraciones destructivas.
Checklist
- env validado
- migraciones aplicadas
- inicio de sesión, cierre de sesión y sesión probados
- ruta protegida redirige sin sesión
- API protegida rechaza sin sesión
- formulario con validación doble
-
pnpm lint,pnpm typecheck,pnpm build - Lighthouse ≥ 95 en las páginas públicas
- respaldos y rate limit definidos