- New "Content Capture" bookmarklet sends page HTML directly
- Works for paywalled sites (Economist, NYT, etc.) when logged in
- Works for Cloudflare-protected sites
- Added POST handler to /api/save for HTML content
- Added extractFromHtml() for processing captured content
- Improved 403 error message with bookmarklet suggestion
- Updated bookmarklet page with both options
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add sort dropdown: Newest/Oldest/Title A-Z/Z-A
- Client-side cache with 30s TTL for instant section switching
- Re-sorting uses cached data for immediate response
- Cache clears on data modifications (add/archive/delete)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add database indexes on isArchived, isFavorite, createdAt columns
- Optimize article list API to exclude content/textContent fields
- Add PATCH /api/articles endpoint for bulk updates
- Implement multi-select mode with Select/Deselect all
- Add bulk archive/unarchive buttons
- Rename "All Articles" to "To Read"
- Fetch full article content only when opening for reading
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Handle NotAllowedError gracefully instead of showing alerts
- Make resume() async and catch playback errors
- Reset state properly when autoplay is blocked
- Clean up unused dependencies in playEdge callback
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Browser voices (like Apple's) aren't compatible with Edge TTS.
Always use Edge's default voice (en-US-AvaNeural).
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Splits text at sentence boundaries (max 3000 chars)
- Plays first chunk immediately for better UX
- Streams response instead of buffering
Full article TTS was taking 45-50s, now starts in ~2s.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- /api/tts proxies requests to Edge TTS and Kokoro
- Uses Docker container names for internal networking
- Removes URL config from settings (handled server-side)
- Fixes localStorage merge for new settings fields
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Old saved settings were missing new edgeUrl field, causing Edge TTS to fail.
Now merges stored values with defaults so new fields are included.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
UI Improvements:
- Reading progress bar at top of reader (tracks scroll position)
- Better empty state with illustration and helpful tips
- Edge TTS as default - fast streaming with Microsoft neural voices
TTS Options:
- Edge TTS (recommended): Fast, natural sounding, streams immediately
- Kokoro: High quality but slower (generates full audio first)
- Browser: Built-in fallback
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add archive/delete/external-link buttons to Reader header
- Create floating TTS player bar with progress slider
- Add 15s skip forward/back controls
- Show current time and duration during playback
- Add busy_timeout to SQLite for concurrent access during build
- Checkpoint WAL after migrations
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
No authentication required - intended for Tailscale networks.
GET /api/add?url=... returns JSON with success status.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add python3, make, g++ for building better-sqlite3
- Use npm ci --ignore-scripts then npm rebuild better-sqlite3
- Remove postinstall script that caused build issues
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Save articles via URL or bookmarklet
- Clean dark reader with customizable fonts/sizing
- Text-to-speech with browser + Kokoro support
- Speed control up to 3x
- Favorites and archive
- SQLite database with Drizzle ORM
- Docker deployment ready
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>