| # Chrono Mail - Phase 0 (Proof of Concept)
|
|
|
| ## Goal
|
|
|
| Build a minimal working email client.
|
|
|
| Features:
|
|
|
| * Google Login
|
| * Generic IMAP Login
|
| * Fetch Inbox
|
| * Read Email
|
| * Send Email
|
| * Download Attachments
|
| * Local Cache
|
| * Offline Reading
|
| * Background Sync (basic)
|
| * Local Notifications
|
|
|
| Ignore
|
|
|
| * Clean Architecture
|
| * Plugin System
|
| * AI
|
| * Encryption
|
| * Remote Config
|
| * Themes
|
| * Backend
|
| * Advanced UI
|
|
|
| ---
|
|
|
| # Flutter Version
|
|
|
| Latest Stable
|
|
|
| ---
|
|
|
| # Packages
|
|
|
| ## Authentication
|
|
|
| ```yaml
|
| google_sign_in:
|
| flutter_appauth:
|
| flutter_secure_storage:
|
| ```
|
|
|
| ---
|
|
|
| ## Email
|
|
|
| ```yaml
|
| enough_mail:
|
| mailer:
|
| ```
|
|
|
| ---
|
|
|
| ## State
|
|
|
| ```yaml
|
| flutter_riverpod:
|
| riverpod_annotation:
|
| riverpod_generator:
|
| ```
|
|
|
| ---
|
|
|
| ## Database
|
|
|
| ```yaml
|
| objectbox:
|
| objectbox_flutter_libs:
|
| ```
|
|
|
| ---
|
|
|
| ## Network
|
|
|
| ```yaml
|
| dio:
|
| connectivity_plus:
|
| ```
|
|
|
| ---
|
|
|
| ## Notifications
|
|
|
| ```yaml
|
| flutter_local_notifications:
|
| workmanager:
|
| ```
|
|
|
| ---
|
|
|
| ## Utilities
|
|
|
| ```yaml
|
| logger:
|
| path_provider:
|
| file_picker:
|
| permission_handler:
|
| intl:
|
| uuid:
|
| collection:
|
| ```
|
|
|
| ---
|
|
|
| # Folder Structure
|
|
|
| ```text
|
| lib/
|
|
|
| main.dart
|
|
|
| app.dart
|
|
|
| core/
|
|
|
| models/
|
|
|
| services/
|
|
|
| providers/
|
|
|
| pages/
|
|
|
| widgets/
|
|
|
| database/
|
| ```
|
|
|
| ---
|
|
|
| # Models
|
|
|
| ## EmailAccount
|
|
|
| Fields
|
|
|
| ```
|
| id
|
|
|
| email
|
|
|
| displayName
|
|
|
| provider
|
|
|
| accessToken
|
|
|
| refreshToken
|
| ```
|
|
|
| ---
|
|
|
| ## EmailFolder
|
|
|
| ```
|
| id
|
|
|
| name
|
|
|
| unreadCount
|
| ```
|
|
|
| ---
|
|
|
| ## EmailMessage
|
|
|
| ```
|
| id
|
|
|
| folderId
|
|
|
| subject
|
|
|
| from
|
|
|
| to
|
|
|
| cc
|
|
|
| bcc
|
|
|
| body
|
|
|
| htmlBody
|
|
|
| date
|
|
|
| isRead
|
|
|
| isStarred
|
|
|
| hasAttachment
|
| ```
|
|
|
| ---
|
|
|
| ## Attachment
|
|
|
| ```
|
| id
|
|
|
| emailId
|
|
|
| name
|
|
|
| size
|
|
|
| mimeType
|
|
|
| path
|
| ```
|
|
|
| ---
|
|
|
| # Services
|
|
|
| ## AuthService
|
|
|
| Methods
|
|
|
| ```
|
| loginGoogle()
|
|
|
| loginImap()
|
|
|
| logout()
|
|
|
| refreshToken()
|
| ```
|
|
|
| ---
|
|
|
| ## MailService
|
|
|
| Methods
|
|
|
| ```
|
| connect()
|
|
|
| disconnect()
|
|
|
| fetchFolders()
|
|
|
| fetchInbox()
|
|
|
| fetchMessage()
|
|
|
| fetchAttachments()
|
|
|
| downloadAttachment()
|
|
|
| sendEmail()
|
|
|
| delete()
|
|
|
| move()
|
|
|
| markRead()
|
|
|
| search()
|
|
|
| idle()
|
| ```
|
|
|
| ---
|
|
|
| ## DatabaseService
|
|
|
| Methods
|
|
|
| ```
|
| saveEmails()
|
|
|
| getEmails()
|
|
|
| getEmail()
|
|
|
| saveFolders()
|
|
|
| saveAttachments()
|
|
|
| delete()
|
|
|
| clear()
|
| ```
|
|
|
| ---
|
|
|
| ## NotificationService
|
|
|
| Methods
|
|
|
| ```
|
| initialize()
|
|
|
| showNewMail()
|
| ```
|
|
|
| ---
|
|
|
| ## BackgroundSyncService
|
|
|
| Methods
|
|
|
| ```
|
| start()
|
|
|
| stop()
|
|
|
| sync()
|
| ```
|
|
|
| ---
|
|
|
| # Riverpod Providers
|
|
|
| ```
|
| authProvider
|
|
|
| mailProvider
|
|
|
| databaseProvider
|
|
|
| notificationProvider
|
|
|
| backgroundSyncProvider
|
| ```
|
|
|
| ---
|
|
|
| # Pages
|
|
|
| ```
|
| SplashPage
|
|
|
| LoginPage
|
|
|
| AccountsPage
|
|
|
| InboxPage
|
|
|
| EmailViewPage
|
|
|
| ComposePage
|
|
|
| SettingsPage
|
| ```
|
|
|
| ---
|
|
|
| # Flow
|
|
|
| ```
|
| Splash
|
|
|
| ↓
|
|
|
| Check Login
|
|
|
| ↓
|
|
|
| Login
|
|
|
| ↓
|
|
|
| Fetch Inbox
|
|
|
| ↓
|
|
|
| Save to ObjectBox
|
|
|
| ↓
|
|
|
| Open Inbox
|
|
|
| ↓
|
|
|
| Open Email
|
|
|
| ↓
|
|
|
| Read Body
|
|
|
| ↓
|
|
|
| Compose
|
|
|
| ↓
|
|
|
| Send
|
| ```
|
|
|
| ---
|
|
|
| # Sync
|
|
|
| Every app launch
|
|
|
| ```
|
| Connect
|
|
|
| ↓
|
|
|
| Fetch latest emails
|
|
|
| ↓
|
|
|
| Compare IDs
|
|
|
| ↓
|
|
|
| Save new emails
|
|
|
| ↓
|
|
|
| Notify UI
|
| ```
|
|
|
| ---
|
|
|
| # Background
|
|
|
| Use
|
|
|
| ```
|
| Workmanager
|
|
|
| ↓
|
|
|
| Run sync
|
|
|
| ↓
|
|
|
| Show Local Notification
|
| ```
|
|
|
| ---
|
|
|
| # ObjectBox
|
|
|
| Create Boxes
|
|
|
| ```
|
| Accounts
|
|
|
| Folders
|
|
|
| Emails
|
|
|
| Attachments
|
| ```
|
|
|
| ---
|
|
|
| # MVP Checklist
|
|
|
| * Google Login
|
| * Generic IMAP Login
|
| * Fetch Inbox
|
| * Read Email
|
| * Compose
|
| * Send Email
|
| * Local Database
|
| * Offline Reading
|
| * Attachment Download
|
| * Background Sync
|
| * Local Notification
|
|
|
| ---
|
|
|
| # Ignore Until Phase 1
|
|
|
| * Clean Architecture
|
| * SOLID
|
| * Modularization
|
| * Plugin System
|
| * AI
|
| * Encryption
|
| * Remote Config
|
| * Logging
|
| * Testing
|
| * Animations
|
| * Responsive Layout
|
| * Multiple Accounts
|
| * Threading
|
| * Search
|
| * Themes
|
| * Push Notifications
|
| * Backend
|
|
|
| Goal is only to prove that the complete email flow works.
|