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
- 01Configured job sources feed discovery and extraction adapters.
- 02Discovery results are normalized, deduplicated, classified, filtered, ranked, and stored in a local SQLite database.
- 03The Streamlit workbench exposes Home, Recommended, Queue, Applied, and Settings views for human review.
- 04CLI commands support import, classification, discovery dry-runs, queue listing, apply-session preparation, and export workflows.
- 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.
Visual Evidence
Hardware and system artifacts
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.