Full-stack B2B corporate training platform with video streaming via Google Cloud Storage. Multi-role system (platform owner, company admin, employee), multi-tenant architecture, quiz engine, and deadline tracking — built entirely on the Google Cloud ecosystem.
| Role | Capabilities |
|---|---|
super_admin |
Creates courses, manages organizations, assigns content to companies, sees all analytics |
company_admin |
HR role — assigns courses to employees, tracks completion, sets deadlines |
student |
Takes courses, completes quizzes, takes final exams |
┌──────────────────────────────────────────────────────────┐
│ Next.js 16 (App Router) │
│ TypeScript · Tailwind · shadcn/ui │
└─────────────────────────┬────────────────────────────────┘
│
┌────────────────┼────────────────┐
│ │ │
┌────────▼──────┐ ┌───────▼──────┐ ┌──────▼────────┐
│Firebase Auth │ │ Cloud SQL │ │ GCS Videos │
│(email/session │ │ (Postgres + │ │(signed URLs, │
│ cookies) │ │ Drizzle ORM) │ │ 1h TTL) │
└───────────────┘ └──────────────┘ └───────────────┘
│
┌───────▼──────┐
│Cloud Scheduler│
│(deadline │
│ reminders) │
└──────────────┘
- Video streaming: Videos stored in GCS with signed URLs (1-hour TTL) — no direct public access to storage
- Multi-tenant: Strict company isolation — HR admin of company A can never see company B's data
- B2B onboarding: Employees self-register using a company code (
signup_code) — no manual admin import needed - Quiz engine: Per-module quizzes + final exam with configurable pass threshold
- Deadline system: Cloud Scheduler sends automatic reminder emails for approaching deadlines
- Local development: Full Docker environment — Postgres, fake-gcs, Firebase Auth Emulator, MailHog — no GCP account needed to develop
cp .env.local.example .env.local
pnpm install
pnpm dev:setup # starts docker + db:push + db:seed
pnpm dev # starts Next.js
# Services running locally:
# Postgres :5433
# Fake GCS :4443
# Firebase Emulator :9099 (UI: localhost:4000)
# MailHog (SMTP) :1025 (UI: localhost:8025)| Role | |
|---|---|
| super_admin | super@demo.local |
| company_admin | rrhh@company-a.test |
| student | student@company-a.test |
Company signup codes: COMPANY-A-2026, COMPANY-B-2026
Next.js 16 · TypeScript · Tailwind · shadcn/ui · Firebase Authentication · Cloud SQL (Postgres) · Drizzle ORM · Google Cloud Storage · Cloud Scheduler · Docker · Firebase App Hosting
Plataforma de capacitación corporativa B2B full-stack con streaming de video vía Google Cloud Storage. Sistema multi-rol (dueño de plataforma, admin de empresa, empleado), arquitectura multi-tenant, motor de quizzes y seguimiento de plazos — construida íntegramente en el ecosistema de Google Cloud.
| Rol | Capacidades |
|---|---|
super_admin |
Crea cursos, gestiona organizaciones, asigna contenido a empresas, ve toda la analítica |
company_admin |
Rol RRHH — asigna cursos a empleados, hace seguimiento de completitud, fija plazos |
student |
Toma cursos, completa quizzes, rinde exámenes finales |
┌──────────────────────────────────────────────────────────┐
│ Next.js 16 (App Router) │
│ TypeScript · Tailwind · shadcn/ui │
└─────────────────────────┬────────────────────────────────┘
│
┌────────────────┼────────────────┐
│ │ │
┌────────▼──────┐ ┌───────▼──────┐ ┌──────▼────────┐
│Firebase Auth │ │ Cloud SQL │ │ Videos GCS │
│(email/session │ │ (Postgres + │ │(URLs firmadas,│
│ cookies) │ │ Drizzle ORM) │ │ TTL 1h) │
└───────────────┘ └──────────────┘ └───────────────┘
│
┌───────▼──────┐
│Cloud Scheduler│
│(recordatorios │
│ de plazos) │
└──────────────┘
- Streaming de video: Videos en GCS con URLs firmadas (TTL 1 hora) — sin acceso público directo al storage
- Multi-tenant: Aislamiento estricto por empresa — el admin de la empresa A nunca puede ver los datos de la empresa B
- Onboarding B2B: Los empleados se auto-registran con un código de empresa (
signup_code) — sin importación manual de admins - Motor de quizzes: Quizzes por módulo + examen final con umbral de aprobación configurable
- Sistema de plazos: Cloud Scheduler envía emails de recordatorio automáticos para plazos próximos
- Desarrollo local: Entorno Docker completo — Postgres, fake-gcs, Firebase Auth Emulator, MailHog — sin necesidad de cuenta GCP para desarrollar
cp .env.local.example .env.local
pnpm install
pnpm dev:setup # levanta docker + db:push + db:seed
pnpm dev # inicia Next.js
# Servicios corriendo localmente:
# Postgres :5433
# Fake GCS :4443
# Firebase Emulator :9099 (UI: localhost:4000)
# MailHog (SMTP) :1025 (UI: localhost:8025)| Rol | |
|---|---|
| super_admin | super@demo.local |
| company_admin | rrhh@empresa-a.test |
| student | estudiante@empresa-a.test |
Códigos de empresa para registro: EMPRESA-A-2026, EMPRESA-B-2026
Next.js 16 · TypeScript · Tailwind · shadcn/ui · Firebase Authentication · Cloud SQL (Postgres) · Drizzle ORM · Google Cloud Storage · Cloud Scheduler · Docker · Firebase App Hosting