Hari Thatikonda

Feb 02, 2026 • 3 min read

Beyond the Spreadsheet: Architecting a Production-Grade Job Tracker with Java 21 & AI

How I designed a zero-manual-entry job tracker using Spring Boot, webhooks, and LLMs

Beyond the Spreadsheet: Architecting a Production-Grade Job Tracker with Java 21 & AI

We’ve all been there: You apply for 50+ roles across LinkedIn, Indeed, and direct company portals. Within 48 hours, your inbox is a chaotic mix of "Application Received," "Technical Assessment," and "Interview Invite" emails.

Most people reach for a spreadsheet. But as an engineer, I saw a System Design challenge.

I wanted a system that was automated, intelligent, and enterprise-grade. I wanted to move from "tracking jobs" to "analyzing my career pipeline."

So, I built JobTrackerPro.


🏗️ The Architecture

JobTrackerPro is a decoupled, full-stack ecosystem. I focused on three core pillars: Automation, Performance, and Security.

1. 🤖 AI-Driven Ingestion (The "Magic" Step)

Manual entry is where productivity dies. I engineered a pipeline that turns your inbox into a data source.

  • The Flow: User forwards an email --> Cloudmailin Webhook --> Spring Boot --> Google Gemini 2.0 Flash.

  • Fuzzy Logic: The system uses Jaccard Similarity to determine if an email is a new job or an update to an existing record (e.g., status changing from "Applied" to "Interview").

  • Multilingual: The AI processes emails in any language (Dutch, German, etc.) and translates the metadata to English on the fly.

2. ⚡ Latency Zero: Caching & Performance

To ensure the dashboard felt "instant," I implemented a multi-layered performance strategy:

  • Caffeine L2 Cache: User profiles and stats are stored in-memory, reducing database query latency to < 10ms.

  • Server-Side Excellence: Pagination, Searching, and Sorting are all offloaded to PostgreSQL (using Spring Data Pageable) to handle 1000+ entries without browser lag.

  • Java 21 Power: Using modern JVM features to keep the code concise and thread-safe.

3. ☁️ Atomic Cloud Storage

Instead of bloating the database with images, I used Cloudflare R2 (S3-compatible). I implemented Atomic Cleanup: whenever a user updates their photo, the backend automatically issues a `deleteObject command to remove the old file, keeping cloud costs at zero.


🎨 Frontend Reactivity with Angular Signals

I moved away from heavy RxJS boilerplate for local state and embraced Angular 17 Signals.

  • Fine-grained Reactivity: Only the specific UI segments (like a progress circle) re-render when data changes.

  • Hybrid UI: I designed a high-density grid for Desktop and a custom Expandable Card System for Mobile, ensuring the experience is seamless on any device.


🛡️ Security First

I didn't want to compromise on security. The app features:

  • Hybrid OAuth2: Sign in with Google/GitHub or Email/Password.

  • Identity Merging: A custom handler that links social identities to local accounts based on verified emails.

  • Stateless JWT: Secured via RS256 signing for all REST communication.


🚀 Open Source & "Sandbox" Mode

I believe in building in public. I designed a Sandbox Mode for contributors:

  1. Mock AI: No API key? No problem. The app uses a mock service that returns realistic data for local testing.

  2. Local Storage: Files save to a local folder instead of R2.

  3. MailHog: Outgoing emails are trapped in a local UI for debugging.


Check out the project!

I’m currently looking for feedback on the AI parsing logic and looking for contributors interested in adding Google Calendar integration!

Let me know what you think in the comments! 🚀

#builders #springboot #angular #java #systemdesign #opensource

Join Hari on Peerlist!

Join amazing folks like Hari and thousands of other builders on Peerlist.

peerlist.io/

It’s available... this username is available! 😃

Claim your username before it's too late!

This username is already taken, you’re a little late.😐

0

3

0