# User Stories
The following user stories shall help outlining the application structure and explain how the different components contribute to the overall functionality of the application.
=== Rob logs in to the webmail to check for new messages ===
> # He opens the webmail location in his browser
> # He enters his username and password at the login prompt
> # The main navigation shows a badge near the mail icon indicating 5 new messages
> # Rob clicks the mail icon in the main navigation to open the mail view
Involved components and events:
# The `shell` renders the login form
# Upon submit, the `shell` authenticates through the JMAP adapter and activates the `/` route
# The `shell` emits the `shell.session.authenticate` event and the `mail` app fetches the number of unread messages from the server.
# The `shell.ui` activates the `/mail` route. the `mail` app renders the mail view and fetches the mailboxlist and the inbox messages from the JMAP data store.
=== Mary opens an email message for reading ===
> # In the message list she clicks the new and yet unread message from Jane
> # The message content is displayed in the preview pane on the right
> # Next to the email sender name a green icon indicates that Jane is now online on Jabber
> # After a few seconds, the clicked row in the message list looses the "unread" indicator
Involved components and events:
# The `mail` app activates the `/mail/message/md2f58fbc8` route
# The `mail` app fetches the message from the JMAP store and emits the `mail.model.message.load` event.
The `jabber` app compares the message headers (from, to, cc) with the presence information from the roster.
# The `mail` app renders the mail view and emit the `mail.view.message.render` event. The `jabber` app extends the message header view with presence indicators for sender and recipients.
# Once the message is shown for 5 seconds, the unread flag is removed from the message model which updates the list view. The changes are synchronized to the server through the JMAP data store.
=== Jane writes a holiday greetings email to her friends & family ===
> # Jane clicks the "Compose" button
> # In the "To" fields she starts typing the name of her mom
> # A list of matching contacts from her address book pops up as suggestions
> # She picks her mom from the list which is then added to the recipients list
> # In order to not forget any of her friends, she opens the address book to select further recipients from the list while browsing through
> # Jane enters the email subject into the according field
> # She starts typing the message in the composition area
> # Before sending the message, she runs the spell correction to find typos
> # Jane clicks the "Send" button to finally send the message
> # She opens the "Sent" folder to verify that the message has been send and stored
[Involved components to follow here]
=== Gregg receives an event invitation ===
> # A notification bubble announces a new message arrived in the inbox
> # Gregg clicks the Inbox folder to see the message list with a new unread message on top
> # In the message list he clicks the new and yet unread message
> # The message content is displayed in the preview pane on the right
> # The message is detected to contain an iTip event invitation attachment and a box in the preview pane asks Gregg whether for RSVP (Accept, Maybe, Decline)
> # Gregg clicks the //Check Calendar// button to see his calendar for the requested day
> # Since he has no other events listed for that afternoon, he accepts the invitation
> # The event is added to his personal calendar and a reply to the organizer is sent
> # Notification bubbles confirm these actions
To be continued ...