Development Changelog
This log covers the full 6-week internship period. Entries reflect daily development work, architectural pivots, and bug discoveries in the order they occurred.
Week 1 — Feb 2–6 · Initial Setup & Core Architecture
Feb 2 — Laravel project setup. Git initialized. Core packages installed: Livewire, Filament, Sanctum. Local dev environment verified with OrbStack.
Feb 3 — Initial database migrations for users and barangay tables. User model configured with fillable fields, casts, and soft deletes. Spatie Laravel Permission integrated with initial roles seeder.
Feb 4 — Bataeño Pass SSO implemented via OAuth 2.0 (BataenoAuthController). OAuth redirect URI moved to environment variable for deployment portability.
Feb 5 — Online and walk-in document request flows documented. Walk-in test coverage added. nullable requester_id introduced on document_transactions to correctly model official-initiated walk-in requests.
Feb 6 — Frontend migrated from Vue.js to Laravel Livewire. SSO flow verified regression-free after migration.
Week 2 — Feb 9–13 · Admin Panel, Document System, Real-Time
Feb 9 — Filament admin panel setup completed. Spatie permission integration into panel. User management (role assignment, barangay filtering) added.
Feb 10 — Document request form built in Livewire. Dynamic required field rendering driven by document_type_properties model and a shared Blade component.
Feb 11 — Full document request and signing lifecycle implemented. GovernanceService built for signing authority validation. DocumentController and DocumentRequestController with API routes. Feature tests with access control validations.
Feb 12 — Laravel Reverb configured for WebSocket broadcasting. Private channels for officials and residents. DocumentRequestCreated and DocumentIssued events implemented.
Feb 13 — Official Filament Panel introduced with resources and dashboard widgets. Barangay statistics dashboard added. PDF generation via Blade + Spatie Browsershot + Puppeteer. Barangay-level access control middleware configured.
Week 3 — Feb 16–20 · Profile, NFC, Household Architecture
Feb 16 — Bug fix: Former officials could still access the system after their term ended. Fixed by validating ended_at IS NULL on panel access. Bug fix: Misconfigured field prevented residency requests from proceeding. Dynamic barangay switching via household profiles implemented.
Feb 17 — Resident profile page overhauled: new profile photo engine, Outsider user type support, password management section, session security controls.
Feb 18 — NFC infrastructure built: UID Bridge formatting fixes, UID map support, real-time NFC reader status broadcast. NFC reader integrated into Walk-In Request workflow.
Feb 19 — IndigencySPSCertificate and SoloParentCertificate models and migrations created. Both registered in document_type_properties. Rendering verified through shared PDF template pipeline.
Feb 20 — Household data architecture introduced: House, Household, HouseholdMemberProfile models and migrations. ResidencyRequest model added as the pending application holding table.
Week 4 — Feb 23–27 · Household Dashboard, Residency Approval, Lineage, barangay_id Migration
Feb 23 — Resident-facing Livewire household dashboard built: view active residences, switch presence, register new residence, join existing. Household Head invitation workflow with debounced search and automatic address inheritance.
Feb 24 — Official-side residency approval workflow: auto-creation of house and household, head assignment, barangay_id sync. User-centric document storage path established.
Feb 25 — Full platform migration from barangay_code string identifiers to barangay_id integer foreign keys across User, House, Household, Family, and BarangayTerm. UserObserver implemented for automated nuclear family lifecycle management.
Feb 26 — Lineage visualization upgraded from DOM/leader-lines to SVG-based D3.js + Alpine.js component. Zoom, pan, curved links, gender-coded gradients, deceased strikethrough. LineageSeeder updated for the new schema.
Feb 27 — Bataan Portal API resident lookup migrated to POST /api/user (form-data). OAuth scopes updated. PhilID QR parsing with custom blood type decoding (e.g., [1,7] → A+). 2-column manual lookup form redesigned. Double-Guard duplicate detection implemented.
Week 5 — Mar 2–6 · Inhabitants View, UI Overhaul, City Admin Panel
Mar 2 — Inhabitants Modal built for House resource (residents grouped by household, headcount badges, ownership tags). Household InfoList implemented. Bug fix: barangay_id scoping issue on House model causing cross-barangay data leaks.
Mar 3 — Landing page overhauled: WebGL animated gradient via Grainient.js, DotGrid with alpha transitions and hover radius scaling. Touch device detection for mobile. Bug fix: Ghost cursor initialized at off-screen (-1000, -1000) to prevent flicker on load. Copy updated to "Province-Wide, Digital First."
Mar 4 — BataenoAuthController updated for view-user and find-users OAuth scopes. Walk-in NFC flow simplified to local DB lookups only (external API removed). Resident registration wizard refined with nested form submission fix.
Mar 5 — City Admin Filament Panel introduced at /city-admin with municipality tenancy. canAccessPanel, getTenants, canAccessTenant, getActiveMunicipality, getActiveMunicipalityCode extended on User model. Read-only resources for Barangays, Officials, Residents, Families, Houses, Households.
Mar 6 — Reusable BarangayFilter class introduced for panel-aware barangay scoping. HouseholdResource infolist restructured to two-column desktop layout. Bug fix: Mobile RepeatableEntry member grid stacking fixed by forcing Grid::make(2) at all breakpoints. Eager loading and Cache::remember applied for N+1 elimination. Document processing moved to queue jobs.
Week 6 — Mar 9–10 · Performance, Queue Jobs, Final Testing
Mar 9 — Laravel Telescope integrated for request profiling. Queue jobs ProcessDocumentRequest and ProcessDocumentApproval finalized with database driver. Bug fix: Super Admin tenancy bypass missing from canAccessTenant(), blocking cross-panel access. Bug fix: DocumentIssued Reverb broadcast consolidated into Filament notification system to remove redundant event. Performance improvements:
- Request-level caching on
getActiveBarangayIds Cache::rememberongetTenantsfor Super Admin- DB indexes on
deleted_atand composite FK columns - Channel authorization caching with 15-minute TTL
Mar 10 — End-to-end verification of document queue job pipeline. Final testing of City Admin resources, barangay filter scoping, inhabitants modal panel-awareness. Change log and daily accomplishment reports finalized.
Bug Index
| Date | Bug | Fix |
|---|---|---|
| Feb 16 | Former officials retained system access after term ended | Validate ended_at IS NULL on panel access |
| Feb 16 | Misconfigured field blocked residency requests | Field corrected |
| Feb 18 | UID Bridge formatting mismatch on NFC tap | UID map lookup corrected |
| Mar 2 | House model scoping leaked cross-barangay data | barangay_id relationship corrected |
| Mar 3 | Ghost cursor flickered on page load | Cursor initialized off-screen |
| Mar 4 | OAuth 403 on Bataan Portal API | Migrated to POST form-data, updated scopes |
| Mar 5 | Notification link pointed to non-existent Filament route | Route corrected to Livewire path |
| Mar 6 | Mobile member grid stacked vertically | Grid::make(2) forced at all breakpoints |
| Mar 9 | Super Admin blocked from City Admin panel | Gate::before bypass added to canAccessTenant |
| Mar 9 | Term status badge crashed on Carbon::parse("Ongoing") | Default value corrected |
| Mar 9 | SelectFilter error combining ->relationship() with ->options() | Filter logic separated |