Plataforma cívica multi-distrito para reportes vecinales, alertas de seguridad y gestión municipal.
| Capa | Tecnología |
|---|---|
| Backend | Express + TypeScript (monolito modular) |
| Frontend | React + Vite + Tailwind CSS v4 + shadcn/ui |
| Database | PostgreSQL (Neon) con Drizzle ORM |
| Auth | JWT (access + refresh tokens), bcryptjs |
| Monorepo | pnpm workspaces |
Monolito modular con libs compartidas. Ver docs/ARCHITECTURE.md para ADRs completos.
mi-distrito/
├── apps/
│ ├── api/ # Backend Express — Core + módulos registrados
│ └── web/ # Frontend React + Vite + Tailwind
├── lib/ # Librerías compartidas (workspaces)
│ ├── db/ # Drizzle ORM — schema, migrations, conexión
│ ├── api-zod/ # Schemas Zod compartidos frontend/backend
│ ├── api-spec/ # OpenAPI spec + orval config
│ ├── api-client-react/ # React Query hooks generados
│ └── object-storage/ # Cloudinary facade
├── modules/ # Módulos de dominio (radar, news, marketplace)
├── docs/ # ADRs, ERD, roadmap
└── scripts/ # Utilidades de desarrollo
# Instalar dependencias (desde la raíz)
pnpm install
# Iniciar backend (puerto 3000)
pnpm dev:api
# Iniciar frontend (puerto 5173)
pnpm dev:web
# Construir todo
pnpm buildVariables de entorno requeridas (ver .env.example):
PORT— Puerto del backendDATABASE_URL— URL de PostgreSQLJWT_SECRET— Secreto para firmar tokensCORS_ORIGIN— Orígenes permitidos (separados por coma)
| Módulo | Estado | Descripción |
|---|---|---|
| Radar Vecinal | ⏳ Portándose | Reportes ciudadanos, alertas de pánico, personas desaparecidas |
| Noticias | 📅 Fase 2 | Agregador de noticias locales con bot de Telegram |
| Marketplace | 📅 Fase 3 | Directorio comercial y ventas por distrito |