Today wrapped up my six-week software developer internship with the Department of Science and Technology under Project LODI. As a DOST scholar, the onboarding bypassed traditional technical interviews, but the codebase made sure the technical test happened on day one.
I was assigned to the Balik Scientist Program Management System (BSPMS). The program gives incentives to Filipino scientists working abroad to return home and share their expertise. The system itself is a monorepo split into two Laravel 11 applications: a public portal where scientists submit applications, and an internal administrative dashboard used by staff. My focus was the admin dashboard backend.
Setting up on day one
Before writing any code, I had to get the repository running locally on Fedora.
The first hurdle hit immediately. Network timeouts on port 22 forced me from SSH to HTTPS. Next, key generation threw fatal errors because my local environment was missing the PHP GD extension. Once the extension was enabled and dependencies installed, the backend finally booted.
I also opted to use Bun instead of npm for local frontend asset builds, keeping tooling configurations isolated through a personal gitignore to avoid polluting team commits.
The report generator grind
Most of my second through fifth weeks did not involve building flashy interfaces. The priority was backend data extraction and generating official PDF reports.
Government reporting is unforgiving. If a PDF report displays duplicate rows or wrong counts, administrators notice immediately. Early on, I tackled bug fixes where complex relational joins caused duplicate rows in table exports. Another task required mapping the geographic distribution of awardees across host institutions.
Extracting clean metrics out of MariaDB required joining several related models and grouping by regional identifiers. A straightforward count was not enough because single institutions can host multiple scientists. I had to use raw SQL aggregates within Eloquent to execute distinct counts directly on the database engine.
While building these reports, I ended up auditing older queries and refactoring bottlenecked joins that were slowing down exports. Streamlining those queries made the PDF generation noticeably faster.
Building administrative library modules
During the final stretch, my focus moved from reporting to core administrative features. I built full CRUD functionality for several system library modules that act as the source of truth for classification tags and selection menus across the platform.
The work involved:
- Writing database migrations and setting up Eloquent models.
- Handling active and inactive status toggles without breaking existing relations.
- Implementing search filters and server-side form validation to prevent malformed records.
It was satisfying to close the loop. I started the internship writing aggregation queries to extract data from the database, and finished by designing the administrator flows that feed clean data into it in the first place.
What stuck with me
Six weeks went by fast. Working entirely through remote consultations with my mentor pushed me to debug issues independently before asking for help.
The biggest takeaway for me is that backend engineering in the public sector is about accuracy over flashiness. When a system tracks national scientists and institutional grants, database integrity, audit consistency, and clean CRUD flows matter a lot more than whatever frontend framework is trending this week.