Changelog

Fresh off the board.

This release adds inline Markdown editing for descriptions and keeps the Files action visible in the detail rail.

New

  • Edit descriptions with inline MarkdownDescriptions can now be edited directly in place with Markdown support, including a live preview. No need to switch to a separate editing mode. f233669

Fixed

  • Files action stays visible in the detail railThe Files action is now kept in the detail rail so it remains accessible without extra navigation. 0ee2285

This release delivers a substantially reworked dashboard — now a full home surface with a personal activity band, teammate person cards, and deep-linked filter chips — alongside a unified settings system shared between board and account panels. The invitation flow is redesigned around approval-first semantics with Plus gating moved to link generation. Internal work includes a deploy marker credential consolidation and a completed_by schema migration.

Breaking changes

  • Free owners can no longer generate invite linksPreviously free owners could mint invite links (requests were filed on click). Now POST /api/boards/:ws/:slug/invite-link is Plus-only; a free owner hitting this endpoint receives a 403. If you rely on free-tier invite link generation, users must upgrade to Plus. 4f61b37

New

  • Dashboard ledger chips deep-link to the board pre-filteredEach footer token on a board card (+added, ✓done, due count, overdue count) is now a link that opens the board filtered to that bucket via a new due filter kind. The whole-footer click-to-open is preserved underneath. a604d87
  • Person pages at /people/:username show shared activity and boardsClicking a person card opens a dedicated page scoped to the boards you both belong to: their identity, a single chronological activity list of cards added and finished, and the shared boards in a grid below. Each shared board tile carries their counts via an optional subject predicate threaded through the existing ledger builders. a604d87
  • Notes now record who completed them via completed_byPreviously Note.complete recorded only completed_at, so a card you finished but did not create could not be attributed to you. completed_by is now written on completion (first completer sticks via COALESCE), enabling accurate personal activity going forward. The migration is routed through migrate() so failures are logged rather than silently swallowed. a604d87

Improved

  • Dashboard is now a home surface with your plate, activity, and teammate cardsThe dashboard opens with a two-column band showing what needs you (due and overdue cards) and your recent activity (adds and finishes). Teammates holding your handed-off work appear as person cards using their own colour, texture, and handwriting font — hovering flips the card to show the specific notes they hold. The standalone /attention page is retired; /attention now redirects to /dashboard, and the bell popover is unchanged. a604d87
  • Board settings and account drawer unified into one design systemBoth panels now share a single type scale, a 24 px rail, disclosure-by-weight accordions, Radix tooltips, and one input/button recipe documented in DESIGN.md. Board backgrounds are migrated to six real values (removed values are grid-migrated). Status is shown as tags with id-preserving rename, the People section always shows join requests, and the account header shows a read-only email (owned by Neologin). 2bbeca5
  • Invite link generation is now the Plus paywall; all joins are approval-basedGenerating or rotating a collaborator invite link now requires Plus — a free owner's Invite action opens the upgrade dialog before any token is minted. All joins (including Plus owners) go through Request.add and require explicit acceptance. Acceptance calls Request.resolve("accepted") and decline calls Request.resolve("declined"); resolved outcomes stay visible to the recipient until dismissed. A declined link cannot recreate its request; rotating the link starts a deliberate new invitation. 4f61b37 2bbeca5