08 Jul 2025
Tecnología
Demo disponible
Imagen principal de Matchito: Plataforma de Citas en Tiempo Real con Flask

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