- email_detail: add Move-to-folder button (bottom-sheet mailbox picker, excludes current folder, calls moveEmail on server) - email_list: show amber star for flagged, paperclip for attachments in trailing area alongside date - PLAN.md: mark phase 8 done - README: add flag/move/attachment to working features Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1.4 KiB
1.4 KiB
SharedInbox Flutter — Plan
Architecture
IMAP/SMTP server
↓
AccountSyncManager (IMAP IDLE per account)
↓ writes
Drift (SQLite, local DB)
↓ reads
UI (Riverpod + go_router)
UI never touches the network. The sync layer runs independently.
Phases
| Phase | Scope | Status |
|---|---|---|
| 0 — Scaffold | pubspec, Drift schema, DI, router, enough_mail from pub.dev | Done |
| 1 — Core models | Account, Mailbox, Email, EmailBody, repository interfaces |
Done |
| 2 — DB layer | Drift tables, AccountRepositoryImpl, MailboxRepositoryImpl, EmailRepositoryImpl |
Done |
| 3 — IMAP sync | connectImap, MailboxRepositoryImpl.syncMailboxes, EmailRepositoryImpl.syncEmails |
Done |
| 4 — IMAP IDLE | AccountSyncManager with exponential-backoff reconnect |
Done |
| 5 — SMTP send | connectSmtp, EmailRepositoryImpl.sendEmail |
Done |
| 6 — UI | AccountList, AddAccount, MailboxList, EmailList, EmailDetail, Compose, Settings | Done |
| 7 — Dev tooling | Nix flake, Taskfile, Stalwart dev server, unit + integration tests, CI, pre-commit | Done |
| 8 — UI gaps | Account picker in compose, flag/unflag, move-to-folder, attachment indicators | Done |
Next candidates
- Search (IMAP
SEARCHcommand) - Thread view (group by
References/In-Reply-To) - Attachment download + open
- Draft auto-save