Source. An open-source applicant tracking system built to match commercial tools like Lever, feature for feature.
- Role
- Founder · product, design and engineering
- Platform
- Web, self-hosted
- Status
- Launched
- Stack
- Next.js 16, TypeScript, Prisma, PostgreSQL, Auth.js, Tailwind CSS v4, Tesseract.js, Docker
Overview
Source is an open-source applicant tracking system. It covers the whole hiring loop, from job posting to signed offer, plus the candidate CRM behind it. The goal was to match the commercial tools feature for feature, and ship it as something a company can run and own.
Why I built it
Recruiting data is some of the most sensitive data a company holds: candidate details, compensation, interview feedback, hiring decisions. Teams in regulated industries, in the EU and in the public sector have good reasons to host it themselves. The commercial tools have converged on a common feature set, but the open-source options stopped at the basics, without scheduling automation, structured interviews, offer approvals or a CRM at the same depth.
What it does
- The full hiring loop. Postings and hosted careers pages, an apply flow that reads PDF, Word, ODT, RTF and plain-text resumes, a kanban pipeline, interview invites, scorecards and offers.
- A candidate CRM. One contact with many opportunities, full-text search across profiles, resumes and notes, and duplicate merging.
- Interview intelligence. Transcripts attach to candidates and interviews, and Ask AI answers questions across them, citing the candidates.
- An agent that flags late replies and overdue scorecards and drafts the follow-up for you to approve.
- Migration. Brings over full history from ten other ATSs through their APIs, resumable and safe to re-run, after you review the stage mapping.
- Compliance in the core. GDPR consent, subject-access exports and retention rules, never paywalled.
How it’s built
It’s one Next.js 16 app in TypeScript: the interface, server actions and a
public REST API with signed webhooks, on Prisma and Postgres with Auth.js for
sign-in. Postgres is the only hard dependency. docker compose up gives a
working install, and the same code deploys to Vercel with Neon.
Two decisions I’d make again. Resume text is extracted in-process with open-source libraries, and scanned resumes go through Tesseract in the background, so reading a file costs nothing and needs no API key. And the core has no prompts and calls no model. AI features send their material to a provider over a small open protocol: use Source’s provider or run your own. With neither, the AI features don’t appear.
Where it is now
Source is live. The core is public on GitHub under AGPL-3.0 and self-hosts for free. The hosted version at source-ats.vercel.app runs the infrastructure, email and AI for you, and has a demo workspace with sample candidates that needs no account. The rule I hold to is that customers pay for operations, never to unlock their own records.
- 1 / 6

The agent notices a hiring manager sitting on profiles and offers to draft the nudge. Nothing sends until you approve it. - 2 / 6

Each role and department gets its own hiring profile, sharpened by every hire or pass and the reason for it. - 3 / 6

The brand kit is generated from code, and each favicon size is drawn on its own pixel grid so the dither stays crisp. - 4 / 6

The dashboard: drafted follow-ups for candidates who went quiet. - 5 / 6

The pipeline across every open role. - 6 / 6

Reports that say what needs attention, and what to do next.