Profile
Fatih
Profile

Fatih

Contact
  • fatihaljabar@gmail.com
  • fatihaljabar.com
Languages
🇬🇧 English
🇮🇩 Indonesia
Home
About
Achievements
Projects
Contact
Back

Job Tracker

A job application tracker for Indonesian job seekers. Free, no ads, self-hosted, built for the reality of juggling 30–80 live applications at once.

Tech Stack :
GitHub Live Demo
Job Tracker

Timeline: July – August 2026

Overview

Tracking Lamaran (Job Tracker) is a job application tracker built for Indonesian job seekers who are juggling dozens of applications at once. An active job seeker can have 30–80 live applications, each with its own stage, schedule, contacts, and CV version. A spreadsheet holds some of that, but it doesn't remind you, doesn't store your documents, and doesn't calculate anything.

Live in production at trackinglamaran.site. Google sign-in, MySQL/MariaDB storage, document uploads via Cloudflare R2, and email delivery via Resend are all shipped and in active use, not a demo with sample data.

Dashboard overview

The Problem It Solves

Job hunting is a long process with many branches, and without a system, specific things go wrong in predictable ways:

  • Applying to the same company twice without realizing it
  • Missing an interview because it was never written down anywhere
  • Never knowing when it's actually appropriate to follow up, so follow-up never happens
  • Sending an outdated CV version to the one company that mattered
  • After three months, having no data to answer "why haven't I gotten a job yet?"
  • Letting a posting's deadline pass unnoticed

A spreadsheet solves part of this. It does not remind, does not store documents, and does not compute anything on its own.

North star metric: the number of users who mark one application as "Accepted," not signups, not applications logged. If nobody gets hired, this is just a polished notebook.

Key Features

  • Pipeline: 11 stages from wishlist to accepted, drag-and-drop, fully keyboard-reachable.
  • Applications: 14 fields per entry, search across 7 filters, tagging, archiving.
  • Timeline: every status change and manual note, in chronological order.
  • Statistics: pass rate per stage, average response time, which job sources actually reply.
  • Reminders and calendar: interviews, tests, follow-ups, deadlines, delivered by email through Resend.
  • Interview notes: questions, answers, feedback, and what to study next time.
  • Bookmarks and company wishlist: save a posting before applying, convert it to an application in one step.
  • Document storage: CV and cover letter versions uploaded straight to Cloudflare R2 via presigned URLs, no file ever passing through the app's own server.
  • Bilingual (Indonesian/English), light and dark themes, built mobile-first.

Application pipeline, drag and drop between stages

Tech Stack

LayerChoice
FrontendTypeScript, React 19, Vite, Tailwind CSS
BackendNode.js + Express 5, one process serving /api/* and the built frontend
DatabaseMySQL or MariaDB via Drizzle ORM
AuthGoogle Identity Services → signed session cookie
FilesCloudflare R2 via presigned URLs
EmailResend

Six server runtime dependencies in total: express, cookie-parser, drizzle-orm, mysql2, aws4fetch, zod. No framework beyond React, no Docker, no queue.

Development runs against MySQL 8; the deployed instance runs MariaDB 11.8, since that's what shared hosting provides, and the schema and every migration apply unchanged on both. The server runs TypeScript through Node's own type stripping rather than a build step, which sets the real floor at Node 22.6+.

Statistics That Actually Answer Something

Rather than a wall of counters, the statistics view is built around one question a job seeker actually asks: where in the funnel am I losing?

Statistics: funnel from applied to accepted, response times, most responsive companies

It breaks the funnel down stage by stage (applied → screening → HR interview → user interview → technical test → offer → accepted), tracks average response time from application to first reply, and surfaces which companies and job sources actually respond: the exact data a spreadsheet never computes on its own.

Privacy by Design

The contents of this app are a list of companies someone is applying to, often while still employed elsewhere. That makes it sensitive personal data by default:

  • No user can see another user's data.
  • Only name, email, and profile picture are requested from Google, nothing more.
  • No third-party trackers, no analytics scripts, no session recording.

Product Decisions Worth Noting

  • Interface is intentionally locked. The UI was validated first as a demo with sample data; the work since then has been making it a real service (accounts, permanent storage, documents, notifications), not redesigning what already worked.
  • No monetization, ever. Free is a product decision, not a temporary phase; there's no subscription tier planned.
  • No team or recruiter-facing features. This is a personal tool; one person's application data is never visible to anyone else, by design.
  • Success ends usage, and that's fine. People stop using it because they got hired, not because they churned. The product's own success metric (marking "Accepted") is read side-by-side with retention numbers so the two aren't confused.

Links

  • Live app: trackinglamaran.site
  • Source: github.com/fatihaljabar/application-tracker