- Lenguaje: Python 3.12. Framework: Django.
# === PostulaMatic · Project Rules for Cursor ===
# Objetivo del proyecto (resumen breve)
# - Django app que: (a) permite subir CV, (b) extrae habilidades con IA,
# - inicia sesión en dvcarreras.davinci.edu.ar con credenciales del usuario,
# - scrapea ofertas de https://dvcarreras.davinci.edu.ar/job_board-0.html,
# - calcula "match %" ajustable contra el CV, y
# - si supera umbral, envía emails personalizados (IA) desde la cuenta SMTP del usuario,
# - registra estadísticas y muestra dashboard con tarjetas y detalle.
# === Estándares de código ===
- Lenguaje: Python 3.12. Framework: Django.
- Estilo: seguir Black (line-length 88), isort e importaciones absolutas; compatibilidad con ruff.
- Estructura Django: apps separadas por dominio:
apps/
accounts/ (perfil usuario, credenciales externas, email remitente)
resumes/ (upload/parse de CV)
jobs/ (scraper cliente, modelos JobPosting, matching)
outreach/ (generación de email con IA, envío, rate-limit)
dashboard/ (vistas y API para métricas/tarjetas)
- Pruebas: crear tests por app (pytest o django.test). Añadir tests mínimos con cada feature.
# === Seguridad y secretos ===
- JAMÁS escribir credenciales reales en el repo. Usar variables de entorno (.env) via django-environ.
- No loggear contraseñas, tokens o cookies.
- Para credenciales de usuario (login portal y SMTP) almacenarlas cifradas en DB (Fernet o similar) y desencriptar sólo al usar.
- Respetar Términos del sitio destino. Scraping sólo bajo credenciales y consentimiento explícito del usuario.
# === Scraper (dvcarreras) ===
- Implementar cliente en `apps/jobs/clients/dvcarreras.py` con `requests.Session`.
- Flujo: login (POST) -> mantener cookies -> GET lista (job_board-0.html) -> parsear tarjetas.
- Manejar ofuscación de emails de Cloudflare (`/cdn-cgi/l/email-protection`) y decodificar.
- Respetar límites: backoff con jitter y cabeceras razonables (UA, Referer).
- Diseñar el scraper para reintentos y para fallos parciales sin romper el proceso.
# === Matching ===
- Extraer habilidades del CV (modelo simple primero: TF-IDF/keywords + sinónimos; luego pluggable IA).
- Guardar `match_score` por JobPosting-Resume. Umbral configurable por usuario.
- Exponer una estrategia de matching intercambiable (Strategy pattern) para evolucionar.
# === IA (redacción y personalización) ===
- Aislar prompts en `apps/outreach/prompting.py`.
- Inputs mínimos: descripción del puesto + habilidades detectadas + datos de perfil del usuario.
- Salidas: asunto y cuerpo del email (texto plano y/o HTML simple).
- No incluir datos sensibles que el usuario no haya dado. Evitar alucinaciones (citar datos del anuncio cuando existan).
# === Envío de email ===
- Configurar remitente por usuario: host, puerto, TLS/SSL, usuario/clave (cifrados en DB).
- Colas y rate limit: planificar Celery (Redis) o, si no está disponible, tareas periódicas con locks y sleep con jitter.
- Límite diario por usuario configurable; pausas aleatorias entre envíos.
# === Dashboard ===
- Tarjetas por postulación: estado (enviado, reintento, error), fecha, empresa, posición, match%.
- Vista detalle con: email enviado (preview), CV/adaptaciones, logs de envío y scraper.
- API JSON para front (siendo server-rendered o HTMX inicialmente).
# === Migraciones y datos ===
- Crear modelos con migraciones atómicas. No romper datos existentes.
- Añadir fixtures de desarrollo cuando corresponda (datos sintéticos).
# === Git y CI ===
- No tocar Dockerfile/compose/CI sin solicitud explícita.
- Commits pequeños, con mensajes claros. Donde cambie esquema, explicar migraciones.
# === Archivos y rutas esperadas ===
- Este repo ya contiene: Dockerfile, docker-compose.yml, .pre-commit-config.yaml.
- Mantener `/static/` y `collectstatic` funcionando.
- Evitar cambios en Nginx/infra desde Cursor salvo que se pida.
# === Pedidos a Cursor (meta) ===
- Antes de cambios multi-archivo, proponer plan y diff.
- Referenciar rutas concretas y crear archivos donde falten.
- Al crear nuevas apps: añadir a INSTALLED_APPS y urls.py si aplica.
- Siempre incluir pruebas mínimas y/o comandos de verificación manual.
Comprehensive .cursorrules file for Next.js 15 App Router projects with TypeScript, enforcing server components by default, proper use of "use client" directive, and App Router conventions.
Cursor rules for Python FastAPI projects enforcing async patterns, Pydantic v2 models, dependency injection, and proper error handling.
Rules for consistent React component development with TypeScript interfaces, proper hook patterns, and component composition.
Rules optimizing Cursor Agent mode behavior including multi-file editing context, session management, and autonomous task completion patterns.
Cursor rules for projects using Tailwind CSS with shadcn/ui component library, enforcing consistent utility class usage and component patterns.
Rules for Go backend services enforcing idiomatic Go patterns, proper error handling, and clean architecture conventions.