- TypeScript 97.5%
- Dockerfile 1.7%
- CSS 0.8%
|
|
||
|---|---|---|
| .forgejo/workflows | ||
| apps | ||
| docs | ||
| packages/shared | ||
| .dockerignore | ||
| .env.example | ||
| .env.prod.example | ||
| .gitignore | ||
| .npmrc | ||
| biome.json | ||
| docker-compose.dev.yml | ||
| docker-compose.prod.yml | ||
| NEXT.md | ||
| package.json | ||
| pnpm-lock.yaml | ||
| pnpm-workspace.yaml | ||
| README.md | ||
| tsconfig.base.json | ||
| turbo.json | ||
Dev Platform — Plataforma Interna de Desarrollo
Plataforma interna del equipo que consolida tres pilares: feed de contenido técnico, base de conocimiento curada y aprendizaje + evaluación de habilidades. Filosofía: desarrollar criterio técnico real, no copiar y pegar.
Estado: diseño arquitectónico completo y revisado en frío (11 ADRs + modelo de dominio). Aún no hay código de aplicación — el siguiente paso es el bootstrap del toolchain y el primer slice vertical. Ver Próximos pasos.
Arquitectura (resumen)
Modular Monolith con Clean Architecture interna por módulo. Cinco módulos, cada uno con
su dominio, repositorios y una fachada pública (index.ts); aislamiento estricto (sin FK entre
schemas, comunicación por eventos / fachadas).
Módulos: content_aggregation, knowledge_base, learning_engine, assessment, identity.
Decisiones clave (detalle en docs/adr/):
- Grading polimórfico por estrategia; la mayoría de notas oficiales en rieles deterministas, LLM-judge calibrado para el resto.
- Skill matrix como proyección de un stream de señales (evolucionable a IRT sin migración).
- Eventos cross-proceso vía outbox transaccional; in-process vía EventBus tipado.
- Ejecución de código en dos modos: snippets aislados (Judge0) y repo-PR (Forgejo Actions).
- Single-node VPS; Judge0 endurecido con riesgo residual aceptado y disparador de revisión.
Stack
- Runtime: Bun · Backend: Elysia + Drizzle + PostgreSQL (schemas por módulo)
- Tipado cliente: Eden Treaty (acotado por feature, ≤ ~300 rutas/app — ver ADR-0004)
- Frontend: TanStack Start + Router/Query/Form + React, shadcn/ui + Tailwind, Monaco
- Auth: Better Auth · Cache/sesiones: Valkey · Búsqueda: Meilisearch
- Ejecución: Judge0 (snippets) + Forgejo Actions (repo-PR)
- Monorepo: Turborepo + Bun workspaces · Infra: VPS único, Forgejo + OpenClaw
Layout del repo
dev-platform/
├── docs/ # documentación de arquitectura (ADRs + modelo de dominio)
│ ├── adr/ # Architecture Decision Records (0001–0011)
│ └── assessment-domain-model.md
├── apps/
│ ├── backend/ # Elysia + Bun — el modular monolith (módulos Clean Arch)
│ ├── frontend/ # TanStack Start — SSR
│ └── workers/ # cron jobs de Content Aggregation (proceso separado)
└── packages/
└── shared/ # tipos, contratos de eventos cross-módulo, EventBus, utils (idempotencia)
Documentación
Empieza por docs/adr/README.md — índice de las 11 decisiones de
arquitectura. El modelo de dominio de Assessment muestra el
patrón de capas (entidades, puertos, eventos) que siguen todos los módulos.
Próximos pasos
- Validación en frío de los ADRs.
- Bootstrap del toolchain:
package.jsonraíz +turbo.json+tsconfigbase con versiones pineadas (Bun, Elysia, TanStack Start, Drizzle). - Spike de TanStack Start (SSR + loader + deploy en OpenClaw).
- Primer slice vertical: ruta de onboarding "aprende este proyecto" (dogfooding end-to-end).
- Construir set de calibración del juez (Fase 0 del roadmap de contenido — ver ADR-0003/0011).