Synaplan
Open-source AI platform for companies: self-hosted AI agents, GDPR-compliant chatbot widget, RAG knowledge base, WhatsApp and Outlook AI, MCP, multi-model routing. Docker, Kubernetes or hosted in Germ
Your entire job application, from applying to practising, in one place. Roles in India only.
BusinessPython · TypeScriptGitHub @AjitShettiAvailability needs another checkOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗TalentRadar is an AI-powered job intelligence platform that ingests job postings, extracts structured signals via LLMs, and answers natural-language queries using Retrieval-Augmented Generation (RAG). It provides semantic job search, market trend analysis, and intelligent candidate matching.
git clone https://github.com/your-org/talentRadar.git
cd talentRadar
Copy the example environment file:
cp .env.example .env
Configure the following variables in .env:
| Variable | Description | Example |
|---|---|---|
GROQ_API_KEY | LLM parsing and generation | gsk_... |
TAVILY_API_KEY | Job posting search and scraping | tvly-... |
JWT_SECRET_KEY | Secret key for signing JWT tokens | python -c "import secrets; print(secrets.token_urlsafe(48))" |
Start all services including the API, Frontend, Database, Cache, Vector DB, and Celery workers:
docker-compose up -d
If running via Docker, the database is automatically started. Run migrations to setup the schema:
docker exec talentradar-api alembic upgrade head
talentRadar/
├── agents/ # AI agent layer (LangGraph, Prompts)
├── api/ # REST API (FastAPI)
│ ├── routers/ # Endpoint handlers
│ ├── schemas/ # Pydantic request/response models
│ ├── main.py # FastAPI application
├── config/ # Application settings
├── data/ # Shared data directory
├── frontend/ # Next.js web app
│ ├── app/ # Pages (App Router)
│ ├── components/ # React components
│ └── lib/ # API client, types, utils
├── infra/ # Infrastructure (Docker, K8s, Cloud Run)
├── ingestion/ # Data pipeline (Scrapers, Celery Tasks)
├── ml/ # Machine Learning scoring models
├── storage/ # Data layer (SQLAlchemy, Alembic)
└── tests/ # Test suite (pytest)
User Query -> Next.js Frontend -> FastAPI Endpoint -> LangGraph Agent -> pgvector (Retrieval) / Groq LLM (Generation) -> Response -> Frontend
API Server
AI Agents
Data Ingestion Pipeline
| Variable | Description | Default |
|---|---|---|
GROQ_API_KEY | Groq API Key | - |
TAVILY_API_KEY | Tavily API Key | - |
POSTGRES_USER | PostgreSQL user | talentRadar |
POSTGRES_PASSWORD | PostgreSQL password | devpassword |
POSTGRES_DB | PostgreSQL database name | talentRadar |
JWT_SECRET_KEY | JWT signing secret | - |
Hosted Postgres hands out one DSN rather than five fields: set DATABASE_URL
and it wins over the POSTGRES_* values above.
| Variable | Description | Default |
|---|---|---|
DATABASE_URL | Full Postgres DSN; overrides the discrete fields | - |
POSTGRES_SSL | Require TLS on the database connection | false |
VECTOR_BACKEND | pgvector, chroma, or none (no embeddings loaded) | pgvector |
TRUSTED_PROXY_HOPS | Proxies in front of the API; must be 1 behind a PaaS | 0 |
ENABLE_STEALTH_SCRAPERS | Headless-browser scrapers (needs .[stealth]) | false |
PDF_ENGINE | auto, latex, or builtin resume PDF rendering | auto |
ENABLE_SCHEDULER | In-process daily job-match scan | true |
LOG_LEVEL | Logging verbosity | INFO |
DEBUG | Opens /docs and the localhost CORS wildcard — never in production | false |
RATE_LIMIT_PER_MINUTE | Max requests per minute per IP | 60 |
See .env.example for the full annotated list.
| Command | Description |
|---|---|
docker-compose up -d | Start full local development stack |
docker exec talentradar-api alembic upgrade head | Run database migrations |
pytest tests/ -v | Run all tests |
ruff format . | Format codebase |
Install development dependencies:
pip install -e ".[dev,lint,docs]"
Run tests:
# Run all tests
pytest tests/ -v
# Run with coverage
pytest tests/ --cov=. --cov-report=html
# End-to-end pipeline test
python tests/test_pipeline_e2e.py --quick
DEPLOY.md is the runbook. The target is a stack that costs
nothing: Neon (Postgres + pgvector), Render (the API, from render.yaml),
Vercel (the frontend), Groq (the LLM). Check readiness before you start:
python -m scripts.verify_deploy # settings, DB, pgvector, migrations, model
docker build -t talentradar-api -f infra/Dockerfile .
docker run -p 8000:8000 --env-file .env talentradar-api
The default image deliberately leaves out PyTorch, TeX Live and the Camoufox
browser — together well over two gigabytes, and none of them required: the
semantic scorer runs the same model under ONNX, resume PDFs render through
PyMuPDF, and the browser-driven scrapers are off. Add any of them back with
--build-arg INSTALL_SEMANTIC=true, INSTALL_TEXLIVE=true,
INSTALL_STEALTH=true.
Error: could not connect to server: Connection refused
Solution:
docker psdocker-compose.yml.Error: ModuleNotFoundError: No module named '...'
Solution: Ensure you have installed all dependencies inside your virtual environment or Docker container:
pip install -e .