Decisiones Tecnicas
Section titled “Decisiones Tecnicas”Este documento explica las decisiones tecnicas clave del proyecto y sus justificaciones.
1. Video Hosting: AWS S3 + CloudFront
Section titled “1. Video Hosting: AWS S3 + CloudFront”Decision
Section titled “Decision”Usar AWS S3 para almacenamiento y CloudFront para distribucion de videos.
Alternativas Consideradas
Section titled “Alternativas Consideradas”| Opcion | Pros | Contras |
|---|---|---|
| AWS S3 + CloudFront | Pago por uso, escalable, ya configurado | Mas complejo de configurar |
| YouTube (unlisted) | Gratis, facil | Sin control, ads posibles, no profesional |
| Vimeo Pro | Player profesional | $20/mes minimo, limites de almacenamiento |
| Bunny.net | Mas barato | Menos integracion AWS |
Justificacion
Section titled “Justificacion”- Ya configurado: El proyecto usa S3 para file uploads
- Pago por uso: ~$0.023/GB almacenamiento + ~$0.085/GB transferencia
- Escalable: Crece automaticamente con el uso
- Control total: URLs firmadas para contenido privado
- Global: CloudFront tiene edge locations en Latinoamerica
Costo Estimado
Section titled “Costo Estimado”100GB videos almacenados = $2.30/mes50GB transferencia/mes = $4.25/mesTotal: ~$6.55/mes2. Pricing Model: Individual + Suscripcion
Section titled “2. Pricing Model: Individual + Suscripcion”Decision
Section titled “Decision”Ofrecer tanto compra individual de cursos como suscripciones mensuales/anuales.
Alternativas Consideradas
Section titled “Alternativas Consideradas”| Opcion | Pros | Contras |
|---|---|---|
| Solo suscripcion | Ingresos recurrentes | Barrera alta para nuevos usuarios |
| Solo individual | Baja barrera de entrada | Sin ingresos recurrentes |
| Ambos | Maxima flexibilidad | Mas complejo de implementar |
Justificacion
Section titled “Justificacion”- Conversion: Cursos individuales para usuarios casuales
- Retencion: Suscripciones para usuarios comprometidos
- Descuento anual: Incentiva compromiso a largo plazo
- Stripe: Ya soporta ambos modelos sin costo adicional
Precios Sugeridos
Section titled “Precios Sugeridos”| Plan | Precio | Descripcion |
|---|---|---|
| Curso Individual | $29-99 | Acceso de por vida al curso |
| Mensual | $19/mes | Acceso a todos los cursos |
| Anual | $149/ano | ~35% descuento vs mensual |
3. Localizacion: Hardcode Spanish
Section titled “3. Localizacion: Hardcode Spanish”Decision
Section titled “Decision”Hardcodear todo el contenido en español en lugar de usar i18n.
Alternativas Consideradas
Section titled “Alternativas Consideradas”| Opcion | Pros | Contras |
|---|---|---|
| i18n (react-intl, etc) | Multi-idioma futuro | Complejidad adicional |
| Hardcode Spanish | Simple, rapido | Solo español |
| Parametrizable | Flexible | Over-engineering |
Justificacion
Section titled “Justificacion”- Mercado objetivo: Hispanohablantes en Latinoamerica
- Simplicidad: Menos codigo, menos bugs
- Performance: Sin overhead de i18n
- Evolucion: Se puede agregar i18n despues si es necesario
Implementacion
Section titled “Implementacion”export const content = { auth: { login: "Iniciar Sesion", signup: "Crear Cuenta", // ... }, courses: { catalog: "Catalogo de Cursos", enroll: "Inscribirme", // ... },};4. Comunidad: Post-Launch (Fase 2)
Section titled “4. Comunidad: Post-Launch (Fase 2)”Decision
Section titled “Decision”No incluir features de comunidad (foros, Q&A) en el MVP.
Alternativas Consideradas
Section titled “Alternativas Consideradas”| Opcion | Pros | Contras |
|---|---|---|
| Incluir en MVP | Feature completa | Retrasa lanzamiento |
| Post-launch | Lanzamiento rapido | Sin comunidad inicial |
| Terceros (Discord) | Facil, gratis | Fuera de la plataforma |
Justificacion
Section titled “Justificacion”- Enfoque: Primero el core (cursos + pagos)
- Validacion: Verificar que hay usuarios antes de construir comunidad
- Complejidad: Foros requieren moderacion, notificaciones, etc.
- Alternativa temporal: Discord/Slack para early adopters
Plan Post-Launch
Section titled “Plan Post-Launch”- Lanzar MVP (Fases 1-7)
- Conseguir primeros 100 usuarios
- Validar necesidad de comunidad
- Implementar Fase 8 si hay demanda
5. Certificados: PDF Server-Side
Section titled “5. Certificados: PDF Server-Side”Decision
Section titled “Decision”Generar certificados como PDFs en el servidor.
Alternativas Consideradas
Section titled “Alternativas Consideradas”| Opcion | Pros | Contras |
|---|---|---|
| PDF server-side | Control total, profesional | Mas codigo |
| Imagen estatica | Simple | No descargable |
| Servicio tercero | Menos codigo | Costo adicional, dependencia |
| LinkedIn certificates | Integracion social | Requiere partnership |
Justificacion
Section titled “Justificacion”- Control: Diseno personalizado con branding
- Sin dependencias: No requiere servicios externos
- Descargable: Los usuarios valoran PDFs
- Verificable: Se puede agregar URL de verificacion
Implementacion
Section titled “Implementacion”import PDFDocument from "pdfkit";
export async function generateCertificatePDF({ userName, courseName, completionDate,}: CertificateData): Promise<string> { const doc = new PDFDocument(); // ... generar PDF // Subir a S3 // Retornar URL}6. Framework: Wasp
Section titled “6. Framework: Wasp”Decision
Section titled “Decision”Mantener Wasp como framework (heredado del template Open SaaS).
Ventajas de Wasp
Section titled “Ventajas de Wasp”- Full-stack: Frontend + Backend + DB en un solo lugar
- Type-safe: Tipos generados automaticamente
- Auth built-in: Email/password, OAuth, etc.
- Operations: Queries/Actions con cache automatico
- Jobs: Cron jobs integrados (PgBoss)
Consideraciones
Section titled “Consideraciones”- Curva de aprendizaje para nuevo framework
- Documentacion menos extensa que Next.js/Express
- Comunidad mas pequena
Recursos
Section titled “Recursos”7. UI Components: ShadCN
Section titled “7. UI Components: ShadCN”Decision
Section titled “Decision”Usar ShadCN UI (ya incluido en el template).
Ventajas
Section titled “Ventajas”- Copy-paste: Codigo tuyo, no dependencia
- Customizable: Facil de modificar
- Tailwind-based: Consistente con el resto del proyecto
- Accessible: Basado en Radix UI primitives
- 22+ componentes: Button, Card, Dialog, Table, etc.
Componentes Clave para Cursos
Section titled “Componentes Clave para Cursos”- Card (CourseCard)
- Progress (ProgressRing)
- Dialog (modals)
- Table (admin tables)
- Form (formularios)
8. Base de Datos: PostgreSQL
Section titled “8. Base de Datos: PostgreSQL”Decision
Section titled “Decision”Mantener PostgreSQL (heredado del template).
Ventajas
Section titled “Ventajas”- Robusta: Soporte para relaciones complejas
- Prisma: ORM excelente con tipos
- PgBoss: Jobs usando la misma DB
- Fly.io: Facil de desplegar
- Escalable: Maneja el crecimiento
Indices Recomendados
Section titled “Indices Recomendados”model Course { @@index([isPublished]) @@index([category])}
model Lesson { @@index([courseId, order])}
model Enrollment { @@index([userId]) @@index([courseId])}Resumen de Decisiones
Section titled “Resumen de Decisiones”| Area | Decision | Razon Principal |
|---|---|---|
| Video | AWS S3 + CloudFront | Ya configurado, pago por uso |
| Pricing | Individual + Suscripcion | Maxima flexibilidad |
| Idioma | Hardcode Spanish | Simplicidad |
| Comunidad | Post-launch | Enfoque en core primero |
| Certificados | PDF server-side | Control total |
| Framework | Wasp | Heredado, full-stack |
| UI | ShadCN | Copy-paste, customizable |
| Database | PostgreSQL | Robusta, Prisma |