OWBAP — One Window Bayanihan Assistance Program
The Department of Migrant Workers needed a single entry point for distressed OFW cases that several agencies could work from together. I led a team of four as lead developer, team leader and systems analyst: I designed the architecture, analysed the core business processes, and built the case tracking and referral workflows. Authentication was the hard part, so it got email OTP, TOTP multi-factor, role-based access control, audit logging and rate limiting. I also wrote the technical documentation covering architecture, API contracts, deployment and CI/CD.
Overview
The Department of Migrant Workers needed a single entry point for distressed OFW cases that several agencies could work from together. Case tracking and referral workflows are centralised across multiple government agencies, so a case raised in one office is visible and actionable in another instead of being re-filed. Laravel 13 and React are wired together through Inertia.js, with PostgreSQL behind it, Redis for caching and queues, and S3-compatible object storage for case file attachments.
My role
Capstone lead developer, team leader and systems analyst, for a team of four. I designed the system architecture and analysed the core business processes, then authored the technical documentation covering architecture, API contracts, deployment and CI/CD.
Screenshots

Screen 1 of 1
Mobile — 4 screens




Lessons learned
- System analysis & design
Analysing the core business processes across several agencies came before any code — that analysis is what the case tracking and referral workflows were built from.
- Authentication & access control
Email OTP, TOTP multi-factor, role-based access control, audit logging and rate limiting on one system. Security here was a set of layers, not a single gate.
- Leading a team
Leading four people meant the architecture had to be legible to someone other than me before it was worth anything.
- Technical documentation
Writing the architecture, API contract, deployment and CI/CD docs forced decisions I had been leaving implicit.