Repository navigation
feat: add boards drawn with Excalidraw - #76
Merged
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Boards, step B1 from
.claude/.Plans/as2026-10-07-strata-boards-and-notion-notes.md: a whiteboard page type drawn with Excalidraw 0.18.1 (MIT) on a white canvas, synced through the existing Hocuspocus server.How it fits
BOARDkind with anotesrow, so it sits in the page tree, opens at/notes/:id, and gets permissions, pinning, comments, backlinks, search and version history like a page.POST /spaces/:id/notestakesboard: true; responses carrykind. Boards can't be templates, databases or hold pages.boardY.Map(element id → element) in the same Yjs document notes use, so offline drafts (y-indexeddb), presence and size limits work unchanged. Local changes are written every 80 ms; remote ones are merged with Excalidraw'sreconcileElementsand applied withCaptureUpdateAction.NEVER, so undo only touches your own work./spaces/:id/files(generateIdForFile) and load back by file id. Board text boxes feed search, and board images become attachment links.NoteEditorintocomponents/live-document.ts, shared by both.Build and bundle
/excalidraw/fonts(a small Vite plugin serves them in dev and copies them into the build), because the CSP only allows same-origin fonts.@radix-ui/react-tabsonly declares React 18, which made npm hoist a second React 18 to the workspace root and broke react-router. The rootpackage.jsonnow declares React 19.3.0 withoverrides, so the workspace has one React.Checked in the browser (local stack)
freedrawelement; an element added by a second client appeared on the open board; both were still there after a reload.npm auditreports 14 advisories that come with Excalidraw (browser bundle only):nanoid3.3.3,sass/chokidar/braces(build tools listed as runtime dependencies, never run in the browser),lodash-esand Mermaid's parser chain.Tests:
test/document-text.spec.ts, frontendtest/notes.spec.tsxandtest/journal.spec.tsx, lint and both builds locally. The new board case intest/integration/notes.spec.tsruns in CI.