A good step is one thing you can check in the browser and commit. For your dashboard:
- Page exists at
/dashboard, shows a hardcoded number. (routing works) - Number comes from the database. (data works)
- Add the other stats.
- One filter (date range), stats react to it.
- CSV export of the current filtered data.
Then per step: "Do step 2 only. Stop after it and tell me how to check it." If it does more anyway, reject the change and repeat with "only step 2, nothing else". Commit after each green step.
The trick is that step 1 is almost embarrassingly small. That's on purpose; when step 2 breaks, you know it's the data and not the routing.