Developer Onboarding Guide
Welcome to the P99soft Recruitment Platform (Talent Acquisition Platform)! This guide is designed to get you oriented with the codebase, core tech stack, prerequisites, and how to gain repository access.
🔐 Repository Access Request
To start contributing, you must request permissions for two primary repositories:
- Talent-Acquisition-Platform (This Repository)
- Required Access: Read-Write (for development, feature branches, and pull requests).
- Piston Fork (
https://github.com/p99softadmin/piston.git)
- Required Access: Read-Only (used for standing up the self-hosted code execution sandbox).
How to request access:
Email or contact the engineering leads to request access:
🛠 Prerequisites & Tech Stack Documentation
A solid understanding of the following technologies is required to develop and debug features in the Talent Acquisition Platform.
1. Python (FastAPI Backend)
- How it’s used: The backend is built using FastAPI (Python 3.12). It provides a high-performance, asynchronous REST API.
- Key Concepts:
- Asynchronous Programming: Extensive use of
async/await for DB queries and network calls to ensure concurrency under load.
- Pydantic v2: Used for request validation, strict serialization, and schema definition (
backend/app/schemas/).
- SQLAlchemy 2.0 (Async): Database ORM configured with async sessions using
asyncpg to interact with PostgreSQL (backend/app/models/).
- Dependency Injection: Used heavily for checking route-level permissions, retrieving current database sessions, and authenticating JWTs (
backend/app/core/deps.py).
- Alembic: Database migrations framework (
backend/alembic/) to apply database changes safely and deterministically.
2. React (TypeScript Frontend)
- How it’s used: The frontend is a Single Page Application (SPA) built using React 18, Vite, and TypeScript.
- Key Concepts:
- Design Tokens & System: Styles are driven by CSS design tokens in
design-system/ mapping color palette, spacing, and typography elements. Ad-hoc Tailwind values are forbidden.
- State Management (Zustand): Client-side state (such as user credentials, active tokens, and permission lists) is managed via stores (e.g.,
authStore).
- Role-Based Access Control (RBAC): Frontend routes and UI components are guarded using permissions via standard helpers:
usePermission hook.
<PermissionGate> render wrapper.
<RoleGuard> router guard.
3. Piston (Self-Hosted Code Execution Engine)
- How it’s used: A self-hosted instance of Piston (from Engineer-man) runs as a containerized microservice. It is responsible for compiling and safely executing candidate-submitted code during online technical assessments.
- Key Concepts:
- Isolated Sandbox Execution: Candidate code is run inside secure container environments with strict memory and CPU limits, preventing malicious submissions from affecting the server.
- Multi-Language Support: Piston supports Python, JavaScript, TypeScript, Java, C, C++, Go, Rust, C#, Kotlin, PHP, Ruby, and Swift.
- Piston Service: The backend interacts with Piston via
app/services/piston_service.py to compile, package, execute code against test cases, and capture output streams.
4. Redis (Rate Limiting & Caching)
- How it’s used: Redis serves as an in-memory key-value database.
- Key Concepts:
- Rate Limiting: Used by FastAPI’s
slowapi extension to store request logs and enforce IP-based API rate limits (100 req/min).
- Broker Queue: Serves as the primary broker database and transport layer for our task queue (
arq).
5. arq (Asynchronous Task Queue)
- How it’s used: We use arq, a Python-based asynchronous job queue backed by Redis, to offload long-running computations from the HTTP request-response cycle.
- Key Concepts:
- Workers: Managed by the worker process (
backend/app/workers/settings.py) which runs concurrently with the FastAPI process.
- Common Asynchronous Jobs:
- Generating candidate score evaluations using LLMs (
assessment_jobs.py).
- Generating PDF offer letters (
offer_jobs.py).
- Ingesting emails and PDF documents from resume inboxes (
resume_inbox_jobs.py).
- Triggering Slack alerts and notification reminders (
slack_jobs.py).
- Running SQL query assessments (
sql_execution_jobs.py).
🚀 Next Steps
Once your access requests are granted, proceed to the Setup Guide to set up your local development environment.