Commit Graph

21 Commits

Author SHA1 Message Date
Gemini Agent
c6a400a04d Gracefully handle 403 blocked sites with minimal article
Instead of failing completely on 403/401, save a placeholder article
with the URL so users can still access via 'Open original' link.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-25 01:07:40 +00:00
Gemini Agent
96ece66204 Add article publish date to list and reader views
Extract publication dates from HTML meta tags when saving articles
and display them prominently in the article list and reader header.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 06:33:16 +00:00
Gemini Agent
8151705b17 Fix JSDOM CSS parsing errors (border-width issue)
JSDOM crashes on modern CSS with variables like var(--border-width,1px).
Fix by stripping all <style> tags and inline style attributes before
parsing - Readability only needs DOM structure, not CSS.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-23 20:20:03 +00:00
Gemini Agent
61e1ac4d81 Fix clipboard copy with fallback for iOS/older browsers
- Add try-catch around navigator.clipboard.writeText
- Add fallback using textarea + execCommand for older browsers
- Add final fallback using prompt() to show URL if all else fails

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-23 09:19:22 +00:00
Gemini Agent
1022b1ddca Add content capture bookmarklet for paywalled sites
- 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>
2026-01-23 09:14:09 +00:00
Gemini Agent
464f93a6aa Add sorting and client-side caching for instant switching
- 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>
2026-01-19 13:42:49 +00:00
Gemini Agent
911b749d3c Add bulk select and archive, improve performance
- 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>
2026-01-19 13:27:13 +00:00
Gemini Agent
883b0d7132 Fix TTS autoplay policy errors
- 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>
2026-01-18 02:32:28 +00:00
Gemini Agent
d884e0d0bb Fix Edge TTS voice - don't use browser voice settings
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>
2026-01-18 02:17:09 +00:00
Gemini Agent
79a7914c0f Chunk TTS text for faster response
- 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>
2026-01-18 02:12:11 +00:00
Gemini Agent
611d57770e Add TTS proxy to fix CORS issues
- /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>
2026-01-18 02:05:38 +00:00
Gemini Agent
f5de4749db Fix localStorage to merge with defaults for new fields
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>
2026-01-18 01:53:34 +00:00
Gemini Agent
6a29e7263f Disable API key requirement for Edge TTS
Set REQUIRE_API_KEY=False so it works without authentication.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-18 01:49:52 +00:00
Gemini Agent
576b0ae6a6 Add reading progress bar, better empty states, and Edge TTS
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>
2026-01-18 01:46:03 +00:00
Gemini Agent
9dafda88a9 UI improvements: Reader controls and TTS player
- 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>
2026-01-18 01:34:39 +00:00
Gemini Agent
8f059b8690 Enable Kokoro TTS in docker-compose
Uses ghcr.io/remsky/kokoro-fastapi-cpu:v0.2.1 for high-quality TTS.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-18 01:26:57 +00:00
Gemini Agent
e1312e8183 Improve POST /api/add for Apple Shortcuts
Cleaner JSON body handling - just send {"url": "..."}
No URL encoding needed.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-17 13:18:52 +00:00
Gemini Agent
d6cb62d9b3 Add simple /api/add endpoint for Apple Shortcuts
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>
2026-01-17 12:50:56 +00:00
Gemini Agent
2bf65fb63b Fix Docker build for native SQLite module
- 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>
2026-01-17 12:48:37 +00:00
Gemini Agent
513576b90e v2.0: Major feature update
New Features:
- API key authentication for external access
- Apple Shortcuts integration endpoint (/api/v1/add)
- Full-text search across all articles
- Folders for organizing articles
- Highlights and notes on articles
- Reading stats with streaks
- Reading goals (daily/weekly/monthly)
- Import from Pocket/Instapaper
- RSS feed output
- PWA support for mobile
- Auto theme scheduling (day/night)
- Settings page with all configuration

API Endpoints:
- /api/v1/add - Add articles via API key
- /api/keys - Manage API keys
- /api/search - Full-text search
- /api/folders - Folder management
- /api/highlights - Highlights/notes
- /api/stats - Reading statistics
- /api/goals - Reading goals
- /api/import - Pocket/Instapaper import
- /api/rss - RSS feed

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-17 12:19:57 +00:00
Gemini Agent
27963af055 Initial commit: ReadLater v1.0
- 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>
2026-01-17 07:35:07 +00:00