-
Notifications
You must be signed in to change notification settings - Fork 1
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.
- ER - Requirements Specification
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.
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.
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. |
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 |
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 |
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 |
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 |
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. |
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 |
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 |
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 |
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. |
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.
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. |
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.
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.
Note: there is no specific page for tags. They will be presented as part of the search pages, posts and other related pages.
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.
Changes made to the first submission:
- Fixed typo in priorities on table 2 (11/10/2024)
- Removed chat features from sitemap (11/10/2024)
- Fixed the user story description on the User Story US322 (11/10/2024)
- Removed generalization between Program API and API User (21/10/2024)
- Changed Authenticated User user stories to have "As an authenticated user ..." instead of "As a user ..." (21/10/2024)
- Add Administrator Login page to sitemap and update "Admin Pages" description (21/10/2024)
- Clarifications and small corrections to sitemap section (21/10/2024)
- Reviewed additional requirements (21/10/2024)
- Added US313 (Send Follow Request), US504 (Send Group Invitation) and US604 (Manage Content) (21/10/2024)
- Improve and further elaborate API User user stories (21/10/2024)
- Fix order and priorities in the Administrator user stories (04/11/2024)
- Added two more user stories to complete logic (US337 and US508) (05/11/2024)
- Fixed numbering issue in US3xx user stories (13/11/2024)
- Changed US327 from Markdown to Rich Text (21/12/2024)
GROUP2411, October 09, 2024
- Rodrigo Albergaria Coelho e Silva, up202205188@up.pt (Editor)
- Bruno Ricardo Soares Pereira de Sousa Oliveira, up202208700@up.pt
- Henrique Sardo Fernandes, up202204988@up.pt
- José Carlos Malheiro de Sousa, up202208817@up.pt