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, andSTRIPE_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, andtouch-action:noneon#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_dueandincompleteare no-ops so nobody loses their board mid-retry. Stripe logic lives only insrc/billing.tsandsrc/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 unifiedactiveFilterreplaces the oldactiveAssigneeFilter.a72d5bcd4b10dd - Rename a board without changing its URL
PUT /boards/:workspace/:slug/namechanges 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.5fa9ebc64fffe6 - Legal pages, site footer, and reserved routesPrivacy, terms, and support are now on a single
/legalpage reachable from a footer on every marketing surface./legaland/attentionare added toWorkspace.RESERVEDso 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.b1db6c4730f89c
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
/attentionpage holds the uncapped tail of every section.606a058d4b10dd - Command palette replaces emoji with Lucide icons and gains a Filters sectionNine emoji in
Cmd+Kare 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.28dcdbba72d5bc - Dashboard tiles are wider, responsive, and show colour swatchesThe grid now uses
auto-filltracks 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.39e7d533da7de6f3c41b088656d882bfeeac7a2ca7d7cf27d2114f27 - 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
immutableCache-Controlso repeat opens skip the re-download. Board links on the dashboard trigger speculation rules on hover; SSE and analytics are gated ondocument.prerenderingso 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.
4ed96be9413852 - 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 · boardbelow). 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/attentionpage keep the classic rows via abreathableprop.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 1frgrid 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