Changelog

Fresh off the board.

This release makes the board fully usable on touch devices with a persistent bottom toolbar, pinch-to-zoom, and a mobile minimap. Stripe billing lands with checkout, a customer portal, and a webhook that gates all existing Plus features. The dashboard is redesigned around outbound work — what you handed off and whether it's moving — while the attention centre splits into "Needs you" and "Waiting on the team". Board filters now dim non-matching cards, keep the board's shape, and restore the exact prior viewport on clear. The command palette gains filters and opens cards directly. Boards open faster via server-rendered initial paint, immutable asset caching, and hover-triggered speculation rules. Card detail pickers (Due, Owner, Status) open as frosted glass takeover panels. The header is unified across all pages, boards can be renamed without changing their URL, and legal pages with a site footer are added.

Breaking changes

  • Three new env vars required to enable Stripe billingSet STRIPE_SECRET_KEY, STRIPE_WEBHOOK_SECRET, and STRIPE_PRICE_ID (or their live-mode equivalents) to activate checkout and the webhook. Without them the billing routes will not function. 29bb186

New

  • Board is fully usable on touch devicesBelow 640px the mouse-revealed corner chrome is replaced by a persistent bottom toolbar (add, zoom, fit, menu) and a bottom-sheet menu. Drag uses a unified pointer model so a second finger always promotes to a canvas pinch, aborting any in-progress card drag. Viewport shell gets viewport-fit=cover, h-dvh, safe-area insets, and touch-action:none on #canvas. The frozen banner and signup nudge get mobile widths, settings sheet close is sticky, and the smallest controls lift to 44px on coarse pointers. 357742b
  • Stripe billing: pay for Plus, webhook flips the planCheckout, a customer portal, and a signed webhook that moves users between free and Plus are now live. Every existing gate — privacy, collaborators, uploads, the board limit, the freeze — keys off users.plan, so payment unlocks them all and a lapse re-arms them. past_due and incomplete are no-ops so nobody loses their board mid-retry. Stripe logic lives only in src/billing.ts and src/config.ts; routes, the user model, and the client stay provider-agnostic. 29bb186
  • Board filters dim non-matching cards and restore your viewport on clearPicking a filter from the command palette recedes every card that doesn't match rather than hiding it, keeping the board's shape. Dimmed cards are pointer-events: none. Applying a filter zoom-fits the matches; clearing restores the exact prior viewport. The palette only offers a filter when it would change what you see (0 < matches < total). A unified activeFilter replaces the old activeAssigneeFilter. a72d5bc d4b10dd
  • Rename a board without changing its URLPUT /boards/:workspace/:slug/name changes the display name only. The slug is the permalink, minted at creation and never touched, so every shared link and indexed URL keeps resolving. Trims whitespace, rejects empty names, and caps at 60 characters. 5fa9ebc 64fffe6
  • Legal pages, site footer, and reserved routesPrivacy, terms, and support are now on a single /legal page reachable from a footer on every marketing surface. /legal and /attention are added to Workspace.RESERVED so a workspace cannot claim those routes. The footer is simplified to a tagline lockup beside the wordmark and a single Help · Privacy · Support link row. b1db6c4 730f89c

Improved

  • Dashboard redesigned around outbound workThe activity feed is replaced by two views: "Waiting on the team" (cards you created and assigned to someone else, widened to include due-today and due-within-a-week) and board tiles that sort trouble-first and show a ledger of added, done, due, and overdue counts. The attention centre splits into "Needs you" and "Waiting on the team" so the badge only counts what you can act on. A dedicated /attention page holds the uncapped tail of every section. 606a058 d4b10dd
  • Command palette replaces emoji with Lucide icons and gains a Filters sectionNine emoji in Cmd+K are replaced with Lucide strokes; notes get their own sticky-colour icon instead of a generic one; results are grouped under Actions, On this board, and Boards. A new Filters section lets you narrow the board directly from the palette. 28dcdbb a72d5bc
  • Dashboard tiles are wider, responsive, and show colour swatchesThe grid now uses auto-fill tracks so tiles are never narrower than their content needs — 3 columns at 1440px, 2 at 1024px, 1 on a phone, decided by arithmetic. Tiles grow from 12rem to 16rem. The flip panel now shows each card's own colour swatch. Hovering anywhere on a tile with content opens the panel; clicking a row opens that card; clicking elsewhere opens the board. 39e7d53 3da7de6 f3c41b0 88656d8 82bfeea c7a2ca7 d7cf27d 2114f27
  • Boards open instantly with server-rendered paint, cached assets, and hover prerenderThe server now renders the exact initial viewport transform and card state so the board is visible the moment HTML paints, with no loading curtain. Static assets are served with versioned URLs and immutable Cache-Control so repeat opens skip the re-download. Board links on the dashboard trigger speculation rules on hover; SSE and analytics are gated on document.prerendering so hovered-but-unvisited boards open no phantom event stream. 744369b
  • Card detail pickers open as frosted-glass takeover panelsDue, Owner, and Status pickers now open as compact, content-sized panels centred on the card with a frosted-glass surface (backdrop-filter blur + saturate). Due shows shortcut links above a full-width calendar. Status and Owner show tidy centred lists. The back arrow becomes an X close button since the card stays visible underneath. 4ed96be 9413852
  • Card detail redesign: chip rail, Details pill, Add disabled until titleThe card detail view gets a chip rail on the flip side and a Details pill replacing the old flip icon. The Add button is disabled until a title is entered, preventing empty card creation. 4ed96be
  • Attention centre popover redesigned with two-line rows and a single overflow linkThe needs-attention popover shows two-line rows (title + pill right-aligned, board or @person · board below). The inbound group is renamed "Your turn". Two per-section overflow links collapse to one combined tail: "+2 on you and +1 on the team". The dashboard band and /attention page keep the classic rows via a breathable prop. 925c122

Fixed

  • Mobile minimap and card footer layout fixes on small screensA map button in the mobile toolbar toggles a larger minimap (288×196px) docked above it so you can jump to any region while staying zoomed in. The zoom readout is removed from the phone toolbar to prevent overflow on 360px screens. The card footer's colour swatches and action buttons now wrap onto their own row on phones so they never collide. 01484b0
  • Private boards show a blurred placeholder instead of a bare 401A visitor who isn't a member of a private board now sees PrivateGate: a blurred field of generic, textless cards behind a lock card. The browser no longer tries to download a bare 401 response. 357742b
  • Dashboard completion counts now only include cards you can actually openThe dashboard previously counted completions over seven days, but the board archives completed cards after 48 hours on the next load — so the tile promised cards that opening the board would immediately archive. The done window now matches the board's own memory, so every number printed belongs to a card you can go and look at. d4b10dd
  • Command palette opens the card it navigates toPicking a card from the palette previously panned the board to it but left it closed. It now opens on reveal, and closing the overlay leaves the card in view. ddb1c34
  • Unified header across all pages with centred searchThe board, dashboard, and attention page each had different chrome layouts, causing the wordmark, search bar, and avatar to jump between pages. The header now lives outside the content column everywhere and uses a 1fr auto 1fr grid so search centres on the viewport. Six top-bar implementations collapse to two. Three bugs fixed: avatar blank on usernames whose hash exceeded 2³¹, written pages pitching "Start free" to signed-in users, and signed-in non-members on a private board having no link back to their own boards. 4e3483e