TalentPulse Documentation · v1.0
TalentPulse is an AI-powered recruitment and applicant tracking system (ATS) built with Django 6.x. It features GPT-based resume parsing, multi-signal candidate-job matching with explainable AI scoring, and a complete hiring pipeline — all in a multi-tenant SaaS architecture.
unzip TalentPulse_v1.0.zip
cd TalentPulse
cp .env.example .env
Edit .env with your settings:
SECRET_KEY=your-secret-key-here
DATABASE_URL=postgres://user:password@db:5432/talentpulse
REDIS_URL=redis://redis:6379/0
OPENAI_API_KEY=sk-your-openai-key
docker compose up -d --build
docker compose exec web python manage.py migrate
docker compose exec web python manage.py createsuperuser
docker compose exec web python manage.py collectstatic --noinput
python -m venv venv
source venv/bin/activate # Linux/Mac
venv\Scriptsctivate # Windows
pip install -r requirements.txt
# Install pgvector extension
psql -U postgres -c "CREATE DATABASE talentpulse;"
psql -U postgres -d talentpulse -c "CREATE EXTENSION IF NOT EXISTS vector;"
# Run migrations
python manage.py migrate
python manage.py createsuperuser
# Terminal 1 - Django
python manage.py runserver
# Terminal 2 - Celery worker (for AI processing)
celery -A config worker -l info
# Terminal 3 - Celery beat (for scheduled tasks)
celery -A config beat -l info
TalentPulse is organized into 6 modular Django apps:
| App | Purpose |
|---|---|
apps.accounts |
Multi-tenant authentication, organizations, teams, email verification |
apps.jobs |
Job postings, workflow stages, screening questions |
apps.candidates |
Candidate profiles, experience, education, skills |
apps.resumes |
Resume upload, AI parsing, text extraction, embeddings |
apps.matching |
AI candidate-job matching, scoring, applications |
apps.frontend |
Full web UI — public site, dashboard, job portal |
Upload resumes in PDF, DOCX, DOC, TXT, or RTF format. TalentPulse automatically extracts structured data using OpenAI GPT: contact information, professional summary, skills, work experience, education, certifications, and languages — all with a confidence score.
# Parsing happens automatically via Celery task
# Manual trigger:
from apps.resumes.services import AIResumeAnalyzer
analyzer = AIResumeAnalyzer()
result = analyzer.analyze(resume_text)
Every applicant is scored across four weighted dimensions:
The AI generates explainable reasoning with strengths, concerns, and recommendations.
Every organization gets isolated data. The OrganizationMiddleware attaches the current org to every request:
# All queries are automatically scoped
jobs = Job.objects.filter(organization=request.organization)
Ships with 5 languages: English, Dutch, Spanish, German, and French. URL-based language switching works out of the box.
# Add a new language in settings.py
LANGUAGES = [
('en', 'English'),
('nl', 'Nederlands'),
('es', 'Español'),
('de', 'Deutsch'),
('fr', 'Français'),
('pt', 'Português'), # Add new language
]
Then run: python manage.py makemessages -l pt && python manage.py compilemessages
TalentPulse includes a full REST API built with Django REST Framework:
GET /api/v1/jobs/ # List jobs
POST /api/v1/jobs/ # Create job
GET /api/v1/jobs/{id}/ # Job detail
PUT /api/v1/jobs/{id}/ # Update job
GET /api/v1/candidates/ # List candidates
POST /api/v1/candidates/ # Create candidate
GET /api/v1/candidates/{id}/ # Candidate detail
GET /api/v1/applications/ # List applications
POST /api/v1/applications/ # Create application
PATCH /api/v1/applications/{id}/ # Update status
Authentication uses SimpleJWT:
# Get token
curl -X POST /api/v1/token/ -d '{"email":"user@example.com","password":"pass"}'
# Use token
curl -H "Authorization: Bearer <token>" /api/v1/jobs/
Configure Stripe for subscription billing:
STRIPE_PUBLIC_KEY=pk_live_...
STRIPE_SECRET_KEY=sk_live_...
STRIPE_WEBHOOK_SECRET=whsec_...
Plan tiers (Starter, Professional, Enterprise) control feature access and monthly resume processing limits.
| Variable | Description | Default |
|---|---|---|
SECRET_KEY |
Django secret key | Required |
DATABASE_URL |
PostgreSQL connection string | Required |
REDIS_URL |
Redis connection string | redis://localhost:6379/0 |
OPENAI_API_KEY |
OpenAI API key for AI features | Optional |
OPENAI_MODEL |
GPT model for parsing/matching | gpt-4o |
STRIPE_SECRET_KEY |
Stripe secret key | Optional |
EMAIL_HOST |
SMTP server | localhost |
ALLOWED_HOSTS |
Comma-separated allowed hosts | localhost |
When the OpenAI API key is not configured or the API is unavailable, TalentPulse automatically falls back to regex-based resume extraction and heuristic scoring — processing never stops.
DEBUG=False and configure ALLOWED_HOSTScollectstatic and serve static files via nginxSECURE_SSL_REDIRECT=True and HSTS headersserver {
server_name yourdomain.com;
location /static/ {
alias /path/to/TalentPulse/staticfiles/;
}
location /media/ {
alias /path/to/TalentPulse/media/;
}
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
For questions, bug reports, or feature requests, visit the DjangoZen Support Center at djangozen.com/contact/.
© 2026 DjangoZen. All rights reserved.
Product: TalentPulse
Type: SaaS Application
Version: 1.0
Updated: Mar 20, 2026