Software Engineering
JobTrail
Job Application Tracker
JobTrail demo
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
BackendFastAPI · SQLModel
DatabasePostgreSQL via Supabase
FrontendJinja2 + HTMX + Tailwind CSS (no React, no build step)
AuthSupabase magic-link email auth (Resend SMTP)
DeployRender (free tier, sleeps after 15 min idle)
CIGitHub Actions running pytest on every push
Architecture
JobTrail 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-version with 3.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
© 2026 Jhames Andrew Macabata