Skip to content
HenriqueSFernandes edited this page Feb 15, 2025 · 1 revision

ER - Requirements Specification

ProGram aims to bring together programmers, developers and other people passionate about informatics, while providing a supportive environment for communication and discussion. Our vision is to create a safe space where like-minded individuals can share ideas, learn new tricks and even start projects together.

Table of Contents

A1 - ProGram: A Social Network for Programmers

ProGram is a social networking platform being developed by a startup that aims to connect programmers with like-minded individuals. The need for a specialized space where technology professionals can connect, collaborate, and share knowledge drives this initiative. By providing an interactive and supportive environment, ProGram seeks to fill this gap within the tech community.

The primary goals and objectives of ProGram revolve around connecting programmers with shared interests. The platform facilitates finding project collaborators, seeking mentors, building friendships, and sharing technology-related content and projects. By integrating essential social media features such as posts, comments, and groups, ProGram aims to create a lively community that encourages knowledge exchange and collaboration.

ProGram includes several user groups to ensure clear functionality and management. Non-authenticated users, or guests, can explore the platform, allowing them to view and search for content such as posts, groups, and comments, but lack the ability to create content or access personalized features. They can also use the authentication features, such as registration, log in, log out and password recovery. Authenticated users have a broader range of capabilities. Besides everything previously mentioned, they can also create and manage content, while enjoying personalized experiences with notifications and tailored recommendations. Additionally, authenticated users can follow other users, strengthening community bonds.

The platform will also provide access to its REST API, for users to use on their own applications. Third-party apps will be able to receive public information, but more sensitive operations will require a token, tied to a user account, instead of standard user credentials.

Administrators, who are established community members, play a vital role in maintaining a safe environment by monitoring users and interactions, removing inappropriate content, and enforcing community guidelines.

In addition, the platform is designed with intuitive navigation and a responsive and adaptive layout, ensuring a seamless experience across various devices.


A2 - Actors and User stories

This artifact contains the specification of the actors involved in the system with their respective descriptions. The actors that will use the application also have a defined list of user stories, providing an overview of the implementation goals and functional requirements. The last section contains other supplementary requirements such as business rules, technical or non-functional requirements and restrictions of the system.

1. Actors

ProGram Actors Fig. 1 ProGram Actors
Actor Description
User A user that has access to public information in the system, such as browsing posts, groups, and comments.
Guest Unauthenticated user who can explore the platform, view public content and register/log in, but cannot create or manage content.
Authenticated User A registered user who can create and manage content, follow other users and enjoy personalized features and notifications.
Administrator An entity responsible for managing platform-wide content, user accounts, enforcing community guidelines, and maintaining the platform environment.
Group Member A participant in a group with standard permissions to access and engage in the group's activities
Group Owner A designated individual with elevated permissions to manage and oversee user and group activities
ProGram API An interface by ProGram that allows authorized entities and users to securely perform actions and access platform features.
API User A user or entity who accesses our API.
OAuth API External API used for authenticating users into the system using federated providers like Google.
Table 1: Actors

2. User Stories

2.1. User

Identifier Name Priority Responsible Description
US101 View Public Profiles High José As a user, I want to view public profiles of other users, so that I can learn more about them and potentially connect or interact with them
US102 Search for Public Users High Bruno As a user, I want to search for public users on the platform, so that I can find and connect with people who share my interests
US103 View Public Timeline High Rodrigo As a user, I want to view a public timeline of posts, so that I can see what content is available and engage with the community
US104 Full-text Search High Bruno As a user, I want to perform full-text searches, so that I can find relevant posts, users, or groups based on partial matches or broader search terms
US105 Exact Match Search High Bruno As a user, I want to be able to perform an exact match search, so that I can quickly find specific posts, users, or groups based on precise keywords
US106 Search Filters Medium Bruno As a user, I want to apply filters (e.g., date range, content type, tag, author) to my search results, so that I can narrow down the information to find what I'm looking for more efficiently
US107 Search over Multiple Attributes Medium Bruno As a user, I want to search across multiple attributes (e.g., username, post content, group name), so that I can find relevant results based on various criteria
US108 Placeholders in Form Inputs Medium Bruno As a user, I want to see placeholders in form input fields, so that I can easily understand what information is expected in each field before I start typing
US109 Contextual Error Messages Medium Henrique As a user, I want to receive contextual error messages when I enter invalid information in form fields, so that I can quickly understand what went wrong and how to fix it
US110 Contextual Help Medium Bruno As a user, I want to access contextual help for various features in the system, so that I can better understand how to use the platform and its functionalities
US111 FAQ Medium José As a user, I want to view a list of the main features of the platform in a FAQ format, so that I can quickly find answers to common questions and understand what the platform offers
US112 About Us Medium José As a user, I want to view the "About Us" section of the platform, so that I can learn about the mission, vision, and values of the organization behind the service
US113 Contact Us Medium José As a user, I want to access a "Contact Us" section, so that I can reach out to the support team for assistance or inquiries about the platform
US114 Order Results Low Bruno As a user, I want to be able to order the results of my search using different criteria, so that I can find relevant results more efficiently
Table 2: User User Stories

2.2. Guest

Identifier Name Priority Responsible Description
US201 Registration High Henrique As a guest, I want to be able to register myself into the system, so that I can authenticate myself and have access to additional features
US202 Login High Henrique As a guest, I want to be able to login into my account (if I already have one), so that I become an authenticated user and have access to additional features
US203 Recover Password Medium Henrique As a guest, I want to be able to recover my password (if I have an account), so that I can regain access to my account
US204 OAuth API Register Medium Henrique As a guest, I want to register a new account through an external API, so that I do not need to create a new account for the platform
US205 OAuth API Login Medium Henrique As a guest, I want to login through an external API, so that I can be easily authenticated
Table 3: Guest User Stories

2.3. Authenticated User

Identifier Name Priority Responsible Description
US301 Logout High Henrique As an authenticated user, I want to be able to securely log out of my account, so that I can end my session and protect my data
US302 Create Post High Rodrigo As an authenticated user, I want to create posts (with text, images, tags, ...), so that I can share content in the platform
US303 Edit Post High Rodrigo As a post author, I want to edit my posts (text, images, tags, ...), so that I can update or correct the content I have shared
US304 Delete Post High Rodrigo As a post author, I want to delete my posts, so that I can remove content that is no longer relevant
US305 View Personalized Timeline High Rodrigo As an authenticated user, I want to view a personalized timeline of content based on my preferences and interactions, so that I can engage with relevant posts and updates
US306 View My Profile High José As an authenticated user, I want to view my profile, so that I can see my information and the content I have posted on the platform
US307 View User Profiles High José As an authenticated user, I want to view profiles of other users, so that I can learn more about them and their content
US308 Edit Profile High José As an authenticated user, I want to edit my profile, so that I can update my personal information and preferences
US309 Add Profile Picture Medium José As an authenticated user, I want to upload and modify my profile picture, so that I can personalize my presence on the platform
US310 Delete Account Medium Henrique As an authenticated user, I want to delete my account, so that I can remove my presence and data from the platform if I no longer wish to be registered
US311 View Notifications Medium Rodrigo As an authenticated user, I want to view my notifications, so that I can stay updated on interactions related to my content and followers
US312 Search for Content Medium Bruno As an authenticated user, I want to search for posts, comments, groups, and users, so that I can quickly find content and people of interest on the platform
US313 Follow other Users Medium Rodrigo As an authenticated user, I want to follow other users, so that I can connect with like-minded people
US314 Send Follow Request Medium Rodrigo As an authenticated user, I want to send a follow request to another user with a private profile, so I can connect with them and see their activity
US315 Manage Followers Medium Rodrigo As an authenticated user, I want to manage list of users that follow me, so that I can add, remove, or organize connections as needed
US316 Manage Following Medium Rodrigo As an authenticated user, I want to manage list of users that I follow, so that I can add, remove, or organize connections as needed
US317 Manage Received Follow Requests Medium Rodrigo As an authenticated user with a private account, I want to manage the follow requests I receive, so that I can accept or decline connections with others
US318 Comment on Posts Medium José As an authenticated user, I want to comment on posts, so that I can engage in discussions, interact with content shared by others and give my opinion about them
US319 Edit Comment Medium José As a comment author, I want to edit my comments, so that I can correct or update my contributions to discussions
US320 Delete Comment Medium José As a comment author, I want to delete my comments, so that I can remove comments that are no longer relevant .
US321 Like Posts Medium Henrique As an authenticated user, I want to like posts, so that I can quickly express my appreciation for the content
US322 Like Comment Medium Henrique As an authenticated user, I want to like comments, so that I can quickly express my appreciation for the comment
US323 Create Group Medium José As an authenticated user, I want to create groups, so that I can build a community around shared interests
US324 Manage Group Invitations Medium Rodrigo As an authenticated user, I want to manage my group invitations, so that I can decide which groups I want to join
US325 Linking to external account Medium Bruno As an authenticated user, I want to connect my profile to external accounts (e.g. Github, Gitlab, ...), so that people can find my profile on those platforms and discover more about myself and my projects
US326 Developer Stats Medium Bruno As an authenticated user, I want to display my developer statistics, such as main programming languages and number of contributions, so that I can distinguish myself in the community and show my achievements and interests in the platform
US327 Rich Text Post Formatting Medium Bruno As an authenticated user, I want to format my posts using rich text, so that they look more appealing and are easier to customize
US328 Create Announcements Medium José As an authenticated user, I want to create announcements, so that I can share with other important messages and updates about my projects or events
US329 Appeal for Unban Low Henrique As an authenticated user, I want to appeal a ban on my account, so that I can request reconsideration if I believe it was unjustified
US330 Tag Users Low Bruno As an authenticated user, I want to tag other users, so that I can associate a post or comment to a user, because of its relevance for them or as a response
US331 View Followers' Feed Low Rodrigo As an authenticated user, I want to view my followers' feed, so that I can keep up with their recent activity and posts
US332 Request to Join Public Group Low José As an authenticated user, I want to request to join a public group, so that I can participate in discussions and activities within that group
US333 Manage Post Visibility Low Bruno As a post author, I want to manage the visibility of my posts, so that I can control who can view or interact with them
US334 Notification on Post Like Low Rodrigo As a post author, I want to receive notifications when someone likes my post, so that I am aware of how others are engaging with my content
US335 Notification on Post Comment Low Rodrigo As a post author, I want to receive notifications when someone comments on my post, so that I can engage in discussions about my content
US336 Notification on Follow Low Rodrigo As an authenticated user, I want to receive notifications when someone starts following me, so that I can follow it back, remove the follow or just ignore it if I want
US337 Notification on Tag Low Rodrigo As an authenticated user, I want to receive notifications when someone tags me on a post, so that I notice that another user considers something relevant to me
US338 Notification on Comment Like Low Rodrigo As an authenticated user, I want to receive notifications when someone likes my comment on a post, so that I notice that another user liked my interaction or agrees with me
US339 Change Profile Visibility Low Henrique As an authenticated user, I want to change the visibility of my profile, so that I can protect my privacy
Table 4: Authenticated User Stories

2.4. Group Member

Identifier Name Priority Responsible Description
US401 View Group's Members Medium Rodrigo As a group member, I want to see a list of the members of the group, so that I can determine who is a member and who is not
US402 Leave Group Medium José As a group member, I want the option to leave the group, so that at any point I can stop receiving group-related content when I no longer want them
US403 Post on Group Medium Rodrigo As a group member, I want to create posts on the group, so that the other members can receive information and updates from me
Table 5: Group Member User Stories

2.5. Group Owner

Identifier Name Priority Responsible Description
US501 Add User to Group Medium José As a group owner, I want to add a member to a group, so that I can give them access to the group's resources
US502 Edit Group Information Medium José As a group owner, I want to edit the group's information, so that I ensure the group's details remain accurate and meaningful
US503 Remove Group Member Medium José As a group owner, I want to remove a member from the group, so that I can control the users that can access the group's resources and permissions
US504 Send Group Invitation Medium Rodrigo As a group owner, I want to send a group invitation to an authenticated user that is not a group member, so that they are encouraged to join and do not need to perform a join request to enter
US505 Manage Join Requests Low José As the owner of a private group, I want to manage join requests, so that I can further control whoever joins the group
US506 Change Group Visibility Low Henrique As a group owner, I want to change the group visibility, so that I can turn the group private and hide its existence from the rest of the platform, or turn the group public and make it visible and open to all the users
US507 Remove Post From Group Low Henrique As a group owner, I want to remove a post from the group, so that the community's visible posts remain relevant
US508 Delete Group Low Henrique As a group owner, I want to delete the group, so that I can remove it permanently from the system if it's no longer needed, ensuring no further interactions or data storage associated with the group.
Table 6: Group Owner User Stories

2.6. Administrator

Identifier Name Priority Responsible Description
US601 Manage Users High Henrique As an administrator, I want to have a dashboard for managing, searching and modifying user accounts, so that I can effectively control user access, activity and permissions
US602 Manage Content High Henrique As an administrator, I want to manage groups and posts, so that I can moderate the community by deleting inappropriate content
US603 Administrator Login High Henrique As an administrator, I want to login into my dashboard in a special way, so that I can have different control of the platform and better manage it
US604 Ban Users Medium Henrique As an administrator, I want to ban a user account from the system, so that I can restrict access for users who violate policies or pose security risks
US605 Unban Users Medium Henrique As an administrator, I want to unban previously banned user accounts, so that they can regain access to the platform after their ban has been reconsidered and lifted
US606 Delete User Accounts Medium Henrique As an administrator, I want to delete user accounts, so that I can permanently remove inactive or banned users from accessing the system
Table 7: Administrator User Stories

2.7. API User

Identifier Name Priority Responsible Description
US701 Public Access to the API Medium Bruno As an API user, I want to get public information from the platform API, such as public posts and user profiles, without a token, so that I can utilize the system's public features in my own apps
US702 API Token Access Medium Bruno As an API user, I want to use API tokens for authentication, so that I can securely access the platform's API functionalities as an authenticated user, without needing to share my credentials on every request
US703 Authenticated Access to the API Medium Bruno As an API user, I want to perform authenticated user actions from the API, such as getting private user profiles and creating a post, with a token, so that I can integrate the platform's privileged functionalities on my own apps
Table 8: API User User Stories

3. Supplementary Requirements

3.1. Business rules

Identifier Name Description
BR01 Spam Control Users are limited to creating posts at a rate of 1 post per 30 seconds
BR02 Self-Interaction Restrictions Users can comment but cannot like their own posts or comments
BR03 User Deletion Content Handling When a user is deleted, their content is anonymized, including posts, comments, their names in group and profile
BR04 Group Deletion Handling When a group is deleted, all of the posts and messages there are also deleted
BR05 Minimum Age Users must be at least 13 years old to register and use the platform
BR06 Public/Private Profiles There should be public and privates profiles, private profiles are only available to followers
Table 9: Business Rules

3.2. Technical requirements

Identifier Name Description
TR01 Scalability The system must be able to grow to a large number of users, content and activities
TR02 Performance The system should respond to user requests within 2 seconds under normal load
TR03 Security The system must keep all user data protected
TR04 Availability The system must maintain 99.9% uptime to ensure continuous access for users.
TR05 Compatibility The system must be compatible with major web browsers and mobile devices.
TR06 Usability The system must be designed to be intuitive and easy to use for end users without any technical experience.
TR07 Accessibility The system must be intuitive and usable for users with disabilities, including visual, auditory, motor, and cognitive impairments.
Table 10: Technical Requirements

Out of all of these technical requirements, three of them are especially important:

  • Scalability (TR01) is the most essential one. Due to the nature of the web application, it is crucial that the system can scale with the number of users, posts and other types of content.
  • Security (TR03) is crucial because it is our responsibility to keep our users' data safe and maintain their trust.
  • Usability (TR06) is also very important as we are making a web application focused on the users. Therefore, the UI should be responsive, adaptable and easy-to-use in order to provide a better user experience.

3.3. Restrictions

Identifier Name Description
R01 Project Deadline The project should be ready to be deployed by the end of the semester
R02 Max Team Size The maximum team size is limited to 4 students.
R03 Required Technology The project must use Laravel as the backend framework along with HTML, CSS, and JavaScript for the frontend. No other frameworks are allowed.
Table 11: Restrictions

A3 - Information Architecture

The goal of this artifact is to give a brief overview of the information architecture. This is important for us to identify user requirements, as well as to preview and plan the application organization and user interface of the final product. This artifact contains a sitemap with the main detailing the overall structure of the pages and a three wireframes with the functionality and content of the the homepage, post page and user profile page.

1. Sitemap

The ProGram web application is divided into the following 6 sections:

  • Static Pages: simple pre-generated pages for contacts and information
  • Authentication: pages for the login, register and password recovery
  • User Pages: areas of the website specific for authenticated users
  • Admin Pages: pages dedicated to administrators, such as login and tools for managing the website
  • Settings: containing the general and more specific settings
  • Content: pages for the main information of our web app such as groups and posts

There are also two other "general" pages such as notifications and search results.

Sitemap for the ProGram web application Fig. 2 ProGram Sitemap

Note: there is no specific page for tags. They will be presented as part of the search pages, posts and other related pages.

2. Wireframes

UI01: Homepage

Wireframe for the ProGram homepage Fig. 3 Homepage Wireframe

UI09: Post

Wireframe for the ProGram post Fig. 4 Post Page Wireframe

UI15: Profile Page

Wireframe for the ProGram profile page Fig. 5 Profile Page Wireframe

Usage of Generative AI Tools

For this report, we have used GhatGPT and Github Copilot for generating mock text, to be used as inspiration, and to improve text in certain parts of this report.


Revision history

Changes made to the first submission:

  1. Fixed typo in priorities on table 2 (11/10/2024)
  2. Removed chat features from sitemap (11/10/2024)
  3. Fixed the user story description on the User Story US322 (11/10/2024)
  4. Removed generalization between Program API and API User (21/10/2024)
  5. Changed Authenticated User user stories to have "As an authenticated user ..." instead of "As a user ..." (21/10/2024)
  6. Add Administrator Login page to sitemap and update "Admin Pages" description (21/10/2024)
  7. Clarifications and small corrections to sitemap section (21/10/2024)
  8. Reviewed additional requirements (21/10/2024)
  9. Added US313 (Send Follow Request), US504 (Send Group Invitation) and US604 (Manage Content) (21/10/2024)
  10. Improve and further elaborate API User user stories (21/10/2024)
  11. Fix order and priorities in the Administrator user stories (04/11/2024)
  12. Added two more user stories to complete logic (US337 and US508) (05/11/2024)
  13. Fixed numbering issue in US3xx user stories (13/11/2024)
  14. Changed US327 from Markdown to Rich Text (21/12/2024)

GROUP2411, October 09, 2024