Skip to content

Just close the loop. I'm building a mini ATS so I couldn't ghost people

close-the-loop-aq.pngeveryone who has ever applied for a job knows this feeling.

you send the resume. you wait. three days. a week. two weeks. you write the follow-up email, the polite one, the one that took twenty minutes because you had to sound casual but not desperate. maybe you send a second one. shorter. more desperate. then the slow realization settles in. nobody’s coming. the role might be filled. might not be. you’ll never know. you’ve been ghosted.

it’s the most common experience in hiring. in 2025, with everything we have, it’s still completely normal.

I hated it when it happened to me. and now i’m on the other side.

we need to hire four or five people. good people. the kind worth building a proper process around because we’re going to keep recruiting for good people forever.

So I opened Teamtailor. JazzHR. Workable, a few others. it wasn’t just the pricing, though the pricing was its own kind of comedy. it was the bulk. the weight of it. every single one felt like moving into someone else’s fully furnished house and being handed a manual for appliances you didn’t choose and don’t want.

configure your pipeline stages. set up your approval workflows. map your departments. connect your hris.

I just want to post a role, see who applies, talk to the good ones, and not disappear on the rest. that’s it. that’s the whole job.

none of those tools were built for that. they were built for hr teams with dedicated administrators and software budgets that could feed a small village. we are not that.

So I closed the tabs and opened my laptop.

here’s the thing i had to admit to myself. i understand why companies ghost.

it’s not that hiring managers are bad people. it’s that the friction is real. when your ats makes it harder to say no than to say nothing, when there’s no obvious button, no simple flow, when rejecting someone requires three clicks and a dropdown and a reason code from a list that doesn’t match reality, decent people take the path of least resistance.

which is silence.

the ghost isn’t always malice. sometimes it’s just a terrible ui.

so that was the first constraint i built around. one click. candidate rejected. system sends the notification. they know what happened. loop closed. done.

the ui is the moral position. not a feature. a decision about what kind of company we want to be.

just close the loop.

here’s the other thing most hiring managers won’t say out loud. a cv tells you almost nothing useful about a person.

it tells you where they worked. it tells you what they want you to think about where they worked. it does not tell you if they’re sharp, or honest, or curious.

so the candidate portal has five video questions. i debated between three and seven. five felt right. ten minutes of their time. enough to put a face to the resume. enough to ask the things a piece of paper can’t answer.

they upload their cv. they fill in the basics. then five questions, answered on video, right there in the portal. no scheduling. no back and forth. just show up and answer.

the ai on the backend scores the resume against the job description and builds a candidate profile. but the video is the thing i’ll actually watch. the cv is just context.

and once they submit, they can see everything. their application. which stage they’re in. any feedback we leave. other roles they can apply to. no void. no waiting and wondering. just a clean view of exactly where things stand.

that’s the candidate experience i always wanted and never got.

here’s the part that still surprises me a little, even as i type it.

i didn’t sit down with a blank document and start writing requirements. i have custom skills built into claude code for brainstorming and prd sessions. i fired those up, started from the raw idea, and started debating it. claude opus 4.7 led the session. we mapped the user stories, pressure-tested the assumptions, built the prd.

then i brought in codex for adversarial reviews. its whole job was to attack. find the holes. break the logic. tell me what was wrong before i wrote a single line of code.

this is how i work now. not one ai. a council. claude leads the heavy lifting. codex attacks. gemini, grok, minimax, kimia rotate in depending on what i need. different models think differently. the gap one misses, another catches.

two hours. prd done. architecture locked. user stories written. clickup board fully populated. repos created.

three years ago that was two weeks of solo work. fleshing out the idea alone. writing requirements in a google doc at 1am. arguing with yourself about edge cases nobody else will ever see. all of that, compressed into two hours with a council of ais doing the thinking with me.

people keep talking about ai as a coding tool. that’s the wrong frame entirely. it’s a thinking tool. the speed gain isn’t just in writing code. it’s in collapsing the messy, slow, uncertain part that comes before the code. that part used to take weeks. now it takes a morning.

fastapi and python on the backend. next.js on the front. supabase for the database. hetzner for hosting and server storage. still deciding between cloudflare r2 and hetzner s3 for file storage. tomorrow morning, the real work starts.

i’m not building this because i’m a better person than the hiring managers who ghosted me.

i’m building it because the tools now exist to remove the excuse. the friction that turns decent people into ghosts is a solvable problem. a good ui. a one-click reject. a system that automatically tells the candidate what happened. that’s all it takes to treat someone like a human being instead of a ticket that got lost in the queue.

you applied. we looked. it’s not the right fit right now. you’ll know that within days, not weeks. the loop is closed.

that’s not a feature. that’s the whole point.

~ aq