TalentPulse

TalentPulse Documentation · v1.0

Overview

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.

Requirements

  • Python 3.12+
  • PostgreSQL 15+ with pgvector extension
  • Redis 7+ (for Celery task queue)
  • OpenAI API key (for AI features)
  • Docker & Docker Compose (recommended)

1. Extract and configure

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

2. Build and run

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

3. Access the application

  • Public site: http://localhost:8000
  • Admin panel: http://localhost:8000/admin/

Manual Installation

1. Create virtual environment

python -m venv venv
source venv/bin/activate  # Linux/Mac
venv\Scriptsctivate     # Windows
pip install -r requirements.txt

2. Database setup

# 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

3. Start services

# 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

Project Structure

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

Key Features

AI Resume Parsing

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)

AI Candidate-Job Matching

Every applicant is scored across four weighted dimensions:

  • Skills Match — Required + preferred skill overlap
  • Experience Match — Years and seniority alignment
  • Education Match — Degree hierarchy comparison
  • Semantic Match — Cosine similarity via pgvector embeddings

The AI generates explainable reasoning with strengths, concerns, and recommendations.

Multi-Tenant Architecture

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)

Internationalization (i18n)

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

REST API

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/

Stripe Billing

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.

Configuration

Environment Variables

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

AI Fallback

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.

Deployment

Production Checklist

  1. Set DEBUG=False and configure ALLOWED_HOSTS
  2. Use PostgreSQL with pgvector extension
  3. Configure Redis for Celery
  4. Set up Celery worker and beat as systemd services
  5. Run collectstatic and serve static files via nginx
  6. Configure HTTPS with SSL certificate
  7. Set SECURE_SSL_REDIRECT=True and HSTS headers

Nginx Configuration

server {
    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;
    }
}

Support

For questions, bug reports, or feature requests, visit the DjangoZen Support Center at djangozen.com/contact/.


© 2026 DjangoZen. All rights reserved.

Info

Product: TalentPulse

Type: SaaS Application

Version: 1.0

Updated: Mar 20, 2026


All Documentation