← Projects / Career intelligence

Private operating system · live search · durable memory

A job search is
a stateful system.

A private, continuously operated system for turning job posts, applications, recruiter conversations, interviews, résumés, and outcomes into durable career memory and explicit next actions.

// operating posture

ACCESS
Private + allowlisted
STATE
Supabase / Postgres
AI
Grounded + tool-driven
STATUS
Live + in daily use

16

active records

8

migrations

23

tests passing

Live

daily system

01 — The actual problem

The spreadsheet remembered rows. It forgot the search.

A serious job search produces more state than a spreadsheet can hold: role versions, recruiter context, tailored documents, interview logistics, outcomes, follow-ups, and lessons that should change the next application. The real problem was not tracking rows. It was preserving context and turning it into better decisions.

Architecture / 04System view · simplified
01Capture
Jobs + feeds
Notes + interviews
02Normalize
Companies + contacts
Lifecycle events
03Remember
Documents + profile
RAG knowledge base
04Act
Pipeline + calendar
Grounded assistant
Messy job-search signals become normalized records, retrievable history, and actions that survive the browser tab where they began.

02 — The operating loop

Every signal should leave the system smarter than it found it.

See the signal01

A posting, recruiter message, interview invite, rejection, or follow-up enters the system.

Attach context02

The signal is connected to the company, role, people, documents, and application history it belongs to.

Change the state03

An explicit lifecycle transition updates the pipeline, calendar, next action, and durable event record.

Learn forward04

Outcomes and documents become retrievable context for the next conversation, draft, and decision.

03 — Domain boundaries

Connected records, not another pile of notes.

A self-hosted Next.js and Supabase application organized around companies, roles, applications, contacts, documents, interviews, and append-only activity. RSS and Atom ingestion discovers opportunities; structured lifecycle state drives the pipeline and calendar; private document storage and profile data ground retrieval; and an approval-aware assistant operates through typed tools instead of editing data invisibly.

Companies

The organizational memory: roles, contacts, applications, notes, and history.

Applications

Lifecycle state, next action, deadline, referral, and the documents actually submitted.

Interviews

Schedule, format, people, preparation, logistics, and outcomes captured together.

Documents

Private files, working drafts, extracted text, secure downloads, and role-specific versions.

Discovery

Enabled RSS / Atom sources flow through parsing, normalization, deduplication, and review.

Assistant

Typed tools retrieve and propose changes; consequential writes remain visible and approval-aware.

04 — What shipped

The site is the evidence because the search runs through it.

  • Application pipeline with explicit lifecycle states, next actions, deadlines, and outcome history
  • Structured interview scheduling and outcome capture linked to each application
  • Private résumé and cover-letter storage with extraction, secure downloads, drafts, and application-level version linking
  • Company, recruiter, contact, job, and referral records connected instead of duplicated across notes
  • Server-side RSS / Atom ingestion with deduplication, source controls, and a discovered-jobs inbox
  • RAG ingestion across profile, documents, roles, companies, events, and messages
  • Approval-aware AI tools for recall, drafting, updates, archival, and deletion
  • A live, authenticated deployment used as the operating record for an active search

Constraints / Evidence

The conditions shaped the system.

  • Career history, documents, contacts, and interview links are private by default
  • Imports must preserve messy source evidence without multiplying companies, jobs, or applications
  • AI assistance must be grounded in durable records and require approval for consequential changes
  • The system has to remain useful during an active search while its own schema and workflows evolve

16

active records

Real applications and outcomes—not seeded demo rows.

8

migrations

The domain model evolved from profile and core entities through ingestion and referrals.

23

tests passing

Parsing, lifecycle, retrieval, UI, and security behavior are executable.

Live

daily system

Authenticated, self-hosted, and used as the source of truth for the search.

The through-line

A career is not a sequence of applications. It is a learning system with memory, state, feedback, and compounding context.