Screen from a fictional news mobile app on a blue gradient background

ApplyRadar

STRATEGY

WEB DESIGN

Overview

ApplyRadar is a full-stack AI-powered job application automation platform I designed and built solo as a founder-led product. It reduces the time spent on job applications from hours to minutes by combining intelligent CV parsing, AI-driven job matching, automated cover letter generation, and a Chrome extension that auto-fills employer application forms across any job site.

Problem

Job hunting is one of the most repetitive, demoralizing workflows a person goes through. The average job seeker spends 3-5 hours per application — rewriting cover letters, copy-pasting profile details into ATS forms, tracking applications in spreadsheets, and losing context between dozens of open tabs. The core insight: 80% of this work is identical every time, and AI can handle it.

What I Built

A production-grade platform with four interconnected layers:

1. Intelligent Profile Engine Users upload their CV (PDF, DOCX, or plain text). The backend parses it using PyPDF2 and python-docx, then sends the extracted text to Google Gemini which returns a structured JSON profile — name, experience, skills, education, links, summary. This profile becomes the source of truth for everything downstream.

2. Job Discovery & Matching Pipeline A background scheduler (APScheduler) continuously ingests jobs from multiple sources — Bundesagentur für Arbeit, Greenhouse, Lever, Ashby, Workable, Adzuna, RemoteOK, Remotive, and The Muse — normalising them into a unified schema and upserting into MongoDB to avoid duplicates. When a user requests AI matching, Gemini scores each job against their profile, identifies skill gaps, and surfaces the most relevant opportunities with reasoning.

3. Application Workflow For jobs on Greenhouse, Lever, and Ashby — the three major ATS platforms with public submission APIs — ApplyRadar submits the application directly from the backend, attaching the user's CV as a file. No form filling, no redirect. For all other job sites, a Chrome extension (Manifest V3, TypeScript, Vite) scrapes the employer's form, sends the field structure to the backend, and Gemini semantically maps each field to the user's profile — filling the form automatically and highlighting low-confidence fields for review.

4. Admin & Subscription Infrastructure A full RBAC system separates admin and user roles. Admins manage job sources, monitor ingestion stats, and view platform analytics. The subscription model (Free / Pro / Max at €0/€9/€19) is driven by a configuration file with FastAPI middleware enforcing feature gates per tier.

Tech Stack

Layer

Technology

Frontend

React, TypeScript, Tailwind CSS, shadcn/Radix UI

Backend

Python, FastAPI, Motor (async MongoDB)

Database

MongoDB

AI

Google Gemini

Auth

JWT, bcrypt

Email

Resend

Extension

Chrome MV3, TypeScript, Vite

Document parsing

PyPDF2, python-docx

Job scheduler

APScheduler

Payments (planned)

Stripe with SEPA Direct Debit

Key Engineering Challenges

The Ghost Form Problem The initial apply flow was a generic internal form that tracked applications but never reached employers. The fix required three layers: direct ATS API submission for Greenhouse/Lever/Ashby, a Chrome extension for everything else, and CV file storage for API attachments — each solving a different segment of the job posting landscape.

Mixed Content Blocking The Chrome extension needs to call a localhost backend from HTTPS job sites — a mixed content violation the browser blocks at the content script level. The fix was routing all API calls through the background service worker instead, which isn't subject to the same CORS and mixed content restrictions.

ATS Diversity Hundreds of companies use different form structures. Rather than hardcoding field mappings, the extension scrapes form field metadata (labels, names, placeholders, aria-labels) and sends the structure to Gemini, which semantically maps each field to the user's profile. Specific adapters for Greenhouse, Lever, and Ashby handle their predictable DOM structures first, with the generic AI approach as fallback.

Job Deduplication at Scale Multiple sources often list the same job. The ingestion pipeline uses a compound source + external_id upsert strategy in MongoDB, ensuring jobs are updated rather than duplicated across scheduler runs.

Results & Scope

  • Full-stack solo build from zero to production-ready

  • 15+ integrated job sources across EU and global markets

  • Chrome extension covering any job application form on the web

  • Complete admin panel with ingestion monitoring and analytics

  • Subscription-ready architecture with per-feature tier enforcement

  • Designed specifically for the German/EU job market with Bundesagentur integration

What I Learned

Building ApplyRadar forced me to think in layers — what can be solved cleanly with an API, what requires browser-level access, and what requires AI to handle variability at scale. The biggest lesson was that the hard problems in automation aren't the AI parts — they're the infrastructure around it: deduplication, session management across contexts, mixed content restrictions, and making a system that degrades gracefully when one layer fails. Shipping this solo also reinforced how much product thinking matters before writing code — the ghost form problem wasn't a bug, it was a fundamental architecture decision I had to rethink mid-build.

Dashboard
Jobs
Admin Panel