HireLoop

A personal career intelligence platform that automates the job search pipeline end-to-end — from scraping interview intel and tracking prep readiness, to discovering jobs, tailoring resumes, and managing applications. Human-in-the-loop confirmation before every submission.

Java 26 Spring Boot 3 React Claude API PostgreSQL Railway Deployed Personal Project
At a glance
StackJava + React
LLMClaude API
DatabasePostgreSQL
HostingRailway
Phases4 total
Apply styleHuman confirms
The Problem

Job searching is a full-time job. It shouldn't be.

The standard job search is manual, repetitive, and signal-poor — scrolling job boards, tailoring resumes by hand, losing track of where you applied. HireLoop automates the high-effort / low-judgment parts while keeping you in control of every decision that matters.

The core design rule: no autonomous applying. The system researches, scores, discovers, and prepares — but a human confirms before anything is submitted. No spam applies, no mismatched applications, no embarrassing auto-submits.

Architecture

Four phases, one pipeline

The system was designed in four phases that activate sequentially based on your readiness score — company-specific job polling only turns on once you're ready for that company.

Phase 1
Interview Intel + Prep Tracking

Scrapes interview signals from Glassdoor, Blind, LeetCode, Reddit. Dynamically calculates global and per-company readiness scores (0–100) based on topic coverage weights. Dashboard shows prep gaps in real time.

Phase 2
Job Discovery + Fit Scoring

Polls company career pages directly — no LinkedIn/Indeed. Filters by posting age (max 7 days), role level, and location. Claude scores job-resume fit and flags top matches.

Phase 3
Resume Tailoring

Per-job resume tailoring using Claude API. Parses your base DOCX via Apache POI, rewrites relevant bullets to match the JD, produces a tailored version for review before submission.

Phase 4
Application Pipeline

Gmail API integration auto-tracks recruiter responses. Dashboard shows pipeline state per company — applied, responded, scheduled, rejected. Human confirms every application before it sends.

Design Decisions

What makes it different

  • Config-driven rules engine: targets.yml defines which companies to target and at what readiness threshold. filters.yml defines job filters. Change behavior without touching code.
  • Pluggable LLM provider strategy: LLM calls go through a provider interface — swap between Claude API and Gemini without touching business logic. Designed for cost flexibility.
  • Readiness-gated job polling: Job polling for a company only activates when your readiness score for that company crosses its configured threshold. You don't see Apple jobs until you're ready for Apple.
  • Direct career page targeting: All job discovery hits company career pages directly, not aggregators. Avoids stale listings, fake roles, and the noise of Easy Apply spam.
  • Human-in-the-loop by design: Every application requires explicit dashboard confirmation. The agent prepares everything; you pull the trigger.
Tech Stack

What it's built on

LanguageJava 26 · Spring Boot 3
SchedulerSpring @Scheduled — batch scrape runs, not real-time
LLMClaude API (claude-sonnet-4-6) via RestTemplate — fit scoring, resume tailoring, intel summarization
BrowserPlaywright for Java — career page scraping
DatabasePostgreSQL via Spring Data JPA · Flyway migrations
ResumeApache POI — parses DOCX, stores as JSON, rewrites bullets per JD
GmailGmail API v1 (OAuth2) — auto-tracks recruiter responses
FrontendReact SPA at localhost:8080/ui — pipeline, prep tracker, job feed
HostingRailway — Java backend + managed PostgreSQL
Configapplication.yml + targets.yml + filters.yml
Design philosophy

Code is cheap. Design first. The entire system was designed through a PRD-first approach — 23 sections, 24-step phased delivery order — before a single line of code was written. Claude Code was used for autonomous development from the PRD spec.

Targets
  • Meta, Google, Apple, Amazon
  • CrowdStrike, Indeed, Dell
  • Direct career pages only
  • Max 7-day posting age
Readiness scoring
  • COVERED = 1.0 weight
  • IN_PROGRESS = 0.5
  • WEAK = 0.3
  • NOT_STARTED = 0.0
  • Global + per-company score
  • Job polling gates on threshold
Non-goals
  • No LinkedIn / Indeed apply
  • No autonomous submission
  • No real-time intel
  • No chat UI