Commit Graph
224 Commits
Author SHA1 Message Date
Can K.andCan Kirca 8ee28cfd04 Render the branded page title on the server (#81)
* Render the branded page title on the server

The root layout sent a fixed "Mailflare" title and the browser swapped in the configured app name after the page loaded. Screen readers announced both. The title now comes from the branding settings in the first response, and the branding is passed to the provider as its initial value so the name and the icon do not flash their defaults first.

The inbox page also kept its own "Inbox (n)" title after leaving it, so the sign-in page after a logout still read as the inbox. It now puts the previous title back when it unmounts.

* Stub the branding lookup in the layout i18n test

The root layout now reads the app name from the server, which pulls in the Workers runtime. The i18n test bundles the layout with stubs for its server-only imports, so add one for the branding helper too.

---------

Co-authored-by: Can Kirca <9063990+cankirca@users.noreply.github.com>
2026-10-11 02:06:28 +07:00
Hieu Nguyen (Jack) 5635ab0f48 Merge branch 'main' of https://github.com/hieunc229/mailflare 2026-10-10 15:41:50 +07:00
Hieu Nguyen (Jack) 4b31136ac7 Add scheduled tab #97 2026-10-10 15:41:48 +07:00
Hieu Nguyen (Jack) a5c2efabff improve drafts view on mobile 2026-10-10 15:21:56 +07:00
yi111 f90de963d6 Show the IAM policy when a save is refused for missing SES permissions (#98)
Saving credentials that validate against AWS but carry no SES permissions
answers 400 with "Attach the policy shown below", yet the panel rendered
nothing below it. Two causes: the 400 body carried the report but not the
policy, and requestJson discarded the parsed body on a rejected response,
so the report never reached the panel. The block was also gated on
`configured && !editing`, which is exactly the state a refused save leaves.

The 400 now carries the policy, requestJson throws an ApiError that keeps
the parsed body, and the panel keeps a refused report so the missing
permissions and the policy render under the message, expanded. A later
successful save, re-check, replace or remove clears it.

Refs #79
2026-10-10 07:50:28 +07:00
Hieu Nguyen (Jack) 83ade981e5 Add support for AWS S3, BackBlaze B2 as storage 2026-10-09 17:07:33 +07:00
Hieu Nguyen (Jack) 3c90a03171 update Drive layout 2026-10-09 16:04:19 +07:00
Hieu Nguyen (Jack) 9f66e13560 Added Drive 2026-10-08 21:52:49 +07:00
Hieu Nguyen (Jack) 850661ae3e update localization to reduce sizes 2026-10-08 21:52:35 +07:00
Hieu Nguyen (Jack) 6978c01de1 update languages 2026-10-07 17:09:03 +07:00
Hieu Nguyen (Jack)andClaude Sonnet 5.5 c8795ae39e Merge main into feat/pwa-web-push
Resolve conflicts in favor of main; re-apply Web Push on top.
Renumber push_subscriptions migration 0032 -> 0054 (0032 now taken).
Skip push for agent_draft notifications.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-07 16:27:13 +07:00
Hieu Nguyen (Jack) 9816a61b3c support more languages 2026-10-07 16:15:13 +07:00
Hieu Nguyen (Jack)andClaude Sonnet 5.5 0d561f1b25 Move language and time zone to account settings, add README language docs
Add a General section to Settings > Account holding language and time zone,
render the homepage language selector as a compact text label sized to its
value, drop the sidebar language field, and document localization.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-07 13:44:01 +07:00
Hieu Nguyen (Jack)andClaude Sonnet 5.5 5ac0931101 Add Urdu interface language
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-07 13:43:45 +07:00
Hieu Nguyen (Jack)andClaude Sonnet 5.5 d7ae8f77d1 Move language and time zone to account settings, add README language docs
Add a General section to Settings > Account holding language and time zone,
render the homepage language selector as a compact text label sized to its
value, drop the sidebar language field, and document localization.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-07 13:43:41 +07:00
Hieu Nguyen (Jack)andClaude Sonnet 5.5 149eb85bd5 Add Bengali interface language
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-07 13:39:40 +07:00
Hieu Nguyen (Jack)andClaude Sonnet 5.5 ae5d9badc5 Add Arabic interface language
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-07 13:35:04 +07:00
Hieu Nguyen (Jack)andClaude Sonnet 5.5 2d2c1507a8 Add Hindi interface language
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-07 13:30:24 +07:00
Hieu Nguyen (Jack)andClaude Sonnet 5.5 634614bb70 Add Vietnamese interface language
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-07 13:26:43 +07:00
Hieu Nguyen (Jack)andClaude Sonnet 5.5 4fc5689cba Add Turkish interface language
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-07 13:23:42 +07:00
Hieu Nguyen (Jack)andClaude Sonnet 5.5 303c9e7548 Add Indonesian interface language
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-07 13:20:27 +07:00
Hieu Nguyen (Jack)andClaude Sonnet 5.5 4919d82e5f Add Japanese interface language
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-07 13:17:46 +07:00
Hieu Nguyen (Jack)andClaude Sonnet 5.5 40e5899ae8 Add Simplified Chinese interface language
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-07 13:15:09 +07:00
Hieu Nguyen (Jack)andClaude Sonnet 5.5 abfb8e3653 Add Russian interface language
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-07 13:12:35 +07:00
Hieu Nguyen (Jack)andClaude Sonnet 5.5 68d37898a7 Add German interface language
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-07 13:08:49 +07:00
Hieu Nguyen (Jack)andClaude Sonnet 5.5 e04ddf1d7e Add Spanish and French interface languages
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-07 13:05:36 +07:00
Hieu Nguyen (Jack)andClaude Sonnet 5.5 07f4ac2f70 Load locale catalogs on demand
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-07 12:58:46 +07:00
Hieu Nguyen (Jack)andClaude Sonnet 5.5 0db440c24c Prune unused keys; plural-aware catalog parity test
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-07 12:57:18 +07:00
Hieu Nguyen (Jack)andClaude Sonnet 5.5 d9ff5c5677 Translate remaining shell components
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-07 12:55:55 +07:00
Hieu Nguyen (Jack)andClaude Sonnet 5.5 bcf17d07f9 Translate mailbox import
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-07 12:54:58 +07:00
Hieu Nguyen (Jack)andClaude Sonnet 5.5 06f881b316 Translate the email assistant
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-07 12:54:16 +07:00
Hieu Nguyen (Jack)andClaude Sonnet 5.5 8a4474e920 Translate public booking pages
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-07 12:52:42 +07:00
Hieu Nguyen (Jack)andClaude Sonnet 5.5 132ed85ebf Translate calendar sidebar and bookings
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-07 12:51:59 +07:00
Hieu Nguyen (Jack)andClaude Sonnet 5.5 d32fd47148 Translate calendar page; locale-aware date formatting
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-07 12:50:19 +07:00
Hieu Nguyen (Jack)andClaude Sonnet 5.5 84ec386c76 Translate activity, agent and AI usage admin pages
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-07 12:49:08 +07:00
Hieu Nguyen (Jack)andClaude Sonnet 5.5 64cf4de5df Translate admin API keys, branding and licenses
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-07 12:48:09 +07:00
Hieu Nguyen (Jack)andClaude Sonnet 5.5 b50fa94bf2 Translate backups
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-07 12:47:12 +07:00
Hieu Nguyen (Jack)andClaude Sonnet 5.5 379be2955b Translate webhooks
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-07 12:46:36 +07:00
Hieu Nguyen (Jack)andClaude Sonnet 5.5 f5c3aeabc5 Translate provider setup panels
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-07 12:45:54 +07:00
Hieu Nguyen (Jack)andClaude Sonnet 5.5 d554f84b37 Translate domain management
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-07 12:45:00 +07:00
Hieu Nguyen (Jack)andClaude Sonnet 5.5 5e822f5782 Translate mailbox admin pages
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-07 12:43:27 +07:00
Hieu Nguyen (Jack)andClaude Sonnet 5.5 a4182db798 Translate account detail admin pages
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-07 12:42:42 +07:00
Hieu Nguyen (Jack)andClaude Sonnet 5.5 316fce2479 Translate admin overview, general, routing and accounts
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-07 12:41:46 +07:00
Hieu Nguyen (Jack)andClaude Sonnet 5.5 93c00e3f10 Translate landing page
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-07 12:40:30 +07:00
Hieu Nguyen (Jack)andClaude Sonnet 5.5 28e401d1df Translate setup and onboarding
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-07 12:39:54 +07:00
Hieu Nguyen (Jack)andClaude Sonnet 5.5 6e16cd54b3 Translate settings pages, message detail and sign-in screens
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-07 12:39:06 +07:00
Hieu Nguyen (Jack)andClaude Sonnet 5.5 c3a7d108ae Translate mailbox and domain routing rules
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-07 12:37:45 +07:00
Hieu Nguyen (Jack)andClaude Sonnet 5.5 c4c3bb5865 Translate inbox, spam, import and email client settings
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-07 12:36:41 +07:00
Hieu Nguyen (Jack)andClaude Sonnet 5.5 e6728d6a57 Translate MFA, API keys, avatar settings
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-07 12:35:41 +07:00
Hieu Nguyen (Jack)andClaude Sonnet 5.5 176c867f46 Translate account settings forms
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-07 12:34:37 +07:00