← Back to home
Sole Developer

Lajur

A job-application tracker for Indonesian job seekers, with AI that reads job posts and company emails.

  • Next.js
  • React
  • TypeScript
  • Tailwind CSS
  • shadcn/ui
  • Prisma
  • PostgreSQL
  • Neon
  • Zod
  • Vitest
  • Playwright
  • Vercel
Lajur — screenshot 1
Lajur — screenshot 2
Lajur — screenshot 3
Lajur — screenshot 4
Lajur — screenshot 5
Lajur — screenshot 6
Lajur — screenshot 7
Lajur — screenshot 8
Lajur — screenshot 9
Lajur — screenshot 10
Lajur — screenshot 11
Lajur — screenshot 12
Lajur — screenshot 13

OVERVIEW

Applying to many companies at once makes it easy to miss deadlines, forget which CV went where, and reread long requirement lists such as minimum GPA, age limit, major and service bond. Lajur puts every application on a Kanban board whose columns follow Indonesian selection stages, from administration and online tests to psychotests, interviews, medical checkup and offering. Plain server code checks each job's requirements against your profile. The AI is optional: paste a job post and it fills in the form, paste a company email and it suggests the next stage, and nothing is saved until you review it. Names, contacts and addresses are replaced with placeholders before any text reaches the model, and the app works fully with AI turned off.

WHAT I DID

  • Built for daily use: H-3 and H-1 reminder emails through Vercel Cron and Resend that never send twice, follow-up dates, CSV export, account deletion, and a read-only demo account that resets itself every day.
  • Evidence-first AI: every field pulled from a job post or an email carries a quote the server checks against the source text, and anything the model invents is dropped before the user sees it. An early live run made up certificates, a GPA and salary figures, which is why that check exists.
  • Privacy by design: CV text and emails are redacted to placeholders before any model call and restored locally afterwards, login credentials in emails are masked, AI stays off until the user consents, and every query is filtered by the session user. CVs sit in a private bucket and open through 60-second presigned URLs.
  • A provider chain that degrades instead of breaking: Groq with two models, then Cloudflare Workers AI, strict JSON-schema output, one retry with the validation error fed back, and a per-user daily quota kept in Postgres. With no key or no provider, the manual form still works.
  • Deterministic wherever possible: eligibility checks, the quiet and ghosted statuses (derived from days without news, never stored) and all dashboard numbers are plain server-side code, covered by more than 230 unit tests plus Playwright end-to-end tests running in CI.