Skip to content

Español

How it's built

A system that reads job postings and evaluates them against a profile. The AI model evaluates; rules in code decide; the person chooses. Here is how it works, in detail.

The journey of a posting

Journey of a job posting, from source to decisionSix steps in order: 1 sources, 2 normalization and deduplication, 3 prefilter in code, 4 AI evaluation, 5 decide() in code, 6 the app and MCP, where the person decides.1 · SourcesAPIs and alerts2 · Normalizationand deduplication3 · Prefiltercode, no AI4 · AI evaluationreads the posting5 · decide()code6 · App and MCPthe person decides
  1. Sources

    Public job-board APIs and company career sites (Greenhouse, Lever, Ashby), plus the alerts the person forwards by email.

    No LinkedIn scraping and no automatic applications.

  2. Normalization and deduplication

    The same posting from two sources becomes a single job.

  3. Prefilter (code, no AI)

    Work mode, discipline, off-profile titles and required country. It discards cheaply before spending on AI.

  4. AI evaluation

    Reads the full posting against the profile and returns a fixed, validated structure: score, pros, cons, gaps and risks.

  5. decide() (code)

    Applies verifiable rules: required years, English, residency and a per-title ceiling. That yields the action: apply, save or discard.

    The model suggests; the code decides.

  6. The app and MCP

    The person sees the reasoning and decides. It can also be queried over MCP, a protocol for connecting AI assistants.

How the AI is kept from making things up

  • Golden set

    A set of postings with the correct answers agreed in advance. Every prompt change is measured against it, with strict and lenient metrics, before it ships.

  • Validated output

    The model must answer in a fixed format, validated against a schema (Zod). If it doesn't, the call is retried or discarded.

  • Rules live in code

    Years of experience, English level, country and per-title ceilings are applied after the model, with tests. The model cannot talk the system into applying, and the system never applies for you: the person decides.

  • Prompt injection

    A posting can carry hidden instructions meant to fool the AI. The posting text is data, not instructions: the system detects when a posting tries to give orders to the evaluator, and that posting's score is capped.

  • Cost cap

    Daily spending limits apply per person and overall, are enforced in code, and every call is logged.

  • Emails are parsed safely

    If a forwarded email doesn't have the expected structure, it goes to manual review. Nothing is partially extracted. The HTML is shown isolated, with no scripts or navigation.

Stack

Web
Next.js (App Router), strict TypeScript and Tailwind.
Data
Postgres with Row Level Security (RLS), so each person sees only their own data, and Drizzle.
AI
Vercel AI SDK. The model is picked from a routing table, with a fallback.
Quality
Vitest, Playwright, integration tests against a real Postgres and a CI with a secret scanner.
Infra
Vercel and Neon, with scheduled jobs in GitHub Actions.

Live numbers

Active postings
2,337
Sources
6
New in 24 h
226
Updated
3 h ago

Counts the distinct postings we saw in the last 7 days across the sources we read.

More than 2,000 automated tests (as of October 20, 2026).

The code

The code is public. Read it on GitHub.

GitHub repository (opens in a new tab)Design principles (opens in a new tab)

Looking for a tech job?

Request access