# JMAP Webmail - Roadmap This document tracks the development status and planned features for JMAP Webmail. ## Completed Features ### Core Infrastructure - [x] Next.js 16 with TypeScript and App Router - [x] Tailwind CSS v4 with Oxide engine - [x] Zustand state management - [x] JMAP client implementation (jmap-jam) ### Authentication - [x] Login with JMAP server authentication - [x] Session management (no password storage for security) - [x] Username autocomplete with history - [x] Logout functionality - [x] Authentication error handling - [x] JMAP identities for sender address - [x] TOTP two-factor authentication (Stalwart-compatible) ### JMAP Server Connection - [x] Session establishment and keep-alive - [x] Connection error handling and retries - [x] Storage quota display - [x] Server capability detection - [x] Shared folders support (multi-account access) ### Email Operations - [x] Email fetching and display - [x] Full HTML email rendering - [x] Compose, reply, reply-all, forward - [x] Draft auto-save with discard confirmation - [x] Mark as read/unread - [x] Star/unstar emails - [x] Delete and archive - [x] Color tags/labels - [x] Full-text search - [x] Advanced search with JMAP filter panel, search chips, and cross-mailbox queries - [x] Attachment upload and download - [x] Batch operations (multi-select) - [x] Quick reply form - [x] Email threading (Gmail-style inline expansion) ### Real-time Updates - [x] EventSource for JMAP push notifications - [x] State synchronization - [x] Email arrival notifications - [x] Real-time unread counts - [x] Mailbox change handling ### User Interface - [x] Three-pane layout (sidebar, list, viewer) - [x] Minimalist design system - [x] Dark and light theme support - [x] Custom scrollbars - [x] Mobile responsive design - [x] Keyboard shortcuts - [x] Drag-and-drop email organization - [x] Right-click context menus - [x] Hierarchical mailbox display - [x] Email list with avatars and visual hierarchy - [x] Expandable email headers - [x] External content warning banner - [x] SPF/DKIM/DMARC status indicators - [x] Loading states and skeletons - [x] Smooth transitions and animations - [x] Infinite scroll pagination - [x] Virtual scrolling for large email lists - [x] Error boundaries - [x] Settings page with preferences - [x] Navigation rail (desktop vertical icon sidebar + mobile bottom tab bar) - [x] Welcome banner for first-time users (one-time display, localStorage persistence) - [x] Confirmation dialog component with promise-based useConfirmDialog hook - [x] Toast notifications with undo action support and typed durations - [x] Inline form validation with shake animation (email composer, contact form) - [x] Login UX polish (error shake, TOTP slide animation, password visibility toggle, session expired banner) - [x] Empty state patterns for contacts (distinct "no data" vs "no search results" with contextual actions) - [x] WCAG AA reduced-motion media query (global animation/transition reset) - [x] Safe area inset utilities for notched devices - [x] Screen reader live region announcements (sr-only) ### Internationalization - [x] English language support - [x] French language support - [x] Japanese language support - [x] Spanish language support - [x] Italian language support - [x] German language support - [x] Dutch language support - [x] Portuguese language support - [x] Automatic browser language detection - [x] Language preference persistence ### Security & Accessibility - [x] External content blocked by default - [x] HTML sanitization with DOMPurify - [x] User control for loading external content - [x] Trusted senders list for automatic image loading - [x] Dark mode email readability (intelligent color transformation) - [x] WCAG 2.0 Level AA color contrast compliance - [x] Newsletter unsubscribe support (RFC 2369) - [x] XSS attack prevention with comprehensive validation - [x] CSP Report-Only headers with per-request nonce - [x] Security headers (X-Content-Type-Options, X-Frame-Options, Referrer-Policy, Permissions-Policy) - [x] Reusable focus trap hook (Tab cycling, Escape handling, focus restore) - [x] WCAG AA prefers-reduced-motion support (global animation/transition reset) - [x] Safe area insets for notched mobile devices - [x] Screen reader sr-only live region for dynamic announcements ### Identity Management - [x] Multiple sender identities (name, email, signature) - [x] Sub-addressing support (user+tag@domain.com) - [x] Per-identity signatures - [x] Identity badges in email viewer and list - [x] Tag suggestions based on context ### Address Book & Contacts - [x] Contact store with JMAP sync and local fallback - [x] Contact CRUD operations (create, read, update, delete) - [x] Contacts list view with search/filter - [x] Contact details view/edit form - [x] JMAP contacts sync (RFC 9553/9610 ContactCard/AddressBook) - [x] Email autocomplete from contacts - [x] Contacts integration in email composer (To/Cc/Bcc) - [x] Contact groups/lists management with JMAP members map - [x] vCard import/export (RFC 6350 parser/generator, duplicate detection) - [x] Bulk contact operations (multi-select, delete, group add, export) - [x] i18n support for contacts (all 8 languages) ### Vacation Responder - [x] JMAP VacationResponse singleton management - [x] Settings tab with date range and message configuration - [x] Sidebar indicator when vacation auto-reply is active - [x] i18n support (all 8 languages) ### Calendar Integration - [x] JMAP Calendar types (RFC 8984) and client methods - [x] Calendar capability detection (urn:ietf:params:jmap:calendars) - [x] Calendar store with Zustand (persist middleware) - [x] Month, week, day, and agenda views - [x] Event modal (create/edit/delete with recurrence, reminders) - [x] Mini-calendar sidebar with calendar visibility toggles - [x] Calendar settings (default view, week start, time format) - [x] Multi-day event spanning across all covered days - [x] Column-based overlap layout for concurrent events - [x] Locale-aware date formatting via next-intl - [x] First day of week and time format settings wired to views - [x] Push notification handling for calendar state changes - [x] Calendar page capability check (redirect if unsupported) - [x] Error handling with toast feedback on event CRUD - [x] Timezone auto-detection on event creation - [x] Input validation, color sanitization, focus trap - [x] ARIA grid roles and event card accessible labels - [x] Mobile touch targets (44px minimum) - [x] Calendar keyboard shortcuts (m/w/d/a views, t today, n new event) - [x] i18n support with ICU pluralization (all 8 languages) - [x] Drag-and-drop event rescheduling (week/day time snap, month date move) - [x] iCalendar (.ics) file import via CalendarEvent/parse with preview and bulk create - [x] Event notifications with client-side alert evaluation and toast display - [x] Notification sound, acknowledged alert persistence (localStorage), proactive 24h event fetch - [x] Configurable notification settings (enable/disable, sound toggle) - [x] Participant scheduling with iTIP invitations (organizer/attendee UI, RSVP buttons, contact autocomplete) - [x] Inline calendar invitation banner in email viewer (auto-detect .ics attachments, RSVP, import to calendar, cancellation display) - [x] Scheduling message support (sendSchedulingMessages flag for create/update/delete) ### Email Filters - [x] JMAP Sieve Scripts (RFC 9661) with capability detection - [x] Visual rule builder (conditions: From/To/Cc/Subject/Header/Size/Body, actions: Move/Copy/Forward/Mark read/Star/Label/Discard/Reject/Keep/Stop) - [x] Raw Sieve script editor with syntax validation - [x] Sieve generator and parser with JSON metadata round-trip - [x] Filter store with CRUD, reorder, toggle, auto-save with rollback - [x] Opaque script detection with reset to visual builder option - [x] Focus trap accessibility in modals - [x] Toast validation feedback for empty rules - [x] Push notification handling for SieveScript state changes - [x] i18n support (all 8 languages) ### Email Templates - [x] Reusable email templates with local storage persistence - [x] Category organization (General, Business, Personal, Support, Follow-up, custom) - [x] Dynamic placeholder variables with auto-fill from composer context - [x] Template manager modal (create, edit, duplicate, delete) - [x] Template picker in composer toolbar with search and category filter - [x] Custom placeholder prompt on template insertion - [x] Settings tab for template management - [x] Keyboard shortcut (Ctrl+Shift+T to insert template) - [x] i18n support (all 8 languages) ### Email Display - [x] Proper email layout without horizontal scroll or clipping - [x] Blocked image container collapsing (no empty spaces in newsletters) ### Testing - [x] Unit tests for validation utilities (57 tests) - [x] Unit tests for email sanitization (27 tests) - [x] Unit tests for color transformation (40 tests) - [x] Unit tests for contact store (56 tests) - [x] Unit tests for JMAP contact client (41 tests) - [x] Unit tests for vCard parser (18 tests) - [x] Unit tests for thread utilities (20 tests) - [x] Unit tests for email headers (39 tests) - [x] Component tests (contacts, UI components — 41 tests) - [x] JMAP client method tests (identity: 20, contacts: 41) - [x] Unit tests for Sieve generator (50 tests) - [x] Unit tests for Sieve parser (14 tests) - [x] Unit tests for calendar alerts (36 tests) - [x] Unit tests for calendar notification store (8 tests) - [x] Unit tests for calendar invitation parsing (25 tests) - [x] Unit tests for calendar participants (26 tests) - [x] Unit tests for template utilities (48 tests) - [x] XSS attack vector testing - [x] Playwright E2E framework setup ### Deployment - [x] Runtime environment variables (Docker-friendly configuration) - [x] Health check endpoint - [x] Docker support (multi-stage build, docker-compose, standalone output) - [x] Structured server-side logger (text/JSON format, configurable level) ## Planned Features ### Advanced Features - [ ] Free/busy queries (Principal/getAvailability) - [ ] Calendar sharing UI (JMAP Sharing RFC 9670) - [ ] Email encryption (PGP/GPG) - [ ] OAuth2/OIDC authentication (opt-in, Basic Auth remains default) ### Performance Optimizations - [ ] Email content caching - [ ] Bundle size optimization - [ ] Service worker for offline support - [ ] Lazy loading for attachments ### Testing (Remaining) - [ ] E2E tests with real JMAP server - [ ] Accessibility testing - [ ] Performance testing ### Deployment - [ ] Production build optimizations - [ ] Monitoring and logging ### Security Enhancements - [ ] Rate limiting - [ ] CORS configuration ## Known Issues - [ ] Next.js workspace root warning (cosmetic) ## Contributing Want to help implement a feature? Check out our [CONTRIBUTING.md](CONTRIBUTING.md) guide!