Week 044 — Dashboard Ships

Five days from idea to shipped. The dashboard is a better first page.

Week of September 15, 2025

Progress

The dashboard was built this week. By Wednesday, the design was in decent shape: item counts for each state (safe, lost, found), action buttons for common operations (add item, report lost, report found), a notification preview, and a trending lost items section — though that last part was removed before shipping because it requires infrastructure that doesn't exist yet.

Icons were updated to a consistent set. The router was updated to make the dashboard the default page for logged-in users.

The item state filtering from the dashboard (clicking "3 Lost" loads the items page filtered to lost items) ran into a bug: state value 0 was failing the filter because PHP's empty() treats 0 as empty. Changed empty() to != '' and it worked.

Found page cleanup was started — the notice displayed to unregistered finders was inconsistent with other inline notices, and the return option buttons needed styling.

The Hard Part

A bug where an owner reporting their own item as found was being marked as "found" instead of "safe" resurfaced. The item page was showing the correct state after save, then wrong. The copyWith method in ItemDTO was preserving the state from the POST data rather than the explicitly set state. Once that was identified, the fix was straightforward — but finding it required tracing the state through several layers of the DTO/Service chain.

Decision Made

The "Add Item" button is removed from the items page unless the user has no items. With the dashboard providing an add-item action, the items page can focus on showing items rather than doubling as an entry point for new ones.

Next Week

Production. The application has never been deployed to a real server. That changes now.