Skip to case study

FATS — Job Search Companion

Keep the next opportunity in view.

A full-stack companion for capturing jobs, tracking applications, preparing for interviews, organizing resume versions and reviewing offers.

Job-search workflow / independent engineering project

Next.jsTypeScriptPostgreSQLBetter AuthChrome extensionPlaywright

Who it is for

Early-career job seekers managing their own employment search, especially graduates keeping listings, conversations, documents and next steps across several websites.

The problem it solves

A job search fragments quickly across browser tabs, notes, resume copies and deadlines. The seeker needs a reliable record of what they saved, what they submitted and what they need to prepare next.

What I personally built

Built the application and interview workflows, account-scoped persistence, Sidekick capture handoff, document/version boundaries, Offer Desk and Career Vault, plus the supporting local PDF tools.

Capture and follow through

Connected Chrome job capture to an explicit review/save handoff, manual application stages, interview preparation and time-zone-aware scheduling.

Keep account records coherent

Built server-backed account workspaces, scoped document versions and lifecycle rules, with a separate browser-local guest mode and explicit backup/import boundaries.

Support decisions and documents

Added offer terms/history and deliberate employment creation. PDF utilities process real bytes; explainable AI matching is implemented but disabled by default pending evaluation.

How the product works

9 inspectable steps

Authentic captures from the verified local application and packaged extension, using fictional job-search records. The main workflow is distinct from the development-only PDF v2 candidate and simulated design prototype. Resume intake currently fails closed because the required scanner is unavailable.

Captured from the applicationVerified local workflow; synthetic data
See the next job-search action in the actual FATS application with fictional records.
Authentic local application capture; synthetic records.Inspect full image (opens in a new tab)

Choose a detail step to use zoom and dimming.

The counts are synthetic test records, not user adoption or hiring outcomes.

Guided inspection

Step 1 of 9

See the next job-search action

The fresh guest dashboard brings application stages and next actions into one workspace. Its fictional saved job is stored in this browser; no account document acceptance is demonstrated.

Authentic application captures. These controls explore screenshot evidence; they do not operate the app. Use Zoom to evidence, dim the surroundings, or open the full-resolution image. The text transcript below works without JavaScript.

Read every walkthrough step as text
  1. 1. See the next job-search action

    The fresh guest dashboard brings application stages and next actions into one workspace. Its fictional saved job is stored in this browser; no account document acceptance is demonstrated.

    The counts are synthetic test records, not user adoption or hiring outcomes.

    Inspect corresponding screenshot (opens in a new tab)
  2. 2. Capture and confirm a job

    Sidekick captures a listing through the Chrome extension. Review and correct the fields before explicitly saving the opportunity.

    This screenshot shows the guest handoff; the separate product journey verifies authenticated capture. Saving never submits an application.

    Inspect corresponding screenshot (opens in a new tab)
  3. 3. Track applications through their stages

    Keep saved jobs, descriptions and manual application stages together. The fresh guest capture verifies a stage change after reload in local storage; account persistence is described by the earlier evidence.

    Guest data stays browser-local. Stage changes are user decisions, separate from interview and offer events.

    Inspect corresponding screenshot (opens in a new tab)
  4. 4. Review the saved job and persist an update

    Read the fictional job description, set its manual stage to Applied and reload. The recorded guest workflow verifies local persistence.

    Changing the tracker stage never submits an application to an employer.

    Inspect corresponding screenshot (opens in a new tab)
  5. 5. Prepare for each interview

    Schedule conversations in explicit time zones and keep preparation and reflection notes attached to the opportunity.

    Completing an interview does not automatically advance an application.

    Inspect corresponding screenshot (opens in a new tab)
  6. 6. Inspect interview preparation

    A fictional technical interview is scheduled in Asia/Manila. Its detail view keeps the preparation notes beside the interview information.

    This is a local planning record; no meeting invitation or email is sent.

    Inspect corresponding screenshot (opens in a new tab)
  7. 7. Keep document versions behind safety checks

    The library implements resume and document versions, but current local intake refuses new files while its required scanner is unavailable. The error retains the form draft.

    This is evidence of the safety boundary, not a successful upload. Earlier populated-library captures used test scanner fixtures.

    Inspect corresponding screenshot (opens in a new tab)
  8. 8. Inspect private workspace prerequisites

    The current resume workspace requires sign-in for private document management. The recording also shows the Offer Desk sign-in prerequisite; neither is represented as successful authenticated operation.

    Prior scanner refusal and authenticated offer evidence remain labeled historical. AI matching stays disabled; PDF v2 remains a development candidate.

    Inspect corresponding screenshot (opens in a new tab)
  9. 9. Compare offers and choose next steps

    Offer Desk records terms, questions, revisions and a deliberate decision. Career Vault supports an explicit transition into employment and document checklists.

    No employer is contacted. Accepting an offer does not silently create employment or alter an application stage.

    Inspect corresponding screenshot (opens in a new tab)

Follow a job seeker’s next steps

Local production build; fictional job and interview in a fresh guest browser workspace. Status changes persist locally. Private documents and Offer Desk require an account; AI matching remains disabled. Prior authenticated captures and known failures remain disclosed below.

Actual Playwright recording · silent · native playback controls

Recording transcript

  1. Review the main dashboard and application tracker with a fictional saved job.
  2. Open the job description, set the stage to Applied, reload and verify persistence. This does not submit an application.
  3. Schedule a fictional technical conversation in Asia/Manila and review preparation notes.
  4. Inspect interview management, resume workspace and the Offer Desk account prerequisite.
  5. Visit PDF Tools as secondary functionality; no document acceptance or AI analysis is claimed.

Read the Phase 5D capture and verification report

Inspect the mobile captures (390 × 844)
FATS main dashboard on mobile with a fictional saved job.
FATS main dashboard on mobile with a fictional saved job. Same capture environment as the recording.Inspect full image (opens in a new tab)
FATS fictional interview preparation on mobile.
FATS fictional interview preparation on mobile. Same capture environment as the recording.Inspect full image (opens in a new tab)

Difficult engineering decisions

Guest convenience versus account isolation

Local guest records and authenticated PostgreSQL workspaces use distinct persistence boundaries. Imports, retries and account changes must not merge another person's data.

Keep user decisions explicit

Capture does not apply, interviews do not advance stages, offer acceptance does not create employment automatically, and unavailable scanning never promotes a document.

Explainability before activation

Matching uses consent-gated extraction, structured model outputs and evidence validation. The feature remains disabled by default: live-model quality, safety and usefulness have not been established.

Architecture behind the interface

Listing to saved opportunity

A bounded capture contract checks origin, freshness and listing fields before confirmation. The extension hands off data without becoming an automatic job application agent.

libs/domain/src/capture.ts (opens in a new tab)

Document processing is a separate boundary

Private intake requires scanning and constrained parsing. Supporting browser PDF tools use PDF.js for rendering and pdf-lib in a worker for output; local edits are not saved library versions.

apps/web/src/lib/pdf-tools-engine.ts (opens in a new tab)
PDF Tools: document-processing engineering

The existing editor is separate from the development-only v2 candidate shown here. V2 processes real local PDFs; the separate design prototype is simulated and is not used in this walkthrough. Nothing shown establishes release readiness.

Captured from the applicationDevelopment candidate · real PDF processing
FATS v2 Quick Sign workspace showing the synthetic three-page offer PDF, local-only status and page thumbnails.
V2 candidate · a real synthetic PDF opened locally.Inspect full image (opens in a new tab)

Choose a detail step to use zoom and dimming.

The header says In this tab only. This is session-local editing, not a saved document or a Career Vault upload.

Guided inspection

Step 1 of 5

Open a local PDF

The local file picker opens a three-page synthetic offer. The document, thumbnail rail and page controls are rendered by the running application, using actual PDF bytes.

  1. Open a local PDF

    The local file picker opens a three-page synthetic offer. The document, thumbnail rail and page controls are rendered by the running application, using actual PDF bytes.

    The header says In this tab only. This is session-local editing, not a saved document or a Career Vault upload.

    Inspect screenshot
  2. Place a signature

    A typed signature becomes a placed mark with movement and proportional size controls. The same artwork is embedded in the completed PDF.

    This is a visual personal mark. It is not a cryptographic signature, identity verification or certification.

    Inspect screenshot
  3. Organize the pages

    Moving the first page later changes the order to original pages 2, 1, 3. The selected thumbnail retains its original-page label, and the operation can be undone.

    The second thumbnail is current page 2 / original page 1. Stable source identity keeps its signature attached to the correct page.

    Inspect screenshot
  4. Extract or split copies

    Extraction selects current pages 1 and 3 without replacing the editing session. A separate split workflow divides the three-page document after page 1 into one-page and two-page outputs.

    The capture selected 2 pages. The downloaded extraction reopened with 2 pages; the two downloaded split files reopened with 1 and 2 pages.

    Inspect screenshot
  5. Reopen the real output

    The completed file was downloaded through the browser, parsed with pdf-lib to check its three pages, then reopened through the actual PDF.js workspace in a fresh browser page.

    The signature is now part of the reopened document. This verifies this synthetic export, not all PDF structures or other viewers.

    Inspect screenshot

Evidence, with boundaries

Read Phase 5 verification report

Upstream results below are attributed to their recorded checks. This portfolio change does not rerun every application suite.

End-to-end product evidence

The product integration report records two complete desktop/narrow journeys: registration, real packaged Sidekick capture, stages, interview notes, offer decisions, explicit employment, local PDF export and backup/import. These are prior upstream checks, not newly rerun application tests.

Document acceptance is blocked

Production intake tests verify a real 503 when scanning is unavailable, preservation of the draft and denial of legacy/quarantine access. Accepted resume/version uploads need actual-scanner verification; populated test-fixture libraries do not establish that prerequisite.

Failures and candidates remain visible

The paused model-comparison plan has a frozen source-hash mismatch; parser capacity failures occurred under parallel execution. Earlier backup and Sidekick-origin failures have later successful scoped evidence. The portfolio's earlier PDF-v2 capture recorded five developer-overlay click failures. None is silently recast as a green full release gate.

Inspect PDF outputs and the existing editor

Synthetic browser downloads from the earlier PDF verification. The completed copy precedes reordering; extraction and splits use the reordered document.

Existing FATS PDF editor with a synthetic document.
Existing local PDF editor; separate from the development-only v2 candidate.Inspect full image (opens in a new tab)
PDF v2 split dialog for a synthetic three-page document.
Development-only v2 output reopened with 1 and 2 pages.Inspect full image (opens in a new tab)

What remains unverified

Working implementation and release readiness have different evidence requirements.

  • No real-person beta or production readiness is established. Current resume/document intake is blocked by absent scanner/signature configuration; accepted-file and version workflows require actual-scanner browser verification.
  • Explainable AI matching is disabled by default pending live-model quality and safety evaluation. It is not presented as a validated hiring recommendation or an active product result.
  • PDF v2 is a development candidate; the separate design prototype simulates actions. Existing local PDF utilities work, but PDF compatibility and accessibility remain constrained.
  • Guest workspaces are browser-local. Account persistence does not establish hosted email reliability, off-device recovery objectives, operational readiness or complete personal-data lifecycle coverage.
  • Known frozen-plan, parallel-parser and earlier candidate browser failures remain in their reports. Later scoped passes do not establish a completely passing full upstream gate.

Source links are pinned to the inspected revision. The Phase 5 report distinguishes retained captures, current source, prior test results and checks executed for this portfolio change.