Multi-tenant, Sub-domain driven, AI-Powered HR Management Platform
IIT Madras • Academic Project • Software Engineering (BSCS3001) • Team 10
Features · Tech Stack · Local Setup · Deployment · Docs · Team
WorkZone.tech is a multi-tenant, AI-powered HR platform that automates recruitment, employee management, learning workflows, and support with company-specific subdomains, role-based dashboards, and a full GenAI layer including AI interviews, resume ranking, and an HR helpdesk chatbot.
- Python 3.11+ with
uv - Node.js 18+
- Docker (for ChromaDB)
- Cloud PostgreSQL (GCP Cloud SQL / AWS RDS / Supabase)
- Cloud Redis (GCP Memorystore / AWS ElastiCache / Upstash)
- Go 1.25+ (production only)
- Cloudflare domain
# Backend
cp server/.env.example server/.env
nano server/.env
# Frontend
cp client/.env.local.example client/.env.local
nano client/.env.localserver/.env:
SERVER_IP=localhost
FRONTEND_URL=http://localhost:3000
LOG_LEVEL=INFO
# Cloud Database
SYNC_DATABASE_URL=postgresql://user:pass@cloud-host:5432/workzone
ASYNC_DATABASE_URL=postgresql+asyncpg://user:pass@cloud-host:5432/workzone
# Cloud Redis
REDIS_URL=redis://:password@cloud-host:6379/0
# ChromaDB (local)
CHROMA_HOST=localhost
CHROMA_PORT=8001
# Google Cloud
GOOGLE_PROJECT_ID=your-project
GOOGLE_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----..."
GOOGLE_CLIENT_EMAIL=service@project.iam.gserviceaccount.com
GCS_BUCKET_NAME=your-bucket
# LLM
GOOGLE_API_KEY=your-key
# JWT
JWT_SECRET_KEY=your-64-char-secret
JWT_ALGORITHM=HS256
DOMAIN_NAME=localhost
# Razorpay
RAZORPAY_KEY_ID=rzp_test_xxxxx
RAZORPAY_KEY_SECRET=secret
RAZORPAY_WEBHOOK_SECRET=webhook-secret
# SMTP
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_NAME=Workzone
SMTP_USER=your-email@gmail.com
SMTP_PASSWORD=app-passwordclient/.env.local:
NEXT_PUBLIC_BACKEND_URL=http://localhost:8000
BACKEND_URL=http://localhost:8000
NEXT_PUBLIC_FRONTEND_URL=http://localhost:3000
FRONTEND_URL=http://localhost:3000
NEXT_PUBLIC_PLATFORM_URL=http://localhost:3000
NEXT_PUBLIC_DOMAIN_NAME=localhost
NEXT_PUBLIC_GCS_BUCKET_NAME=your-bucket
NEXT_PUBLIC_RAZORPAY_KEY_ID=rzp_test_xxxxx# Backend
cd server && uv sync
# Frontend
cd client && npm installcd server
uv run alembic -c alembic.ini upgrade head
uv run alembic -c alembic_tenant.ini upgrade headdocker run -d \
--name chromadb \
--restart always \
-p 8001:8000 \
-v $(pwd)/chroma_data:/chroma/chroma \
chromadb/chroma# Terminal 1 - Backend
cd server
uv run uvicorn src.main:app --reload --host 0.0.0.0 --port 8000
# Terminal 2 - Celery
cd server
celery -A src.core.celery worker --loglevel=info
# Terminal 3 - Frontend
cd client
npm run dev# SSH into VM
ssh user@vm-ip
# Install dependencies
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt update && sudo apt install -y nodejs git docker.io
curl -LsSf https://astral.sh/uv/install.sh | sh
source ~/.bashrc
# Clone repo
git clone YOUR_REPO workzone
cd workzonenano server/.envUse production values (cloud DB URLs, production keys, domain: YOUR_DOMAIN.com)
nano client/.env.localUse production URLs (https://YOUR_DOMAIN.com)
cd server
uv run alembic -c alembic.ini upgrade head
uv run alembic -c alembic_tenant.ini upgrade headcd client
npm install --production
npm run buildcd ~
sudo docker run -d \
--name chromadb \
--restart always \
-p 8001:8000 \
-v ~/chroma_data:/chroma/chroma \
chromadb/chromaCreate log directory:
sudo mkdir -p /var/log/workzone
sudo chown $USER:$USER /var/log/workzonesudo nano /etc/systemd/system/workzone-backend.service[Unit]
Description=Workzone Backend
After=network.target
[Service]
Type=simple
User=YOUR_USERNAME
WorkingDirectory=/home/YOUR_USERNAME/workzone/server
Environment="PATH=/home/YOUR_USERNAME/workzone/server/.venv/bin:/usr/bin"
ExecStart=/home/YOUR_USERNAME/workzone/server/.venv/bin/uvicorn src.main:app --host 0.0.0.0 --port 8000 --workers 4
Restart=on-failure
StandardOutput=append:/var/log/workzone/backend.log
StandardError=append:/var/log/workzone/backend.log
[Install]
WantedBy=multi-user.targetsudo nano /etc/systemd/system/workzone-celery.service[Unit]
Description=Workzone Celery
After=network.target workzone-backend.service
[Service]
Type=simple
User=YOUR_USERNAME
WorkingDirectory=/home/YOUR_USERNAME/workzone/server
Environment="PATH=/home/YOUR_USERNAME/workzone/server/.venv/bin:/usr/bin"
ExecStart=/home/YOUR_USERNAME/workzone/server/.venv/bin/celery -A src.core.celery worker --loglevel=info --concurrency=4
Restart=on-failure
StandardOutput=append:/var/log/workzone/celery.log
StandardError=append:/var/log/workzone/celery.log
[Install]
WantedBy=multi-user.targetsudo nano /etc/systemd/system/workzone-frontend.service[Unit]
Description=Workzone Frontend
After=network.target
[Service]
Type=simple
User=YOUR_USERNAME
WorkingDirectory=/home/YOUR_USERNAME/workzone/client
Environment="NODE_ENV=production"
ExecStart=/usr/bin/npm start
Restart=on-failure
StandardOutput=append:/var/log/workzone/frontend.log
StandardError=append:/var/log/workzone/frontend.log
[Install]
WantedBy=multi-user.targetsudo systemctl daemon-reload
sudo systemctl enable workzone-backend workzone-celery workzone-frontend
sudo systemctl start workzone-backend workzone-celery workzone-frontend
# Check status
sudo systemctl status workzone-backend
sudo systemctl status workzone-celery
sudo systemctl status workzone-frontendwget https://go.dev/dl/go1.25.1.linux-amd64.tar.gz
sudo tar -C /usr/local -xvf go1.25.1.linux-amd64.tar.gz
rm go1.25.1.linux-amd64.tar.gz
echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc
source ~/.bashrc
go install github.com/caddyserver/xcaddy/cmd/xcaddy@latest
~/go/bin/xcaddy build --with github.com/caddy-dns/cloudflare
sudo mv caddy /usr/bin/caddy
sudo chown root:root /usr/bin/caddy
sudo chmod 755 /usr/bin/caddysudo mkdir -p /etc/caddy
sudo nano /etc/caddy/Caddyfile{
email YOUR_EMAIL@example.com
admin localhost:2019
on_demand_tls {
ask http://127.0.0.1:8000/api/platform/caddy-ask/
}
}
*.YOUR_DOMAIN.com, YOUR_DOMAIN.com {
tls {
dns cloudflare YOUR_CLOUDFLARE_API_TOKEN
}
handle /api* {
reverse_proxy 127.0.0.1:8000
}
handle {
reverse_proxy localhost:3000
}
}sudo nano /etc/systemd/system/caddy.service[Unit]
Description=Caddy
After=network.target
[Service]
Type=notify
User=root
ExecStart=/usr/bin/caddy run --config /etc/caddy/Caddyfile --adapter caddyfile
ExecReload=/usr/bin/caddy reload --config /etc/caddy/Caddyfile --adapter caddyfile
TimeoutStopSec=5s
LimitNOFILE=1048576
AmbientCapabilities=CAP_NET_BIND_SERVICE
[Install]
WantedBy=multi-user.targetsudo systemctl daemon-reload
sudo systemctl enable caddy
sudo systemctl start caddy
sudo systemctl status caddysudo apt install ufw -y
sudo ufw allow ssh
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enablecd ~/workzone
git pull
cd server
uv sync
uv run alembic -c alembic.ini upgrade head
uv run alembic -c alembic_tenant.ini upgrade head
sudo systemctl restart workzone-backend workzone-celerycd ~/workzone
git pull
cd client
npm install --production
npm run build
sudo systemctl restart workzone-frontend# Real-time
sudo journalctl -u workzone-backend -f
sudo journalctl -u workzone-celery -f
sudo journalctl -u workzone-frontend -f
# Last 50 lines
sudo journalctl -u workzone-backend -n 50
# View log files
tail -f /var/log/workzone/backend.log
tail -f /var/log/workzone/celery.logsudo systemctl restart workzone-backend
sudo systemctl restart workzone-celery
sudo systemctl restart workzone-frontend
sudo systemctl restart caddy# View logs
sudo docker logs chromadb -f
# Restart
sudo docker restart chromadb
# Stop/Start
sudo docker stop chromadb
sudo docker start chromadb| Category | Technologies Used |
|---|---|
| Frontend | Next.js, React, TypeScript, Turbopack, Tailwind CSS, PostCSS, shadcn/ui, Radix UI, Framer Motion, Razorpay |
| Backend (Core) | FastAPI, Python 3.12+, Uvicorn (ASGI), Pydantic |
| Database & ORM | PostgreSQL, SQLAlchemy (Async), Alembic, asyncpg, psycopg2-binary |
| Authentication & Security | python-jose (JWT), bcrypt, cryptography |
| Task Queue / Background Jobs | Celery, Redis |
| Cloud Services | Google Cloud Storage, Google Text-to-Speech, Google Speech-to-Text |
| AI / ML / NLP | Gemini (Google Generative AI), ChromaDB, spaCy, yake |
| Document Processing | PyMuPDF, PyPDF2, pdf2image, Tesseract OCR, pytesseract, ReportLab, Pillow |
| Audio Processing | pydub, ffmpeg |
| Infrastructure | Docker, Redis, PostgreSQL, Tesseract OCR, ffmpeg |
| Project Management & Productivity | Jira, Notion, Canva, Google Drive, Git |
| Testing | Pytest |
WorkZone.tech delivers a complete, AI-driven HR ecosystem designed to automate and enhance major organizational workflows. Below are the core functional components of our platform:
- Each company gets its own isolated HR portal (company.workzone.tech)
- Supports custom domain mapping for a fully branded experience (hr.company.com)
- Secure, scalable architecture to enable multiple organizations on a single platform
- Admin can configure company policies, leave rules, holiday calendars, and document repositories
- Manage subscription plans, billing details, and domain settings from one place
- Invite employees, managers, and recruiters and manage user roles & access
- Auto-generated Job Descriptions (JDs) using the Smart Document Generator
- Automated email workflows for hiring communication
- AI-powered resume ranking with detailed feedback for rejected applicants
- Recruiters get structured candidate insights for faster decision-making
- First-round screening through AI-driven interviews (audio + text modes available) for quick candidate filtering
- Automatic question generation based on JD + resume
- Ask dynamic, follow-up questions based on candidate responses
- Generates structured evaluation summaries for recruiters
- Employees get a role-based dashboard tailored to their needs
- Personalized Learning Path Generator recommends relevant courses & skill upgrades
- Supports continuous upskilling and career development
- Chatbot answers HR policy–related questions instantly using GenAI
- If the employee is not satisfied, they can raise a support ticket
- Ticket routes to the recruiter/HR team for manual resolution
All project documentation is available on Notion.
Notion Docs Home: WorkZone.tech - Project Documentation Hub
The workspace includes milestone reports, MOMs, problem statements, demo video links, client presentation slides, team contribution details and all other project-related resources.
We are students of the IIT Madras BS Degree program, and this project was developed as part of the Software Engineering course (BSCS3001).
Team Details
We welcome contributions! You can:
- Report Issues
- Suggest features
- Submit PRs
- Contact any team member for collaboration
This project is licensed under the MIT License. You may use, modify, and distribute it with proper attribution.
Building the future of HR with AI-powered automation.
For feedback, suggestions, or collaboration, feel free to connect with us!