Loading repository data…
Loading repository data…
thughari / repository
AI-powered, open-source platform that tracks job applications automatically by parsing job emails. Built with Spring Boot & Angular.
A transparent discovery signal based on current public GitHub metadata.
This score does not audit code, security, maintainers, documentation quality, or suitability. Verify the repository and its current documentation before adoption.
"I stopped using Excel to track my job applications. I architected an Enterprise-Grade platform instead."
JobTrackerPro is a robust, full-stack solution designed to visualize, automate, and manage the interview pipeline. Unlike simple CRUD tutorials, this project demonstrates Advanced System Design, Cloud-Native Architecture, and Production-Grade Security.
dev branch is the primary development branch.main branch is reserved for stable, production-ready releases.JobTrackerPro is built as a highly automated, decoupled system focusing on security, latency reduction, and seamless user experiences.
flowchart TD
%% Styling
classDef service fill:#4A90E2,stroke:#357ABD,stroke-width:1.5px,color:#fff;
classDef utility fill:#50E3C2,stroke:#34A790,stroke-width:1.5px,color:#333;
classDef storage fill:#F5A623,stroke:#C68015,stroke-width:1.5px,color:#fff;
classDef trigger fill:#D0021B,stroke:#9E0010,stroke-width:1.5px,color:#fff;
A[Gmail Webhook / Push Notice]:::trigger --> B(GmailWebhookService):::service
B --> C{SmartExtractionService}:::service
%% Template Ingest Pathway
C -->|LinkedIn / Indeed Template| D(TemplateParser):::utility
D -->|Extract Role & Company| E{Body Template Matches?}
E -->|Yes| F[Extract from Body & Clean Location]:::utility
E -->|No| G[Extract from Subject & Find Location]:::utility
D -->|Extract & Clean URL| H[UrlParser: Decode next= Parameter]:::utility
D -->|Determine Status| I[Strip Safety Warnings & Scan Keywords]:::utility
%% AI Ingest Pathway
C -->|Unmatched Emails| J{app.gemini.enabled?}
J -->|true| K(GeminiExtractionService):::service
J -->|false| L(MockGeminiService):::service
%% Job Matching & Storage
F --> M(JobService: createOrUpdateJob):::service
G --> M
K --> M
L --> M
M --> N{findBestMatch}:::service
N -->|Stricter Token Matching for Short Names| O[Update Existing Job & Append Notes]:::storage
N -->|No Active Match| P[Create New Job Entry]:::storage
O --> Q[(Database: PostgreSQL)]:::storage
P --> Q
Q --> R(Caffeine Cache Eviction / Angular Signal Update):::service
The system operates across four key pipeline phases:
GmailWebhookService.SmartExtractionService): Ingested emails are routed through a @Primary interceptor. It checks if the email is a standard template from LinkedIn or Indeed.
MockGeminiService if offline).TemplateParser)Java Backend Developer - MS parses Java Backend Developer - MS as the role and Capco as the company).apply.indeed.com confirmation links, extracts their next= query parameter, URL-decodes it, and stores the direct public listing URL (e.g., https://in.indeed.com/viewjob?jk=...), reducing length from 220+ to ~50 characters.Remote 95 reviews -> Remote) and filters safety warning disclaimers to prevent false matches (e.g., preventing "without an interview" from triggering an Interview Scheduled status).JobService)JobService.createOrUpdateJob(), it compares the company and role with your active board entries:
MS), it requires an exact word-token match rather than a simple substring contains check (preventing MS from matching ORION SYSTEMS).| Domain | Technology | Key Usage |
|---|---|---|
| Backend | Java 21 | Modern JVM features (Records, Pattern Matching) |
| Framework | Spring Boot 3.4 | REST API, Security, Data JPA |
| Database | PostgreSQL | Supabase managed instance (Transaction Mode) |
| AI Model | Gemini 2.0 Flash | Intelligent email parsing |
| Storage | Cloudflare R2 | S3-compatible object storage |
| Frontend | Angular 17 | Signals, Standalone Components, Optimistic UI |
| Styling | TailwindCSS | Utility-first styling, Dark Mode |
| DevOps | Docker & Cloud Run | Containerized serverless deployment |
The repository is structured as a Monorepo:
JobTrackerPro/
├── backend/ # Spring Boot API
│ ├── src/main/java/ # Controllers, Services, DTOs
│ ├── src/main/resources/ # Configurations for local, dev, prod # use local for dev
│ ├── Dockerfile # Backend Container Config
│ ├── scripts # Utility Scripts (e.g., simulate-email.sh)
│ └── service.yaml # Google Cloud Run Config
├── frontend/ # Angular UI
│ ├── src/app/ # Components, Services, Guards
│ └── tailwind.config # CSS Configuration
├── .github/workflows/ # CI/CD (GCP Cloud Run & GitHub Pages)
├── docker-compose.yml # Local Dev Infrastructure
└── README.md # Documentation
You can run the entire ecosystem locally with zero configuration. The app automatically uses Mock AI and Local File Storage so you don't need any paid API keys to start contributing.
Requires Docker Desktop. This starts PostgreSQL and MailHog (Email Trap).
docker-compose up -d
cd backend
./mvnw spring-boot:run
cd frontend
npm install
npm start
http://localhost:4200.http://localhost:8025 (MailHog).scripts/simulate-email.sh to see the Mock AI create jobs automatically.| Interactive Dashboard | Profile & Automation |
|---|---|
| Real-time D3.js analytics and charts | Email forwarding setup and secure settings |
Contributions are welcome!
git checkout -b feature/AmazingFeature).dev.This project is licensed under the MIT License.