Contexto
Sección titulada «Contexto»Cuando empezamos a construir TalentBricksAI, teníamos una restricción clara: somos un equipo pequeño con tiempo limitado. Necesitábamos movernos rápido sin comprometer la calidad ni acumular deuda técnica imposible de pagar.
Este artículo documenta las decisiones técnicas que tomamos y el razonamiento detrás de cada una.
El framework: Wasp
Sección titulada «El framework: Wasp»La decisión más inusual fue usar Wasp — un framework full-stack basado en un DSL declarativo que compila a una aplicación React + Node.js + Prisma.
Por qué Wasp
Sección titulada «Por qué Wasp»En lugar de configurar manualmente:
- Autenticación (sesiones, verificación de email, OAuth)
- Routing cliente/servidor
- Operaciones cliente-servidor (queries y actions)
- Jobs en background
…Wasp te da todo eso con 10 líneas de configuración en main.wasp.
app TalentBricksAI { auth: { userEntity: User, methods: { email: { ... }, google: { ... }, gitHub: { ... } } }}El resultado: llegamos a producción con autenticación completa, verificación de email, y OAuth con Google y GitHub en menos de un día de trabajo.
La contrapartida
Sección titulada «La contrapartida»Wasp es opinionado. Hay cosas que no puedes hacer fácilmente fuera del “camino feliz”. Para nosotros eso fue una ventaja — evita las malas decisiones por premura.
Base de datos: PostgreSQL + Prisma
Sección titulada «Base de datos: PostgreSQL + Prisma»No inventamos nada aquí. PostgreSQL es el estándar de facto para aplicaciones que necesitan:
- Relaciones complejas (cursos → lecciones → inscripciones → progreso)
- Transacciones ACID
- JSON y arrays cuando los necesitas
- Escalabilidad real
Prisma como ORM nos da:
- Tipado completo del esquema en TypeScript
- Migraciones automáticas
- Una API de queries ergonómica
El esquema central de TalentBricksAI tiene 13 modelos incluyendo Course, Lesson, Enrollment,
LessonProgress, y Certificate. Toda la lógica de negocio de la plataforma descansa en estas
relaciones.
Frontend: React 19 + ShadCN + Tailwind
Sección titulada «Frontend: React 19 + ShadCN + Tailwind»ShadCN UI
Sección titulada «ShadCN UI»En lugar de instalar una librería de componentes completa (que viene con decisiones de diseño que luego peleas), usamos ShadCN — que genera componentes directamente en tu código fuente.
Eso nos permite:
- Personalizar cualquier componente sin hackear dependencias externas
- Mantener un design system consistente
- Mejorar componentes sin esperar updates de terceros
Tailwind CSS con CSS variables
Sección titulada «Tailwind CSS con CSS variables»El sistema de theming usa variables CSS que Tailwind consume. El resultado: un dark mode que funciona sin JavaScript, y cambiar toda la paleta de colores del sitio es cuestión de editar 10 variables.
Pagos: Stripe
Sección titulada «Pagos: Stripe»Para los pagos elegimos Stripe por su madurez, documentación, y soporte para America Latina. La plataforma soporta tres modelos de pago simultáneamente:
- Cursos individuales ($29-99 USD por curso)
- Suscripción mensual ($19/mes)
- Suscripción anual ($149/año)
La arquitectura de webhooks maneja compras de curso vs. suscripciones en el mismo flujo, enruta correctamente cada tipo, y gestiona renovaciones automáticamente.
Video: AWS S3 + CloudFront
Sección titulada «Video: AWS S3 + CloudFront»Los videos de los cursos viven en AWS S3 con distribución via CloudFront. Las URLs son firmadas con expiración — nadie puede descargar o redistribuir el contenido directamente.
En desarrollo usamos videos de YouTube como placeholders para no depender de credenciales de AWS durante el desarrollo local.
Blog y documentación: Astro + Starlight
Sección titulada «Blog y documentación: Astro + Starlight»Esta misma página que estás leyendo está construida con Astro y el tema Starlight. La documentación técnica del proyecto, el roadmap, los changelogs y el blog de equipo viven aquí.
Lo elegimos porque:
- Generación estática — rapidísimo
- Markdown/MDX nativo — sin configuración
- Starlight tiene un sistema de sidebar y búsqueda excelente out-of-the-box
Internacionalización: i18n propio
Sección titulada «Internacionalización: i18n propio»La plataforma es bilingüe (español/inglés). En lugar de usar una librería externa como
react-i18next, construimos un sistema propio minimalista:
- Archivos TypeScript con
as constpara tipado completo de las claves - Un hook
useTranslation()que resuelve claves por dot-notation - Fallback automático a español cuando falta una traducción en inglés
El español es la fuente de verdad. El inglés es derivado. Eso garantiza que nunca perdemos contexto de negocio por una mala traducción automática.
Lecciones aprendidas
Sección titulada «Lecciones aprendidas»Lo que elegiríamos de nuevo sin dudar:
- Wasp — acelera enormemente el bootstrap de features estándar
- ShadCN — flexibilidad sin complejidad
- Prisma — la experiencia de desarrollo es excelente
- Stripe — documentación impecable
Lo que haríamos diferente:
- Hubiéramos definido el sistema de i18n antes de escribir una sola línea de UI
- Algunos modelos de base de datos crecieron más de lo esperado — más planificación inicial de schema habría evitado migraciones complejas
Si te interesa el stack técnico o tienes preguntas específicas sobre alguna decisión de arquitectura, escríbenos. Nos encanta hablar de esto.