Skip to content
Nitin3560Public

About

AI-powered job search platform for job aggregation, candidate matching, resume tailoring, and application management.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

CareerOS

A full-stack job search and matching platform that aggregates software engineering roles, ranks opportunities against a candidate profile, and manages the workflow from job discovery to application.

Recent jobs: Browse the U.S. technology jobs feed.

CareerOS was built to solve a simple problem: searching for software engineering jobs across dozens of companies quickly becomes fragmented.

Jobs live across different applicant tracking systems. The same search is repeated across company career pages. Relevant roles have to be manually compared against a resume, and the information needed for an application ends up spread across multiple tools.

CareerOS brings that workflow into one system.

It continuously collects jobs from supported company sources, normalizes them into a common data model, stores them in PostgreSQL, and ranks relevant opportunities against a candidate profile.


Demo

End-to-end CareerOS demonstration showing resume upload, AI-ranked job matches, and per-job resume tailoring.

CareerOS Demo

Watch the full demo video


Key Capabilities

  • Job ingestion - collects roles from supported company sources.
  • Source adapters - normalizes Greenhouse, Lever, and Ashby jobs.
  • Resume parsing - converts uploaded resumes into structured profiles.
  • Job matching - ranks roles against candidate skills and experience.
  • Match caching - reuses valid scores instead of recomputing.
  • Background workers - moves slow ingestion and matching work out of API requests.
  • Resume tailoring - creates per-job resume versions.
  • Application tracking - stores applied jobs, status, and notes.

Architecture

CareerOS separates external job ingestion, persistent storage, candidate matching, background processing, caching, API delivery, and the frontend application.

CareerOS End-to-End Architecture

The architecture keeps the major workloads independent.

External source failures should not control frontend availability.

Matching should not require fetching jobs from external companies.

Background ingestion should not block API requests.

The frontend should not need to understand how individual applicant tracking systems represent jobs.

See Architecture for the complete system design.


Why CareerOS?

CareerOS started as a way to reduce the repetitive work involved in searching company career pages.

The interesting engineering problem quickly became larger than job scraping.

Different companies expose jobs differently.

External sources fail.

The same jobs can appear during multiple ingestion runs.

Job corpora grow continuously.

Matching becomes expensive if every request repeatedly loads and ranks thousands of records.

Long-running ingestion should not block user requests.

Cached results can become stale or invalid.

Those problems pushed CareerOS toward a system built around clear boundaries:

Collect
   |
   v
Normalize
   |
   v
Persist
   |
   v
Match
   |
   v
Cache
   |
   v
Serve

Each stage solves a different problem.


Job Ingestion Pipeline

CareerOS treats external job sources as unreliable systems.

The ingestion pipeline therefore separates source discovery from persistent job storage.

Configured Companies
        |
        v
Source Resolution
        |
        v
ATS Adapter
        |
        v
Fetch Jobs
        |
        v
Normalize
        |
        v
Duplicate Detection
        |
        v
PostgreSQL

Source adapters isolate provider-specific formats.

The rest of CareerOS works with normalized job records rather than Greenhouse-, Lever-, or Ashby-specific payloads.

This makes additional sources easier to introduce without redesigning the matching system.


Matching Engine

The matching system is designed around narrowing the candidate set before performing more expensive ranking work.

Instead of repeatedly loading the complete job corpus and filtering it entirely inside application code, database operations are used to eliminate irrelevant candidates earlier.

Job Corpus
    |
    v
Database Filtering
    |
    v
Candidate Jobs
    |
    v
Matching / Ranking
    |
    v
Top Matches

This keeps the amount of data entering later matching stages small as the stored job corpus grows.


Performance

CareerOS includes several performance-oriented design choices:

  • database-side filtering and ranking,
  • batched duplicate checks during ingestion,
  • Redis-backed caching,
  • asynchronous background workers,
  • reusable cached match results,
  • separation of external network work from request handling.

These optimizations focus on reducing unnecessary application work rather than simply adding more infrastructure.

Detailed measurements and methodology are documented in Performance Baseline.


Technology Stack

Layer Technology
Frontend Next.js
Backend FastAPI
Database PostgreSQL
Cache Redis
Background Jobs RQ
Job Sources Greenhouse, Lever, Ashby adapters
Containerization Docker
API Style REST

Repository Structure

careeros/
|
+-- apps/
|   +-- api/                 # FastAPI backend
|   +-- web/                 # Next.js frontend
|
+-- docs/                    # Architecture and engineering documentation
+-- scripts/                 # Development and operational utilities
+-- docker-compose.yml
+-- docker-compose.prod.yml
+-- .env.example
+-- README.md

Engineering Highlights

  • Built a multi-source ingestion architecture that isolates ATS-specific behavior behind source adapters.
  • Decoupled long-running ingestion from request handling using Redis-backed background workers.
  • Moved matching filters and ranking closer to PostgreSQL to reduce unnecessary application-side processing.
  • Added persistent caching for frequently requested matching results.
  • Added duplicate detection and normalization to make repeated ingestion runs safer.
  • Containerized application services for reproducible local and deployment environments.
  • Structured the frontend and backend as independent applications with a REST API boundary.

Development

Clone the repository:

git clone https://github.com/Nitin3560/careeros.git
cd careeros

Create the local environment configuration:

cp .env.example .env

Start the local services:

docker compose up --build

Quickstart documentation will be updated soon.

Bulk collection poller rollout

Run these steps in order from the repository root. The poller collects raw jobs and normalized descriptions only; classification and matching stay downstream.

# 1. Schema and legacy board links
cd apps/api && alembic upgrade head && cd ../..
python scripts/backfill_job_board_ids.py
python scripts/backfill_job_descriptions.py --batch-size 500 --sleep-between-batches 1.0
python scripts/assign_board_tiers.py

# 2. Capacity and real-source quality checks
python scripts/load_test_poller.py
python scripts/smoke_test_sources.py --database-url "$DATABASE_URL"

# 3. One full shadow sweep (expiry remains off)
POLLER_EXPIRY_ENABLED=false python scripts/run_poller.py

# 4. In another terminal, inspect coverage and quality
python scripts/coverage_report.py

Run either the Docker poller service or the manual command, never both. The poller holds a PostgreSQL advisory lock and exits non-zero if another instance is active. It claims due boards in batches of 300 by default (POLLER_BATCH_SIZE) and caps Greenhouse detail requests at 200 per board (POLLER_DETAIL_CAP_PER_BOARD).

Never run the description backfill during the first full poller sweep. Both jobs write to the jobs table, and running them together can saturate PostgreSQL WAL and Docker disk I/O. Finish the initial sweep first, then run the resumable backfill by itself, preferably overnight.

Legacy Greenhouse rows are deliberately skipped by the normal sweep. Refresh their descriptions separately with a resumable, rate-limited command:

python scripts/refresh_legacy_greenhouse.py --rate 5 --batch-size 500

POLLER_CONCURRENCY defaults to 64. Use POLLER_BOARD_LIMIT and POLLER_ATS for bounded tests. After reviewing a clean full sweep, restart with POLLER_EXPIRY_ENABLED=true. Enable the daily cleanup only after that by setting POLLER_RETENTION_ENABLED=true and running scripts/retain_expired_jobs.py. The coverage report writes reports/coverage_report.json; focus on schedule lag, p50/p95 latency, source-level description quality, and first-seen freshness.


Documentation

Background-worker documentation will be updated soon.


Project Status

CareerOS is an actively developed MVP.

The core system includes job ingestion, persistent job storage, candidate matching, resume-aware workflows, background processing, caching, and the web application.

Current development is focused on hardening the system, improving observability and deployment workflows, and expanding measurable end-to-end evaluation.


Closing Remarks

CareerOS began as a tool for finding relevant software engineering jobs.

The larger engineering problem became building a system that could continuously collect information from unreliable external sources, normalize it, process it asynchronously, efficiently rank a growing dataset, and expose the results through a responsive application.

The result is more than a job scraper.

CareerOS is a full-stack job search system that turns fragmented company job data into a persistent, searchable, and ranked candidate workflow.

Recent U.S. Technology Job Openings

Auto-updated hourly from CareerOS. Last run: 2026-10-09 21:51 UTC. Showing U.S. software/AI/tech postings found in the last 7 days.

Speed: CareerOS refreshes every hour from company career pages, then records the first time each posting was found. Current feed size: 17 roles.

Eligibility: recent U.S. software, AI/ML, data, infrastructure, security, embedded, and related engineering roles with explicit posting evidence of no more than two years of required experience. Roles with missing, ambiguous, or greater-than-two-year requirements are excluded, as are internships, obvious non-technical roles, non-U.S. postings, and defense/clearance-restricted roles.

Quick links: Tier 1 · Tier 2 · Tier 3

Tier 1

Large public and established technology, financial, and enterprise companies.

Company Role Experience Posted Found Salary Apply
Roblox Software Engineer, Engine Systems
San Mateo, CA, United States
1 year 2026-10-09 1 min ago Apply
Roblox Software Engineer, Test Frameworks & Tooling
San Mateo, CA, United States
1 year 2026-10-09 1 min ago Apply
Stripe Software Engineer
Seattle, WA
1–2 years 2026-10-09 1 min ago Apply
Esri Software Engineer I - Front-End Engineer for ArcGIS Enterprise
Redlands, CA
1 year 2026-10-07 1 min ago Apply
Esri C++ Software Development Engineer II - Graph Algorithms
Redlands, CA
1 year 2026-10-06 1 min ago Apply
Amazon Software Development Engineer
Newark, New Jersey, USA
1 year 2026-10-01 1 min ago Apply
Esri DevOps Engineer I - ArcGIS Enterprise
Redlands, CA
1 year 2026-09-11 1 min ago Apply
Lyft Data Scientist
Seattle, WA
2 years 2026-09-10 1 min ago $129,709 - $192,000 Apply
Lyft Software Engineer
Seattle, WA
2 years 2026-09-09 1 min ago $149,240 - $192,000 Apply

Tier 2

Established mid-sized companies with meaningful engineering organizations.

Company Role Experience Posted Found Salary Apply
Chime Full-Stack Engineer, Human Agent Tooling
San Francisco, CA, USA
1 year 2026-10-02 1 min ago Apply
Chime Software Engineer, Infrastructure Platform
Chicago, IL, USA; New York, NY, USA; San Francisco, CA, USA
2 years 2026-10-02 1 min ago Apply
Chime Software Engineer, Infrastructure
Chicago, IL, USA; New York, NY, USA; San Francisco, CA, USA
2 years 2026-10-01 1 min ago Apply

Tier 3

Startups, early-stage companies, and smaller technology businesses.

Company Role Experience Posted Found Salary Apply
Altentechnologyusa SAP ABAP & BTP Full Stack Developer (Entry-Level)
Foster City, California, United States
0–2 years 2026-10-09 1 min ago $70,000 - 80,000 Apply
Twitch Software Engineer I
San Francisco, CA
1 year 2026-10-08 1 min ago Apply
Nimblerobotics Robotics Software Engineer
San Francisco, CA
1 year 2026-09-28 1 min ago $230,000/year Apply
Twitch Software Engineer I, Payments
San Francisco, CA
1 year 2026-09-18 1 min ago Apply
Oldmissioncapital Junior Trading Operations/DevOps Engineer
Chicago, IL, United States
0–2 years 2026-09-08 1 min ago $150,000 - $200,000 Apply

About

AI-powered job search platform for job aggregation, candidate matching, resume tailoring, and application management.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages