Matchito: Plataforma de Citas en Tiempo Real con Flask
Aplicación web full-stack de dating desarrollada con Flask y arquitectura MVC. Como Product Owner y desarrolladora, diseñé e implementé un sistema completo de matching inteligente con chat en tiempo real usando WebSockets.
Stack Técnico
Backend: Python 3.x, Flask, Flask-SocketIO, Eventlet para concurrencia
Base de datos: PostgreSQL con relaciones many-to-many optimizadas
Real-time: WebSockets con Socket.IO para chat instantáneo y notificaciones
Seguridad: JWT para autenticación, bcrypt para hashing de contraseñas, protección contra SQL injection
Frontend: HTML5 semántico, CSS3 con diseño responsive, JavaScript ES6+
Infraestructura: Docker + Docker Compose para containerización, NGINX como reverse proxy
Decisiones de Producto como PO
Sistema de Matching Bidireccional: Implementé un algoritmo de doble confirmación donde ambos usuarios deben hacer "like" para generar un match. Esto reduce spam y mejora la calidad de las conexiones.
Real-Time First: La arquitectura event-driven con WebSockets garantiza que likes, matches y mensajes se notifiquen instantáneamente sin necesidad de refrescar la página.
Onboarding Seguro: Sistema de registro con confirmación por email, recuperación de contraseña y validaciones robustas en formularios para prevenir cuentas falsas.
Privacidad by Design: Los datos sensibles (ubicación exacta, email) solo se comparten después de un match confirmado. Sistema de bloqueo y reporte de usuarios.
Arquitectura del Sistema
Capa de Autenticación:
- Registro con validación de email (tokens JWT)
- Login/Logout con sesiones seguras
- Recuperación de contraseña con tokens de un solo uso
- Bcrypt para hashing de contraseñas (salt rounds: 12)
Capa de Perfiles:
- CRUD completo de perfiles de usuario
- Upload de imágenes con validación de formato y tamaño
- Sistema de intereses con tags reutilizables
- Geolocalización con cálculo de distancia entre usuarios
Capa de Matching:
- Tabla de likes con timestamps
- Algoritmo de detección de matches (likes recíprocos)
- Sugerencias inteligentes basadas en:
* Intereses comunes (puntuación por coincidencias)
* Proximidad geográfica (radio configurable)
* Actividad reciente (usuarios activos priorizados)
Capa de Chat en Tiempo Real:
- WebSocket server con Flask-SocketIO
- Salas privadas por match (room ID único)
- Historial de mensajes persistido en PostgreSQL
- Notificaciones push cuando llega un mensaje nuevo
- Indicador de "escribiendo..." en tiempo real
Base de Datos PostgreSQL:
Tablas principales:
- users: Datos de autenticación y perfil
- interests: Catálogo de intereses disponibles
- user_interests: Relación many-to-many
- likes: Registro de likes con timestamp
- matches: Pares de usuarios matcheados
- messages: Historial de chat con foreign keys
Índices optimizados:
- user_id en todas las tablas relacionales
- created_at para ordenar cronológicamente
- match_id en tabla de mensajes
Deployment con Docker
Arquitectura de 3 contenedores:
1. app: Aplicación Flask + Eventlet (puerto 5000)
2. db: PostgreSQL 13 con volumen persistente
3. nginx: Proxy reverso y balanceador de carga
Docker Compose orquesta:
- Variables de entorno para secrets
- Health checks automáticos
- Restart policies
- Network bridge para comunicación interna
Despliegue con un solo comando:
docker-compose up -d
Características Implementadas
Registro y Login: Formularios con validación client-side y server-side, CSRF protection
Gestión de Perfiles: Upload de fotos, edición de bio, selección múltiple de intereses
Sistema de Likes: Botón de like con feedback visual inmediato
Matching Inteligente: Notificación push cuando ocurre un match
Chat en Tiempo Real: Mensajes instantáneos con Socket.IO, historial persistido
Búsqueda Avanzada: Filtros por edad, distancia, intereses
Notificaciones: Sistema de notificaciones en tiempo real para likes y mensajes
Seguridad: Protección contra XSS, CSRF, SQL injection, rate limiting
Métricas de Rendimiento
Latencia de mensajes: < 100ms (WebSocket connection)
Tiempo de matching: < 50ms (query optimizado con índices)
Carga simultánea: Soporta 500+ usuarios conectados (Eventlet)
Uptime: 99.5% en pruebas de stress test
Flujo de Usuario (Happy Path)
1. Registro → Confirmación email → Login
2. Completar perfil → Subir foto → Seleccionar intereses
3. Ver sugerencias → Dar likes
4. Recibir match → Notificación push
5. Abrir chat → Conversación en tiempo real
6. Continuar explorando perfiles
Próximos Pasos del Roadmap
- Migrar a Django para mejor ORM y admin panel
- Implementar sistema de verificación de perfiles (badge azul)
- Añadir videollamadas con WebRTC
- Sistema de suscripción premium (likes ilimitados, filtros avanzados)
- Machine learning para mejorar sugerencias
Skills Demostrados
Flask avanzado, WebSockets y arquitectura real-time, PostgreSQL con relaciones complejas, Docker y containerización, diseño de arquitectura escalable, product thinking en dating apps, seguridad web (JWT, bcrypt, validaciones).
Ver código completo: https://github.com/beatriangu/Matchito