Saltar al contenido
jr/dev
EN
← Volver al inicio

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
modelos relacionales
9
webhooks HMAC verificados
Stripe
presigned URLs con expiración
S3
Landing premium con iPhone mockup y copy de membresía.

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

  • User con rol (user / admin)
  • Subscription vinculada a la cuenta Stripe
  • SuperCategoryCategorySubCategory (clase individual con assets S3)
  • Insight (post en Markdown con imagen S3)
  • Advertisement (banners para miembros)
  • UserSubCategoryProgress para 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.succeeded que 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

Landing de membresía con iPhone mockup mostrando contenido.
Landing premium con iPhone mockup y social proof.
Home oscuro con grid overlay y CTA de inscripción.
Home con identidad dark y CTA de inscripción claro.
Formulario de login con identidad de marca.
Login minimalista con jerarquía clara y botón principal accionable.
Formulario de registro con campos validados.
Registro con validación cliente y feedback inmediato.