Synaplan
기업을 위한 오픈소스 AI 플랫폼
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗¿Nuevo en el proyecto? Empieza por docs/ONBOARDING.md.
cp .env.example .env # pon tu GEMINI_API_KEY
docker compose up --build
localhost:5432 (postgres/postgres)127.0.0.1.postgres_data (docker compose down -v los borra).Nota: el resto de este documento es la especificación original (multi-usuario con JWT); ya no refleja la autenticación actual.
Sistema personal de seguimiento de ofertas de trabajo con scraping automatizado y análisis de compatibilidad con IA. Diseñado para dos usuarios (Osvaldo y Guillermo) que comparten el sistema pero tienen perfiles de búsqueda independientes por rol (frontend, backend, fullstack, mobile). La IA evalúa cada oferta contra el perfil específico activo, extrae salario y prestaciones del texto, y presenta un top 5 de las mejores oportunidades por perfil.
| Capa | Tecnología | Justificación |
|---|---|---|
| Scraper | Python + FastAPI + Jobspy + APScheduler | Jobspy es la librería más madura para esto; se expone como microservicio mínimo |
| Backend | NestJS + TypeORM + PostgreSQL | Stack conocido, tipado, estructurado por módulos |
| IA | Groq API (llama-3.3-70b) | Gratuita, 14,400 req/día, compatible con SDK de OpenAI, latencia muy baja |
| Frontend | Nuxt 3 + Vue 3 + TanStack Query + Pinia | Stack conocido, SSR opcional, excelente DX |
| PDF parsing | pdf-parse (Node) | Extrae texto de CVs al momento de subir; texto se guarda en DB |
┌─────────────────────┐ ┌──────────────────────────────────────┐
│ Microservicio │ │ NestJS Backend │
│ Python (FastAPI) │──────▶ │ │
│ │ HTTP │ ┌──────────┐ ┌──────────────────┐ │
│ - Jobspy scraping │ │ │ /jobs │ │ /users │ │
│ - APScheduler cron │◀────── │ │ ingest │ │ CV upload │ │
│ - POST /scrape │ trigger│ └──────────┘ └──────────────────┘ │
└─────────────────────┘ │ │
│ ┌──────────────────────────────┐ │
│ │ Groq Service │ │
│ │ analiza oferta × usuario │ │
│ └──────────────────────────────┘ │
│ │ │
│ ┌───────────▼──────────────────┐ │
│ │ PostgreSQL │ │
│ │ users · jobs · analyses │ │
│ └──────────────────────────────┘ │
└──────────────┬───────────────────────┘
│ REST API
▼
┌──────────────────────────┐
│ Nuxt Frontend │
│ dashboard · detalle │
│ trigger manual scraper │
└──────────────────────────┘
usersid UUID PRIMARY KEY DEFAULT gen_random_uuid()
name VARCHAR(100) NOT NULL
email VARCHAR(150) UNIQUE NOT NULL
password_hash VARCHAR(255) NOT NULL -- bcrypt hash
cv_text TEXT -- texto extraído del PDF
cv_filename VARCHAR(255) -- nombre del archivo original
cv_uploaded_at TIMESTAMPTZ
created_at TIMESTAMPTZ DEFAULT NOW()
jobsid UUID PRIMARY KEY DEFAULT gen_random_uuid()
title VARCHAR(255) NOT NULL
company VARCHAR(255)
location VARCHAR(255)
description TEXT
url VARCHAR(500) UNIQUE -- evita duplicados
source VARCHAR(50) -- 'linkedin' | 'indeed'
date_posted DATE
scraped_at TIMESTAMPTZ DEFAULT NOW()
search_profilesid UUID PRIMARY KEY DEFAULT gen_random_uuid()
user_id UUID REFERENCES users(id) ON DELETE CASCADE
name VARCHAR(100) NOT NULL -- "Frontend", "Backend", "Mobile"
role VARCHAR(50) NOT NULL -- 'frontend' | 'backend' | 'fullstack' | 'mobile'
keywords TEXT[] -- ["vue", "react", "typescript"]
locations TEXT[] -- ["Mexico", "Remote"]
is_active BOOLEAN DEFAULT true
created_at TIMESTAMPTZ DEFAULT NOW()
여기까지가 README 앞부분입니다. 나머지는 원문에서 읽을 수 있습니다. README 전문 보기 ↗