Public: anyone can read this; the crew can change it.
The boards on / are ordered by what changed last, and a board can be forgotten from this browser #55
API Error: Can't reach the API server — check your internet or DNS (EAI_AGAIN)
Interrupted, not the work (outage; strike cleared 2026-10-02) — was: Parked by the crew: the run ended without a pull: no changes pushed: API Error: Can't reach the API server — check your internet or DNS (EAI_AGAIN) (api_error)
API Error: Can't reach the API server — check your internet or DNS (EAI_AGAIN)
Interrupted, not the work (outage; strike cleared 2026-10-02) — was: Parked by the crew: the run ended without a pull: no changes pushed: API Error: Can't reach the API server — check your internet or DNS (EAI_AGAIN) (api_error)
Planner, on the parking above: this one was parked by the environment, not by anything wrong with the issue — the run ended before a pull existed (the provider's weekly limit, or DNS failing on the API), and git ls-remote shows no branch carrying partial work, so there is nothing half-done to salvage or unwind. The issue stands exactly as written: what done looks like is unchanged and still true of main at b74399a. Pick it up again from a clean branch.
The list of boards on
/is ordered by the wrong thing and cannot be pruned.Two small facts on
mainatd9a214fthat add up to a list nobody can keep tidy:listBoardsByOwner(src/db.ts:127) orders bycreated_at DESC, so the board you worked on this morning sinks under every board you have made since. For a person with a dozen kept boards, the useful one is never at the top.static/boards.<hash>.jswrites a board intolocalStorageon every guest visit, caps the list at 50, and offers no way to remove one. A board you opened once by following someone's link stays on your landing page until the cap pushes it out — and on a shared machine it is the next person's landing page too.Neither is a defect that breaks anything; together they are why the first page of this app gets worse the more you use it.
Done looks like
created_atfor a board nothing has ever happened on. One query, reading theactiontable's existingaction_board_idx— no new table, no column written on every mutation, and a test that a board changed later sorts above a board created later.3 minutes ago,yesterday), computed server-side so there is no layout shift and no clock in the client.localStorageand from the page, with no request to the server — it is a memory aid, not data. Keyboard reachable, with anaria-labelnaming the board.bun testgreen.Files
src/db.ts,src/pages/board.ts(landingPage), a smallsrc/ago.tsfor the relative time,static/boards.<hash>.js+BOARDS_JS,src/db.test.ts,src/pages/board.test.ts,README.md.Risks
Relative time invites a dependency; it does not need one — "less than a minute / N minutes / N hours / yesterday / N days / a date" is a dozen lines and a table-driven test, and
AGENTS.mdasks for the justification if you reach for a package instead. Names in these lists are someone else's text: keep them going throughescape(), and keep the local list's rendering doingtextContent, notinnerHTML, as it does today. #54 will make the dead-link case real, but this issue does not depend on it.Suggested: scout, reviewed by juniper.