Decisiones Técnicas
Resumen
Sección titulada «Resumen»- ORM: Prisma 7 ✅
- Base de datos: PostgreSQL (Neon + Docker local) ✅
- Tiempo real: Pusher Channels (decidido) ✅
- Autenticación: NextAuth v5 (Google OAuth + credentials) ✅
- Despliegue: Vercel ✅
- UI: Tailwind 4 + lucide-react ✅
- Internacionalización: next-intl ✅
Decisiones detalladas
Sección titulada «Decisiones detalladas»Prisma 7 como dependency (no devDependency)
Sección titulada «Prisma 7 como dependency (no devDependency)»Problema: Vercel no ejecuta prisma generate porque el CLI está en devDependencies.
Decisión: prisma se mueve a dependencies y se añade postinstall: "prisma generate" para que el cliente se genere automáticamente en el build de Vercel.
Driver adapter (PrismaPg) en vez de datasourceUrl
Sección titulada «Driver adapter (PrismaPg) en vez de datasourceUrl»Problema: Prisma 7 elimina datasourceUrl del constructor de PrismaClient.
Decisión: Usar new PrismaClient({ adapter: new PrismaPg({ connectionString }) }).
Separación landing / dashboard
Sección titulada «Separación landing / dashboard»Problema: La landing pública y el dashboard autenticado comparten rutas.
Decisión:
apps/web/app/├── [locale]/│ ├── (landing)/page.tsx → /[locale] (pública)│ ├── (auth)/login/page.tsx → /[locale]/login (pública)│ ├── (auth)/register/page.tsx → /[locale]/register (pública)│ └── (workspace)/home/page.tsx → /[locale]/home (autenticada)└── api/auth/[...nextauth]/route.ts → /api/auth/* (API)Locale preservado en OAuth
Sección titulada «Locale preservado en OAuth»El middleware de next-intl setea la cookie NEXT_LOCALE. Después del callback de Google, al redirigir a /home, el middleware lee la cookie y completa el locale (/es/home o /en/home).
Más detalles en la página de Routing.
Deployment
Sección titulada «Deployment»El proyecto se despliega en Vercel. Ver guía completa en Deployment.