Luna CertSys.
A certificate system for Barangay Luna, Surigao City, Philippines, built as a web admin panel and a mobile app on one database. Residents request, pay for, and track their certificates from a phone, and the barangay reviews and releases them.
A problem worth exploring.
A barangay certificate usually means a trip to the barangay hall: fill in a form, wait your turn, pay at the counter, and come back when it is ready. On the other side of that counter, someone has to keep every request, payment, and resident record straight. Luna CertSys brings the whole exchange into one system, from the first request to the released document.
Less friction. More intention.
Give each of the three roles only what it needs. A resident signs up with a photo of their face, and the chairman of their purok approves the account before it can be used. After that a certificate takes a few taps: pick the type, state the purpose, pay with GCash or PayMaya, and watch the status change. Barangay staff work from a web panel where walk-in and mobile requests share one list, with payments and reports beside it, and the database itself decides who can see what.
- Certificate requests from a phone, with live status and push notifications at every step.
- Sign-up with a face photo, approved by the resident’s own purok chairman.
- GCash and PayMaya payments, and certificates issued as ready-to-print PDFs.
- A web admin panel for residents, requests, payments, and reports exported to PDF.
Inside the build.
- Resident & chairmanReact Native · Expo · TypeScript
- Shared data & accessSupabase · PostgreSQL · Row-level security
- Barangay adminVue · Vite · Pinia
- Authorize at the database
- Residents, purok chairmen, and admins share one database. Row-level security defines what each role can read and change, so permissions apply to both the web and mobile clients.
- Follow the whole request
- Registration approval, certificate selection, payment, review, and PDF release belong to one workflow. A resident’s status and the admin’s queue refer to the same request.
- Demonstrate all three roles
- The browser demo shares fictional data across resident, chairman, and admin views. It makes the handoff visible without requiring accounts, live payments, or access to resident records.
Checks & walkthrough
Create a sample request in the resident view, switch to the chairman or admin view, and follow it through review and release. The public demo uses browser data; the client system uses Supabase.
What the system enables.
- Before
- Residents filled in forms and followed up at the barangay hall, while staff kept requests, payments, and resident records straight at the counter.
- With Luna CertSys
- Residents can request, pay, and track from their phone. Chairmen review requests, and staff manage them through release in a shared web panel.
What this project taught me.
Three roles on one database meant the rules had to live in the database. Once row-level security decided what a resident, a chairman, and an admin could each read and change, both apps became simpler, because neither one had to be trusted to hide anything.
BUILT WITH
- Web admin
- Vue, TypeScript, Vite, Vue Router, Pinia
- Mobile app
- React Native, Expo, TypeScript, React Navigation
- On the device
- Expo Camera, Face detection, Push notifications, Maps
- Shared backend
- Supabase Auth, PostgreSQL, Row-level security, Supabase Realtime, Supabase Storage
- Documents
- jsPDF, Expo Print
- Payments & email
- PayMongo, Brevo
- Mobile builds
- Expo EAS
PediaSafe
Ward incidents, reported without a name.
