Plataforma LMS · Membresía · 2023
WhoIsOutlier
LMS de membresía con Stripe en producción y AWS S3 con presigned URLs.
- Rol
- Full Stack Developer (Freelance)
- Período
- 2023
El producto
WhoIsOutlier es una plataforma de membresía LMS desarrollada para un YouTuber con audiencia relevante. La plataforma gestiona suscripciones Stripe, sirve contenido multimedia desde AWS S3 con presigned URLs, y organiza el material en una jerarquía de tres niveles con trackeo de progreso por usuario.
Arquitectura
Backend en AdonisJS 6 + TypeScript con Lucid ORM contra PostgreSQL. Frontend en React 19 + Vite + Tailwind 4 con Zustand para auth y MUI para componentes complejos.
Modelos
Usercon rol (user/admin)Subscriptionvinculada a la cuenta StripeSuperCategory→Category→SubCategory(clase individual con assets S3)Insight(post en Markdown con imagen S3)Advertisement(banners para miembros)UserSubCategoryProgresspara trackear progreso
Pagos con Stripe
Mi primera integración Stripe en producción. Implementé:
- Webhooks con verificación HMAC del header
stripe-signature. - Handler de
charge.succeededque activa o renueva la suscripción. - Cancelación de suscripción con cleanup de estado local.
- Idempotencia para soportar reintentos de Stripe sin duplicar registros.
Contenido protegido con S3
UploadService con @aws-sdk/lib-storage para uploads multipart, nombres únicos generados por UUID y presigned URLs con expiración configurable para servir contenido solo a miembros activos. Esto evita exponer URLs directas que se podrían compartir indefinidamente.
Control de acceso
Middleware encadenado auth() + admin() para proteger rutas administrativas (/api/admin/*). El control de roles se aplica tanto en backend como en el routing del frontend.
Aprendizajes clave
- Primera integración Stripe en producción con webhooks y verificación de firma.
- Primera integración con AWS S3 — uploads, presigned URLs y políticas de bucket.
- Primer proyecto con AdonisJS — rutas, middlewares, ORM Lucid, validación VineJS, testing con Japa.
- Planificación arquitectónica de un sistema con 9 modelos relacionales antes del boom de asistentes IA.
Capturas