commits
- Add CollaboratorWebSocket handler for real-time collaboration
- Add CollaborationHub field to Handler struct
- Add validateWSToken and colorFromDID helper functions
- Add RegisterClient/UnregisterClient methods to Room
- Wire up Hub in main.go and register /ws/docs/{rkey} route
Add SVG favicons and PNG variants (16, 32, 48, 180, 192, 512px) with
font-style:normal to ensure upright rendering of the Dd logotype.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Add @milkdown/plugin-history to the Milkdown editor, enabling undo/redo
via Mod-z/Mod-Shift-z keyboard shortcuts. Also adds ↩/↪ toolbar buttons
visible only in rich mode.
- Add logo-document.svg and logo-monogram.svg to static/img
- Show document logo in navbar alongside Diffdown wordmark
- Add Documents link to navbar (left of New Document) for logged-in users
- Remove Documents button from document view actions
- Add btn-danger style: red hover for outline delete button
- Fix list-view card hover highlight using background tint instead of border
Documents are now stored as com.diffdown.document records instead of
site.standard.document, keeping Diffdown docs private from Standard
aggregators. Removes the publication concept entirely (no ensurePublication,
no site field). Renames publishedAt → createdAt. Keeps at.markpub.markdown
as the content type for interop.
- Click a link in rich text mode to show an inline tooltip with URL input
- Tooltip supports update, remove, and cancel actions
- Editor rich container now uses --bg for contrast; milkdown pane styled as a document page with border, shadow, and padding
- Increase paragraph spacing (1.25em) and reduce list item spacing (0.25em)
- Fix p > li margin bleed in both editor and markdown-body views
- Add Milkdown as default editor (rich text, WYSIWYG)
- Source button toggles to CodeMirror split-preview mode; preference saved in localStorage
- Add milkdown-entry.js and Dockerfile build step to bundle + minify Milkdown
- Add card/list view toggle to documents page (preference persisted)
- Shared getMarkdown() helper reads content from whichever editor is active
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add Preview and Wrap toggle buttons to editor toolbar
- Preview toggle shows/hides the render pane (editor expands to fill)
- Wrap toggle enables/disables CodeMirror lineWrapping via Compartment
- Fix vertical scroll: add height:100% to #editor mount div
- Add .btn-outline.active style for toggle button state
- Add fmtdate template function for human-friendly date formatting
- Make document title editable in editor toolbar with autosave
- Update identity.go comment to mention custom domain handles
- Clean up README and auth page copy
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Reduces editor.js from 1.1MB to 591KB (48%) using a separate
node:alpine build stage with npx esbuild --minify.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Documents are now stored as site.standard.document records on each
user's PDS via com.atproto.repo XRPC endpoints. Local SQLite retains
only user accounts and ATProto token sessions.
- Add atproto_sessions table to persist DPoP keys and OAuth tokens
- Build XRPC client with DPoP auth, ath claim (RFC 9449), and token refresh
- Replace repo/file model with Document/MarkdownContent (at.markpub.markdown)
- Replace all repo/file handlers and routes with document handlers
- Add site.standard.publication auto-creation on first document
- Request transition:generic scope for write access to custom collections
- Drop repos/files/versions/comments tables (migration 004)
- Remove go-diff dependency and internal/version package
- Add Cache-Control: no-store to client-metadata.json
- Configure custom domain diffdown.jluther.net
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Update module path to github.com/limeleaf/diffdown
- Update all import paths in Go source files
- Update templates, navbar logo, page titles
- Rename env var MARKDOWNHUB_BASE_URL → DIFFDOWN_BASE_URL
- Update ATProto client_name to Diffdown
- Update README and default local db filename
Note: Fly.io app remains at markdownhub.fly.dev (infrastructure rename separate)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- CSS custom properties for dark theme on [data-theme="dark"] and prefers-color-scheme
- Theme toggle button (☀/🌙) in navbar, persisted to localStorage
- Flash-free theme application via inline script in <head>
- CodeMirror oneDark theme switches dynamically via Compartment
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add MARKDOWNHUB_BASE_URL to fly.toml for public HTTPS client_id URL
- Fix migration system to track applied migrations (schema_migrations table)
- Add .gitignore (db files, binary)
- Update README: use 127.0.0.1 instead of localhost (RFC 8252 compliance)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Add ATProto OAuth handlers (ClientMetadata, ATProtoLoginPage,
ATProtoLoginSubmit, ATProtoCallback) with full PAR + PKCE + DPoP
support; remove defunct OAuthGitHub/OAuthGoogle handlers and update
server routes accordingly.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add logo-document.svg and logo-monogram.svg to static/img
- Show document logo in navbar alongside Diffdown wordmark
- Add Documents link to navbar (left of New Document) for logged-in users
- Remove Documents button from document view actions
- Add btn-danger style: red hover for outline delete button
- Fix list-view card hover highlight using background tint instead of border
Documents are now stored as com.diffdown.document records instead of
site.standard.document, keeping Diffdown docs private from Standard
aggregators. Removes the publication concept entirely (no ensurePublication,
no site field). Renames publishedAt → createdAt. Keeps at.markpub.markdown
as the content type for interop.
- Click a link in rich text mode to show an inline tooltip with URL input
- Tooltip supports update, remove, and cancel actions
- Editor rich container now uses --bg for contrast; milkdown pane styled as a document page with border, shadow, and padding
- Increase paragraph spacing (1.25em) and reduce list item spacing (0.25em)
- Fix p > li margin bleed in both editor and markdown-body views
- Add Milkdown as default editor (rich text, WYSIWYG)
- Source button toggles to CodeMirror split-preview mode; preference saved in localStorage
- Add milkdown-entry.js and Dockerfile build step to bundle + minify Milkdown
- Add card/list view toggle to documents page (preference persisted)
- Shared getMarkdown() helper reads content from whichever editor is active
- Add Preview and Wrap toggle buttons to editor toolbar
- Preview toggle shows/hides the render pane (editor expands to fill)
- Wrap toggle enables/disables CodeMirror lineWrapping via Compartment
- Fix vertical scroll: add height:100% to #editor mount div
- Add .btn-outline.active style for toggle button state
- Add fmtdate template function for human-friendly date formatting
- Make document title editable in editor toolbar with autosave
- Update identity.go comment to mention custom domain handles
- Clean up README and auth page copy
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Documents are now stored as site.standard.document records on each
user's PDS via com.atproto.repo XRPC endpoints. Local SQLite retains
only user accounts and ATProto token sessions.
- Add atproto_sessions table to persist DPoP keys and OAuth tokens
- Build XRPC client with DPoP auth, ath claim (RFC 9449), and token refresh
- Replace repo/file model with Document/MarkdownContent (at.markpub.markdown)
- Replace all repo/file handlers and routes with document handlers
- Add site.standard.publication auto-creation on first document
- Request transition:generic scope for write access to custom collections
- Drop repos/files/versions/comments tables (migration 004)
- Remove go-diff dependency and internal/version package
- Add Cache-Control: no-store to client-metadata.json
- Configure custom domain diffdown.jluther.net
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Update module path to github.com/limeleaf/diffdown
- Update all import paths in Go source files
- Update templates, navbar logo, page titles
- Rename env var MARKDOWNHUB_BASE_URL → DIFFDOWN_BASE_URL
- Update ATProto client_name to Diffdown
- Update README and default local db filename
Note: Fly.io app remains at markdownhub.fly.dev (infrastructure rename separate)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- CSS custom properties for dark theme on [data-theme="dark"] and prefers-color-scheme
- Theme toggle button (☀/🌙) in navbar, persisted to localStorage
- Flash-free theme application via inline script in <head>
- CodeMirror oneDark theme switches dynamically via Compartment
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add MARKDOWNHUB_BASE_URL to fly.toml for public HTTPS client_id URL
- Fix migration system to track applied migrations (schema_migrations table)
- Add .gitignore (db files, binary)
- Update README: use 127.0.0.1 instead of localhost (RFC 8252 compliance)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>