Local-first Python workflow tool

Job Application Assistant

A practical job-search workflow system that keeps private application data on the user's machine. The project combines configurable source discovery, deterministic firmware/FPGA/robotics matching rules, SQLite-backed status tracking, application packet generation, CSV/Markdown exports, a Streamlit review interface, and optional Playwright-assisted autofill that stops before final submission.

PythonStreamlitSQLiteCLIPlaywrightpytest

Overview

Project Strengths

  • Local-first workflow: profiles, resumes, application history, browser state, generated packets, and databases stay outside the public repository.
  • SQLite persistence for saved jobs, discovered leads, queue state, autofill runs, and application statuses.
  • Deterministic classification and ranking across firmware, FPGA/digital design, robotics, and manual-review tracks.
  • Streamlit UI plus CLI workflows for import, discovery, classification, queue review, packet generation, exports, and validation.

My Contribution

  • Designed and implemented the local-first application workflow, data model, Streamlit workbench, CLI entry points, queue lifecycle, and packet generation.
  • Added browser-assisted autofill safeguards so the tool supports preparation without automating final job submissions.
  • Built public-safe sample data, screenshots, configuration examples, and test coverage around the workflow.

System / Architecture

Architecture

  1. 01Configured job sources feed discovery and extraction adapters.
  2. 02Discovery results are normalized, deduplicated, classified, filtered, ranked, and stored in a local SQLite database.
  3. 03The Streamlit workbench exposes Home, Recommended, Queue, Applied, and Settings views for human review.
  4. 04CLI commands support import, classification, discovery dry-runs, queue listing, apply-session preparation, and export workflows.
  5. 05Application packets collect job summaries, matching rationale, message drafts, checklists, official URLs, and resume references.

Implementation

Implementation

  • Built the `jobfinder` entry point and `app/` modules for CLI handlers, UI backend, discovery, ranking, queue state, packet generation, and autofill planning.
  • Implemented rule-based scoring from technical keyword groups, lifecycle signals, eligibility, seniority, location, source confidence, and technical fit.
  • Designed browser-assisted autofill to fill known fields, upload a configured resume when present, write an autofill report, and leave final submission to the user.
  • Kept public demo data synthetic and provided example configuration templates instead of publishing private profiles, resumes, cookies, databases, logs, or application history.
Candidate detail view for reviewing job fit and queue actions.

Visual Evidence

Hardware and system artifacts

Applied-state workflow view for tracking local application progress.

Results / Validation

  • Streamlit interface supports candidate review, queue management, applied-state tracking, and local pipeline settings.
  • Sample data includes 12 synthetic records covering firmware, FPGA/digital design, robotics, validation, controls, non-target filtering, and multiple queue statuses.
  • Test suite covers classification, URL normalization, discovery parsing, source validation, queue lifecycle, packet generation, UI backend behavior, startup checks, autofill planning, and scheduled refresh helpers.

Challenges / Decisions

  • Employer job-source layouts change and source-specific discovery adapters may need maintenance.
  • Dynamic application forms vary, so autofill requires visible human review and avoids final submit actions.
  • Ranking is deterministic triage logic, not a guarantee that a role is suitable.
  • Real use requires private local configuration and resume files that are intentionally not included.