- Traefik wildcard HostRegexp for <space>.r*.online subdomains
- Middleware subdomain extraction and path rewriting
- Provision endpoint with owner_did acknowledgement
- Registry enforces space ownership via EncryptID JWT
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Creates 3 notebooks (research/meetings/ideas) with 9 notes, tags,
and parent-child note hierarchy showing the memory card system.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Auth-free POST /api/internal/provision creates default Notebook + system User
+ OWNER collaborator scoped to workspace slug.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Space links now go to <space>.<app-domain> (e.g., myspace.rfunds.online)
instead of rspace.online/<space>. Domain derived from window.location
when not explicitly provided.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Replace inline nav/Navbar with shared Header component
- Header pattern: AppSwitcher dropdown / SpaceSwitcher / actions / Sign In
- SpaceSwitcher and UserMenu work without SDK dependency
- Consistent across all r*Apps
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Part of the ridentity.online branding migration. The EncryptID auth
server is now accessible at auth.ridentity.online (with the legacy
encryptid.jeffemmett.com kept as a backward-compatible alias).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Export notes as .md files with YAML frontmatter (single or ZIP batch).
Import .md files or ZIP archives with frontmatter parsing and dual-write.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Implements workspace-scoped data isolation via subdomain routing:
- Schema: add workspaceSlug to Notebook model + migration
- Middleware: extract subdomain → x-workspace-slug header
- API: filter notebooks/notes/search by workspace on subdomains
- AppSwitcher: generate <username>.r*.online links when logged in
- Sessions: SubdomainSession component syncs auth across subdomains
via .rnotes.online domain-wide cookie
- Auth: auto-migrate unscoped notebooks to user's workspace
- New /api/me endpoint for client-side auth + workspace state
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Alt+P toggles Picture-in-Picture floating recorder on /voice page
- Works from both main window and PiP window
- Footer shows new shortcut hint when PiP is supported
- Browser extension Ctrl+Shift+V now opens PWA /voice page (with PiP)
instead of extension-local voice.html
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Standardize to dark background (#0f172a / slate-900) and add emoji
data URI favicon matching the rStack ecosystem.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Adds a "Pop Out" button that opens a compact floating mini-recorder
using the Document Picture-in-Picture API. The floating window stays
on top of all other apps and includes: record/stop button, timer,
live transcript, copy/save/discard actions, and keyboard shortcuts.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Adds "Download app for offline use" button that triggers PWA install
prompt, then automatically starts downloading the Parakeet.js offline
transcription model (~634MB, cached in IndexedDB). Shows purple progress
bar during download. Header shows install/offline-mode/checkmark badges
based on current state. Idle screen shows contextual CTAs for install
or model download.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
rFunds gets 💸 (flying money), rWallet gets 💰 (money bag). Toned down
"self-hosted" and "community-run" across descriptions — kept where
especially relevant (rNetwork), replaced elsewhere with more descriptive
terms like collaborative, private, group, live.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
rMaps now appears under Planning (alongside rCal and rTrips). Category
renamed from "Sharing & Media" to "Social & Sharing" with rNetwork
at the top.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
All apps now use 'r' prefix (rSpace, rNotes, rPubs, etc.), rStack
appears as the top-level header, pastel rainbow favicon badges (rS, rN,
rP...), emoji to the right of each title, and descriptions emphasize
group/collaborative/real-time/self-hosted/community-run.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Resolves merge conflicts to keep both new features from main
(bodyJson, cardType, parent notes, OpenNotebookEmbed, attachments)
and the new shared Header with AppSwitcher + SpaceSwitcher dropdowns.
Also excludes scripts/ from tsconfig to fix pre-existing type errors
and regenerates Prisma client.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replaces per-page inline navbars with a shared Header component that
includes AppSwitcher (18 rApps grouped by category) and SpaceSwitcher
(fetches user spaces from /api/spaces) dropdowns — matching the
rspace.online header pattern. All 9 pages updated.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The batch Whisper API was producing worse results than the live Web
Speech API transcript. Now the live text is used as-is when recording
stops. Audio still uploads for the AUDIO note attachment. Parakeet.js
offline fallback only triggers if no live transcript was captured.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Resolves merge conflicts between dev (voice/transcription features) and
main (logseq import/export, memory cards, attachments). Both feature
sets coexist cleanly.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Dedicated standalone voice recorder page at /voice that works as an
installable PWA. Records audio with three transcription tiers running
in parallel: WebSocket streaming (live segments), Web Speech API (live
local), and batch Whisper API (high quality). Falls back to offline
Parakeet.js if all network tiers fail. Includes editable transcript,
notebook selection, copy-to-clipboard, and keyboard shortcuts.
PWA manifest updated with Voice Note shortcut for quick access from
taskbar right-click menu.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Adds a standalone voice recording popup (voice.html) accessible via the
extension popup button or Ctrl+Shift+V hotkey. Records audio, uploads to
rNotes, and transcribes with a 3-tier cascade: server Whisper API, live
Web Speech API (real-time text while recording), and offline Parakeet.js
(NVIDIA 0.6B, ~634MB cached in IndexedDB). Saves as AUDIO notes with
editable transcript and notebook selection.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Adds voice recording popup with keyboard shortcut (Alt+Shift+V),
microphone access, and Voice Note button in the extension popup.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Multi-strategy approach to find readable versions of paywalled articles:
1. Wayback Machine (check existing + Save Page Now)
2. Google Web Cache
3. archive.ph (read-only check for existing snapshots)
Adds archiveUrl field to Note model, /api/articles/unlock endpoint,
unlock button on note detail page, and browser extension integration.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add /opennotebook route embedding Open Notebook via iframe with space-aware
nav breadcrumb. Middleware detects subdomain (e.g. cca.rnotes.online) and sets
rnotes-space cookie. /ai redirects to /opennotebook. Traefik wildcard router
at priority 100 catches *.rnotes.online subdomains.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Adds AI Notebook tab to notebook detail pages and a full-page /ai route,
both embedding the existing OpenNotebook instance via iframe at
opennotebook.rnotes.online. CSP frame-src header added for security.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Six feature cards: card types, hierarchy & properties, Logseq interop,
dual format storage, structured attachments, and FUN model.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
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>