A high-throughput job application workbench — customize, track, and grind through as many applications as possible. Tailor resumes, generate cover letters, and keep an accurate record of your search without any step getting in your way.
Product direction and the "nothing blocks you by default" principle:
documentation/product-direction.md.
PLEASE USE DOCKER FOR DEVELOPMENT.
All dependencies are managed inside Docker containers. Do not run pip install or npm install locally unless specifically debugging a local environment issue.
./start-docker.sh| Container | Name |
|---|---|
| Backend (FastAPI) | jobapplicationautomator-backend-1 |
| Frontend (Vite/React) | jobapplicationautomator-frontend-1 |
To run a command inside the backend container:
docker exec -it jobapplicationautomator-backend-1 pip install <package_name>- 📋 Application Tracking — Kanban, list & table views with drag-and-drop status updates. Move anything to any stage, any time — no step gates
- ⚙️ Optional Guided Mode — off by default; opt in per stage under Settings → Workflow if you want readiness checks enforced
- 📄 Resume Tailoring — AI rewrites your resume to match each job description, preserving formatting
- ✉️ Cover Letter Generation — AI-drafted cover letters with one click
- 🗂️ Archiving — Archive applications instead of deleting them; toggle archived view on the dashboard
- 🏢 Company Logos — Upload logos per application; displayed in all dashboard views
- 🔌 Browser Extension — Clip job listings directly from LinkedIn and other job boards
- 👤 Profile Management — Store contact info, resume data, documents, and preferences
- 📊 Analytics — Visual breakdown of your application pipeline
| Layer | Technology |
|---|---|
| Frontend | React, Vite, Tailwind CSS |
| Backend | Python, FastAPI, SQLAlchemy, SQLite |
| AI | Google Gemini (configurable) |
| Document Processing | python-docx, BeautifulSoup4 |
| Extension | Chrome Manifest V3 |
- Docker & Docker Compose
- A Google AI Studio API key (Gemini)
git clone https://github.com/rdannenbring/job-kernel.git
cd job-kernelbackend/config.json is not committed to the repo (it contains your API key). Create it from the provided template:
cp backend/config.example.json backend/config.jsonThen open backend/config.json and fill in your values:
{
"default_resume_path": "/mnt/resume/YourResume.docx",
"ai_config": {
"provider": "gemini",
"model": "gemini-2.5-flash",
"api_key": "YOUR_GEMINI_API_KEY_HERE"
},
...
}Where to get a Gemini API key: Visit aistudio.google.com, sign in, and create a new API key under Get API key.
⚠️ Never commitconfig.jsonto git. It is listed in.gitignorefor this reason. If you accidentally expose a key, revoke it immediately at aistudio.google.com and generate a new one.
./start-docker.shThe app will be available at http://localhost:5173.
job-kernel/
├── backend/
│ ├── main.py # FastAPI app & all API endpoints
│ ├── config.json # ⚠️ Local only — never committed
│ ├── config.example.json # ✅ Safe template — copy to config.json
│ ├── requirements.txt
│ └── services/
│ ├── ai_service.py # Gemini integration
│ ├── database_service.py # SQLite ORM & migrations
│ ├── document_service.py # Resume/cover letter DOCX generation
│ └── scraper_service.py # Job URL scraping
├── frontend/
│ ├── src/
│ │ ├── pages/ # Dashboard, Profile, ApplicationDetail, etc.
│ │ ├── components/ # Sidebar, Layout, shared UI
│ │ └── App.jsx # Root component & routing
│ └── index.html
├── extension/ # Chrome browser extension
│ ├── manifest.json
│ ├── sidepanel.html/js/css
│ ├── content.js
│ └── background.js
├── resources/
│ └── images/logos/ # Brand assets
├── start-docker.sh
└── README.md
- All data is processed and stored locally on your machine — nothing is sent to external servers except AI API calls (Gemini)
config.jsonand the SQLite database (*.db) are excluded from version control via.gitignore- Resume files are stored in
backend/uploads/— also excluded from version control
MIT License — For personal use