Wan Musa
All projects
Multistage data ingestionImplemented - queued pipeline

Job Ad Ingestion & Resume Builder

A multistage workflow that takes browser-captured job adverts through validated intake, a PostgreSQL queue, evidence-grounded generation, and private Word-document storage.

View on GitHub

Problem & context

Tailoring a resume requires moving job-ad data through several stages without losing the source, changing career facts, or repeating expensive work after a failure.

My contribution

I built the Python ingestion API, JSON importer, durable job queue, generation worker, and document-rendering pipeline. Browser capture is a separate stage; this service starts at structured job intake.

Workflow

  1. Capture job advert

    Separate Chrome extension

  2. Validate and import JSON

    HTTP inbox or watched directory

  3. Queue job in PostgreSQL

    Deduplication and input revisions

  4. Generate tailored content

    Career evidence and structured output

  5. Save generation checkpoint

    Resume work after interruption

  6. Render Word documents

    Resume and cover letter, in memory

  7. Upload private artifacts

    Supabase Storage

High-level workflow.

Technology

  • Python
  • FastAPI
  • PostgreSQL
  • Pydantic
  • OpenAI-compatible API
  • Word document templates
  • Supabase Storage
  • Docker Compose
  • GitHub Actions

Key design decisions

Separate capture from processing

The browser extension owns job-ad capture. The builder accepts schema-version-2 JSON through HTTP or a watched directory, validates each record, and preserves source snapshots separately from normalised deduplication hashes.

Generate prose, not career facts

Version-controlled career evidence anchors the generation step. The model produces tailored variable content with source citations, while fixed facts and document layout remain controlled by the application.

Checkpoint before rendering and upload

PostgreSQL stores job state and generated JSON. Execution leases, bounded attempts, and durable checkpoints let workers resume rendering or uploading without automatically repeating a completed generation step.

Keep workflow state and artifacts separate

PostgreSQL is the workflow database; Supabase is private artifact storage. Resume and cover-letter documents are rendered in memory and uploaded rather than saved to a local final-output folder.

Capabilities & limitations

Implemented

  • Validated JSON intake with idempotent imports and changed-content revisions
  • Durable PostgreSQL jobs with execution leases and bounded retry attempts
  • Evidence-grounded structured generation with a mock provider for testing
  • Resumable Word-document rendering and private Supabase uploads
  • Authenticated operator APIs, including regeneration requests

Limitations

  • No PDF export, browser review UI, or signed download links yet
  • CSV ingestion is not implemented; browser JSON exports are the supported handoff
  • Example career evidence is fictional; live use requires verified evidence and provider configuration
  • Generated documents need human review before submission

Have a workflow worth automating?

I'm interested in AI-focused roles and conversations about building useful, practical agentic AI systems.