Building My Career Intelligence Dashboard: A Personal AI Job Search Engine

I built a fully functional career intelligence platform running at jobs.groundedintelligences.com at zero hosting cost, doing AI-powered job matching and processing hundreds of job postings every day. It is not a demo or a prototype — it ingests live job data, scores it against my profile, and surfaces the best matches every morning, all on Cloudflare’s free tiers. Here is how it’s put together and the one design decision that mattered most.

The Stack

The whole thing sits on Cloudflare primitives. A Worker acts as the API server. D1 holds the job database. KV handles rate limiting and session caching. R2 stores resume versions and company logos. Workers AI generates the embeddings that drive job-to-resume matching. That’s five services, each on its free tier, composing into a real application — no virtual machines, no container bills, no separate database host. The same architecture approach underlies my personal finance PWA on Cloudflare Workers, which runs on the same foundation.

Data Sources

The data comes from three kinds of sources. Job board APIs — Greenhouse, Lever, and Ashby all expose free public endpoints — provide the bulk of structured listings. Curated RSS feeds from the careers pages of target companies fill in the roles those APIs miss. And a custom scraper Worker handles sites that have no API at all, pulling listings on a schedule and depositing them into D1 alongside the structured data. Together these feed a steady stream of new postings without any paid data subscription.

The ICP Scoring System

At the center is an Ideal Candidate Profile stored in D1 that weights the factors I care about — industry, company stage, required-background match, title level, and location preference. Every ingested job gets an ICP score from 0 to 100, calculated as the cosine similarity between the job’s embedding and the profile’s embedding, both produced by Workers AI with bge-base. The embedding approach means the system understands a role described in unfamiliar wording, not just one that happens to share keywords with my profile. A job that never says “applied AI” but describes exactly that work still scores high.

The Matching Interface and Feedback Loop

The front end is a PWA served by a Worker, showing jobs ranked by ICP score — each with a three-sentence AI summary explaining why the role matches my profile, generated by Workers AI running LLaMA 3 8B over the job description and the ICP. When I rate a job with a thumbs up or down, that signal feeds back into the ICP score through a simple update, so the system gets sharper the more I use it. The feedback loop is deliberately lightweight; it doesn’t retrain anything, it just nudges the profile toward what I’ve actually shown interest in versus what only looked good on paper.

The Real Numbers

The system ingests 200 to 400 new jobs daily across all sources. Every morning it surfaces the top 12 matches through the PWA — a curated shortlist instead of a firehose. The processing cost is $0 per month, because every component lives inside a free tier and the daily volume never approaches the limits. A dozen well-ranked roles each morning, drawn from several hundred raw postings, is a fundamentally different experience than scrolling a job board for an hour, and it costs nothing to run.

The Decision That Mattered Most

The single best design decision was not trying to scrape LinkedIn. It would have been a constant fight against anti-scraping measures, and it would have pulled in noise from every direction. The job boards with open APIs — Greenhouse, Lever, Ashby — are used by the kinds of companies that build things with APIs. That is exactly the target company profile for my own search. The constraint became a filter: by limiting intake to companies that expose clean public endpoints, I automatically biased the whole pipeline toward technically serious organizations. The thing I chose not to build improved the results more than another feature would have.

What Transfers

The personal intelligence tool architecture generalizes to any domain where you’re sorting through high-volume, heterogeneous inputs to find relevant signals. Scheduled ingestion from multiple sources, embedding-based matching against a profile of what you care about, and a lightweight feedback loop that sharpens the profile over time — that pattern works for jobs, for monitoring news, for tracking research, for anything where the problem is too much input and not enough relevance. Build the profile, embed the inputs, rank by similarity, and let your own feedback tune it.

→ Building something at the intersection of AI, edge computing, and behavioral science? Let’s connect.

Comments

Leave a Reply

Discover more from Grounded Intelligences

Subscribe now to keep reading and get access to the full archive.

Continue reading