← All projects
liveSaaSlaunched Apr 2026

Multi-Country Job Applier

AI pipeline that scrapes, scores, tailors, and applies

A 5-stage pipeline (scrape → score → tailor docs → apply → notify) that covers Canada, Singapore, and Australia. Generates tailored CVs and cover letters via a local Ollama model and submits applications via email or Playwright-driven browser automation.

Open the live app

problem

Applying broadly across multiple countries means rewriting the CV for every posting and managing per-country quirks — Singpass, JobBank's `fglo=1` flag for international candidates, Seek Quick Apply, LinkedIn Easy Apply.

solution

FastAPI pipeline with country-specific scrapers (JobBank, Indeed, LinkedIn, MCF, Seek), a scoring model that ranks postings against your CV, an Ollama-powered tailor for CV and cover letter, and a Playwright submission layer with anti-detection (stealth JS, randomised user agents, cookie persistence).

architecture

submitJobBank/Indeed…Scrapers (Play…ScorerOllama tailorSubmission eng…PostgreSQLRedisNext.js dashbo…

external → compute → store → ui

outcome

One CV strategy, three countries covered, applications submitted on a schedule with a full audit trail. Adding a new country = adding one entry to `COUNTRY_REGISTRY`.

stack

FastAPINext.jsPostgreSQLRedisPlaywrightOllamaDocker

capabilities

  • Country-specific scraping (CA · SG · AU)
  • Opportunity scoring and de-duplication
  • AI-tailored CV and cover letter per posting
  • Browser automation with anti-detection
  • Email submission for jurisdictions that allow it
  • Per-application audit trail

lessons learned

  • 01Anti-detection is a moving target — stealth JS, randomised UAs, and cookie persistence buy time, not immunity.
  • 02A "relevant skills only" CV strategy beat the kitchen-sink CV in score-tracking. Recruiters skim; the AI was reflecting that.
  • 03Singapore's Singpass requirement broke the apply step — generating a clean cover-letter for copy-paste was a better fit than forcing automation.
← All projectsOpen the live app →