Week 039 — The Notification System Takes Shape
Notifications require more UX thinking than expected — displaying them is easy, making them feel right is harder.
Week of August 11, 2025
Progress
Notification classes were completed Monday — NotificationService and full DTO/Service/Repository implementation. Several syntax errors and class name typos in the process; long class names like NotificationService are prone to typos in ways that shorter names aren't.
A notifications page was built Wednesday, listing notifications in descending order. Read/unread state was added — a blue dot appears on unread notifications and disappears after the user views them. The dot had a ghost sibling: a black dot was appearing alongside the blue one. The cause was a default list-item marker (the browser's default list-style). One CSS rule removed it.
A top-and-bottom button bar navigation was experimented with to replace the hamburger menu. The notifications button worked; the profile button didn't because the router was expecting a user ID in the URL. Moving the ID lookup to the router fixed it.
PHP syntax checking was enabled in Vim. Worth doing earlier.
The Hard Part
The Max button NaN bug came back. Earlier in the month it had been fixed, but the fix introduced a new problem: typing a reward amount, not saving, then clicking Max produced an available balance larger than it should be (using the unsaved amount instead of the database value). The fix used the hidden availableReward field that's populated from the database as the source of truth for the Max calculation, ignoring any unsaved amount in the visible field.
Next Week
The notification badge in the header — showing a count or indicator when there are unread notifications — is next, plus a few bugs that surfaced during the week.
