Case study / 07 / Job application assistant
ApplyPH
A mobile-first job application assistant for Filipino job seekers, combining guided resume workflows, evidence-linked job matching, application packages, and tracking in a privacy-aware PWA.
Public demo not yet available

ApplyPH / Interface overview
01 / Context
The problem to solve.
Job seekers need to compare their real experience with a vacancy and prepare tailored documents without introducing unsupported claims or exposing private resume data.
02 / Approach
From need to interface.
ApplyPH guides applicants through resume intake, evidence-linked matching, follow-up questions, application-package generation, review, download, and tracking while requiring confirmation for factual changes.
What I built
- Responsive, mobile-first interface
- Private document and resume workflows
- Application tracking with offline support
- Automated and browser test foundations



03 / Implementation
How it fits together.
A Next.js and TypeScript PWA uses server-rendered routes and protected server APIs. Supabase provides authentication, PostgreSQL persistence, row-level ownership controls, and private file storage. Provider adapters support mock and planned live AI/payment modes; Docker and Node deployment files target a DigitalOcean VPS.
Decisions that shaped the build
- Made evidence atoms and explicit confirmation the source of truth for generated facts
- Revalidated sessions and roles on the server instead of relying on hidden frontend controls
- Used deterministic mock providers so core workflows remain testable without paid credentials
Challenges
- Keeping generated claims traceable to applicant-confirmed evidence
- Protecting private documents and owner-scoped records
- Preserving progress across multi-step AI, payment, and document workflows
04 / Delivery & lessons
Built, tested, and still learning.
Testing
Vitest covers validation, authentication policy, environment safety, downloads, PDF generation, application services, and other domain behavior. Playwright covers public pages, authentication, profile, matching, packages, downloads, payments, tracking, admin operations, security headers, and responsive layouts. Run `npm test` and `npm run test:browser`. Runtime Supabase RLS and Storage tests still need a working local Supabase environment; no coverage percentage is claimed.
Deployment
Next.js Node and Docker deployment path configured; public launch pending.
What I took forward
- AI output should be treated as untrusted input and validated against confirmed facts
- Authorization must be enforced at every server and database boundary
- Idempotent workflow steps make retries safer for document and payment operations