Skip to content

Project Proposal

alvinavinante edited this page Jan 30, 2024 · 5 revisions

Codefathers Project Proposal

Epoch

Project Summary and Vision

Our team is building a new social media platform called ‘Epoch.’ The main feature of this platform is time-based posting. Think of a time capsule; where you open it up to find items from some time ago. In our platform, users can set a certain amount of time before their posts are released. These times can range from a few days to a year. Then when that time is up, that post is released to your feed.

Posts don’t need to be time specific. They can simply go up instantly, effectively functioning like a normal social media platform. But we hope the unique time-capsule element is the main appeal of our platform.

We hope the platform allows users to reflect on their pasts when the post finally goes up. Maybe you forgot all about the fun times you had last year. We also hope that users can look to the future, when making the posts, wondering what may change in their lives before it goes up.

Stakeholders:

  • Users of the platform

  • Developers - The Codefathers

  • TA – client

Core features

Post – Provide a mechanism for users to schedule posts to be published at a future date and time. Allow users to attach various types of media (images, videos, text) to their time capsule posts.

Accounts – Allow users to create accounts with a unique username and password. Enable users to customize their profiles with profile pictures, bios, etc.

Friends – Allow users to connect with friends and other users. Implement features for users to comment on and like time capsule posts.

Predictions – Allow users to vote for the accuracy of a post.

Non-Functional Feature

Scalability - Design the backend to handle a growing number of users and posts.

Technologies:

As we begin development, we looked at implementing our project using the following technologies.

  • React

  • Postgres

  • Google Cloud

  • Github + Github Actions

  • Python

    • Libraries: socket, psycopg2, datetime, pytz
  • HTML, CSS

  • Selenium

  • Docker

User Stories:

  1. As a user, I should be able to create a profile in the social media app (Account)

    1.1. Login/Logout

    1.2. Edit profile picture/bio

  2. As a user, I should be able to post something at a scheduled time, random time (Posts)

    2.1. Edit post within a certain time frame

    2.2. Delete post

    2.3. Dedicate post to other following/followers

  3. As a user, I should be able to vote on the accuracy of a post prediction (Predictions)

    3.1. Track progress

  4. As a user, I should be able to follow/unfollow other accounts for their posts to show on my feed (Friends)

    4.1. Network of followers/following list on the profile preview

  5. As a user, I should be able to comment on a post (Posts)

    5.1. As a user I should be able to repost/share a prediction

  6. As a user I should be able to see all the predictions under a certain hashtag/tag (Posts)

  7. As a user I should have a list of favourite predictions (Predictions)

Acceptance Criteria

User tries to create account. ‘Given that I’m an unregistered user, I open the home page. Then the system shows either ‘Create Account” or 2 text fields for an existing username and password. When I click “Create Account” it brings me to a page with fields, which indicate the new user’s username, password, confirm password, bio, profile picture as well as a 'Create Account’ button. I click the button or press enter without filling in the fields, or the input is not valid, a message pops up indicating it. When I fill out the form successfully, I click the ‘Create Account’ button, or I press enter. Then the system returns to the homepage, where I can log in with the new account.”

1.1

User tries to login. “Given that I’m not currently logged in, I open the home page. Then the system shows either ‘Create Account” or 2 text fields for an existing username and password. When I fill the 2 text fields with invalid data, the system shows a message that my input wasn’t accepted. When I fill the fields with valid username and password, the system logs me in, and shows the main feed page of the platform.”

User tries to log out. “Given that I’m currently logged in, when I open the website, it brings me to my feed. It shows a main navigation bar which includes a log out button. When I click this button, the system logs me out, and returns to the home page, with the 2 username and password fields.”

1.2

User tries to edit profile. “Given that I am logged in, when I open the website, I see a navigation bar, which shows a profile button. When I click it, the system shows me my own profile, my username, bio, profile picture, and all my posts. It also shows an edit button. When I click the edit button, the system shows me text input fields with my profile information, as well as a ‘Change profile picture’ button, and a save button. I can change the text in the text fields. When I click “Change profile picture” a file explorer opens, where I select a new image file. When I click “Save” the system returns to the normal profile page, showing the new changes.”

User creates new post. “Given that I am logged in, I see an ‘New Post” button on the bottom of the screen. When I click it, the system opens a new page with a text box, and buttons for “Add media”, “Select time” and “Post”. When I click ‘Add media” a file explorer opens which I can select the images/videos I want to post. When I click select time a pop up shows a radio box with options for; 1 day, 1 week, 1 month, 6 months, 1 year. It also shows a text box indicated with “Specific date (MM-DD-YYYY)”. After selecting the desired time, the system asks to confirm the time, with a confirm and cancel button. If I click cancel, it returns me to the previous popup. If I click post, the system returns me to my feed page, with a pop up saying “Post successful! Releasing on XX-XX-XXXX".”

2.1

User edits post. “Given that I just created a post, I can navigate the navigation bar to my profile to see my posts. Since I just posted, the new post is viewable and editable for 1 minute before being removed for its intended time release. The post has an edit button. If I click the edit button, text input appears with the original post text, as well as a ‘Change media’ and “Change time’ button. Clicking one of the buttons, the system works similarly to when I originally posted (2.). There is a save button. When I click it, I return to my profile page, and the new post has been removed for release.”

2.2

User deletes post. “Given that I am logged in, the system shows a navigation bar, with a ‘Profile’ button. Clicking it, the system shows my profile. It shows my profile information, and my posts. On each post is a delete button. Clicking this button, the system shows a pop-up asking me to confirm the deletion, with a ‘Yes’ and ‘No’ button. When I click Yes, the profile page reloads, and the post has been removed.”

User votes on accuracy of prediction. “Given that I am logged in, the system shows me my feed. On my feed are posts from users I follow. On posts which have prediction, it shows an accuracy %, and a button to vote on its accuracy. When I click this button, the system shows a pop-up, which asks ‘Was this post accurate’, as well as a Yes and No button. Clicking on either button closes the pop up. My selection is reflected on the prediction posts percentage.

User follows another user. “Given that I am logged in, the system shows a navigation bar, which includes a search bar. I type in another person’s username in the search and press the Enter button. The system shows me a list of search results; each user’s profile, username, profile picture, and bio. When I click on one of the users the system shows me their profile page, which includes their posts, as well as a follow button. When I click on the button, the button changes to an unfollow button, and a popup appears indicating that I now follow this user.”

User comments on a post. “Given that I am logged in, the system shows my feed. When I click on one of the posts on the feed, the system shows me a page for that post. Under the post is a text field, and a Comment button. When I click on the button, without entering text, nothing happens. After inputting text, clicking on the button, the system shows my new comment under the post.”

5.1

User reposts a post. “Given that I am logged in, the system shows my feed. When I click on one of the posts on the feed, the system shows me a page for that post. There is a button for ‘Repost’. When I click on the button, it indicates that I have pressed repost. On the navigation bar I return to my feed. The post that I have reposted had indicated that I have done so.

User views the list of predictions by hashtag. “Given that I am logged into the app, and it shows the home page. When I click on a specific hashtag or navigate to a search functionality then the app should present a list of all the posts that include the selected hashtag.”

User views their list of favorite predictions. “Given that I am logged into the app, and it shows the home page and as I view the posts when I click on favorite or add to favorite button associated with the post then the app should add to my list of favorites.”