Can I vibecode Greenhouse?

NOT REALLY · don't bother
price variesbuild time a weekendcategory 🧑‍💼 hrreplaced by 0 people

An agent can absolutely build you a candidate tracker: stages, notes, a Kanban board, a scorecard form. That is maybe five percent of what Greenhouse is being paid for. The rest is job board syndication, a hosted careers page that survives traffic, interview scheduling against a dozen calendars, structured interview kits, permissioned access for hiring managers who are not you, audit trails, EEOC and OFCCP reporting, GDPR retention and deletion workflows, and a very long tail of HRIS and background check integrations. Hiring is also one of the most litigated processes in a company, which means the boring parts (who saw what, when, and what got deleted) are the product. Solo or two-person hiring is genuinely fine on a DIY tracker; anything with a legal surface is not.

the prompt
Build a local-only applicant tracker for a solo or two-person hiring pipeline. No cloud, no accounts, no telemetry.

Stack, non-negotiable:
- Next.js 15, App Router, TypeScript, Tailwind.
- SQLite via better-sqlite3, single file at ./data/ats.db. Schema in migrations run at boot.
- Resume/attachment files stored on local disk under ./data/files, referenced by path in the DB.
- No auth. This runs on localhost for one person.

Data model:
- roles: title, team, status (open/closed), created_at, notes markdown.
- candidates: name, email, phone, source (referral/inbound/outbound/agency), role_id, stage, created_at, archived_at nullable.
- stages are per-role and ordered: default Applied, Screen, Interview, Onsite, Offer, Hired, Rejected.
- notes: candidate_id, body markdown, created_at.
- scorecards: candidate_id, interview_name, per-attribute rating 1-4, overall recommendation (strong no/no/yes/strong yes), free text, created_at.
- attachments: candidate_id, filename, path, uploaded_at.
- events: append-only log of every stage change and field edit with timestamp. Never delete rows here.

UI:
- /roles list, /roles/[id] shows a Kanban board of that role's stages with drag and drop between columns.
- /candidates/[id] is the main screen: header with name, role, stage, source; tabs for Notes, Scorecards, Attachments, History (from events).
- Global search across candidate name, email, and note bodies. Use SQLite FTS5.
- Quick add: paste a name and email, pick a role, done in one modal.
- A per-role funnel count strip: how many in each stage, and median days in stage.

Also include:
- Structured interview kits: per-role, define a named interview with 3-6 attributes to rate. Scorecards are created from a kit so ratings stay comparable.
- CSV export of all candidates and scorecards, and a JSON dump of the whole DB.
- A retention helper: a page listing candidates archived more than N days ago with a one-click purge that deletes their files and PII but keeps an anonymized events row. Default N in .env.

Explicitly out of scope, do not build or stub:
- Email sending, calendar scheduling, job board posting, a public careers page, multi-user permissions, any OAuth.

Deliver a README with setup, `npm run dev`, and a seed script that creates two roles and eight fake candidates. Secrets and config in .env.example.

$ open in your agent (prompt prefilled, you press enter) or copy it raw · this prompt is generated from the build plan · improve it via PR

why people still pay

Because hiring is a multiplayer, legally observed process and a personal tracker is single player. The moment a hiring manager, a recruiter, a coordinator, and an external agency all need scoped access to the same pipeline, and the moment someone asks for adverse impact numbers or a candidate exercises a deletion request, the DIY build stops being a tracker and starts being an unfunded compliance project. Greenhouse also sits at the center of the recruiting tool graph: sourcing extensions, assessments, scheduling, background checks, and the HRIS all assume it exists. Ripping it out means rebuilding those seams by hand.

what you lose

xJob board syndication and a hosted careers page candidates can find

xInterview scheduling that reads real interviewer calendars

xMulti-user permissions, so hiring managers can review without seeing everything

xCompliance scaffolding: EEOC/OFCCP reporting, consent capture, GDPR retention and deletion, audit logs

xIntegrations with HRIS, background checks, assessments, and every recruiter tool your team already uses

prior art · use these instead of building, if you'd rather

Nothing worth pointing at. That's why the prompt exists.

share on X ↗"I just replaced Greenhouse with one prompt"
questions
Can I vibecode Greenhouse?

Not really. Greenhouse's value is not the code: The moat is everything that shows up when hiring becomes multiplayer and legally observed: permissions, audit trails, retention rules, and the integration graph every recruiter tool assumes. See the honest breakdown above.

How much does Greenhouse cost?

Greenhouse's pricing is usage-based or varies by plan · Greenhouse states cost depends on plan tier, hiring volume, organizational complexity, and features required; you must request a demo or contact sales..

What do I lose by replacing Greenhouse?

Honestly: Job board syndication and a hosted careers page candidates can find; Interview scheduling that reads real interviewer calendars; Multi-user permissions, so hiring managers can review without seeing everything; Compliance scaffolding: EEOC/OFCCP reporting, consent capture, GDPR retention and deletion, audit logs; Integrations with HRIS, background checks, assessments, and every recruiter tool your team already uses. If any of those are load-bearing for you, keep paying.

Is there an open-source alternative to Greenhouse?

No mature open-source alternative worth pointing at, which is exactly why the one-shot prompt on this page exists.

Every week, more subscriptions die.

New verdicts, new prompts, the week's most-doomed apps.
One email. Unsubscribe in one click.

free forever · no scanner spam · the prompt stays on the site, the deaths come to you

$weekly: what got a verdict, what died.