Arquitectura y proyectos
Visión técnica de los tres proyectos y cómo se relacionan.
Proyectos
my-academy-web/
├── academy-manager-api/ # Backend REST (Express, Prisma, SQLite)
├── academy-manager-web/ # Web de academias (Next.js 15)
├── academy-manager-admin/ # Admin de plataforma (Next.js 15)
└── docs-site/ # Esta documentación (Docusaurus)
API (academy-manager-api)
- Stack: Express, TypeScript, Prisma (SQLite por defecto).
- Multi-tenant: modelo
Academy; User, Student, Payment, PromoCode, Post, Sponsor tienenacademyId. El JWT de usuarios de academia incluyeacademy_id; todas las consultas se filtran por esa academia. - Rutas:
- Auth:
/api/auth/login,/api/auth/logout,/api/auth/me(cookieauth_token). - Academia: students, payments, reports, becas, dashboard, public (posts/sponsors con
?academy=slug), preregistro (body conacademy_slug). - Plataforma:
/api/platform/login,/api/platform/academies,/api/platform/plans(cookieplatform_auth, JWT con scope platform).
- Auth:
Web de academias (academy-manager-web)
- Stack: Next.js 15 (App Router), TypeScript, Tailwind.
- Auth: cookie
auth_token; middleware protege rutas de dashboard. ConNEXT_PUBLIC_API_URLse usa la API; si no, mocks en el cliente. - Rutas: landing, login, pre-registro (públicas); dashboard, estudiantes, pagos, reportes, becas, público (protegidas).
Admin (academy-manager-admin)
- Stack: Next.js 15, TypeScript, Tailwind.
- Auth: cookie
platform_auth; middleware protege dashboard, academies y plans. - Comunicación: todas las peticiones a
NEXT_PUBLIC_API_URLconcredentials: 'include'para enviar la cookie.
Base de datos (Prisma)
Modelos principales: Academy, User, Student, Payment, PromoCode, Post, Sponsor, Plan, PlatformUser, DisciplinePrice. Las entidades de negocio (excepto PlatformUser y Plan) están asociadas a una academia.
Despliegue
- API: exponer en un dominio/puerto; configurar
CORS_ORIGINcon los orígenes de la web y del admin. - Web y admin: builds estáticos o SSR según necesidad; configurar
NEXT_PUBLIC_API_URLcon la URL pública de la API. - Docs: build de Docusaurus (
npm run buildendocs-site) y publicar en hosting estático o GitHub Pages.