User-First Design

As a user, I should be able to register for an account

To register an account, Alice first visits the home page and clicks the "register account" link. This bring her to the new account form, where she enters her email address, username, and password. After submitting the form, she waits for an email to confirm her email address. Upon clicking the link in the email, her new account is ready to use.

As a user, I should be able to create a message

When logged in, Alice visits the home page and starts typing into the text field with the placeholder "Write your message". When she finishes the message, she clicks "Post message". The post is now visible on her home page.

As a user, I should be able to follow a user

When logged in, Alice searches for a user "bob". On the list of results, she sees the of the user the name of the user with the username "bob". She clicks the "follow" button next to bob's name, and sees a message that she is now following bob.

As a user following other users, their messages should show up on my feed

Alice is following the user "bob". When Alice is on her homepage, she should see the most recent messages posted by "bob".

As an unregistered user, I should be able read messages by users

As a user without an account, I search for the username "bob". I see a list of users with a username similar to "bob". When I click on the name of the first user on the list, I should see the messages that user has posted.

As an unregistered user, I should not be able to create a post

As a user without an account, I navigate to the homepage. The textbox where registered users can write messages is disabled, and displays a message telling me that I must register for an account to post messages.

Data-First Design

User
Route Data
New A form with email, username, human name, and password fields + an avatar upload form
Create A page showing the user's name and avatar + a message saying "Your account has been created, please check your email for so we can verify your account"
Retrieve Displays the user's name and avatar, as well as a list of their messages
Update A form like the new user form, but pre-populated with the data for that user. In order to update their password, the user should have to type in their old password.
Delete A delete button that forces the user to confirm that they really want to perform this action
Index A list of users with their human name, username and avatar. The names would link to their retrieve page

Follow
Route Data
New A "follow" button next to a user's name
Create A page showing the followed user, with a "You have are now following ___" message
Retrieve N/A. There's no reason to view a single "follow"
Update N/A. Follow can't be updated, they can only be created or deleted.
Delete An "unfollow" button next to a user's name
Index A list of the "followed" user in the Follow.

Message
Route Data
New A text field where the message can be written
Create A page showing the created message + a "your post has been created" alert
Retrieve Displays the text of a single message, along with its timestamps and the avatar + name of the author.
Update A text field pre-populated with the content of the message.
Delete A "delete" button that forces the user to confirm the deletion.
Index A list of muliple messages' content and their authors.