Skip to content

SX110903/llm_dating_app

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

LLMatch - Dating App con IA

Aplicación de citas moderna con sistema de historias tipo Instagram, matching inteligente, mensajería en tiempo real y backend seguro en Golang.

🌟 Características

Frontend (Next.js + React)

  • ✅ Autenticación completa (Login/Register)
  • 📸 Sistema de historias tipo Instagram
  • 💕 Swipe para matches (like/dislike/superlike)
  • 💬 Chat en tiempo real con WebSocket
  • 📷 Gestión de fotos de perfil
  • 🎨 UI moderna con Tailwind CSS y Radix UI
  • 🌙 Modo oscuro/claro
  • 📱 Diseño responsive (mobile-first)

Backend (Golang)

  • 🔐 Autenticación JWT con refresh tokens
  • 🗄️ PostgreSQL con PostGIS para geolocalización
  • 📡 WebSocket para mensajería en tiempo real
  • 🔒 Seguridad avanzada (OWASP, rate limiting, CORS)
  • 📦 Arquitectura limpia con patrones de diseño
  • 🐳 Docker y Docker Compose
  • 📊 Sistema de historias con expiración automática
  • 🎯 Algoritmo de matching por compatibilidad

🚀 Inicio Rápido

Requisitos Previos

  • Node.js 18+
  • Go 1.22+
  • PostgreSQL 15+ con PostGIS
  • Docker (opcional)

Opción 1: Desarrollo Local

1. Configurar Backend

# Navegar al directorio del backend
cd backend

# Copiar archivo de configuración
cp .env.example .env

# Editar .env con tus configuraciones
# DB_PASSWORD=tu_password_seguro
# JWT_SECRET=tu_jwt_secret_muy_seguro

# Instalar dependencias
go mod download

# Crear base de datos
make setup-db

# Ejecutar migraciones
make migrate-up

# Ejecutar backend
make run

El backend estará disponible en http://localhost:8080

2. Configurar Frontend

# En la raíz del proyecto
npm install

# Copiar archivo de configuración
cp .env.local.example .env.local

# Ejecutar en modo desarrollo
npm run dev

El frontend estará disponible en http://localhost:3000

Opción 2: Docker (Recomendado)

# Backend con Docker Compose
cd backend
docker-compose up -d

# Verificar que todo esté funcionando
docker-compose logs -f

# Frontend
cd ..
npm install
npm run dev

📁 Estructura del Proyecto

llm-dating-app-2/
├── app/                        # Next.js App Router
│   ├── layout.tsx
│   └── page.tsx
├── components/                 # Componentes React
│   ├── auth/                  # Componentes de autenticación
│   ├── stories/               # Sistema de historias
│   ├── swipe/                 # Sistema de swipe
│   ├── matches/               # Listado de matches
│   ├── navigation/            # Navegación
│   └── ui/                    # Componentes UI base
├── lib/                       # Librerías y utilidades
│   ├── api/                   # Cliente API
│   │   ├── client.ts         # Axios client con interceptores
│   │   ├── auth.ts           # API de autenticación
│   │   ├── stories.ts        # API de historias
│   │   ├── matches.ts        # API de matches
│   │   └── messages.ts       # API de mensajes
│   ├── hooks/                 # Custom hooks
│   │   └── useWebSocket.ts   # Hook de WebSocket
│   └── auth-context.tsx      # Contexto de autenticación
├── backend/                   # Backend en Golang
│   ├── cmd/api/              # Punto de entrada
│   ├── config/               # Configuración
│   ├── internal/             # Código interno
│   │   ├── models/          # Modelos de datos
│   │   ├── repository/      # Capa de datos
│   │   ├── service/         # Lógica de negocio
│   │   ├── handler/         # HTTP handlers
│   │   ├── middleware/      # Middleware
│   │   └── websocket/       # WebSocket manager
│   ├── pkg/                  # Paquetes públicos
│   ├── migrations/           # Migraciones SQL
│   └── Dockerfile
└── README.md

🔧 Configuración

Variables de Entorno - Frontend

NEXT_PUBLIC_API_URL=http://localhost:8080/api/v1
NEXT_PUBLIC_WS_URL=ws://localhost:8080/api/v1/ws

Variables de Entorno - Backend

Ver backend/.env.example para la lista completa.

Principales:

  • DB_PASSWORD: Contraseña de PostgreSQL
  • JWT_SECRET: Secret para JWT tokens
  • JWT_REFRESH_SECRET: Secret para refresh tokens
  • STORAGE_TYPE: "local" o "s3"
  • AWS_*: Credenciales de AWS (si usas S3)

📡 API Endpoints

Autenticación

  • POST /api/v1/auth/register - Registrar usuario
  • POST /api/v1/auth/login - Iniciar sesión
  • POST /api/v1/auth/refresh - Refrescar token
  • GET /api/v1/auth/me - Obtener usuario actual

Historias

  • POST /api/v1/stories - Crear historia
  • GET /api/v1/stories/feed - Feed de historias
  • POST /api/v1/stories/{id}/view - Marcar como vista
  • GET /api/v1/stories/{id}/views - Ver quién vio

Matching

  • POST /api/v1/swipe - Swipe (like/dislike)
  • GET /api/v1/discover - Usuarios para descubrir
  • GET /api/v1/matches - Obtener matches
  • DELETE /api/v1/matches/{id} - Unmatch

Mensajes

  • POST /api/v1/messages - Enviar mensaje
  • GET /api/v1/messages/{matchId} - Obtener conversación
  • PATCH /api/v1/messages/{id}/read - Marcar como leído

WebSocket

  • GET /api/v1/ws - Conectar WebSocket (requiere auth)

Ver backend/README.md para documentación completa de la API.

🔐 Seguridad

El backend implementa múltiples capas de seguridad:

  1. Autenticación

    • JWT con algoritmo HS256
    • Tokens de refresh separados
    • Bcrypt para passwords (cost 12)
  2. Protección contra ataques

    • Rate limiting por IP
    • Protección CSRF
    • Headers de seguridad (OWASP)
    • Sanitización de inputs
    • Protección SQL Injection
  3. HTTPS

    • En producción, usar HTTPS obligatorio
    • Strict-Transport-Security headers
  4. Validación

    • Validación exhaustiva en backend
    • Tipos seguros con TypeScript en frontend

🧪 Testing

# Backend
cd backend
make test

# Frontend
npm run test

🚀 Deployment

Backend

cd backend

# Build Docker image
docker build -t dating-app-backend:latest .

# Run
docker run -p 8080:8080 --env-file .env dating-app-backend:latest

Frontend

# Build para producción
npm run build

# Start servidor de producción
npm start

O desplegar en Vercel:

vercel deploy --prod

📊 Arquitectura

Backend (Clean Architecture)

Handlers → Services → Repositories → Database
    ↓          ↓           ↓
Middleware  Business   Data Access
 (Auth,     Logic      (Repository
Security)              Pattern)

Patrones de Diseño Implementados

  • Singleton: Config, JWT Manager, Database Connection
  • Repository: Abstracción de acceso a datos
  • Factory: Creación de storage instances
  • Strategy: Diferentes estrategias de almacenamiento
  • Service Layer: Separación de lógica de negocio

🤝 Contribución

  1. Fork el proyecto
  2. Crea una rama (git checkout -b feature/amazing-feature)
  3. Commit tus cambios (git commit -m 'Add amazing feature')
  4. Push a la rama (git push origin feature/amazing-feature)
  5. Abre un Pull Request

📝 Licencia

Este proyecto es privado y confidencial.

🐛 Troubleshooting

Backend no conecta a la base de datos

# Verificar que PostgreSQL esté corriendo
psql -U postgres -c "SELECT version();"

# Verificar conexión
psql -h localhost -U dating_app -d dating_app_db

Frontend no conecta al backend

  1. Verificar que el backend esté corriendo en el puerto correcto
  2. Verificar las variables de entorno en .env.local
  3. Verificar CORS en el backend

Errores de WebSocket

  1. Verificar que estés usando el protocolo correcto (ws:// o wss://)
  2. Verificar que el token JWT sea válido
  3. Revisar logs del backend

📞 Soporte

Para soporte técnico, abre un issue en el repositorio.


Desarrollado con ❤️ usando Next.js, React, Golang, PostgreSQL y mucho café ☕

About

projecto publico para trajar sobre una aplicacion en tiempo real basado

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors