Vibe
Marketplace de experiencias y eventos con descubrimiento por swipe, ticketera con QR y pagos reales.
- Rol
- Full-stack developer · Arquitecto de software
- Año
- 2026
- Estado
- En producción
- Cliente
- Producto propio
- 5
- aplicaciones
- ~38.000
- líneas de código
- 88
- endpoints REST
- 22
- entidades de dominio
Resumen
Vibe es una plataforma de descubrimiento de experiencias con un motor de interacción tipo mazo de cartas: el usuario descubre eventos deslizando, guarda los que le interesan y compra entradas dentro de la misma app. Del otro lado, los negocios cuentan con un portal de autogestión para publicar experiencias, vender tickets, contratar suscripciones y analizar a su audiencia con un dashboard de business intelligence. Diseñé y desarrollé el sistema completo: modelo de dominio, API, web app, apps móviles nativas, integración de pagos y el despliegue en AWS.
Contexto
El problema
El descubrimiento de eventos locales estaba fragmentado entre Instagram, grupos de WhatsApp y el boca a boca. Los negocios no tenían forma de medir el interés real de su audiencia, y los usuarios no tenían un único lugar donde encontrar qué hacer.
La solución
Un solo producto que resuelve los dos lados: una experiencia de descubrimiento rápida y visual para el usuario, y una capa de datos accionables más monetización para el negocio. Cinco aplicaciones sobre una misma API: web app, landing, app móvil de usuario, app de validación en puerta y backoffice.
Qué hace
Motor de descubrimiento
Mazo de cartas generado dinámicamente desde la base de datos, con feed personalizado según los intereses declarados en el onboarding. Swipe derecha para guardar y abrir canales de contacto, izquierda para descartar, y rewind para deshacer. Cada interacción se registra como evento analítico.
Ticketera con QR
Compra con Checkout de Mercado Pago, emisión de un pass con QR firmado asociado al usuario, transferencia de entradas entre usuarios mediante un flujo initiate → claim con token de un solo uso, y validación en puerta desde la app Vibe Partner con control de doble escaneo y roles de staff.
Pagos y suscripciones
Dos flujos distintos sobre Mercado Pago: suscripciones de partners vía API de Preaprobación con cobro mensual automático y planes con límites de cuota, y venta de tickets con cobro centralizado y liquidación posterior. Webhooks con validación de firma, procesados de forma asincrónica e idempotente.
Dashboard de Business Intelligence
Cada partner accede a métricas reales de su audiencia: demografía por género y rango etario de quienes guardaron sus experiencias, psicografía con los intereses más frecuentes de su público, y un heatmap de días y horarios pico de interacción.
Sistema de crecimiento
Boosts de visibilidad destacada para una experiencia puntual, códigos de referidos con seguimiento de ventas por agente comercial, y espacios de billboard curados dentro del feed.
Panel de administración
Backoffice completo de moderación y operación: aprobación de partners, gestión de usuarios y suspensiones, alta masiva de experiencias por importación CSV, gestión de intereses, revisión de reportes de contenido y asignación manual de suscripciones.
Decisiones técnicas
- 01
Clean architecture por capas en el backend
El flujo de dependencias apunta hacia adentro: controller → usecase → service ↔ repository → entity. Las interfaces se invierten con inyección por string tokens, lo que permite sustituir implementaciones de infraestructura sin tocar la lógica de negocio. Un controller por endpoint mantiene los archivos chicos y el diff de cada cambio acotado.
- 02
Drivers intercambiables para infraestructura
El almacenamiento se abstrae detrás de una interfaz StorageDriver con dos implementaciones — filesystem local para desarrollo, S3 para producción — seleccionadas por variable de entorno. El mismo patrón aplica a mailer y pagos. Permitió desarrollar todo el producto sin depender de servicios cloud y migrar a AWS sin refactorizar nada del dominio.
- 03
ECS Fargate sobre Lambda o EC2 fijo
El perfil de tráfico es irregular: silencio la mayor parte del tiempo y picos de miles de usuarios simultáneos durante la venta de entradas. Lambda quedó descartada por los cold starts con NestJS; EC2 fijo, por pagar capacidad ociosa. Fargate escala en segundos y baja al mínimo automáticamente.
- 04
Aurora Serverless v2 + RDS Proxy
La base escala por ACUs siguiendo la misma lógica de costo variable, y el proxy evita que un pico de requests simultáneos agote el pool de conexiones.
- 05
Mercado Pago sobre Stripe
Stripe no opera en Argentina sin entidad en el exterior. Mercado Pago tiene penetración casi universal en el mercado local y ofrece exactamente las dos APIs que el producto necesita: Preaprobación para suscripciones y Checkout para tickets.
- 06
Concurrencia e idempotencia
Control de cupo con prevención de overselling ante compras simultáneas, y procesamiento idempotente de webhooks: Mercado Pago puede reenviar el mismo evento y el pago se acredita una sola vez.
Stack
Backend
- NestJS 10
- TypeScript 5.7
- TypeORM
- PostgreSQL 16
- JWT + Passport
- Google Sign-In
- Zod / class-validator
- sharp
- Nodemailer
- Swagger
- Jest
Web
- Next.js 15
- React 19
- Tailwind CSS
- TanStack Query v5
- React Hook Form + Zod
- Framer Motion
- Axios
- Vitest
Móvil
- Flutter 3.5
- Dart
- Riverpod 2
- go_router
- Dio
- flutter_secure_storage
- mobile_scanner
Infraestructura
- AWS ECS Fargate
- Aurora Serverless v2
- RDS Proxy
- S3
- ALB
- CloudFront
- ECR
- VPC
- Netlify
- Docker
Siguiente proyecto