Inspiration

We've all been there — it's 1am, you're on your fourth job board of the night, copy-pasting the same information into yet another form. It's demoralising enough on its own. But what made it worse was knowing our friends were doing the exact same thing, alone, at the exact same time. We kept asking ourselves why job hunting had to be such a solitary, repetitive grind. JobSync started as a simple question: what if you didn't have to do it alone?

What it does

JobSync lets you form a group with friends, classmates, or anyone in your network who's also on the job hunt. When anyone in the group finds a role worth applying to, everyone applies — automatically. Each person gets a fully personalised application built from their own profile. Their own cover letter. Their own answers to company-specific questions. Not a copy of someone else's — theirs. One job posting, one click, your whole group in the running

How we built it

We built JobSync as a full stack web app over 24 hours with a team of three. The backend runs on Node.js with a PostgreSQL database hosted on Supabase, which also handled our authentication and row-level security policies. The AI layer uses Claude to generate personalised cover letters and answer company-specific questions using each person's stored profile. The frontend is built in Next.js with Tailwind.

Challenges we ran into

The hardest technical challenge was the RLS policies in Supabase. Getting row-level security right across a many-to-many group membership structure — where access to one table depends on a join through two others — took more iterations than we expected, including tracking down a recursive policy loop that only surfaced at runtime. On the automation side, making the form filler work reliably across different job board layouts was genuinely difficult. Greenhouse, Lever, and Workday all structure their forms differently, and building a field detection system that could handle all three without brittle hardcoded selectors pushed us right to the wire. We also had to think carefully about the chicken-and-egg problem of inserting a job and linking it to a group atomically — we solved it with a Postgres function that wraps both inserts in a single transaction.

Accomplishments that we're proud of

Honestly, shipping something end-to-end in 24 hours that actually works. The moment we tested the full flow for the first time — one person submitting a job, watching the queue spin up, and seeing personalised applications land for every member of the group — that felt like something real. We're also proud of how the AI personalisation turned out. It would have been easy to generate a generic cover letter and swap in the person's name. Instead, each output genuinely reflects the individual's experience and background in a way that doesn't read like it was written by a machine.

What we learned

That database security is genuinely hard to get right and deserves more time than you think it does. We also learned a lot about prompt design — giving Claude structured profile data rather than a raw resume blob made a significant difference in output quality. And on the team side, splitting cleanly into backend, frontend, and AI/automation tracks from the very start was the only reason we got to a working product in time. Any overlap in responsibilities would have killed us.

What's next for jobsync

The form filler currently supports the three most common ATS platforms, but we want to extend that coverage significantly. We also want to build out the group experience further — shared dashboards where everyone can see the status of applications in real time, who's heard back, who's got interviews. Longer term, we think there's something interesting in the network effects here: the bigger your group, the more jobs get surfaced, the better everyone's chances. We want to lean into that. And we want to give users more control over the AI — letting people fine-tune their tone, save preferred phrasings, and build up a personal voice over time rather than regenerating from scratch every application

Built With

  • claude
  • nextjs
  • supabase
  • tailwind
  • tsx
Share this project:

Updates