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.
End-to-end CareerOS demonstration showing resume upload, AI-ranked job matches, and per-job resume tailoring.
- 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.
CareerOS separates external job ingestion, persistent storage, candidate matching, background processing, caching, API delivery, and the frontend application.
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.
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.
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.
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.
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.
| 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 |
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
- 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.
Clone the repository:
git clone https://github.com/Nitin3560/careeros.git
cd careerosCreate the local environment configuration:
cp .env.example .envStart the local services:
docker compose up --buildQuickstart documentation will be updated soon.
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.pyRun 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 500POLLER_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.
- Architecture
- Engineering Design Decisions
- Job Ingestion Pipeline
- Candidate Matching Engine
- Performance Baseline
- Performance and Caching
- Quickstart
Background-worker documentation will be updated soon.
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.
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.
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
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 |
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 |
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 |

