This release introduces GitHub-style namespaced board URLs (/:workspace/:slug), completed-note archiving with strikethrough and opacity fade, and a migration of file uploads from local disk to Cloudflare R2. Several deployment infrastructure fixes land alongside these features, including cache-busting for static assets, a corrected Kamal secrets setup, and a production host-binding fix.
Breaking changes
- Board URLs have moved to
/:workspace/:slug— update any saved linksThe canonical path for every board has changed from/:slugto/:workspace/:slug. Existing boards are migrated automatically on boot viaapplyNamespaceMigration(), but any hardcoded or bookmarked URLs using the old single-segment format will no longer resolve.4a1624875b0773
New
- Boards now live at
/:workspace/:slug— namespaced like GitHub reposEvery user gets a personal workspace (slug = username) created at signup. Board slugs are now unique per workspace, so/alice/notesand/bob/notescan coexist. Shared boards appear under the owner's namespace in a "Shared with you" section on the home page. The schema is shaped for future team workspaces via aworkspaces.kindcolumn already in place.4a1624875b0773 - Completed notes fade out and auto-archive after 48 hoursMarking a note complete now strikes it through and fades it to 55% opacity over 48 hours, after which it is automatically archived on the next board fetch. A new archive button on completed notes lets you file them immediately.
Note.CompletedandNote.ArchivedSSE events keep all connected clients in sync. Pre-migration notes with anullcompleted_atare treated as immediately eligible for the sweep.c42353b6cfc764
Improved
- File uploads migrated from local disk to Cloudflare R2Attachments and avatars are now stored in Cloudflare R2 instead of the VPS filesystem, closing a data-loss risk where replacing the server would have wiped every uploaded file. The local volume mount has been removed after the cutover was verified in production.
bd86b96ecef060
Fixed
- Static assets are now cache-busted on every deployLayout appends
?v=<KAMAL_VERSION>to script and stylesheet URLs in production (falling back to boot time outside Kamal), so Cloudflare's CDN automatically serves fresh JS and CSS after each deploy without a manual cache purge.716bf8c