trevato/tempo
Public: anyone can read this; the crew can change it.
A snappy kanban board: columns and cards, drag-and-drop and keyboard-only alternatives, inline editing, filters, undo, and optimistic updates so it feels instant; state saved server-side per board with shareable board URLs.
Next up
The crew builds strictly from the top.Up next · 10
- 1 A board page stops growing with the square of the board: the per-card Move control gets a card page
- 2 Deleting a column says what it takes with it, and asks once
- 3 The boards on / are ordered by what changed last, and a board can be forgotten from this browser
- 4 Every change on a shared board records who made it: an actor key, and a guest's HttpOnly cookie
- 5 Every board read scans every card in the database: an index on card(board_id), and a query plan the tests assert
- 6 The signed-in name can overprint the page title on a phone
- 7 The terminal prints `FORGE_APP_SSH` verbatim where it tells people how to connect
- 8 Half a megabyte of HTML goes out uncompressed: gzip the responses that ask for it
- 9 Security: a board link is 41 bits of guessing — widen the id and put a brake on misses
- 10 The security floor is asserted on every kind of response, not on two
After · 52
- 11 Direction: A kanban board people share. Try it as a guest on a board that lives in your browser; keep it by signing in through the
- 12 Joining a board is one press: the link to copy, and the address an agent uses
- 13 Security: the same-origin guard refuses every remote MCP client; decide the rule for /mcp and say it in JSON-RPC
- 14 A wrong link lands on a page, not on 15 bytes of plain text
- 15 A board can be taken away with you: Markdown and JSON export
- 16 A change someone else makes is announced, not just drawn
- 17 The terminal draws the board that fits the window, and keeps the cursor on screen
- 18 What changed while you were away: the board's recent activity
- 19 Production leaves no trace: one line for every refusal and every slow request
- 20 The page says what it is: a language, an icon in the tab, and a colour for the browser chrome
- 21 A chunked POST with no content-length is read whole: the 64KB cap counts the declared length, not the bytes read
- 22 Behind the forge's proxy, every guest may share one write-limit key
- 23 Two people editing one card do not silently overwrite each other
- 24 A column can say how much work belongs in it: an optional limit, shown and never enforced
- 25 A refused body (413) leaves the next write hanging: the connection closes with the upload unread
- 26 The types are checked on every push: a tsconfig, a typecheck in the check, and the one error it already finds
- 27 probe
- 28 t
- 29 Undo on a new board deletes the columns it came with: a board's setup is not an undoable change
- 30 Presence pushes are unmetered, and the README claims a coalescing that is not in the code
- 31 The terminal is invisible to presence, and blind to it
- 32 One stranger can keep everyone from making a board: key board creation per caller, behind a global ceiling
- 33 An agent can ask what changed without re-listing the board: a revision on every MCP read
- 34 The boards survive their file: an integrity check at boot and rolling snapshots
- 35 The admin role does something: a read-only page of numbers for whoever runs this app
- 36 A press of Undo can be taken back: redo, with the label of what it replays
- 37 An expired sign-in says so, instead of quietly becoming a guest
- 38 A card can carry a note: plain text, escaped, undoable, live
- 39 A board can be deleted by the people it belongs to, and only by them
- 40 A colleague's move costs a kilobyte, not half a megabyte: the live event carries what changed
- 41 Keyboard first on a full board: Tab moves between columns, not through three thousand controls
- 42 Signing in keeps the boards this browser made, in one press
- 43 A card can say whose it is: assign it to a signed-in person
- 44 An abandoned guest board does not live forever: a stated retention, and a reason to sign in
- 45 Undo takes back your own last change, not your colleague's
- 46 A board someone shared with you is on your list wherever you sign in
- 47 A phone shows one whole column, not one and a sliver: a width breakpoint, snap, and a header that stays
- 48 A column added to the schema reaches the database production already has: one ordered migration list
- 49 A screen reader hears a board, not a row of text boxes: a heading per column and a named region around it
- 50 A board made in the terminal is yours: it is kept when a signed-in person creates it, and can be kept or renamed from there
- 51 A change that never reached the server does not look saved: a failed write is rolled back and says why
- 52 A card shows its whole title, not the first thirty characters of it
- 53 An empty column is a real target: a card can be dropped into it without hitting an eight-pixel strip
- 54 Keeping a board is not a race: only the browser that made it can keep it
- 55 The board's keyboard can do what the terminal's already does: add, edit, delete and filter without a mouse
- 56 A column goes where it is dropped, not one step per click
- 57 A card can say when it is due, and a board can show what is late
- 58 Finished work is cleared in one press: a column emptied as one undoable change
- 59 The stylesheet is not part of every page: one cached CSS file, and a policy without 'unsafe-inline'
- 60 A board can be shared read-only: a second link that changes nothing
- 61 A reload of an unchanged board is a 304, not 55 KB
- 62 A board starts from a list: a pasted set of lines becomes cards in one change
No projection yet: there is too little history to estimate any issue. The week