StartupKid Mentors
A multi-track recruitment platform for an education company
- 4 tracks
- 500+ candidates
- 83% storage reduction
What it is
An end-to-end hiring system for StartupKid, where I run learning. A candidate goes from a public application form through video screening, dual review, interviews, availability and contract, across four independent tracks: mentors, sales, support and service. About ten operators run it, each limited to their own role.
The problem
Recruitment is a state machine pretending to be an inbox. Every candidate sits at a stage, every stage has an owner and a clock, and when that state lives in a spreadsheet and four email accounts it fails silently. Nobody announces a dropped candidate; the candidate simply stops hearing back. I could see the bottleneck because I was standing in it.
The hard part
A successful send is not a delivery. The first version marked a message sent when the email API accepted it, so a bounced rejection showed as delivered and an “already sent” guard blocked the retry. Outbound state is now driven by webhook confirmation, and the interface refuses to show a bounced message as delivered.
Candidates mistype their own address. A real applicant wrote gamil.com and would never have heard back. Format validation now gates the pipeline, with a nudge on a near miss.
Phone videos are right for assessment and heavy to keep. A retention policy purges the media of rejected candidates and keeps the decision record: 1,266 objects removed, zero failures, 41 GB down to 6.9 GB. The panel says so; a blank player looks like a bug.
Stack
- Stack
-
- TanStack Start
- TypeScript
- Supabase
- Postgres
- Resend
- Tailwind
- shadcn/ui