Commit Graph
21 Commits
Author SHA1 Message Date
Matthieu MALVACHEandClaude 258f10d4ba feat: Implement functional quick reply and fix draft auto-save integration
Email Sending:
- Fix identity lookup for email submission (now properly fetches identities from server)
- Add Sent mailbox requirement for sending emails
- Add proper error handling and validation for email submission

Quick Reply Form:
- Replace dummy input with fully functional quick reply system
- Add state management for reply text with auto-expand on focus
- Implement direct send functionality without modal
- Add loading states and error handling
- Show character counter and action buttons (Cancel, More options, Send)
- Use real user avatar and email from auth store
- Auto-refresh email list after sending

Draft Auto-Save Integration:
- Fix critical issue where auto-saved drafts were ignored when sending
- Pass draftId through entire send chain (composer → store → client)
- Wait for pending auto-save before sending to prevent race conditions
- Add draft cleanup with discard confirmation when closing composer
- Delete orphaned drafts when user confirms discard
- Add i18n support for discard confirmation (EN/FR)

Benefits:
- No more orphaned drafts in Drafts folder
- Better performance (updates existing draft vs creating new email)
- Cleaner UX with proper draft lifecycle management
- Quick replies are truly quick (no modal needed)
- All user-facing messages properly translated

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-02 13:01:14 +02:00
Matthieu MALVACHEandClaude 8bba87648c feat: Add smooth cross-fade transition when opening emails
Improved email loading UX with a polished cross-fade approach:

**Visual Continuity:**
- Removed jarring selectEmail(null) call that caused blank screen
- Current email stays visible while new one loads
- Smooth transition instead of abrupt pop-in

**Loading Feedback:**
- Semi-transparent overlay with subtle backdrop blur (2px)
- Centered loading card with spinner and message
- Small loading indicator in email header
- Both overlays fade in smoothly (200ms)

**React Optimization:**
- Added key prop based on email.id to email viewer
- Triggers proper React animations on email change
- Combined with 300ms fade-in creates smooth cross-fade effect

**Result:**
When clicking an email, the current email remains visible with a subtle
dimming effect while the new email loads, then smoothly transitions to
the new content. No more visual glitches or jarring blank screens.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-02 12:45:46 +02:00
Matthieu MALVACHEandClaude 09fb46c109 fix: Improve batch operations colors for better light mode support
Replaced hardcoded blue colors with theme CSS variables for consistent
appearance across light and dark modes:

**Color Changes:**
- Batch toolbar background: `bg-blue-50` → `bg-accent/30` (uses theme)
- Selection count text: `text-blue-700` → `text-foreground` (theme-aware)
- Checkbox checked color: `text-blue-600` → `text-primary` (theme variable)
- Selected email ring: `ring-blue-500/20` → `ring-primary/20` (theme-aware)
- Selected email background: `bg-blue-50/50` → `bg-accent/40` (consistent)
- Button hover states: `hover:bg-blue-100` → `hover:bg-accent` (theme-based)

**Benefits:**
- Consistent with application theme system
- Proper light/dark mode contrast
- Uses CSS variables from Tailwind config
- More subtle selection highlighting in light mode
- Better accessibility with theme-aware colors

All selection states now adapt seamlessly to the active theme.

🤖 Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-02 12:41:25 +02:00
Matthieu MALVACHEandClaude 3dea5e232b fix: Remove visual glitch when opening emails
Removed the jarring "Loading full email content..." banner that appeared
while email content was loading, which caused a visual flash/glitch.

Added smooth fade-in animation (300ms) to email viewer for better UX.

The loading state is now properly handled by the skeleton loader that
was added in the previous commit, so this intermediate loading banner
is no longer needed and was causing the visual glitch reported by the user.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-02 12:40:52 +02:00
Matthieu MALVACHEandClaude f66f7eaaa5 feat: Add smooth animations and visual feedback to batch operations
Enhanced the batch operations UI with polished animations and transitions:

**Toolbar Animations:**
- Smooth slide-down transition for batch actions toolbar (300ms ease-in-out)
- Animated slide-in effects for selection count and action buttons
- Collapsible toolbar with max-height and opacity transitions

**Checkbox Animations:**
- Zoom-in animation when checkboxes are checked (200ms)
- Scale effects on hover (110%) and active (95%) states
- Smooth opacity transitions for unchecked states
- Color transitions for checked state (blue theme)

**Selection Feedback:**
- Blue ring highlight on selected email items
- Subtle background tint for selected emails
- Animated "select all" button with scale and zoom effects
- Visual separator between action buttons

**Loading States:**
- Spinning loader icons during batch operations
- Disabled state with reduced opacity during processing
- 500ms delay after operations for smooth visual feedback
- Prevents multiple simultaneous batch operations

**Visual Polish:**
- Hover effects with background color transitions
- Active state feedback on all interactive elements
- Proper pluralization (email/emails) in selection count
- Consistent transition timing across all animations

All animations use Tailwind's built-in utilities and follow smooth easing curves for a premium feel.

🤖 Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-02 12:39:29 +02:00
Matthieu MALVACHE 5f7dafeeba fix: Prevent autocomplete menu from reopening after selection on login page
- Add justSelectedSuggestion ref to track when a suggestion is selected
- Skip showing suggestions in useEffect when selection just occurred
- Fixes issue where menu would reopen immediately after Enter key selection
2025-10-02 12:34:36 +02:00
Matthieu MALVACHEandClaude 7c6ace427f feat: Add server capabilities, keep-alive, draft auto-save, and attachment upload
- Added server capability detection to check supported features
- Implemented keep-alive mechanism with periodic ping (every 30s)
- Added automatic session reconnection on connection failure
- Implemented draft auto-save with 2-second debounce
- Added visual indicators for draft save status
- Implemented attachment upload support with progress indication
- Added file attachment UI in email composer
- Updated JMAP client with blob upload functionality
- Enhanced disconnect handling to properly cleanup resources
- Updated TODO.md to reflect completed tasks

🤖 Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-02 12:29:53 +02:00
Matthieu MALVACHE 8f2f0e575e fix: Use theme variables for reply-to section colors 2025-10-02 12:19:20 +02:00
Matthieu MALVACHE 4ef7b662c3 docs: Update TODO.md with completed authentication and deployment tasks
- Added custom username autocomplete implementation
- Added modern minimalist UI redesign for login page
- Marked environment variable management as completed
2025-10-02 12:15:12 +02:00
Matthieu MALVACHE 37422b96af fix: Fix sender area colors in light mode
- Changed sender name from text-gray-900 to text-foreground
- Fixed To and CC field text colors from text-gray-700 to text-foreground
- Removed duplicate hover state on More actions button
- Changed More actions icon to use text-muted-foreground

All sender information now properly adapts to light/dark themes.
2025-10-02 12:10:53 +02:00
Matthieu MALVACHE dba80fe9a8 fix: Improve light mode styling in email viewer
- Replaced all hardcoded colors with theme-aware CSS variables
- Fixed duplicate hover states (removed hover:bg-gray-100)
- Changed dividers from bg-gray-200 to bg-border
- Updated dropdown menus to use bg-background instead of bg-white
- Fixed text colors to use text-foreground and text-muted-foreground
- Improved no-email-selected gradient background
- Removed prose-gray class for better theme compatibility

All UI elements now properly adapt to light/dark mode using CSS variables.
2025-10-02 12:07:12 +02:00
Matthieu MALVACHE 7a3dc98c6e fix: Remove full-screen fade when switching mailboxes
- Removed isLoading from main loading condition
- Now only shows full-screen loader for auth/initial load
- Email list handles its own loading state when switching folders
- Eliminates jarring fade in/fade out effect when navigating between mailboxes
2025-10-02 12:02:49 +02:00
Matthieu MALVACHE 25c00da9db fix: Fix sliding menu visibility issue
- Changed positioning from bottom-12 to bottom-0
- Menu now slides up from bottom when opened (-translate-y-12)
- Removed opacity transition to keep menu always visible during animation
- Menu properly appears above the toggle button when activated
2025-10-02 02:08:10 +02:00
Matthieu MALVACHE ad0f671deb fix: Constrain sliding menu to sidebar width
- Added relative positioning to sidebar container
- Menu now properly contained within sidebar's 256px width
- Added z-index and shadow for better visual layering
- Positioned menu above toggle button with rounded top corners
- Added opacity transition for smoother animation
2025-10-02 02:07:12 +02:00
Matthieu MALVACHE 1ea2765ab0 feat: Implement minimalistic sliding menu with submenu navigation
- Created sliding menu panel that slides up from bottom
- Added two-level navigation: main menu and settings submenu
- Replaced emoji flags with text-based language selection (EN/FR)
- Simplified theme selector with compact button design
- Added smooth transitions between menu states
- Organized menu items: Storage, Settings, Sign Out
- Implemented back navigation in settings submenu
- Clean, minimalistic design with subtle borders and hover states
2025-10-02 02:02:15 +02:00
Matthieu MALVACHE ba0751eb19 fix: Replace hardcoded colors with CSS variables for proper light/dark mode switching
- Updated all components to use theme CSS variables instead of hardcoded gray colors
- Fixed issue where light mode only changed borders but not backgrounds
- Components now properly respect theme switching with consistent colors
- Replaced bg-gray-*, text-gray-*, border-gray-* with theme variables (bg-background, text-foreground, etc.)

Affected components:
- Main page layout
- Login page
- Sidebar navigation
- All UI components (Button, Input, Toast, Language Switcher)
- Email viewer, list, and list items
2025-10-02 01:58:38 +02:00
Matthieu MALVACHE 1c3e3a6f99 fix: Resolve UI/UX and localization issues
- Fixed light mode not applying correctly by ensuring proper class handling
- Fixed French language switching with updated middleware configuration
- Improved dark mode color contrast on language selector
- Redesigned sidebar footer with sliding settings panel for better UX
- Added visual storage quota indicator with progress bar
- Updated theme switcher with grid layout and better visual feedback
- Separated logout button from other settings for clarity
- Added proper translations for all UI elements
- Fixed theme persistence across page refreshes
2025-10-02 01:51:30 +02:00
Matthieu MALVACHE 57a01c6dad fix: Update i18n configuration structure for Next.js 15 compatibility 2025-10-02 01:41:41 +02:00
Matthieu MALVACHE 04ab18d4e5 feat: Implement comprehensive i18n support with English and French
- Add next-intl for internationalization
- Create English and French translation files
- Implement language switcher component in sidebar
- Configure automatic browser language detection
- Update all components to use translation keys
- Set up locale-aware routing with [locale] directory structure
- Add i18n guidelines to CLAUDE.md for future development
- Store user language preference in localStorage

The app now supports:
- English (en) and French (fr) languages
- Automatic browser language detection on first visit
- User language preference persistence
- Real-time language switching without page reload
- Complete translation coverage for all UI elements
2025-10-02 01:40:37 +02:00
Matthieu MALVACHE c9769264e2 Fix Tailwind CSS v4 compatibility issues
- Updated globals.css to use standard CSS variables instead of HSL
- Replaced custom color utilities with standard Tailwind classes
- Fixed all component styles to use gray color scale
- Simplified Tailwind configuration
2025-10-01 23:47:50 +02:00
Matthieu MALVACHE 23847f5812 Initial commit: Minimalist JMAP webmail client
- Set up Next.js 15.5 with TypeScript and Turbopack
- Configured Tailwind CSS v4 with minimalist design system
- Created core email components: list, viewer, composer
- Implemented sidebar navigation with mailbox folders
- Added JMAP client wrapper using jmap-jam library
- Set up Zustand for state management
- Created responsive layout with three-pane view
- Added mock data for development
2025-10-01 23:44:03 +02:00