- Add Open Notebook, Unlock Article, and Transcribe buttons to header
- Move search bar to center of header across all pages
- Rename "AI Notebook" to "Open Notebook" throughout
- Support ?type= query param on /notes/new for deep-linking
- Reorganize AppSwitcher categories (Creating, Sharing, Observing)
- Move rTube and rSwag to Creating category
- Update EcosystemFooter link order to match new categories
- Update header bg to bg-slate-900/85
- Add key emojis to UserMenu sign-in states
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>
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>
- 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>