The Miracle Attendance PWA is officially finished. This was the final sprint and the longest I have done ever (but yeah it was broken in two major chunk of time). While the original goal was to integrate a full Computer Vision (CV) model for real-time face verification, Iâve had to make the difficult executive decision to shelf that specific feature for this version. Between the heavy academic load of Pure Mathematics exams and some recent health constraints, I didnât have enough time to arrange for the CV.
Today also marks the final day for Flavortown.
-
PII & Anti-Scraping
Canvas Rendering: I moved away from standard tags for personnel photos. By rendering the photo directly onto a element via photoBase64, there is no direct URL for a shoulder-surfer to find in the DevTools and âSave Asâ
The Total Blackout: The blurred CSS class was updated to be much more aggressive. Instead of a simple blur, I implemented filter: brightness(0) and opacity: 0. The moment the window loses focus (standard for Snipping Tools or Screen Recording software), the entire screen turns into a solid black void.
PII Shielding: All Personally Identifiable Information (Name, ID, Branch) was wrapped in the .secure-data class, making it non-selectable and protected by the blackout trigger.
-
Ghost Sessions
A major âscaryâ discovery was how the browserâs Back/Forward arrows allowed users to peek at previous sessions. I implemented a pageshow listener combined with event.persisted checks. Now, if the browser tries to pull the page from its internal cache (bfcache) during a back-navigation or a refresh, the script immediately fires sessionStorage.clear() and uses window.location.replace to kick the user back to the login page.
A. I ran into a frustrating ReferenceError where the dashboard wouldnât load.
A.1. I was âshadowingâ my global empData variable with a local one inside the loadPersonnelData function.
A2. Refactored the logic to use a separate fetched variable and updated the global state using Object.assign
B. Live Firebase Storage triggered CORS blocks. I had to manually set the CORS configuration via gsutil to allow my local and hosted origins to talk to the bucket.
Plusâ Personnel Dashboard to mark attendance is now live with a calendar! (donât have integration for Firebase Cloud Functions so attendance wonât be marked but core functioning is implemented)
Goodbye, Flavortown.
Changelogs referenced:
âhttps://github.com/adibuddies/attendance/commit/9c8eed8c52d82a01c0a628c399d830cda47633b1â: Updated firestore rules
âhttps://github.com/adibuddies/attendance/commit/004a470ed2263b6553e77781b7be7dbaf73d4ee4â: Added full attendance.html
âhttps://github.com/adibuddies/attendance/commit/af383fed5bfcd91f6a087d96bfc8a70146a5365aâ: Refractor index.html (renamed from login.html)
âhttps://github.com/adibuddies/attendance/commit/c48beef787a3fe3d97578add58a9906b96a91924â: branch.html changes