**M-1**: User authentication and message view
- Extend JMAP client library
- issues tracked at https://github.com/linagora/jmap-client/issues)
- Extend jmap-client to expose account capabilities T875
- Handling of authentication/authorization failures
- Expose transport and JMAP errors in jmap-client T1000
- return to login or require overlay re-authentication T999
- UI Components
- Treelist component T1001
- Tests and CI automation
- Unit tests for core features T1002
- Set up Travis CI <-> Github integration T1003
- Notifications App T827
- Extend Notifications model and allow to revocation T1004
- Mail App T832
- Check account capabilities before activation T1015
- Folder listing T1006
- Using Treelist component, sorted alphabetically
- Special-use folders (Inbox, Drafts, Sent, Trash) in top
- Message list
- paging; endless scrolling T1008
- stateful list items (unread, flagged, selected) T1009
- Configuration App T1010
- Specify the app/service interface T1011
- Basic "Settings" section with core settings: T1012
* Language
* Timezone
* Date/Time format
- Store in local storage T1012
- JMAP extension for syncing settings with server/user account
- Protocol extension T1013
- Server-side support (roundcube-server) T1014
**M-2**: Full message view and organizer
- UI Components
- Toolbar
- Menus
- Attachments App
- Rendering of attachment models
- Preview and download through JMAPs 'download' endpoint
- UI components for uploading through JMAPs 'upload' endpoint
- Mail App
- Message list
- control sorting
- expandable threads (or conversation view?)
- Search Messages
- Search via JMAP getMessageList with filter property
- Display snippets (from JMAP getSearchSnippets)
- Message view
- HTML/Plaintext toggle for multipart/alternative
- List attachments (using core app)
- Conversation view (render multiple messages in a thread)
- Message actions
- Set message flags (unread, flagged/starred)
- Move message to folder (drag & drop, button + menu)
- Delete message
- Print message
- Settings panel
- Mark messages as read (immediately, after X seconds, never)
- Display as HTML/Plaintext
- Display remote images (always, from known senders, never)
**M-3**: Message composer
- UI Components
- Forms
- Form rows: Label + Element
- Form elements
- Text input
- Drop-down list
- Richtext editor (CKEditor?)
- Recipient list: composite element with
- a list of "recipients" (display name, icon?, remove button)
- text input to add new items
- autocompletion
- Mail app
- Message actions
- Forward (inline, attachment)
- Reply, Reply all (list, all)
- Message composition
- Select sender identity (from accounts)
- Message headers (To, Cc, Bcc, Reply-To, Followup-To)
- Plaintext message text
- Richtext editor (CKEditor, Squire - hopefully plaintext editing can be handled by the same tool)
- Add attachments (using Attachments app)
- Spell check
- Sending options
* Priority
* Save in folder X
- Save as draft
- Settings panel:
* Compose options
* Compose HTML messages
* Safe as draft every X minutes
* Quotation mode
* Message forwarding (inline, attachment)
* ...
**M-4**: Contacts integration
- Contacts App
- Address book / group listing
- Collect from all accounts with hasContacts
- List groups below the according address book
- Contact listing
- Paging and endless scrolling
- Contact view
- Visualize contact properties from JMAP spec
- Render photos
- Mail app
- Contact integration
- Autocompletion in recipient fields
- Provide a contacts widget for browsing contacts
- Show contact photo in mail view
- Add contact from mail view (sender, recipient)
**M-5**: Full contact management
- Contacts App
- Contact editing
- Dynamic form expansion (add property X)
- Photo upload/adjustment
- Actions
- Delete
- Move/Copy
- Add/remove group
- Compose mail to
- Search
- Settings panel
* Default address book
* Listing mode
* List sorting
**M6**: Folder management
- Mail app
- Add, delete, rename folders