OJT_Log.

A technical log of my internship progress, engineering challenges, and architectural decisions.

James Anthony O. Rosales

James Anthony O. Rosales

BS Information Technology

CHED Regional Office V (ROV)HEMIS Division Placement
Bicol University College of Science (BUCS)
Hours Rendered402 / 486

~/entries

[10 files]
WK_10

Putting INSIGHT on Hold and Focusing on Form B Data Consolidation

This week, I placed the INSIGHT project on hold and shifted my focus to cleaning and consolidating Form B data from multiple years. Instead of continuing system-side uploads, I worked on preparing the datasets externally through Python scripting, which proved to be a more practical and reliable approach at this stage.

My main task was to clean the raw Excel and CSV files and create a consolidated view of the Form B records. Since the forms came from different academic years and followed varying formats, I used Python scripts to standardize the structure, clean inconsistent values, and generate usable consolidated outputs. This helped make the data more organized and easier to review before any future integration into a system.

The INSIGHT system was temporarily paused because uploading all of the raw files directly into the platform would require rigorous mapping for each form type. Given the volume of files and the differences in layout across years, forcing everything into the system immediately would have taken more time and introduced more errors. For the meantime, Python-based data processing was the better solution because it allowed faster cleanup, more controlled transformations, and clearer validation of the outputs.

Through this process, I was able to improve the readiness of the Form B datasets while also identifying the kinds of structural differences that would need to be considered later if INSIGHT resumes. Rather than rushing incomplete uploads, I focused on producing cleaner and more dependable consolidated data first.

Read_More
WK_09

Stabilizing CAFÉ in Production and Reframing INSIGHT Strategy

This week, I split my effort between production support for CAFÉ and core data strategy work for Insight.

For CAFÉ, I focused on production patches because active issues surfaced in live use. I applied targeted fixes to address errors quickly and keep the system stable for users. The goal was to reduce disruption, prevent repeat failures, and keep operations smooth while the platform is already in production.

For Insight, I explored a major direction change. I created a separate branch to redesign the schema and shift to PostgreSQL, since the project is heavily analytics-focused and I am working with row-based dataset uploads from Excel files submitted by HEIs. During this exploration, I found that row-level mapping was still too inaccurate and required too much manual intervention. Because of that, I decided not to force the new path yet. I kept the current structure and moved forward with a consolidated dataset upload approach, which is more practical and stable at this stage.

I also continued improving analytics workflows, including dashboard and table improvements, enrollment warning handling, and automatic warning-fix actions to reduce repetitive cleanup work.

Read_More
WK_08

Building the Foundation of INSIGHT Analytics

This week, I focused on building the core analytics foundation of Insight, which was newly assigned to me. The system’s main direction is analytics, especially handling CHED enrollment data using a data warehouse-style approach. My priority was to establish a clean flow from source data to analytics-ready structures that can support reporting and long-term analysis.

I worked on core dataset analytics features and built generic dataset processing services to make the pipeline more reusable and maintainable. I also integrated Vue and Chart.js for visual reporting so analytics outputs are easier to interpret through dashboards and charts. To improve reliability and speed, I implemented enrollment analytics caching and summary rebuilding, which helps keep reports consistent while reducing repeated heavy computations.

I also implemented HEIDA data synchronization and improved the dataset processing flow to ensure incoming data is transformed and prepared more cleanly for analytical use. Alongside analytics work, I completed supporting system tasks such as user management improvements (status toggling, role updates, and admin pages), authentication integration, and interface/navigation updates. These changes helped stabilize the platform while analytics capabilities were being expanded.

Outside coding, I continued supporting office operations whenever development windows were lighter, including assistance for records-related document handling. This helped maintain operational continuity while core system development moved forward.

Read_More
WK_07

Polishing Form Workflows and Supporting Records Operations

This week, I focused on improving form reliability and editor usability in CAFÉ. I implemented double-submission prevention to make form sending safer and avoid duplicate records. I also improved answer handling by adding a “last saved” timestamp with live updates, so users can better see when their input is being captured.

On the form builder side, I added bulk option tools so choices can be added or cleared faster, which helps when preparing large question sets. I also fixed practical UI issues such as dropdown overflow and question reordering behavior in create/edit pages. These updates made the form setup flow cleaner and less error-prone for staff users.

I also worked on export and deployment-related improvements. I replaced the XLSX export path with an ExcelJS-based approach for better performance and dynamic loading, and handled supporting updates like build/deploy command fixes, Vite fixes, and dependency cleanup.

Outside coding, I supported office operations by helping the Records section with stamping documents for release whenever I was not actively coding in the HEMIS unit. This helped keep document processing moving while development work continued.

Read_More
WK_06

Strengthening CAFÉ and Supporting Daily Office Operations

This week, I focused on improving CAFÉ’s spreadsheet features and making the monitoring tools more useful for staff. I worked on autosave, lock handling, response ownership checks, readonly view consistency, and export improvements. I also implemented and refined HEIDA prefill support for spreadsheets, including settings updates and better sorting based on latest submissions.

On the monitoring side, I helped enhance the dashboard by adding clearer response details, a pending respondents view, reminder queue support, and pagination. These updates made it easier for staff to track participation and follow up where needed. I also contributed UI and routing improvements, including custom 403 and 404 pages, and continued polishing form and file gate related functionality.

Aside from development work, I also provided office IT support by troubleshooting printers whenever staff requested help. Most issues were resolved through hardware cleaning and proper driver installation, which allowed access to maintenance tools and restored normal printing operations.

Read_More
WK_05

Shipping Features While Supporting Operations: APIs, Exports, and IT Ground Work

This week felt like a full mix of development and real operational support. On the coding side, I pushed important updates to CAFÉ around spreadsheet workflows, export flexibility, short-link routing, file-gate usability, timezone handling, and certificate generation stability. I also improved the certificate designer behavior (better default field sizing on drop), cleaned up stale preview handling, and refined caching behavior for certificate backgrounds to make previews more reliable.

A big technical milestone was expanding backend capabilities with a Spreadsheets API (CRUD + policies), plus upgrades to spreadsheet interaction (fullscreen mode, row/column controls, and better UI layering). I also delivered certificate-related improvements like font synchronization to S3 and bulk certificate download, then added more granular export controls so users can export selected individual responses with clearer export type options.

Beyond coding, I also handled major support work this week. On March 17, I helped with CHEDROV’s laptop donation prep by inspecting old units, checking usability, installing fresh OS images, and resetting devices for turnover readiness. I also prepared a quotation comparison report for bidding-related network services (including VPS/object storage), and benchmarked offers against market providers such as Contabo and DigitalOcean to support more informed procurement decisions.

Read_More
WK_04

Data Migration to Live Workflows: Spreadsheets and OneTouch Integration

This week focused on expanding CAFÉ beyond forms into more complete operational workflows. A big part of my work was preparing the system for real data and real users: I updated the seeder command, fetched and imported CSV data for existing responses, and adjusted the report templates to work properly with S3 now that the application is running in production. These tasks helped make the platform more aligned with actual deployment needs rather than just development testing.

Another major milestone this week was the spreadsheet module. I worked on building out spreadsheet creation, editing, saving, exporting, summary views, and response handling, then extended it so HEI users could also interact with spreadsheets through their own side of the system. As the module grew, I also improved smaller but important parts such as sheet naming consistency, worksheet switching behavior, locked cells, exports, settings panels, response summaries, and user-facing pages like submissions and spreadsheet views. By the end of the week, the spreadsheet feature had become a much more complete and usable part of the platform.

I also worked on CHED OneTouch integration, connecting the application to the organization’s authentication flow so users can sign in through the official OneTouch system. This included configuring the authentication provider, updating the UI and route behavior, and making sure sign-in and redirection worked cleanly inside the existing panel. Alongside that, I handled several production-related refinements such as certificate preview support, S3-based background image access, improved sharing links, and fixes around forms, file gates, and response handling.

Read_More
WK_03

In Production and Still Shipping: Certificates, Reports, and Real-World Fixes

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.

Read_More
WK_02

Leveling Up: Shared Access, Smart Forms, and a Canvas Certificate Designer

Week two kicked off with a flag ceremony on Monday morning before heading back to the keyboard. This week was all about depth — refining what was built last week, adding major new features, and pushing the system closer to production-ready. By the end of it, CAFÉ was already live.

What I Built This Week

Monday picked up right where last week left off. I finished and refined the conditional question logic — ensuring that hidden fields are properly skipped during validation, answer saving, and response display across all form views (admin, HEI, and public). I also wired up the Repeater field to display correctly in summaries, connected the File Gate to the HEI account flow, and built the Excel export for form responses.

Tuesday and Wednesday were heavily focused on field type expansion and file uploads. I added the Date field type, built out the Repeater sub-field validation, and significantly overhauled the file upload system — extending it to support multiple file uploads per question. I also added date range filters to the forms table and Excel export, implemented the multi-file FileGate, and introduced the Stakeholder role with its own scoped access to forms and dashboard widgets. I also shipped the REST API with personal access tokens (Laravel Sanctum), giving administrators a scoped API to interact with the system programmatically.

Thursday brought two big additions: the Rating question type (configurable star count), an entirely new audience type for Data Requesters, and — Shared Form Access for CHED staff, allowing forms to be co-managed by multiple staff members. I also implemented HEI User Management, letting an HEI admin create and manage sub-users for their institution, and added institution-wide response tracking so HEI managers can see submissions from all users under them.

Friday was a major milestone on two fronts. On the development side, I completed a thorough access control and policy pass — implementing formal Laravel Policies for FileGate and FormResponse, adding created_by ownership tracking to FileGates, building an audience-aware "Access Link" column in the FileGates table, and enforcing API middleware so only enabled admins can access the API. On the operations side, this was the day CAFÉ officially went live — the CHED Staff from our division, HEMIS (Higher Education Management Information System), deployed the application to production. Seeing a system I helped build from scratch get deployed within the same week I started was a moment I won't forget.

Saturday closed the week with the Certificate Template Designer — a Canva-style canvas editor (powered by Konva.js) that lets CHED staff design certificates, map form response fields onto text layers, and bulk-generate and export them as a ZIP of PDFs. I added font options, keyboard shortcuts, PDF A4 orientation support, a live preview overlay, and static text support. I also shipped a Form Copy feature that duplicates a form along with all its sections, fields, and settings.

Read_More
WK_01

Brewing Something Big: My First Week Building CAFÉ for CHED RO V

Started my OJT at CHED Regional Office V this week. After a short orientation, I was handed my first real assignment: build CAFÉ (Custom Adaptive Forms & Evaluations) — a centralized digital portal that lets CHED staff create forms, collect responses from HEIs, students, and stakeholders across Region V, and gate official downloadable files behind form completion.

What I Built This Week

By the end of the three days, I had laid down the entire foundation of the system — from user roles and a custom form builder, to public form pages, a file-gating mechanism, and response analytics.
I set up a multi-role user system (Administrator, CHED Staff, HEI, Stakeholder) where each role only sees what it's supposed to. From there, I built the custom form builder that lets CHED staff create dynamic, typed-question forms and target them to specific audiences. I also implemented the File Gate feature, which lets staff upload files that respondents can only download after completing a linked form.

On the respondent side, I created public-facing form pages, updated the landing page to surface available forms per audience, and built the My Responses page for HEI users to track their submissions. On the admin side, I built dashboard widgets for response stats and wired up the form summary view — with tabbed breakdowns showing aggregate answers per question and individual per-respondent responses.

Read_More

~/ OJT_Journal v1.0.0

Built with Next.js & Supabase