COMAL · 06-tech-stack.md · 7 de 21

En esta página Decisión de arquitectura 0%

06 — Stack tecnológico · COMAL

Decisión de arquitectura

PWA monorepo full-stack orientada a velocidad de MVP y operaciones de reserva con integridad temporal.

CapaElecciónJustificación
FrontendNext.js 15 (App Router) + TypeScriptSSR landing SEO + app autenticada; PWA via serwist/next-pwa
UITailwind CSS v4 + tokens Paper exportadosParidad con design tokens
ComponentesRadix UI primitives + estilos propiosAccesibilidad de base
APItRPC o Route Handlers RESTtRPC si monorepo TS puro; REST si apps móviles después
AuthAuth.js (NextAuth v5)Email magic link + Google; roles en JWT/session
DBPostgreSQL (Neon)Exclusion constraints para slots; branching previews
ORMDrizzle ORMTipado, migraciones SQL claras
Cache / locksRedis (Upstash)Hold de slots, rate limit
PagosStripe Checkout/PaymentIntents + BillingPCI SAQ-A; suscripciones membresía
EmailResendTransaccional ES templates
SMS (opc.)TwilioRecordatorios check-in
MapsMapbox GLListado geo
StorageS3 compatible (R2/S3)Fotos y certificados firmados
HostingVercelEdge + serverless; ES region
ObservabilitySentry + Axiom/OpenTelemetryErrores y traces
AnalyticsPostHogProduct analytics + feature flags
CIGitHub Actionslint, typecheck, e2e Playwright

Por qué no X

AlternativaMotivo de descarte (v1)
React NativeCoste dual sin validar demanda
FirebaseMenos control de exclusion constraints de booking
Supabase Auth onlyViable; Auth.js + Neon da más control de modelo
MongoDBDebil para rangos temporales concurrentes

Integridad de reservas

  1. Hold en Redis 10 min (v1.1) o pending_payment con TTL
  2. EXCLUDE gist en Postgres al confirmar
  3. Webhook Stripe idempotente → confirmed
  4. Job de limpieza de pending expirados

Entornos

  • local · preview (Neon branch) · staging · production

Estimación de equipo mínimo implementación

2 fullstack, 1 designer part-time, 1 ops/product part-time — 10–14 semanas MVP ciudad piloto.