Software Engineering
JobTrail
Job Application Tracker
Problem
Tracking job applications in a spreadsheet is messy. You lose context, forget follow-ups,
and can't see patterns across hundreds of applications. JobTrail solves this with a clean
web app purpose-built for the job hunt.
Solution
A personal web application where you log every application — company, role, date, status, and notes —
and see it all in one dashboard. Filter by status (Applied / Interviewing / Offer / Rejected),
search by company, and track weekly activity on a chart. Built with real magic-link auth so your data is private to you.
Tech stack
| Backend | FastAPI · SQLModel |
| Database | PostgreSQL via Supabase |
| Frontend | Jinja2 + HTMX + Tailwind CSS (no React, no build step) |
| Auth | Supabase magic-link email auth (Resend SMTP) |
| Deploy | Render (free tier, sleeps after 15 min idle) |
| CI | GitHub Actions running pytest on every push |
Architecture
Browser → FastAPI on Render → Supabase Postgres. HTMX swaps in HTML fragments from FastAPI endpoints —
no JSON API needed for v1. Auth tokens stored in HttpOnly cookies.
Selected lessons
- Render's Python default bites you. Render's build env defaults to Python 3.14, which breaks half the ecosystem. Pin via
.python-versionwith3.11.9; saves a long Sunday afternoon of mysterious build failures. - Supabase magic-link rate limits silently kill UX. The default email provider is rate-limited per project; switching to Resend custom SMTP removes the limit and the "we'll get back to you in an hour" emails to yourself.
- HTMX is genuinely enough for v1. Inline create/edit/delete with no full-page reloads, no React, no build pipeline — the entire frontend is server-rendered HTML with sprinkles. Saves weeks vs. learning a SPA framework just to ship a CRUD app.
Local setup
git clone https://github.com/neuralxjam/jobtrail
cd jobtrail
uv sync
cp .env.example .env # fill in Supabase credentials
uv run fastapi dev