In Production and Still Shipping: Certificates, Reports, and Real-World Fixes
~/core_tasks
Week three had a different feel. CAFÉ was already live in production, so everything this week had real consequences — features hitting actual users, bugs needing immediate fixes, and requests coming in from the division themselves. It kept things exciting.
What I Did This Week
Monday (March 2) was a split day — in the morning I stepped away from the keyboard to assist with a printer installation for the office. Once that was sorted, I got back to building and shipped auto-generation of personalized certificates on form submission. Now when a respondent completes a form with a certificate template attached, a certificate is automatically generated and stored for them. I also added certificate download buttons to the file gate success screen and the My Responses page so respondents can grab their certificates right after submitting.
Tuesday (March 3) was all about report generation. I built the CSM (Customer Satisfaction Measurement) report module — a dedicated report type for CHED's satisfaction surveys. This involved adding a type column to forms to tag CSM forms, creating report templates, and implementing the logic to generate formatted Excel summary and dimension analysis reports from CSM form responses. I also seeded the database with a sample CSM form and response data for testing.
Wednesday (March 4) was a big infrastructure and polish day. With the app now running in production, file storage had to be moved to AWS S3 — so I refactored all certificate and file download paths to use S3 instead of the local disk. I also added two new condition operators — is_answered and is_not_answered — so form builders can now show or hide questions based purely on whether a previous field has any response. On top of that, I fixed bugs in the question card logic, improved file upload handling, and updated the FOI feedback form seeder to properly wire rating-based conditions.
Thursday,Friday, Satruday (March 5-7) I built a seeder for the existing live CSM form — importing real 2026 response data into the system so the report generation module could be validated against actual data from the field.
~/tools_used
Laravel, Antigravity, VS Code, XAMPP, Git, GiHub
~/challenges_solutions
The trickiest part of auto-certificate generation was making it happen seamlessly on submission without slowing down the user's response — the GD image rendering and file storage had to happen cleanly inside the transaction without breaking the existing submission flow.
Switching to S3 mid-production was a careful operation. Files were already being written to local disk in the live environment, so the refactor had to make sure new uploads and certificate writes all pointed to S3 while not breaking existing references. The storage disk configuration was updated across all relevant services and controllers.