Repository navigation
PingPong Q&A helps communities share and build knowledge in a simple, organized way. By making it easy to ask questions, find answers, and recognize contributions, it encourages people to engage and learn together. With smart search, badges, and an interface that works on any device, the platform makes knowledge easier to discover, trust, and keep for the long term.
The PingPong Q&A system is being developed to provide communities with a structured, web-based environment for collaborative knowledge sharing. Its main goal is to enable users to ask and answer questions across different topics, allowing for collective learning, knowledge validation, and long-term knowledge retention. The platform is designed with an adaptive web interface, ensuring usability across desktops, tablets, and smartphones. It can be adopted in various contexts: communities of interest, professional organizations, or informal groups that want to exchange knowledge efficiently.
Traditional forums and chat platforms often lack structure, making it difficult to find, evaluate, and reuse information. PingPong Q&A addresses this gap by providing a centralized platform where contributions are stored in an organized way, evaluated by the community through votes, and ranked for relevance. This ensures higher-quality content, reduces redundancy, and improves trust and efficiency in knowledge exchange. Additionally, features such as reputation scores and badges encourage sustained participation and content quality.
The platform supports user authentication and account management, including registration, login and logout, password recovery, and account deletion with anonymization of shared data upon deletion. Each user has a profile that can be viewed and edited, including personal information, profile picture, and notifications. Core Q&A functionality allows registered users to post questions, provide answers, add comments, and vote on content. A reputation and badge system rewards participation and highlights quality contributions, while advanced search tools such as exact match, full-text, filtering, and tagging help users find relevant discussions quickly. Users can follow questions or tags to stay updated and receive notifications when new answers or votes occur. Administration features include managing user accounts, moderating reports, and managing tags. Contextual help and error messages guide users when filling out forms, and dedicated sections provide product information such as About Us, Main Features, and Contacts. The system ensures performance, robustness, accessibility, and security, with secure password storage and response times under two seconds.
The system distinguishes between different types of users. Visitors are non-authenticated and can browse content or sign up. Members are authenticated users who can interact with content and manage their own contributions. Authors are members who create content and can edit or delete it. Moderators are members with privileges to handle reports and moderate content. Administrators have full control over the system, including user and tag management.
This artifact defines the system’s actors and their user stories, providing agile-based documentation that captures the functional requirements of the PingPong Q&A platform.
The actors for the collaborative Q&A system are represented in Figure 1 and described in the table below.
{width="500"}
Figure 1: PingPong Q&A actors.
| Identifier | Description |
|---|---|
| User | Generic user with access to public information, such as browsing questions, answers, and user profiles. |
| Visitor | Unauthenticated user who can view content and register (sign-up) or sign in to the system. |
| Member | Authenticated user who can ask questions, post answers, comment, vote, follow tags or questions, and manage their own content. |
| Author | Authenticated user who created a question, answer, or comment and can edit or delete their own contributions. |
| Moderator | Authenticated user with privileges to review reports, delete content, and edit question tags to maintain community standards. |
| Administrator | Authenticated user responsible for managing users, system settings, and tags, as well as supervising and moderating all platform activity. |
| OAuth API | External OAuth API that can be used to register or authenticate into the system. |
For PingPong Q&A, the user stories are presented in the following sections.
| Identifier | Name | Priority | Responsible | Description |
|---|---|---|---|---|
| US01 | Sign-up / Registration | prototype | Simão Barbosa | As a Visitor, I want to register an account, so that I can become an authenticated member and contribute to the community. |
| US02 | Sign-in / Login | prototype | Dinis Lima | As a Visitor, I want to log in, so that I can access member-only features. |
| US03 | OAuth API Sign-up | innovation | Raul Oliveira | As a Visitor, I want to register using an external OAuth provider (Google/GitHub), so that I can sign up quickly without creating new credentials. |
| US04 | OAuth API Sign-in | innovation | Alexandre Ferreira | As a Visitor, I want to sign in using an OAuth provider, so that I can authenticate using an existing trusted account. |
| Identifier | Name | Priority | Responsible | Description |
|---|---|---|---|---|
| US11 | Exact Match Search | prototype | Raul Oliveira | As a User, I want to perform an exact-match search over questions and answers, so that I can find specific phrases or precise content. |
| US12 | Full-text Search | prototype | Alexandre Ferreira | As a User, I want to perform full-text search across questions and answers, so that I can find relevant discussions using natural language queries. |
| US13 | View Top Questions (Home Highlights) | prototype | Simão Barbosa | As a User, I want to view the top (highest voted/accepted) questions on the homepage, so that I can quickly find high-quality content. |
| US14 | Browse Questions (pagination/list) | prototype | Dinis Lima | As a User, I want to browse questions in a paginated/list view, so that I can explore topics without needing to search. |
| US15 | See Home / Landing Page | product | Simão Barbosa | As a User, I want to access the home/landing page with highlights, so that I can quickly orient myself and discover content. |
| US16 | Search Filters & Ordering | product | Dinis Lima | As a User, I want to filter and order search results (by date, votes, relevance, tags), so that I can refine results to what matters most. |
| US17 | View Notification List (public & personal) | product | Alexandre Ferreira | As a User, I want to view notifications (for followed questions/tags or general announcements), so that I can stay updated on important activity. |
| US18 | View Recent Questions | product | Raul Oliveira | As a User, I want to view the most recent questions, so that I can see the latest discussions and activity. |
| US19 | Browse Questions by Tags | product | Alexandre Ferreira | As a User, I want to filter/browse questions by tag, so that I can focus on topics of interest. |
| US110 | View Question Details | product | Simão Barbosa | As a User, I want to open a question page to see the full question, answers, comments, and metadata, so that I can understand the context and existing responses. |
| US111 | View Public User Profiles | product | Dinis Lima | As a User, I want to view public profiles (username, reputation, badges, public contributions), so that I can evaluate contributors and their expertise. |
| US112 | Access About / Main Features / Contacts | product | Raul Oliveira | As a User, I want to read About, Main Features, FAQ and Contact pages, so that I can learn about the platform and how to contact the team. |
| US113 | Contextual Help and Form Guidance | innovation | Alexandre Ferreira | As a User, I want contextual help (such as placeholders, inline error messages, and tooltips) in forms, so that I can understand what to enter and correct mistakes easily. |
| US114 | Dark Mode Toggle | innovation | Simão Barbosa | As a User, I want a dark mode for the platform, so that I can use it comfortably in low-light environments. |
| US115 | Copy Link Button | innovation | Alexandre Ferreira | As a User, I want a one-click button to copy question or answer links, so that I can share content easily. |
| US116 | Random Question of the Day | innovation | Dinis Lima | As a User, I want to see a random question highlighted daily, so that I can discover interesting content outside my usual tags. |
| Identifier | Name | Priority | Responsible | Description |
|---|---|---|---|---|
| US21 | View Personal Feed (followed tags/questions) | prototype | Dinis Lima | As a Member, I want to view a personal feed of questions and answers based on my followed tags and follows, so that I can see relevant, personalized content. |
| US22 | Post Question | prototype | Simão Barbosa | As a Member, I want to post a new question (title, body, tags, optional attachments), so that I can ask the community for help or share knowledge. |
| US23 | Post Answer | prototype | Raul Oliveira | As a Member, I want to post answers to questions, so that I can contribute solutions and be recognized by the community. |
| US24 | Edit Own Profile (view & edit) | prototype | Alexandre Ferreira | As a Member, I want to view and edit my profile (display name, bio, picture, preferences), so that my public presence is accurate and helpful. |
| US25 | Login/Logout (session management) | prototype | Dinis Lima | As a Member, I want to log out and have session management (remember me), so that my account is secure and accessible when needed. |
| US26 | View My Questions | prototype | Simão Barbosa | As a Member, I want a page listing my own questions (with status & metrics), so that I can manage and follow progress on my posts. |
| US27 | View My Answers | prototype | Raul Oliveira | As a Member, I want a page listing my own answers (with metrics), so that I can track my contributions and follow-up. |
| US28 | Vote on Questions | product | Alexandre Ferreira | As a Member, I want to upvote/downvote questions, so that I can help surface quality content and influence reputation. |
| US29 | Vote on Answers | product | Dinis Lima | As a Member, I want to upvote/downvote answers, so that the best answers are easier to find and contributors are rewarded. |
| US210 | Comment on Questions | product | Simão Barbosa | As a Member, I want to add comments to questions, so that I can request clarifications or provide short observations. |
| US211 | Comment on Answers | product | Raul Oliveira | As a Member, I want to add comments to answers, so that I can discuss or clarify details about an answer. |
| US212 | Follow Question (watch) | product | Alexandre Ferreira | As a Member, I want to follow/watch a question, so that I receive notifications on new answers, comments, and votes. |
| US213 | Follow Tags | product | Dinis Lima | As a Member, I want to follow/unfollow tags, so that my feed and notifications reflect topics I care about. |
| US214 | Report Content (questions/answers/comments) | product | Simão Barbosa | As a Member, I want to report inappropriate or low-quality content, so that moderators can review and act to maintain quality. |
| US215 | Receive Notifications (answer to own question, votes) | product | Raul Oliveira | As a Member, I want to receive notifications when someone answers my question or votes on my content, so that I can engage and respond promptly. |
| US216 | Support and View Badges / Reputation History | product | Alexandre Ferreira | As a Member, I want to see badges I've earned and reputation history, so that I can track progress and incentives. |
| US217 | Delete Account (request anonymization) | product | Simão Barbosa | As a Member, I want to request account deletion and anonymization of my public contributions, so that my personal data is removed while preserving knowledge. |
| US218 | Recover Password (start) | product | Dinis Lima | As a Member, I want to start the password recovery process (request reset email), so that I can regain access if I forget my password. |
| US219 | Manage Notifications (read/snooze) | product | Raul Oliveira | As a Member, I want to mark notifications as read or snooze them temporarily, so that I can manage my alerts. |
| US220 | Receive Badge Award Notifications | product | Alexandre Ferreira | As a Member, I want to receive a notification when I earn a new badge, so that I can stay aware of my achievements. |
| US221 | Appeal for Unblock / Support Contact | innovation | Simão Barbosa | As a Member, I want to submit an appeal if blocked, so that I can request reinstatement or clarification from admins. |
| US222 | Quick Reaction Emojis | innovation | Alexandre Ferreira | As a Member, I want to react to questions and answers with emojis, so that I can express my opinion quickly without leaving a comment. |
| US223 | Notification Preferences | innovation | Raul Oliveira | As a Member, I want to manage my notification preferences, so that I only receive alerts for events that are important to me. |
| Identifier | Name | Priority | Responsible | Description |
|---|---|---|---|---|
| US31 | Edit Question (own) | prototype | Dinis Lima | As an Author, I want to edit my own question (title, body), so that I can clarify or correct information after posting. |
| US32 | Delete Question (own) | prototype | Simão Barbosa | As an Author, I want to delete my own question, so that I can remove content I no longer want public (subject to anonymization rules). |
| US33 | Edit Answer (own) | prototype | Raul Oliveira | As an Author, I want to edit my own answers, so that I can improve accuracy or fix mistakes. |
| US34 | Delete Answer (own) | prototype | Alexandre Ferreira | As an Author, I want to delete my own answer, so that I can remove outdated or incorrect contributions. |
| US35 | Edit Question Tags (own question) | prototype | Dinis Lima | As an Author, I want to edit the tags on my question, so that it is categorized correctly and reaches the right audience. |
| US36 | Edit Comment (own) | product | Simão Barbosa | As an Author, I want to edit my own comments, so that I can correct typos or clarify intent. |
| US37 | Delete Comment (own) | product | Raul Oliveira | As an Author, I want to delete my own comments, so that I can remove off-topic or regrettable remarks. |
| US38 | Mark an Answer as Accepted (question author) | product | Alexandre Ferreira | As a Question Author, I want to mark one answer as accepted/correct, so that future readers can quickly identify the preferred solution. |
| Identifier | Name | Priority | Responsible | Description |
|---|---|---|---|---|
| US41 | Review and Manage Content Reports | prototype | Simão Barbosa | As a Moderator, I want to view and triage reported content with context and history, so that I can decide on appropriate moderation actions. |
| US42 | Delete Content (questions/answers/comments) | prototype | Dinis Lima | As a Moderator, I want to delete or remove content that violates rules, so that the community remains safe and high-quality. |
| US43 | Edit Question Tags (global) | product | Raul Oliveira | As a Moderator, I want to edit or retag questions (not just my own), so that content is discoverable and correctly classified. |
| US44 | Warn / Temporarily Suspend Users (moderation actions) | product | Alexandre Ferreira | As a Moderator, I want to issue warnings or temporary suspensions, so that repeated offenders are deterred while preserving due process. |
| US45 | Manage and Close Duplicate / Low-quality Questions | innovation | Simão Barbosa | As a Moderator, I want to flag, merge, or close duplicate or low-quality questions, so that the knowledge base remains concise and useful. |
| Identifier | Name | Priority | Responsible | Description |
|---|---|---|---|---|
| US51 | Manage Tags (create/edit/delete, synonyms) | prototype | Dinis Lima | As an Administrator, I want to manage tags (create, merge, delete, add synonyms), so that taxonomy is consistent and searchable. |
| US52 | Administer User Accounts (search/view/edit/create) | prototype | Simão Barbosa | As an Administrator, I want to search for, view, edit, and create user accounts (including promoting to moderator/admin), so that I can maintain community membership and roles. |
| US53 | Enforce Account Deletion Anonymization Rule | prototype | Raul Oliveira | As an Administrator, I want the system to anonymize contributions upon account deletion (retain content but remove PII), so that privacy rules are respected while preserving knowledge. |
| US54 | Delete User Account | prototype | Alexandre Ferreira | As an Administrator, I want to delete user accounts when necessary, so that I can remove inappropriate accounts in accordance with platform policies. |
| US55 | Block and Unblock User Accounts | product | Simão Barbosa | As an Administrator, I want to block/unblock user accounts, so that I can enforce platform rules and handle appeals. |
| US56 | Support Administrator Accounts & Permissions | product | Dinis Lima | As an Administrator, I want to manage administrator accounts and permissions, so that responsibilities and access are correctly assigned. |
| US57 | Monitor System Performance & Logs (TR: performance/robustness) | product | Raul Oliveira | As an Administrator, I want dashboards and logs to monitor response times, errors, and system health, so that I can ensure the platform meets performance and robustness requirements. |
| US58 | Configure Platform-wide Settings (notifications, email templates, security) | innovation | Alexandre Ferreira | As an Administrator, I want to configure notification rules, email templates, and security policies, so that the system behavior matches community needs and compliance. |
This section contains the business rules, technical requirements, and restrictions defined for PingPong Q&A.
A business rule establishes a guideline or restriction that shapes how the system or organization operates, ensuring consistent behavior and alignment with business objectives.
| Identifier | Name | Description |
|---|---|---|
| BR.011 | Account Deletion and Data Anonymization | Upon account deletion (FR.014), shared user data (e.g. comments, reviews, likes) is kept but is made anonymous. |
| BR.101 | Administrator Participation | Administrators are participating members of the community, i.e., they can post or vote on questions or answers. |
| BR.102 | Edit Visibility | Questions and answers edited after being posted should have a clear indication of the editions. |
| BR.103 | User Badges | User badges are dependent on the likes and dislikes received on their questions and answers, and also on specific actions performed by the user (e.g. first question, first answer, etc.). |
| BR.104 | User Scoring System | A user’s score increases or decreases according to votes on their questions and answers. |
| BR.105 | Content Moderation | Users must be able to report inappropriate or offensive content (questions, answers, or comments) to sent for review by moderators. |
| BR.106 | Voting Limits | A user can only vote once (either upvote or downvote) per question or answer. |
| BR.107 | Tagging System | Each question must include at least one relevant tag to facilitate categorization and searchability. |
| BR.108 | Badge Revocation | If a user’s content is removed for violating rules, related badges and reputation points should be recalculated accordingly. |
| BR.109 | Date Consistency | All date-related fields in the system must maintain logical consistency. For example, an exit date must always be greater than or equal to the corresponding entry date. |
Technical requirements define the technical characteristics and constraints that the system must fulfill.
| Identifier | Name | Description |
|---|---|---|
| TR.01 | Performance (CRITICAL) | The system should have response times shorter than 2 seconds to ensure the user's attention. This is critical to maintain user engagement and prevent frustration. |
| TR.02 | Robustness | The system must be prepared to handle and continue operating when runtime errors occur. |
| TR.03 | Scalability (CRITICAL) | The system must be prepared to deal with the growth in the number of users and their actions. This ensures the platform can support a growing community without degradation of performance. |
| TR.04 | Accessibility | The system must ensure that everyone can access the pages, regardless of whether they have any handicap or not, or the web browser they use. |
| TR.05 | Security (CRITICAL) | The system must store user passwords securely. Protecting user credentials is essential for privacy, trust, and regulatory compliance. |
| TR.06 | Availability | The system must be available 99% of the time in each 24-hour period. |
| TR.07 | Maintainability | The system’s source code should be modular and well-documented to facilitate maintenance and updates. |
| TR.08 | Data Integrity | The database must ensure referential integrity, preventing orphaned records or inconsistent relationships between tables. |
| TR.09 | Portability | The system should be deployable across major operating systems (Linux, Windows, macOS) without major modifications. |
| TR.10 | Browser Compatibility | The system must support modern browsers (Chrome, Firefox, Edge, Safari) with consistent layout and functionality. |
| TR.11 | Database Technology | PostgreSQL must be used as the database management system. |
| TR.12 | Server Framework | Laravel must be used as the main web framework for the PHP backend. |
| TR.13 | Virtualization Environment | The entire system must be deployable and tested within Docker containers to ensure environment consistency and portability. |
| TR.14 | Web Server | NGINX must be used as the web server for deployment and testing. Alternative web servers are not permitted unless explicitly approved. |
| TR.15 | Client Technologies | The front-end must be implemented using HTML, CSS, and JavaScript. The use of additional client libraries or frameworks (e.g., React, Vue) requires teacher authorization. |
A restriction limits the degree of freedom in the search for a solution.
| Identifier | Name | Description |
|---|---|---|
| C.01 | Launch Deadline | The system must be fully operational before the official platform launch event to allow community registration and early interaction. |
| C.02 | Documentation Language | All project documentation must be written in either Portuguese or English, maintaining consistency across all project artifacts. |
| C.03 | Writing Quality | All written documentation must follow a technical writing style that is simple, precise, and unambiguous. |
The goal of this artifact is to define the website’s information architecture through a structured sitemap and corresponding wireframes. This way we can establish a clear navigation, content hierarchy, and user interaction flows to support an intuitive and consistent user experience.
{width=638 height=600}
Figure 2: PingPong Q&A sitemap.
Wireframes illustrate the layout and structure of each page, showing how content and features are organized for user interaction. For this project, the wireframes for the Question Details page (UI09) and the User Profile page (UI14) are shown in Figures 3 and 4.
{width=900 height=486}
Figure 3: PingPong Q&A's Question Details page wireframe.
{width=900 height=491}
Figure 4: PingPong Q&A's User Profile page wireframe.
Changes made to the first submission:
- Edited US112, added US223 and updated sitemap to match current structure.
- Edited wireframes layout.
GROUP2522, 07/10/2025
- Alexandre Ferreira, up202307780@up.pt
- Dinis Lima, up202304083@up.pt
- Raul Oliveira, up202303446@up.pt
- Simão Barbosa, up202306609@up.pt (editor)