Review / #12 Rebuild the planner grid into a flat task list roster-board
Ready to merge
Open

millrace-studio/roster-board #12

Rebuild the planner grid into a flat task list

quarryhill-agent main quarryhill/2049518-task-list-rebuild 4 files +412 −118

Summary

Swaps the month-grid planner for a flat, keyboard-friendly task list with full create, edit and delete support.

Frontend rebuild:

  • Sidebar: nav entries (Inbox / Today / Upcoming / Done) with active-state highlighting and badge counts; a "My boards" section with colour-coded filters (Personal, Client, Blocked, Reading); accent "New task" button
  • TaskListView (new): renders the filtered list with a circular checkbox → toggle complete, inline title/notes/due-date/board badge, hover-revealed edit and delete icons, and a quick-add row pinned to the bottom
  • Planner: visibleTasks memo switches on currentView to filter by completion state, isToday / isLater for date views, or board for board views; taskCounts feeds the sidebar badges; handleQuickAdd infers the board from the current view

Backend fix (backend/server.py):

# Before — the projection dropped _id, so every task came back with id: ""
tasks = await db.tasks.find(query, {"_id": 0}).to_list(1000)

# After — _id is kept and cast to a string
tasks = await db.tasks.find(query).to_list(1000)
for task in tasks:
    task["id"] = str(task.pop("_id"))

That mismatch made edit, toggle and delete return 404 after any page refresh — the client only held usable ids for the session, straight from the POST response cache.