Requirements - swe574-team2/swe574_team2 GitHub Wiki
Glossary
Application: A web application created as a blog
User: The person who registered the web application
Space: The area in the blog application, which is divided according to the content topics, where you can become a member, and where the post is shared.
Post: Posts created by space members that contain mandatory title, content, link, tag and optionally photo.
Platform: Locations viewable in the app for a user
Tag: Post titles' labels
Space Policy: Document defining role distributions and role authorizations in Space
Member: Everyone who has joined Space
Owner: The creator of the space
Moderator: The most authorized member after the owner in the space, determined by the owner and whose authorizations are defined in the Space Policy.
Badge: Rewards given to space members when defined achievements are achieved
Requirements
1. Space
1.1. Creating Space
1.1.1. A registered user with a verified email shall be able to create a new space by providing a unique name, a brief description, and selecting a category from a predefined list.
1.1.2. Each space should have a unique space name, and a description.
1.1.3. Each space should have a space policy selected by the space owner (public or private).
1.2. Joining Space
1.2.1. Users of the platform shall join any space (if it is private, should be approved by authorized users)
1.2.2. Members of a space shall leave the space.
1.3. Managing Space
1.3.1. Space owner will be able to select moderators from the members of the space.
1.3.2. Members of the space will have the permissions with respect to the policy of the space and their roles.
2. Posts
2.1. A user shall be able to create a post by providing a mandatory title, URL, and a description.
2.2. A post shall optionally have an image.
2.3. If the post doesn’t have an image, there shall be no default image in the post.
2.4. Each post must be associated with at least one space.
2.5. In the post’s preview; the title, link and description of the post doesn’t have to be shown in full if they’re too long.
2.6. Title, link and description of the post shall be shown in full in the post’s own page.
2.7. If available, the post should show a preview of the page when the cursor is hovered over the post’s link.
2.8. A post shall have descriptive or informative tags that are relevant to the content and shall be found in the glossary. Tags may include Wikidata entities or other relevant terms.
2.9. When clicked on the post’s link, the post shall redirect to the linked webpage.
2.10. A post shall be liked or commented by other users if they’re a member of the space.
2.11. A post shall be posted publicly to a space, or be kept private in the post owner’s personal space.
2.12. A post shall be added to (or removed from) favorite posts.
2.13. A post and its different parts (image, parts of image, link, title, description etc.) shall be annotated according to the W3C web annotation data model.
2.14. A post shall not be edited once posted.
2.15. A post shall be deleted by its owner.
2.16. A post shall be deleted by space owner or moderators based on the space policy.
2.17. If a post contains the same link as another post shared in the "same space", the user should be informed about the link duplication and give confirmation if they still want to share the post with the same link.
3. Recommendations
3.1. Recommendations should be shown in a separate ‘recommendations’ page.
3.2. Recommendation page should include the posts that are liked by the accounts that the user follows.
3.3. Recommended posts should primarily be displayed in descending order based on the number of likes they received from the followed accounts
3.4. If two or more recommended posts have the same number of likes received by the followed accounts, then they should be displayed in reverse chronological order (newest to oldest).
3.5. If a post belongs to a private space that the user is not a member of, then it shall not be displayed in the user’s recommendations page.
4. Favorites Page
4.1. Favorite posts should be shown in a separate ‘favorites’ page.
4.2. Users shall add any post to favorites from a space that they’re a member of.
4.3. Favorite posts should be displayed in the order they’re added to favorites, from newest to oldest.
4.4. A post shall be removed from the favorites any time by the user.
5. Followed Users Page
5.1. Followed users page should include the posts of the accounts that are followed by the user.
5.2. The posts should be displayed in reverse chronological order based on their share date (from latest posted to earliest posted).
5.3. If a post belongs to a private space that the user is not a member of, then it shall not be displayed in the followed users page page.
6. Tags
6.1. Users should be able to create two types of tags: descriptive and informative.
6.2. Users should be able to create their tags while sharing a new post.
6.3. Users should be able to provide names for the tags.
6.4. Users should be able to create informative tags freely in text format (e.g. 'to watch', 'interesting', 'good quality', 'needs improvement', etc.).
6.5. Descriptive tags should be created via Wikidata entity names, and users should be able to search and select tags from the existing Wikidata database.
6.6. Users should be able to associate multiple tags, both descriptive and informative, with each post they share.
6.7. The system must store the tag name, tag type, and associated post for each tag created by a user.
7. Badges
7.1. Badges must be earned at the space level.
7.2. Users shall earn badges in the categories of "most liked (the owner of the most liked post)", "top contributor (the user who shared the most posts)", and "regular contributor (a user who has shared in 10 different days in the last 30 days)".
7.3. A moderator shall give an “original” badge to a desired post (consequently to the owner of the post) in the space.
7.4. Each badge must have an icon.
7.5. A user should be able to have more than one badge.
7.6. A user should be able to earn badges in different spaces.
7.7. Badges earned by the user should be displayed on the profile page next to each space name they have joined.
7.8. When clicked on the icon of a badge that the user has won, the posts that earned them this badge should be displayed in the relevant space.
7.9. “The most liked post” in a space should be highlighted with an icon right next to the post title.
8. Search
8.1. The search function should allow users to search for posts and spaces based on keywords contained within their titles, descriptions, and tags.
8.2. The search function should allow users to filter their results by date, relevance, popularity.
8.3. The search function should allow users to search for posts and spaces based on their annotations, either by filtering for specific types of annotations or searching for keywords within the annotations themselves.
8.4. The search function should be able to prioritize the results that have been annotated by users with higher reputation (users who have more badges).
8.5. The search function should also allow users to search for posts and spaces based on the user who created them, or the user who contributed to them in some way (such as by annotating or commenting on them).
9. User profiles
9.1. Users should be able to access their profile so that they shall change their username, email address and profile picture.
9.2. Users should be able to follow other users on the platform so that they shall see their posts on the followed users page.
9.3. Users should also be able unfollow other users if they decide not to see their posts on the followed users page anymore.
10. Registration and Login
10.1. Users should be able to register to the site with their own credentials.
10.2. Users should be able to login to the site with the registered credentials.
10.3. Users should be able to logout from site so that no one else shall be able to access their account from the same computer.
10.4. Users should be be able to reset their password if they forget it so that they shall keep accessing their account.
11. Annotation
11.1. Users shall be able to annotate posts with additional information related to the content.
11.2. Annotations may be visible to other users depending on the space and post settings.
11.3. Annotations shall satisfy W3C data model.
12. Notification
12.1. Users should be able to enable or disable notifications.
12.2. Users should be able to view the relevant content when they click on a notification.
12.3. Users should be able to mark notifications as read or unread.
12.4. Users should receive "new message" notification.
12.5. Users should recieve "follower request" notification.
12.6. Users should recieve "like" notification, when someone liked their post.
12.7. Users should recieve "comment" notification, when someone commented about their post.
12.8. Users should be able to mute notifications.