← All Projects
APPPro Bono

A company was going through layoffs. I built the job search tool they needed.

When a company I was close to went through a round of layoffs, I built a free AI-powered job search platform for the people affected. It scores every job against each person's unique profile, generates tailored application materials, and gives a small community the tools to land on their feet together.

Next.js 16React 19Claude APIPostgreSQLn8nTypeScript
Nice Work dashboard showing scored roles, company signals, and application stats
<3 days
Idea to full platform
1,356+
Companies tracked
42+
API endpoints
$0
Cost to users

Layoffs hit and suddenly everyone needs the same thing at once

When a company goes through layoffs, every affected person faces the same problem simultaneously: hundreds of job boards, no way to know which roles actually fit, and the emotional weight of starting from scratch. People were pasting job descriptions into ChatGPT one at a time, manually tracking applications in spreadsheets, and writing cover letters from scratch for every role.

I'd worked with these people. I knew their skills, their ambitions, what kind of roles they were actually good for. The tools available to them were either too generic (Indeed, LinkedIn) or too expensive (paid AI resume services). Nobody was building something that understood each person individually and helped them at every step, from discovering the right roles to landing them.

Three layers, built in sequence

The first working version was live by the end of the first afternoon. The full platform shipped in under three days: scoring engine, document generation, company signals, community features, kanban tracker.

01

Shared Job Discovery

An n8n pipeline scrapes career pages from 1,356+ companies daily across five ATS platforms (Greenhouse, Lever, Ashby, Recruitee, Workable). Jobs land in a shared database with 7-day dedup to catch reposts. Every user sees the same pool. No one has to go find listings.

02

Per-User AI Scoring

Each user builds a profile: target roles, technical stack, industries, salary range, hard disqualifiers, positive signals, warning signals. When they score a job, Claude evaluates it across five weighted dimensions and returns a 0-100 score with a recommendation: Priority Apply, Strong Fit, Worth a Look, or Skip. Users bring their own API key so scoring costs stay with them.

03

The Toolkit Around It

Scoring is just the start. The app generates targeted resumes, cover letters, and cold outreach using the user’s real experience and the actual job description. A kanban tracker moves roles through Saved, Applied, Interviewing, Offer, Hired. Company signals surface funding rounds, leadership changes, and hiring momentum. Interview prep produces tailored talking points. Weekly email digests keep people engaged without constant notifications.

Discover page showing scored jobs with recommendations

Discover: jobs from 1,356+ companies, scored against your profile.

Application tracker kanban board

Tracker: kanban board from Saved to Hired.

Signals page showing hiring predictions and company-level signals

Signals: hiring predictions, funding rounds, and company-level intelligence.

What powers it

01

3-Layer Scoring Funnel

SQL pre-filter narrows the pool by role keyword and location. Haiku triage (cached and shared across users) eliminates obvious mismatches for pennies. Sonnet does the full 5-component score only on jobs that pass. This keeps LLM costs minimal even at scale.

02

5-Component Score Breakdown

Responsibilities, Title & Level, Industry Fit, Compensation, and Culture & Impact. Each dimension is independently weighted per user. Hard disqualifiers (wrong seniority, below comp floor, relocation required) override the numeric score. Every score includes per-component reasoning so users understand why.

03

Company Signal Engine

Webhook-driven signal ingestion detects funding, hiring surges, acquisitions, and leadership changes. Each signal carries a timing score bonus (0-20 points) that decays linearly over the estimated hiring window. Multiple signals stack. The bonus gets added to a job’s AI score so timely opportunities float to the top.

04

Document Generation

Resume, cover letter, and outreach generators use the user’s profile and the target job description. Anti-slop voice rules are injected into every prompt: no em dashes, use contractions, vary sentence length, lead with outcomes. Users can upload an existing resume as a DOCX and the app extracts the layout blueprint (fonts, margins, section order) so the generated version matches their format.

05

Community Layer

Activity feed shows peer progress (scored, applied, hired). When 2+ members score the same job 80+, it surfaces as a Community Pick. Member directory with opt-in visibility and peer recommendations. Accountability partners for weekly goal-setting. Milestone badges auto-trigger on first score, first app, 10 apps, first offer.

Resume Builder with rich text editor and DOCX export

Resume Builder: generate, edit inline, export as DOCX.

Cover Letter generator with saved letters per company

Cover Letters: tailored to each job, grounded in your real resume.

Four problems that shaped the architecture

Scoring has to be cheap enough to run on every job

The naive approach sends every job description to Sonnet. At 1,000+ jobs per user, that costs real money. The 3-layer funnel (SQL pre-filter, Haiku triage, Sonnet score) cuts token spend by 80%+. Triage results are cached by role keyword and shared across all users, so the same job doesn’t get re-evaluated for the same role type. Users see their token spend in a usage dashboard with per-model breakdowns.

Every user’s definition of a good job is different

A 5-component scoring model with user-defined weights handles this. One person cares mostly about responsibilities and comp. Another weights culture and industry. Users define custom disqualifiers ("no management roles over 5 reports"), positive signals ("mentions Clay or n8n"), and warning signals ("requires security clearance"). The scoring prompt is rebuilt per-user with their specific criteria injected.

Generated documents that don’t sound like AI wrote them

23 banned words, 19 banned phrases, and a hard rule against em dashes. Every generation prompt includes anti-slop voice rules that enforce contractions, varied sentence length, concrete examples over generic claims, and outcome-first framing. Resume bullets get specific verb variety requirements. Cover letters skip projects not found in the user’s actual profile instead of fabricating them.

Building for people mid-crisis without making it feel heavy

The users are recently laid off. The UX had to be encouraging without being patronizing. Confetti on "Hired" milestones. A support chat with Claude Haiku that knows the entire product. Weekly digests that surface progress, not pressure. The whole thing is free and invite-only because these are real people I worked with, not a growth experiment.

Shared discovery, personal scoring

The core design separates shared work from personal work. Job discovery is centralized: n8n pipelines scrape 1,356+ company career pages daily, deduplicate against a 7-day window, and write to a shared PostgreSQL database. Signal detection runs on the same cadence, ingesting company-level events via webhooks.

Scoring is personal. Each user's profile, weights, disqualifiers, and signals define a unique scoring prompt. The 3-layer funnel (SQL pre-filter, Haiku triage, Sonnet score) ensures expensive LLM calls only happen on relevant jobs. Triage results are cached by role keyword and shared across users. Users bring their own Anthropic API key, so scoring costs distribute naturally.

Document generation (resumes, cover letters, outreach, interview prep) injects anti-slop voice rules into every prompt. The resume generator can extract layout blueprints from uploaded DOCX files and reproduce the formatting. Everything saves to the database and is editable inline via a Tiptap rich text editor with DOCX export.

Full Stack

FrontendNext.js 16, React 19, Tailwind CSS v4, shadcn/ui, Tiptap (rich text editor)
AIClaude Sonnet (scoring, generation), Haiku (triage, support chat), per-user API keys, anti-slop prompt injection
BackendNext.js API routes, PostgreSQL, NextAuth (Google OAuth + credentials), Resend (email)
Pipelinen8n (job scraping, signal detection, weekly digest), 5 ATS integrations, webhook-driven signals
InfraDigitalOcean, PM2, Caddy reverse proxy, Sentry error tracking

Built for people, not metrics

I built this because people I cared about needed it, not as a product launch. The app is free, invite-only, and designed for a specific group of people going through a specific moment. No growth loops, no monetization, no waitlist theater.

The system processes jobs from 1,356+ companies across five ATS platforms. Each user gets personalized AI scoring, document generation, company signal tracking, and a community of peers in the same situation. 18 database migrations track the evolution from a simple scorer to a full job search platform with activity feeds, accountability partners, and an ops agent that auto-triages support tickets.

Scope Touched

Full-stack app (Next.js 16, API routes, PostgreSQL, NextAuth, Tiptap)
AI scoring engine (3-layer funnel, per-user prompts, 5-component model)
Document generation (resume, cover letter, outreach, interview prep)
Data pipeline (n8n scraping, 5 ATS integrations, signal webhooks)
Community features (activity feed, directory, accountability, milestones)
Ops automation (support chat, ticket routing, Sentry integration)

Interested in a similar project?

Let's Talk