- Selected email card: add secondary-container bg + left accent border
- Unread email cards: add primary left border accent
- StarButton: sync local state with parent via useEffect([isStarred])
- Initial dark mode: useEffect applies data-theme on mount
- Star active color: amber #f9a825 via .star-button--active CSS rule
- Unread count badge: styled as pill with primary-container background
- Empty state: add inbox/folder_open material icon
- Folder toolbar label: capitalize + replace underscores with spaces
- ComposeWindow: CC/BCC hidden by default, revealed via Cc/Bcc button
- Email header: flex layout for .header-top, column gap for .header-details
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Replace all emoji with Material Symbols Outlined (self-hosted woff2)
- Softer dark mode palette (blue-purple surface tones instead of near-black)
- Header: burger menu, notifications bell with badge, theme switcher,
language selector, settings, avatar
- Folder nav icons render via Material Symbols font ligatures
- Fix Dockerfile to copy public/ dir for font serving
- Improved padding and spacing throughout
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Moves inline JSX from EmailClientContent into proper FakeMUI email
components in components/fakemui/email/layout/. All styling uses M3
CSS custom properties (--mat-sys-*) from the FakeMUI token system.
New components:
- MailboxHeader: top bar with search, avatar, settings
- MailboxSidebar: compose button + folder navigation
- EmailDetail: reading pane with toolbar, header, body, reply bar
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
In an npm monorepo, only the root lockfile is authoritative. Workspace-specific
lockfiles were stale, couldn't benefit from root overrides, and were triggering
Dependabot false positives. Switching to **/package-lock.json gitignore pattern.
Also adds eslint peer dep overrides to frontends/postgres for standalone compatibility.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Remove stale dirs/files superseded by metabuilder-small's reorganization:
- Old YAML entity/seed files (migrated to JSON)
- Root-level workflowui/ (moved to frontends/workflowui/)
- Prisma, Pyodide, old hooks, bun.lock artifacts
- Legacy scratch docs (txt/, docs/, deployment/*.md)
- Stale CI workflows consolidated in small
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
**workflowui**:
- Add NotificationAdapter that bridges useUINotifications() to shared NotificationContainer
- Update RootLayoutClient to use NotificationAdapter
- Mark local NotificationContainer as deprecated
**pastebin**:
- Update BackendIndicator to use shared BackendStatus component
- Keep as thin wrapper that maps getStorageConfig() to status prop
- Update tests for new implementation
**codegen**:
- Update KeyboardShortcutsDialog to use shared KeyboardShortcutsContent
- Move hardcoded shortcuts to data array using ShortcutCategory type
- Use getPlatformModifier() for cross-platform modifier keys
- Keep local Dialog wrapper, use shared content component
**components**:
- Add tsup.config.ts for building the package
- Add package-lock.json
All subprojects now depend on @metabuilder/components (file:../components)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>