- 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 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>
- 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>
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>
- 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>