Commit Graph
297 Commits
Author SHA1 Message Date
Can K.andCan Kirca fed60c1b18 Close the composer after a message is sent (#83)
After a successful send the composer kept its window open, emptied, and the "Message sent" toast lived inside it. The popup now closes (the full-page composer goes to Sent) and the confirmation is shown by FloatingComposer through the compose context, so it stays visible once the composer is gone. It is a status region so screen readers announce it.

Sending also cancels the pending autosave and invalidates in-flight ones. Before, a save that fired during the send could recreate the message as a draft, which then sat in Drafts next to the sent copy.

Co-authored-by: Can Kirca <9063990+cankirca@users.noreply.github.com>
2026-10-11 02:08:08 +07:00
Can K.andCan Kirca 21817cedcb Bring the tests back in line with the code (#82)
* Mark the fixture admin as primary admin in the account tests

Creating accounts needs a primary admin or an admin with user management rights since migration 0050, but the fixture inserted its admin without is_primary_admin, so every create call got a 403.

* Let the agent tool test call mutating tools without chat approval

In chat, mark_email_read, move_email and discard_draft now return pending_approval instead of acting. The test still expected the change to happen right away. It now checks that chat only asks, and runs the direct calls with the mcp origin.

* Test the migrated schema instead of the removed bootstrap SQL

The old test read MIGRATION_NAMES and INITIAL_SCHEMA_SQL out of src/lib/setup/migration.ts, which now just runs the migration files. The replacement applies drizzle/migrations to an empty database, checks that every file is recorded and not re-applied, and keeps the mailbox, license and spam table checks.

* Expect the shortened pt-BR inbox label in the i18n tests

6978c01 changed navigation.inbox from "Caixa de entrada" to "Entrada" in pt-BR, but four tests still expected the old label.

---------

Co-authored-by: Can Kirca <9063990+cankirca@users.noreply.github.com>
2026-10-11 02:06:49 +07:00
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) ca41c56a07 pump version 2026-10-10 17:28:19 +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) 0a05fb565e Merge pull request #57 from wpfyorg/feat/pwa-web-push
feat: add PWA and Web Push notifications
2026-10-07 16:28:15 +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) d8664ad802 Merge pull request #67 from forge-z/feat/pt-br-navigation
Add localization
2026-10-07 13:45:35 +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