Matchito es una aplicación web full-stack de citas online diseñada para conectar personas de forma inteligente, segura y en tiempo real.
El proyecto combina arquitectura backend avanzada, pensamiento de producto y experiencia de usuario, poniendo el foco en la calidad de las conexiones y la privacidad.
Este proyecto ha sido desarrollado de principio a fin asumiendo el rol de Product Owner y desarrolladora, tomando decisiones técnicas y de producto basadas en problemas reales de las aplicaciones de dating.
🔗 Código completo:
https://github.com/beatriangu/Matchito
La mayoría de aplicaciones de citas priorizan la cantidad sobre la calidad.
Matchito nace con un enfoque distinto:
- Reducir el spam y las interacciones vacías
- Garantizar privacidad desde el diseño
- Ofrecer una experiencia real-time first, fluida y clara
- Mantener una arquitectura sencilla, escalable y segura
Solo se genera un match cuando ambos usuarios se dan like, mejorando la calidad de las conexiones y reduciendo interacciones no deseadas.
Likes, matches y mensajes se notifican instantáneamente mediante WebSockets, sin refrescos ni polling innecesario.
- Email y localización exacta no se muestran hasta que existe un match
- Sistema de bloqueo y reporte de usuarios
- Datos sensibles protegidos desde la capa de diseño
Registro con confirmación por email, recuperación de contraseña y validaciones robustas para prevenir cuentas falsas.
- Python 3.x
- Flask (arquitectura MVC)
- Flask-SocketIO + Eventlet para concurrencia y tiempo real
- HTML5 semántico
- CSS3 responsive
- JavaScript ES6+
- PostgreSQL
- Relaciones many-to-many optimizadas
- Índices para alto rendimiento
- Docker + Docker Compose
- NGINX como reverse proxy
- Variables de entorno para secrets
- Health checks y restart policies
- Registro con validación de email
- Login / Logout con JWT
- Recuperación de contraseña con tokens de un solo uso
- Hashing de contraseñas con bcrypt (salt rounds: 12)
- CRUD completo de usuario
- Upload de imágenes con validación
- Sistema de intereses reutilizables
- Geolocalización y cálculo de distancia
- Tabla de likes con timestamps
- Detección automática de matches
- Sugerencias basadas en:
- Intereses comunes
- Proximidad geográfica
- Actividad reciente
- Salas privadas por match
- Historial persistido en PostgreSQL
- Indicador de “escribiendo…”
- Notificaciones en tiempo real
Tablas principales:
usersinterestsuser_interestslikesmatchesmessages
Índices optimizados:
user_idmatch_idcreated_at
Arquitectura de 3 contenedores:
- app → Flask + Eventlet
- db → PostgreSQL con volumen persistente
- nginx → Proxy reverso
Despliegue completo con un solo comando:
docker-compose up -d








