KarStack
A job hunting platform featuring a Turborepo monorepo with Next.js web and dashboard applications, powered by a Python FastAPI and SQLModel backend.

Problem & solution scope
KarStack is an end-to-end recruitment platform and career intelligence aggregator. It continuously crawls and normalizes tech job postings across Iranian hiring boards into a centralized database, offering advanced search filters (tech stack, salary range, remote status, seniority), applicant tracking, and administration tools.
System architecture
Polyglot Monorepo with Relational Ingestion EngineStructured as a Turborepo monorepo housing a Python FastAPI REST API with SQLModel/PostgreSQL and three Next.js applications (Public Web, User Dashboard, Admin Dashboard). Shared UI design tokens, Radix UI primitives, and TypeScript types are managed in shared workspace packages.
System Components
KarStack API Engine
Python 3.14 / FastAPI / SQLModel / PostgreSQLImplements business logic, job normalization schemas, search indexing, and JWT-authenticated candidate APIs.
Shared UI Package (@packages/ui)
React / Radix UI / Tailwind CSS v4Single source of truth for design tokens, typography, form inputs, and modal components across web apps.
Public Web Portal
Next.js App RouterHigh-performance search interface with server-side rendered job listings, SEO-optimized company profiles, and quick filters.
Candidate & Admin Dashboards
Next.js Client DashboardsRole-based portals for saved searches, application status management, and catalog scraper health monitoring.
Data & Execution Flow
Job Ingestion & Parsing
Scheduled workers fetch listings from tech hiring boards and parse raw HTML into structured SQLModel entities.
Tagging & Normalization
Extracts required tech stacks (e.g. Python, React, Docker), salary brackets, and remote work classifications.
Relational Indexing
Persists to PostgreSQL using psycopg3 driver with optimized indexes on skills, location, and date.
Multi-App Delivery
Public site serves SEO-ready job pages while dashboards consume authenticated endpoints for candidate tracking.
Engineered capabilities
Structured Job Normalization: Unifies disparate posting formats into a clean schema with parsed skill requirements.
Multi-Workspace Monorepo: Single repository coordinating 3 Next.js applications and shared UI design system packages.
Strict Postgres Target: Built specifically for PostgreSQL 17 with psycopg3 driver for maximum query performance.
Two-Stack Docker Architecture: Separate dev and production compose configurations with healthchecks and auto-migrations.
Dual Dashboard Capabilities: Dedicated portals for job-seeker workflows and administrative oversight.
Engineering trade-offs
SQLModel over Raw SQLAlchemy
Combines Pydantic data validation with SQLAlchemy ORM models, eliminating type duplication between API input schemas and database tables.
Single Next.js Dockerfile for Multiple Apps
Designed a multi-target Dockerfile that builds all three frontend workspaces in one pass via Turborepo caching.
Docker Dev Stack Initialization
docker compose -f docker-compose.dev.yml up -d --build
# Web app running on http://localhost:3000
# Admin dashboard on http://localhost:3001
# API engine on http://localhost:8000