CodeIssuesPull RequestsActionsSecurityInsights
✨ AI
More
Settings

feat: UI catch-up — 5 new pages + grammar wiring + DNS modal + MTA fixes #4051

Merged⚡ AI-generatedXSccantynz wants to mergeclaude/code-audit-vapron-migration-6jya3kmainopened Jun 16, 20260/7 tasks
ccantynzcommented Jun 16, 2026

Originally written by @ccantynz-alt on GitHub.
Imported from https://github.com/ccantynz-alt/AlecRae.com/pull/80


Summary

Major UI catch-up session — brought 5 completely-missing feature pages to life and fixed several production bugs.

New Pages Built

  • Smart Folders (/smart-folders) — full CRUD for dynamic saved searches: create with any filter combination (from/to/subject/body/attachment/date/labels), open filtered inbox, edit/delete per folder
  • Mail Merge (/mail-merge) — campaign management with CSV upload/paste, {{variable}} template rendering, live preview of first 3 resolved emails, per-recipient status tracking, auto-poll while sending
  • Shared Inboxes & Delegation (/shared-inboxes) — tabbed: team inboxes with member management + delegation (delegate to/delegate-for with permission scopes: reply/archive/forward/delete)
  • Team Chat (/chat) — channel list sidebar + day-grouped message thread + send form (Enter to send, Shift+Enter newline), mark-read, delete own messages
  • All 4 pages wired into the sidebar nav; all API clients already existed in api.ts

Bug Fixes

# Fix
Grammar never triggered Added onBodyChange prop to ComposeEditor — fires on every keystroke, compose page wires it to _checkGrammar (1.5s debounce → grammarApi → AI Suggestions panel). First time grammar checking has ever actually run.
Domains "View Records" no-op Replaced /* no-op */ with a full DnsRecordsModal — shows all 4 DNS records (type/name/value), one-click copy, verified/pending badges, propagation note
React hydration error #418 navigator.onLine initialized as null (was true) in OfflineComposeBanner + OfflineBadge — eliminates server/client HTML mismatch
MTA crashed on port 8080 Default HEALTH_PORT changed to 8082; health server startup made non-fatal so MTA keeps running even if port is taken

What's Next (still open)

  • Documents page (/documents — API ready, no UI)
  • A/B Testing page (/ab-tests — API ready, no UI)
  • Auto-Responder / OOO page (API ready, no UI)
  • Contact Groups page (API ready, sidebar item exists)

Test plan

  • Navigate to /smart-folders — create a folder with filters, verify it appears in list, click "Open inbox →"
  • Navigate to /mail-merge — upload CSV, confirm variable detection, send a campaign
  • Navigate to /shared-inboxes — create a shared inbox, check Delegations tab
  • Navigate to /chat — create a channel, send messages, confirm day grouping
  • Open Compose — type 20+ chars in body, wait 1.5s — verify grammar suggestions appear in AI panel
  • Open Domains — click "View Records" on any domain — verify DNS records modal opens with copy buttons
  • Pull on box: cd /opt/alecrae && git pull origin main && bun install && bun run --cwd apps/web build && sudo systemctl restart alecrae-web

https://claude.ai/code/session_017mhAkS4qhMjcvVnyFi61xp


Generated by Claude Code

ccantynzcommented Jun 16, 2026

Originally written by @vercel[bot] on GitHub.


Deployment failed with the following error:

There is no GitHub account connected to this Vercel account.
ccantynzcommented Jun 16, 2026

Originally written by @vercel[bot] on GitHub.


The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
alec-rae-com-admin Error Error Jun 16, 2026 9:18am

Cross-repo impact

See what breaks downstream if this PR merges.

Analyze →
⮌ Merged

This pull request was merged into main.

c comment · e edit title · m merge · a approve · r request changes · ? shortcuts