Which features to add? #259
Open
opened 2026-05-25 18:45:12 +00:00 by guettli
·
2 comments
No Branch/Tag Specified
main
issue-563-agentloop-validation
dummy-pr-test
issue-560-fix-firebase-run-url
issue-539-stable-imap-uid
issue-533-shared-email-list
plan-issue-555
drop-nix
plan-issue-484
plan-issue-539
plan-issue-535
plan-issue-474
plan-issue-533
fix-dagger-engineless-precommit
issue-521-fix-deploy-yml-wait-time-api
issue-502-fix-email-id-collision-mailbox
issue-492-eliminate-duplicate-build-runner
issue-494-website-change-detection
issue-491-parallelize-check
issue-478-fix-stalwart-dual-stack-bind
issue-475-allowed-addresses-glob
issue-473-search-result-reorder
issue-453-update-agentloop-defaults
issue-466-structured-search
issue-505-exclude-chaos-monkey-from-regular-ci
issue-509-fix-search-result-sorting
fix-ink-sparkle-remaining-tests
issue-506-fix-search-emails-tests
issue-504-runner-wait-time
issue-488-search-notes
issue-472-changelog-issue-links
issue-501-folder-search-local-sqlite
issue-486-fix-stale-test-shader-mismatch
fix/prevent-settled-search-rerun-473
issue-467-fix-search-stale-results
issue-446-installed-versions-in-changelog
issue-462-fix-pr
issue-448-chaos-monkey-test
issue-436-notes-on-emails
issue-429-unify-mail-display
issue-422-move-to-folder-create-new
issue-414-ensure-not-run-as-root
issue-424-unify-email-list-views
issue-419-trusted-senders-page
issue-425-fix-prs
test-foo
issue-421-bug-report
issue-383-fix-ci
issue-394-fix-deploy-flutter-version
issue-391-fix-ci-double-trigger
issue-376-combined-inbox-v2
issue-376-combined-inbox
issue-384-fix-open-prs
sops-migrate
issue-339-safe-first-on-imap-fetch
issue-340-try-catch-measure-height
issue-342-pin-intl-version
issue-341-guard-threademails-last
issue-335-agentloop-code-test
issue-329-fix
issue-315-fix
issue-320-fix
issue-325-fix
issue-312-fix
issue-311-fix
issue-305-fix
issue-304-fix
issue-299-fix
issue-300-fix
issue-298-fix
issue-296-fix
issue-294-fix
issue-289-fix
issue-288-fix
issue-287-fix
issue-286-fix
issue-277-fix
issue-282-fix
issue-280-fix
issue-272-fix
issue-268-fix
issue-267-fix
issue-266-fix
issue-258-fix
issue-260-fix
issue-257-fix
issue-253-fix
issue-216-fix
issue-251-fix
issue-249-fix
issue-question-fixes
issue-235-fix
issue-236-fix-v2
issue-237-fix
issue-236-fix
issue-228-fix
issue-217-fix
issue-214-fix
issue-213-fix
issue-208-fix
issue-205-fix
issue-204-fix
issue-203-fix
issue-202-fix
issue-129-fix
issue-161-fix
issue-160-fix
issue-201-fix
issue-210-fix
issue-198-fix
issue-200-fix
issue-144-fix
issue-199-fix
fix/playstore-upload-use-requests
issue-193-fix
issue-186-fix
issue-185-fix
issue-192-fix
issue-183-fix
issue-175-fix
issue-172-fix
issue-171-fix
issue-167-fix
issue-136-fix
issue-162-fix
issue-179-fix
issue-155-fix
issue-154-fix
issue-152-fix
issue-151-fix
issue-141-fix
issue-150-fix
issue-164-fix
migrate-to-dagger
task/d1-ci-matrix
task/a4-typeconverter-json
task/u7-onboarding-walkthrough
task/d3-sync-doc
task/a5-layer-boundary-lint
task/t5-golden-tests
task/p5-date-cache
task/s4-link-handling
task/p3-html-parse-isolate
task/u8-mark-all-read
task/u3-recent-searches
task/a3-jmap-injectable-http-client
task/r5-tls-error-handling
fix/playstore-redirect-retry
task/t3-repository-contract-tests
task/p2-email-list-pagination
task/p1-fts5-search
fix/playstore-upload-timeout
task/a1-email-detail-notifier
fix/upgrade-workmanager-0.9
fix/android-core-library-desugaring
task/p4-db-indexes
task/r3-html-error-boundary
task/d2-check-coverage
task/a2-email-tile
task/t4-migration-tests
task/t2-widget-tests
task/t1-email-repo-coverage
task/u6-connection-status
task/u4-push-notifications
task/u2-draft-sync
task/u1-list-unsubscribe
task/s2-hostname-validation
task/r6-reliability-fuzz-tests
task/r4-sync-error-banner
task/r2-force-resync
task/r1-undo-history-persistence
No results found.
Labels
Clear labels
NeedSupervisor
State/InProgress
State/Later
State/Planned
automerge
ci-failure
do-not-merge
loop/code
loop/code-ci-pending
loop/code-done
loop/code-in-process
loop/merge
loop/merge-done
loop/merge-in-process
loop/plan
loop/plan-done
loop/plan-in-process
Issue escalated to a human supervisor; agentloop will skip it until cleared.
Eligible for automatic merge by CI
Issue opened by agentloop to track a failing CI workflow; used for deduplication.
Plan PR — review only, do not merge.
Add to run the built-in "code" prompt; override at prompts/code.md.
Prompt "code" finished; waiting for the PR's CI to pass before advancing.
Prompt "code" finished successfully.
Agent for the "code" prompt is currently running on this issue.
Managed by agentloop
Managed by agentloop
Managed by agentloop
Add to run the built-in "plan" prompt; override at prompts/plan.md.
Prompt "plan" finished successfully.
Agent for the "plan" prompt is currently running on this issue.
No labels
State/Planned
Milestone
No items
No Milestone
Projects
Clear projects
No projects
No Assignees
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: guettli/sharedinbox#259
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Look at the current app.
Which features could be added?
Look from an end user perspectives.
Feature Analysis: SharedInbox — End-User Perspective
After exploring the full codebase, here is a structured breakdown of features that would meaningfully improve the end-user experience, ordered roughly by impact vs. effort.
1. Forward Email (High impact, low effort)
What's missing: Reply and Reply-All exist (
ComposeScreenaccepts areplyToEmailId), but there is no Forward action.User impact: Forwarding is a core email primitive. Its absence is likely the most glaring gap.
Approach:
ForwardActionenum alongside the existing reply modes inlib/core/models/EmailDetailScreen(lib/ui/screens/email_detail_screen.dart), add a Forward button next to Reply/Reply-AllFwd: <subject>, quoted body, and any attachments carried overComposeScreenwith aforwardEmailIdparameter2. BCC Field in Compose (High impact, trivial effort)
What's missing:
ComposeScreenhas To and Cc fields (tracked inSavedDraft) but no Bcc.User impact: Privacy-sensitive broadcasts (newsletters, invitations) require BCC.
Approach:
bccTexttoSavedDraftmodel (lib/core/models/saved_draft.dart) and DBDraftstable (lib/data/db/database.dart)ComposeScreen(same pattern as the existing Cc toggle)data/repositories/task codegenafter DB change3. Swipe Gestures on Email List (High impact, moderate effort)
What's missing: No swipe-to-archive / swipe-to-delete / swipe-to-snooze on email rows.
User impact: The dominant interaction pattern in mobile email clients (Gmail, Outlook, Fastmail). Without it, all actions require long-press or opening the email.
Approach:
Dismissible(Flutter built-in) or use aflutter_slidablepackagelib/ui/screens/email_list_screen.dart, email row widgetUndoService)4. Unified Inbox (High impact, significant effort)
What's missing: The current UX requires navigating per-account (
/accounts/:id/mailboxes) with no cross-account view.User impact: Multi-account users (personal + work email) would greatly benefit from seeing all unread mail in one place.
Approach:
/unified-inboxroute inlib/ui/router.dartEmailRepositoryacross all accounts, filtered to inbox mailboxes, sorted byreceivedAt5. Contact Autocomplete in Compose (Medium impact, moderate effort)
What's missing: Typing an address in To/Cc fields shows no suggestions.
User impact: Friction when emailing frequent contacts; every address must be typed manually.
Approach:
Contactstable in the DB: harvest addresses from sent/received emails during syncSearchHistoryRepositoryalready exists — a similarContactRepositorywould fit the patternComposeScreenTo/Cc fields becomeAutocomplete<EmailAddress>widgets6. Batch Select and Act on Emails (Medium impact, moderate effort)
What's missing: No multi-select in
EmailListScreen. Every action targets one email at a time.User impact: Bulk operations (delete 20 newsletters, mark all read) are a common need.
Approach:
PendingChangestablelib/ui/screens/email_list_screen.dart— add selection state to the screen's Riverpod notifier7. Calendar Invite Handling (Medium impact, significant effort)
What's missing: ICS attachments are detected but not parsed or rendered.
User impact: Accept/Decline/Tentative buttons directly in an email (the same as Gmail/Outlook) reduce context-switching.
Approach:
text/calendarMIME part inEmailDetailScreenical_parserpackage (or a minimal manual parser)8. Vacation Autoresponder UI (Medium impact, low effort)
What's missing: Sieve editing exists (
SieveScriptEditScreen), but creating a vacation reply requires writing raw Sieve.User impact: Out-of-office replies are a common need; a dedicated UI removes the need to know Sieve syntax.
Approach:
vacationaction script and POST it via the existingSieveRepositoryVacationResponderScreen, additions tolib/ui/router.dartandSieveRepositoryvacationextension support varies by server; probe for capability at account setup9. Rich Text Compose (Lower priority, high effort)
What's missing:
ComposeScreenbody is a plainTextField; no formatting.User impact: Many users expect bold, italic, and inline links. Particularly relevant for business use.
Approach:
flutter_quillorsuper_editorfor a rich text compose fieldtext/htmlMIME part on send alongside atext/plainfallback10. Keyboard Shortcuts (Desktop — Linux/macOS/Windows)
What's missing: No keyboard navigation. Flutter desktop targets are already scaffolded.
User impact: Power users on desktop expect
j/kfor next/prev email,rfor reply,efor archive, etc.Approach:
Focus+KeyboardListeneror useShortcuts+ActionswidgetsKeyboardShortcutsConfigclass (configurable bindings)Open Questions
Platform.isDesktopguards or always compiled in?Suggested Priority Order
Planning complete. To resume this session: