VOLTA · 06-tech-stack.md · 8 de 22

En esta página 1. Visión 0%

06 — Stack tecnológico — VOLTA

1. Visión

CapaTecnologíaNotas
FrontendAngular (standalone components)Puerto 4200
EstilosTailwind CSSTokens chalk/ink/lime
BackendNestJS (TypeScript)Puerto 3008, prefijo /api
ORMPrismaschema + migrate + seed
DBNeon PostgreSQL serverlessproject delicate-mountain-11765167
AuthJWT (passport strategy)Bearer header
DiseñoPaperfile 01KZG2VRQFF2QF0PRDB10D4AG7
Repo/Users/cristian/orca/volta-app/GitHub Criscode2022/volta-app

Stack fijo del cron: no se sustituye por React/Next/Firebase salvo excepción documentada.

2. Estructura monorepo app

volta-app/
├── apps/
│   ├── api/          # NestJS + Prisma
│   │   ├── prisma/
│   │   │   ├── schema.prisma
│   │   │   ├── seed.ts
│   │   │   └── migrations/
│   │   └── src/
│   │       ├── auth/
│   │       ├── requests/
│   │       ├── prisma/
│   │       └── main.ts
│   └── web/          # Angular + Tailwind
│       └── src/app/
│           ├── pages/
│           ├── core/api.service.ts
│           └── app.routes.ts
├── package.json      # scripts api / web
└── README.md

Regla D-P1-03: apps/api y apps/web independientes (npm install --prefix), sin workspaces npm que rompan Angular CLI.

3. Backend

PiezaDetalle
FrameworkNestJS modules: Auth, Requests, Prisma
Validaciónclass-validator DTOs
Hashbcrypt passwords
CORSHabilitado para dev web :4200
Puerto3008 (env PORT opcional)
Prefijo global/api

Módulos

MóduloResponsabilidad
AuthModulelogin, JWT sign, strategy
RequestsModuleCRUD-lite solicitudes
PrismaModulePrismaService global

4. Frontend

PiezaDetalle
AngularStandalone pages, RouterLink, HttpClient
Estado authlocalStorage keys volta_token, volta_user
API basehttp://localhost:3008/api en ApiService
FuentesSyne + Work Sans (link Google Fonts / index)
Mediaassets/hero.jpg

Rutas web

PathComponente
/HomePage
/apuntarmeJoinPage
/okSuccessPage
/loginLoginPage
/inboxInboxPage
/inbox/:idRequestDetailPage

5. Base de datos

CampoValor
ProviderPostgreSQL
HostingNeon
Projectdelicate-mountain-11765167
MigracionesPrisma migrate (init)
Seedprisma/seed.ts → 1 coach + 5 requests

6. Seguridad técnica (resumen)

ControlImplementación
Passwordbcrypt hash
API coachJwtAuthGuard en GET/PATCH
Form públicosolo POST create
SecretJWT_SECRET en env API
PIIno exponer list en endpoints públicos

Detalle en 11-privacy-security.md.

7. Scripts típicos

cd /Users/cristian/orca/volta-app
npm install --prefix apps/api
npm install --prefix apps/web
# apps/api/.env → DATABASE_URL + JWT_SECRET
npm --prefix apps/api run prisma:migrate
npm --prefix apps/api run prisma:seed
npm run api    # :3008
npm run web    # :4200

8. Decisiones técnicas

DecisiónRazón
Puerto API 3008No colisionar con SURCO 3007 y anteriores
preferredDay/Slot como StringL1 simple; evita timezone complexity
Sin FK coach–requestForm anónimo; asignación multi-coach = L2
Soft auth en AngularAPI es autoridad; guards formales = L1+
Stats endpoint propioEvita recalcular en cliente

9. Dependencias clave (orientativo)

CapaPaquetes
API@nestjs/*, @prisma/client, bcrypt, passport-jwt, class-validator
Web@angular/*, tailwindcss, RxJS

10. Despliegue (recomendado, no obligatorio del día)

ServicioOpción
WebVercel / Netlify / static host
APIRailway / Fly / Render
DBNeon (ya provisionada)

Variables: DATABASE_URL, JWT_SECRET, PORT, y en web la URL pública de API.