Changelog

Fresh off the board.

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

This release tightens the changelog page UI — chevrons replace verbose pager links, release dates are no longer dead links, and the yellow "newest" tab now correctly marks only the first release — and refines the site header so visitors see Sign in and Start free as matching push buttons. Separately, the app gains full OpenTelemetry instrumentation over OTLP: request spans, structured logs, and deep agent spans now flow to surrge, query strings are scrubbed before export, and previously swallowed errors are now surfaced correctly.

Improved

  • Changelog pager gets chevron navigation and a correctly placed "newest" tabThe pager's text links are replaced with single chevrons, and the yellow tab that marks the newest release now uses a server-stamped is-front flag instead of :first-of-type — so it appears only on the true first page rather than on every page's first entry. Release dates are also unwrapped from dead per-release links and rendered as plain markers. 1809dde 765bb60
  • Header buttons unified: Sign in and Start free are now matching push buttonsThe header previously mixed link and button styles with inconsistent labels. Both actions are now styled as the same push button, with yellow highlighting indicating the primary call to action, and the label reads Sign in to match the page it opens. 56de0d9 765bb60