Add send-to-device (email books to e-readers)#1
Merged
Conversation
Users can add device email addresses in Settings and send books directly to Kindle, Kobo, or any email address. Supports single and bulk send (max 25), 50/user/day rate limit, 25 MB attachment limit. Admin Email tab shows SMTP status, all devices, and send history. Settings page shows setup guide when SMTP is not configured. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Settings (empty/prefilled/added), send modal (single/bulk), and the admin Email tab with populated SMTP status, devices, and send history. Adds the corresponding shots to the screenshot script with padding injection and a cleanup hook for the device-added shot. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Vite failed to detect react-dom/client's createRoot export when pre-bundling, breaking all client:load islands in dev (theme-aware screenshots, copy buttons, search). Force optimizeDeps to include the React entry points. Production builds were unaffected. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
New /docs/send-to-device page (SMTP setup with collapsible per-provider callouts, device management, sending, admin Email tab, limits). Wired into the docs nav, configuration env table, and admin docs. Added contextual "Learn more →" links in Settings and the admin Email tab. Adds a reusable collapsible variant to the Callout component, a docs checkpoint to the PR template, and refreshes the configured-state screenshots to show the new docs links. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Documents the feature in CHANGELOG.md and the docs-site mirror. The mirror gains an Unreleased section reflecting the canonical changelog (also surfaces the already-merged API token scopes + favicon entries that were sitting uncommitted). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Changes
Backend
TOME_SMTP_*env vars (host/port/user/password/from/TLS/SSL/daily-limit)UserDevicemodel — per-user device addresses (max 10)smtplib) — single send, bulk send over one connection, test emailFrontend
SendToDeviceModal(single + bulk modes); Settings device CRUD with setup-guide fallbackDocs & site
/docs/send-to-devicepage (provider setup as collapsible callouts, Kindle approved-sender note, limits)collapsiblevariant added to the Callout componentoptimizeDeps); production was unaffectedCI
Screenshots
Settings — device management
Send dialog (single / bulk)
Admin Email tab
Not-configured setup guide
Checklist
pytestpasses (281 tests)npm run buildcleanTesting
End-to-end against real Fastmail SMTP: single send, bulk send (one connection), guest 403, member allowed, duplicate device 400, max-10 cap 400, oversized file 413, daily-limit 429, send-history logging. All passing.
Notes
smtplib+email.mime.