Evolve rNotes schema and API to support the Memory Card data model:
- Add parentId self-relation for note hierarchy (NoteTree)
- Dual-format body storage (bodyJson + bodyMarkdown) with HTML fallback
- New cardType field (note/link/file/task/person/idea/reference)
- Structured properties (Logseq-compatible key-value JSON)
- Soft-delete via archivedAt (FUN model: Forget, not Delete)
- File + CardAttachment models for structured attachments
- Tag model evolved with spaceId for scoped tags
- Content conversion library (HTML/JSON/Markdown bidirectional)
- Logseq import/export (ZIP with pages/ + assets/)
- NoteEditor emits TipTap JSON as canonical format
- NoteCard shows cardType badges, child count, properties
- Canvas sync enriched with Memory Card fields
- Backfill script for existing notes
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Inject rdata.online/collect.js tracking script in layout
- Add rData link to ecosystem footer
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Interactive Web Speech API transcription widget on the homepage
("Try Live Transcription") and demo page. Zero-download, no auth
needed — works instantly in Chrome/Edge/Safari. Updated feature
cards to highlight live transcribe, audio/video, and offline privacy.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Swap @xenova/transformers (whisper-tiny, ~45MB) for parakeet.js
(Parakeet TDT 0.6B v2, ~634MB) loaded from CDN at runtime. Much higher
transcription accuracy at the cost of larger initial model download.
Uses indirect dynamic import to avoid Next.js/webpack bundling issues.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Maps notebook collaborator roles (OWNER/EDITOR/VIEWER) to SpaceRoles
(ADMIN/PARTICIPANT/VIEWER). Falls back to EncryptID server for
cross-space membership when notebook is linked via canvasSlug.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
When both WebSocket streaming and server batch API are unavailable,
falls back to in-browser Whisper (Xenova/whisper-tiny, ~45MB, cached).
Shows download progress bar and transcription status during processing.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add AudioWorklet-based PCM16 streaming to VoiceRecorder with WebSocket
connection for near-real-time transcription. Segments appear as finalized
text that never shifts. Add speaker diarization button on audio notes
with color-coded speaker labels. Graceful fallback to batch transcription
when WebSocket unavailable.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace static mock data with real-time WebSocket connection to the
shared demo community. Notes are expandable, packing items toggleable,
all changes sync across the r* ecosystem in real-time.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add interactive demo page showing Team Knowledge Base with notebooks,
rich notes, tags, code blocks, and canvas sync indicators.
Update landing page footer with all 10 r* ecosystem apps.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- manifest.json with app metadata and icons
- Service worker (network-first for pages, skip APIs)
- PWAInstall component with native install prompt + fallback instructions
- Generated 192/512 PNG icons and apple-touch-icon
- PWA meta tags in layout (apple-web-app, theme-color, manifest link)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add AUDIO to NoteType enum, duration field to Note model
- New VoiceRecorder component (MediaRecorder API, upload, transcribe)
- New /api/voice/transcribe proxy route to voice-command-api container
- Audio MIME types added to upload whitelist
- Audio player + transcript display on note detail page
- AUDIO type button on new note page with recorder UI
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Chrome extension (Manifest V3) forked from PKMN Quick Capture:
- Clip pages, text selections, links, and images to rNotes
- Notebook selection dropdown with remembered last-used
- Tags input for organizing clips
- Context menu integration (right-click to save)
- EncryptID auth via token paste flow
- Image upload through /api/uploads then IMAGE note creation
- Amber/orange theme matching rNotes design
Also updates signin page to show extension token when
?extension=true query param is present.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
pushShapesToCanvas now sends X-Internal-Key header from
RSPACE_INTERNAL_KEY env var for authenticated canvas writes.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
package.json uses file:../encryptid-sdk which resolves relative to
/app, so SDK must be at /encryptid-sdk not /app/encryptid-sdk
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Responsive navigation: compact buttons with icons on mobile, hidden
search bar (moved to dedicated row below nav on mobile)
- Responsive typography: hero text scales from 3xl to 5xl
- Responsive grids: sm:grid-cols-2 breakpoint for cards
- Canvas split view: full-screen overlay on mobile with close button
- Breadcrumbs collapse on mobile, truncate long titles
- Buttons show icon-only on small screens (add, delete, pin)
- Wire up onShapeUpdate callback in notebook detail page for
bidirectional canvas sync (rSpace → rnotes via /api/sync)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Wire up EncryptID SDK for user authentication with WebAuthn passkeys.
All write API routes (POST/PUT/DELETE) now require auth, while reads
remain public. First user auto-claims orphaned notebooks/notes.
New files:
- src/lib/auth.ts: getAuthUser, requireAuth, getNotebookRole helpers
- src/lib/authFetch.ts: client-side fetch wrapper with JWT token
- src/components/AuthProvider.tsx: EncryptIDProvider wrapper
- src/components/UserMenu.tsx: sign in/out UI for nav bar
- src/app/auth/signin/page.tsx: passkey login/register page
Protected routes: notebooks CRUD, notes CRUD, canvas create, uploads.
Ownership checks: notebook collaborator roles, note author verification.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace plain Markdown textarea with TipTap editor featuring:
- Toolbar with bold, italic, strike, code, headings, lists, tasks,
blockquotes, code blocks, links, images, undo/redo
- Keyboard shortcuts (Ctrl+B, Ctrl+I, etc.)
- Task list with checkboxes
- Inline image embedding
- Code type notes still use plain textarea for monospace editing
- Note detail view now renders HTML content from TipTap
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Upload API at /api/uploads with 50MB limit, MIME type validation, and
path traversal protection
- Serve uploaded files at /api/uploads/[filename] with immutable caching
- FileUpload component with drag-and-drop, progress, and preview
- IMAGE notes show uploaded image preview in detail view
- FILE notes show download button in detail view
- Docker volume for persistent upload storage
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace Prisma contains-based search with raw SQL using ts_vector/ts_query
for ranked results and headline snippets with <mark> highlighting. Falls
back to ILIKE for partial matches. GIN index applied to production DB.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>