One master CV becomes a hundred scored, ATS-tailored applications — and nothing is sent until you approve it.
Five job sources pulled into one feed, every posting scored 0–100 against your profile with the reasons attached, then a truthful tailored CV and cover letter per role and a browser agent that submits only what you approve.
- Self-directed build · V1 complete
- 2026
- Recruitment tech
- AI platform, Automation

The situation
Applying for jobs well does not scale by hand. Tailoring a CV and writing a cover letter for one role takes the better part of an hour, so doing it properly for the hundred roles that actually fit takes a month nobody has. That forces a choice between two bad options: a handful of careful applications, which is too few to beat the odds, or a hundred generic ones, which get filtered out before a person reads them.
Then there is the re-keying. The same name, the same history, the same links, typed again into every portal, with a different form each time. It is hours a day of work that produces nothing on its own.
What we built
You upload one master CV. Everything after that is the system's job.
It reads your CV once. An LLM parses it into a structured profile — skills, experience, education, projects, seniority — against a strict schema, and you correct anything it read wrong. That profile is the single source of truth for everything downstream.
It brings the jobs to you. RemoteOK, Greenhouse and Lever through their public APIs, plus Indeed and Wellfound through accounts you connect yourself, normalized and deduplicated into one feed and scoped to the locations you actually work in — remote postings always kept. It runs daily on a schedule, or immediately when you ask.
It scores every job and tells you why. Two stages, in that order for a reason. A cheap embedding comparison in pgvector ranks the whole feed, then the model reads only the strongest candidates and scores those 0–100, returning the requirements you meet and the gaps you don't. Model judgement stays proportional to the shortlist rather than the feed, which is what keeps a hundred jobs a day affordable instead of a demo.
It writes the application. A tailored, ATS-oriented CV and a cover letter per job: skills reordered, bullets rewritten for that posting, and the keywords the job asks for wherever your history genuinely supports them.
It applies, once you say so. A Playwright agent handles Easy-Apply postings — opens the posting, uploads the CV, answers the basic questions, submits, and screenshots the confirmation as proof. Connected platforms are stored as encrypted browser session state, never a password.
It gets you ready for the interview. On request, the model researches the company and how it interviews for that role against live Google Search, and returns a company brief, the process to expect, and the five most likely questions with the sources it used attached, so you can check them rather than trust them.

While a run is in flight the dashboard shows the real work as named agents — scout, matcher, tailor, apply, interview coach — driven by actual task signals rather than a progress bar that fills on a timer. A card only appears while its work is genuinely running.
What we deliberately left out
No invented experience, enforced twice. The tailoring prompt is forbidden from inventing roles, skills, dates, employers or numbers, and a verification pass re-reads the finished CV against your master profile and removes any claim it cannot support. If a posting wants a keyword you don't have, the keyword is left out. A CV that wins a screen and loses the interview is worse than no application.
No autonomous applying. Every submission waits for you. Sending automatically was the easiest thing to build and the fastest way to spray a hundred weak applications under your own name.
No LinkedIn, and no Workday-style multi-page forms. LinkedIn's terms and anti-bot defenses make automating it a liability rather than a feature, so the feed is built from public APIs and platforms you connect yourself. Long multi-page ATS forms are a build of their own — V1 covers Easy-Apply and says so plainly.
The result
A run ends with a scored feed, tailored CVs and cover letters already written, and an approval queue — so the hour that used to go into each application goes into reading the queue instead. The pipeline tracks every application from draft through approved, submitted and answered, and reports the funnel, the score distribution and the response rate, so the next run is aimed by evidence rather than by feel.
Built with
- Next.js
- FastAPI
- PostgreSQL
- pgvector
- Celery
- Redis
- Playwright
- Gemini
Have something like this?
Tell me what the problem is on a 30-minute call. If it's a fit, discovery starts with a written scope and a fixed number — not an estimate that moves.