12 KiB
RefBoard Product Expansion Plan — 2026-03-12
Goal
Turn RefBoard from a collaborative media board into a stronger visual workspace that combines:
- PureRef-style media handling
- Figma-style review and comments
- Milanote-style notes and structure
- Kosmik-style mixed-media research and retrieval
This plan is written for iterative implementation with code review after each slice.
Working Model
Roles
- Builder session: implements one scoped slice at a time
- Reviewer session: reviews code for correctness, regressions, UX consistency, and plan adherence
Delivery rules
- Ship in thin vertical slices, not broad unfinished scaffolding
- Preserve existing board stability and current media workflows
- Avoid overloading the current
textelement with unrelated behavior - Add first-class object types where semantics differ
- Prefer migration-safe schema and scene-format extensions
Definition of done for each slice
- Data model is explicit
- UI behavior is testable manually
- Socket sync behavior is defined
- Save/load survives reload
- Permissions are enforced
- Existing image/video flows still work
Current State Summary
Already present
- Infinite canvas with images, GIFs, videos, drawings, text, frames/groups
- Real-time sync
- Upload pipeline with image/video support
- Thread/comment backend and frontend groundwork
- Votes groundwork
- Mattermost import
Main gaps
- Comments need to reach a polished Figma-like UX
- No sticky notes / note cards
- No PDF media type
- No markdown/doc object
- Current
textobject is too primitive for notes/docs - No strong retrieval layer for mixed media
- No Milanote-style structural/workflow objects
Product Principles
-
Labels are not documents Keep lightweight canvas text for labels and annotations.
-
Every content type needs its own semantics
text,sticky,pdf,markdown,comment, andtaskshould not collapse into one generic object. -
Canvas should stay visually fast Large or dense content must degrade gracefully with zoom and viewport distance.
-
Review is a first-class layer Comments, pins, resolution state, and jump-to-context should feel native, not bolted on.
-
Mixed media must be searchable PDF text, markdown text, note text, filenames, and comments should converge in one retrieval model.
Object Model Direction
Keep
imagevideodrawingtextfor lightweight labelsgroup/ frame
Add next
sticky— visual note cardpdf— document or page-based asset objectmarkdown— rich document card with preview
Add later
web— URL/article/embed cardtask— checklist/work item cardconnector— relationship linecolumnor stronger structure container if needed beyond frames
Zoom Behavior Rules
text
- World-space label
- Scales naturally with zoom
- Best for captions and annotations
sticky
- Canvas object with card chrome
- Text remains readable longer than plain labels
- Use clamped on-screen font sizing or simplified preview when zoomed out
markdown
- Card preview on canvas
- Full reading/editing in side panel or modal inspector
- Do not render entire long documents at tiny zoom levels
comment
- Review UI overlay behavior, not a regular scene text object
Priority Plan
Phase 1 — Review Layer Completion
Objective
Finish comments into a reliable Figma-style review workflow before adding more content types.
Scope
- Object-level comments
- Point/region-pinned comments
- Thread list + detail panel polish
- Resolve/reopen flow
- Unread state
- Jump-to-object
- Better pin visibility and interactions
- Notification/toast behavior for incoming comments
- Permissions for comment vs edit vs view
Key tasks
- Audit existing comments/votes code paths and close gaps
- Stabilize socket event flows and sender behavior
- Ensure orphan handling for deleted objects is sane
- Add unread/new indicators and active-thread focus behavior
- Tighten panel UX and pin hit-testing
Acceptance criteria
- User can comment on an object and on a specific point
- Another user sees updates live without reload
- Threads can be resolved and reopened
- Deleted objects do not break thread history
- Jump-to-object is reliable
- Review flow feels coherent on a live board
Reviewer focus
- Event duplication
- Board permission leaks
- Orphaned thread correctness
- Socket race conditions
- UI regressions in editor layout
Phase 2 — Sticky Notes
Objective
Add Milanote-style note cards without damaging the current label text tool.
Scope
- New
stickyscene object - Preset colors/themes
- Title/body or single-body variant
- Resize behavior
- Duplicate/copy-paste
- Inline editing
- Selection, layering, grouping
Data model
Suggested fields:
type StickyObject = {
id: string;
type: 'sticky';
x: number; y: number; w: number; h: number;
sx: number; sy: number; angle: number; z: number;
opacity: number; locked: boolean; visible: boolean; name: string;
title?: string;
text: string;
theme: string;
fontSize: number;
};
Key tasks
- Extend scene schema and serialization
- Add Pixi renderer for note card
- Add editing UX
- Add toolbar action and shortcuts
- Validate transform, selection, save/load, sync
Acceptance criteria
- Sticky can be created in one action
- It looks like a note card, not raw canvas text
- It persists and syncs correctly
- It remains readable enough across zoom levels
Reviewer focus
- Scene-format backward compatibility
- Hitbox and transform correctness
- Editing UX under zoom
- Performance with many notes
Phase 3 — PDF Support
Objective
Make PDFs a first-class media type with strong review utility.
Scope
- Upload PDF files
- Backend page rasterization
- PDF metadata storage
- Page thumbnails / previews
- Place full doc card or individual pages on canvas
- Comment on page/region
- Basic PDF text extraction for search preparation
Product choice
Start with page-based ingestion, not an embedded fully interactive PDF viewer on the canvas.
Reason:
- simpler scene model
- easier comments
- better performance predictability
- closer to board workflows
Backend tasks
- Accept
application/pdf - Generate page previews
- Store doc metadata: page count, dimensions, extracted text status
- Add asset routing for preview pages
Frontend tasks
- Add PDF upload handling
- Add PDF card/import dialog
- Support dragging pages onto canvas as scene objects
- Allow comments pinned to page content
Acceptance criteria
- User uploads a PDF successfully
- User can place page previews on canvas
- PDF pages persist and sync like other assets
- Comments can be attached to a page object
Reviewer focus
- Processing failures and user feedback
- Storage layout and cleanup
- Large PDF performance
- Whether page objects and source document records stay consistent
Phase 4 — Text System Overhaul
Objective
Fix the current text element so it remains strong for labels while not pretending to be a note/doc system.
Scope
- Better text box layout and wrapping
- Alignment
- Curated font set
- Background/padding for label chips if needed
- Improved resize semantics
- Better zoom behavior
Explicit non-goal
Do not turn text into markdown or sticky notes.
Acceptance criteria
- Text boxes wrap predictably
- Editing overlay aligns correctly under zoom and rotation
- Font options are intentional, not random browser defaults
- Labels remain lightweight
Reviewer focus
- Text measurement drift
- Serialization of layout fields
- Rotation/edit overlay bugs
- Cross-browser behavior
Phase 5 — Markdown Cards
Objective
Add richer document-like content while keeping the canvas uncluttered.
Scope
- New
markdownobject - Canvas preview card with title/excerpt
- Source edit mode
- Render mode
- Links, lists, headings, code blocks
- Open-full-doc side panel
Product rule
Canvas shows a compact preview, not the entire markdown body at all zoom levels.
Suggested fields
type MarkdownObject = {
id: string;
type: 'markdown';
x: number; y: number; w: number; h: number;
sx: number; sy: number; angle: number; z: number;
opacity: number; locked: boolean; visible: boolean; name: string;
title: string;
markdown: string;
previewMode: 'card' | 'expanded';
};
Acceptance criteria
- Markdown card can be created and edited
- Canvas preview is readable and compact
- Full content opens in panel/modal
- Save/load/sync works without corruption
Reviewer focus
- Unsafe markdown rendering
- Performance of live render
- Whether the object should stay on-canvas or move to inspector sooner
Phase 6 — Search and Retrieval
Objective
Make mixed-media boards retrievable, not just visually navigable.
Scope
- Search across board titles, filenames, notes, markdown, comments
- PDF extracted text indexing
- Later OCR for images
- Filter by object type, author, tag, updated time
Acceptance criteria
- A user can search content inside a board and find the right object
- Results can jump to canvas context
- Search does not require full reload of large boards
Reviewer focus
- Query performance
- Index strategy
- Search result relevance vs complexity
Phase 7 — Structure and Workflow
Objective
Bring in selected Milanote-style organization features after the content core is solid.
Scope
- Better frames/sections
- Optional columns/stacks
- Connectors
- Task/checklist cards
- Better share roles: view, comment, edit
- Presentation / clean-share mode
- Export improvements
Important constraint
Do not add task/workflow objects until notes, docs, and comments are already stable.
Reviewer focus
- Product sprawl
- Interaction conflicts with selection/grouping
- Share-mode permission correctness
Cross-Cutting Technical Work
Scene format versioning
- Extend scene schema conservatively
- Keep old boards loadable
- Add migration helpers where needed
Upload pipeline
- Add clear status feedback for every media type
- Unify queued/processing/ready/failed states
Performance
- Avoid rendering full-detail content when zoomed out
- Ensure many notes/pages/comments do not tank frame rate
Permissions
- Formalize role behavior:
viewercommentereditorowner
Export
- Board export to image
- Board export to PDF
- Selection export
Recommended Implementation Order
- Finish review/comments UX
- Add sticky notes
- Add PDF ingestion and page placement
- Overhaul plain text behavior
- Add markdown cards
- Add search and PDF text indexing
- Add structural/workflow features
Suggested PR / Review Slices
Slice A
- Review/comments gap audit and polish
Slice B
stickyscene object end-to-end
Slice C
- PDF backend ingestion and metadata
Slice D
- PDF page placement UI
Slice E
- Text box overhaul
Slice F
- Markdown card object
Slice G
- Search and retrieval
Each slice should be reviewable independently and should not mix unrelated feature families.
Risks
- Overloading the canvas with too many object semantics too early
- Regressing existing image/video performance
- Mixing review UI and content UI in confusing ways
- Turning text into a catch-all object
- Adding PDF support without strong processing/error handling
Reviewer Checklist
- Is the slice aligned with the current phase?
- Does it preserve current board behavior?
- Is the object schema explicit and future-safe?
- Are save/load/sync semantics correct?
- Are permissions and roles enforced?
- Does the UI feel coherent at different zoom levels?
- Is there a simpler implementation that preserves the same product outcome?
Next Action
Start with Slice A / Phase 1:
- review the current comments implementation
- enumerate gaps against the desired review workflow
- close the highest-value UX and correctness issues before adding new content types