LUÍS CABRAL
    • Create new note
    • Create a note from template
      • Sharing URL Link copied
      • /edit
      • View mode
        • Edit mode
        • View mode
        • Book mode
        • Slide mode
        Edit mode View mode Book mode Slide mode
      • Customize slides
      • Note Permission
      • Read
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Write
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Engagement control Commenting, Suggest edit, Emoji Reply
    • Invite by email
      Invitee

      This note has no invitees

    • Publish Note

      Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

      Your note will be visible on your profile and discoverable by anyone.
      Your note is now live.
      This note is visible on your profile and discoverable online.
      Everyone on the web can find and read all notes of this public team.
      See published notes
      Unpublish note
      Please check the box to agree to the Community Guidelines.
      View profile
    • Commenting
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
      • Everyone
    • Suggest edit
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
    • Emoji Reply
    • Enable
    • Versions and GitHub Sync
    • Note settings
    • Note Insights New
    • Engagement control
    • Make a copy
    • Transfer ownership
    • Delete this note
    • Save as template
    • Insert from template
    • Import from
      • Dropbox
      • Google Drive
      • Gist
      • Clipboard
    • Export to
      • Dropbox
      • Google Drive
      • Gist
    • Download
      • Markdown
      • HTML
      • Raw HTML
Menu Note settings Note Insights Versions and GitHub Sync Sharing URL Create Help
Create Create new note Create a note from template
Menu
Options
Engagement control Make a copy Transfer ownership Delete this note
Import from
Dropbox Google Drive Gist Clipboard
Export to
Dropbox Google Drive Gist
Download
Markdown HTML Raw HTML
Back
Sharing URL Link copied
/edit
View mode
  • Edit mode
  • View mode
  • Book mode
  • Slide mode
Edit mode View mode Book mode Slide mode
Customize slides
Note Permission
Read
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Write
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Engagement control Commenting, Suggest edit, Emoji Reply
  • Invite by email
    Invitee

    This note has no invitees

  • Publish Note

    Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

    Your note will be visible on your profile and discoverable by anyone.
    Your note is now live.
    This note is visible on your profile and discoverable online.
    Everyone on the web can find and read all notes of this public team.
    See published notes
    Unpublish note
    Please check the box to agree to the Community Guidelines.
    View profile
    Engagement control
    Commenting
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    • Everyone
    Suggest edit
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    Emoji Reply
    Enable
    Import from Dropbox Google Drive Gist Clipboard
       Owned this note    Owned this note      
    Published Linked with GitHub
    • Any changes
      Be notified of any changes
    • Mention me
      Be notified of mention me
    • Unsubscribe
    # PA: Product and Presentation # A9: Product The main goal of the AskIt project is the development of an information system with a web interface for users to exchange knowledge through questions and answers. AskIt can be used by everyone that would like to engage with others. Every post is reviewed by a group of Moderators that ensures a safer place for everyone. Askiters can interact with each other by answering other people's questions, or by getting together in communities, where they can post about their similar tastes, hobbies, or lives. **1. Installation** Source code: https://git.fe.up.pt/lbaw/lbaw2223/Lbaw22112/-/tree/release Docker command for running our application: ```docker run -it -p 8000:80 --name=lbaw22112 -e DB_DATABASE="lbaw22112" -e DB_SCHEMA="lbaw22112" -e DB_USERNAME="lbaw22112" -e DB_PASSWORD="egddzHSL" git.fe.up.pt:5050/lbaw/lbaw22112/lbaw22112 # Replace with your group's image name``` **2. Usage** URL to the product: http://lbaw22112.lbaw.fe.up.pt **2.1 Administration Credentials** | Username | Password | | -------- | -------- | | Alberto | a | **2.2 User Credentials** | Type | Username | Password | | -------- | -------- | -------- | | Basic account | Berto | b | | Moderator account | Alberto | a | **3. Application Help** On the navigation bar, there's two links that direct the user to the FAQ and Contacts pages. Inside the FAQ page, the user can find help with common problems like who can use Askit. For specific questions, we created the page Contacts that provides information of the creators and offers a direct way to talk to them. Since most features are pretty self-explanatory, we did not deem necessary to create a helping interface for most of them. **4. Input Validation** One of the most important validations on our project is the email inputed on the register form. This email has a specific format and it will show a warning if it does not agree to it. ![](https://i.imgur.com/gsxD8hw.png) Another client-side validation is present on the password input. It is mandatory that all passwords have at least 6 characters, otherwise a warning message will be shown and the input will not be validated. ![](https://i.imgur.com/N7nzF9J.png) Since there's no necessary format for creating a post, we decided that no validation was necessary for this, verifying only that the title of the created post could not be empty, only allowing the creation when there was some sort of character in it. When it comes to server-side input validation, in the search engine, we take the user's input and check it against the database to verify if the query submitted in fact exists in the server and, if so, return the desired results. ![](https://i.imgur.com/Upnqsd5.png) **5. Check Accessibility and Usability** Check Accessibility https://git.fe.up.pt/lbaw/lbaw2223/Lbaw22112/-/blob/desenvolvimento/Validation%20Results/Checklist%20de%20Acessibilidade.pdf Check Usability https://git.fe.up.pt/lbaw/lbaw2223/Lbaw22112/-/blob/desenvolvimento/Validation%20Results/Checklist%20de%20Usabilidade.pdf **6. HTML & CSS Validation** HTML results https://git.fe.up.pt/lbaw/lbaw2223/Lbaw22112/-/tree/desenvolvimento/Validation%20Results/HTML%20Results CSS Validation https://git.fe.up.pt/lbaw/lbaw2223/Lbaw22112/-/tree/desenvolvimento/Validation%20Results/CSS%20Results **7. Revisions to the Project** - Added user stories regarding communities - Added possibility to search for users - Switched like system to upvote/downvote system - Added notification tab for users - Vote on answers **8. Web Resources Specification** https://git.fe.up.pt/lbaw/lbaw2223/Lbaw22112/-/blob/main/docs/a9_openapi.yaml ```yaml openapi: 3.0.0 info: version: '1.0' title: 'AskIt Web API' description: 'Web Resources Specification (A9) for AskIt' servers: - url: http://lbaw.fe.up.pt externalDocs: description: Find more info here. url: https://git.fe.up.pt/lbaw/lbaw2223/Lbaw22112/-/wikis/EAP tags: - name: 'M01: Authentication and Individual Profile' - name: 'M02: Posts' - name: 'M03: Tags' - name: 'M04: Likes and Follows' - name: 'M05: User Administration and Static pages' - name: 'M06: Communities' paths: /login: get: operationId: R101 summary: 'R101: Login Form' description: 'Provide login form. Access: PUB' tags: - 'M01: Authentication and Individual Profile' responses: '200': description: 'Ok. Show Log-in UI' post: operationId: R102 summary: 'R102: Login Action' description: 'Processes the login form submission. Access: PUB' tags: - 'M01: Authentication and Individual Profile' requestBody: required: true content: application/x-www-form-urlencoded: schema: type: object properties: email: type: string password: type: string required: - email - password responses: '302': description: 'Redirect after processing the login credentials.' headers: Location: schema: type: string examples: 302Success: description: 'Successful authentication. Redirect to user profile.' value: '/profile/{id}' 302Error: description: 'Failed authentication. Redirect to login form.' value: '/login' /logout: post: operationId: R103 summary: 'R103: Logout Action' description: 'Logout the current authenticated user. Access: USR, ADM' tags: - 'M01: Authentication and Individual Profile' responses: '302': description: 'Redirect after processing logout.' headers: Location: schema: type: string examples: 302Success: description: 'Successful logout. Redirect to login form.' value: '/login' /register: get: operationId: R104 summary: 'R104: Register Form' description: 'Provide new user registration form. Access: PUB' tags: - 'M01: Authentication and Individual Profile' responses: '200': description: 'Ok. Show Sign-Up UI' post: operationId: R105 summary: 'R105: Register Action' description: 'Processes the new user registration form submission. Access: PUB' tags: - 'M01: Authentication and Individual Profile' requestBody: required: true content: application/x-www-form-urlencoded: schema: type: object properties: name: type: string email: type: string bio: type: string required: - email - password responses: '302': description: 'Redirect after processing the new user information.' headers: Location: schema: type: string examples: 302Success: description: 'Successful authentication. Redirect to user profile.' value: '/users/{id}' 302Failure: description: 'Failed authentication. Redirect to login form.' value: '/login' /profile/{id}: get: operationId: R106 summary: 'R106: View user profile' description: 'Show the individual user profile. Access: PUB' tags: - 'M01: Authentication and Individual Profile' parameters: - in: path name: id schema: type: integer required: true responses: '200': description: 'Ok. Show User Profile UI' /profile: get: operationId: R107 summary: 'R107: View current logged user profile' description: 'Show the individual user profile. Access: USR' tags: - 'M01: Authentication and Individual Profile' responses: '200': description: 'Ok. Show User Profile UI' /editProfile: get: operationId: R108 summary: 'R108: View edit profile page.' description: 'Show the individual user profile. Access: USR' tags: - 'M01: Authentication and Individual Profile' responses: '200': description: 'Ok. Show edit user profile UI' post: operationId: R109 summary: 'R109: Edit current logged user profile' description: 'Edit user profile. Access: OWN, ADM' tags: - 'M01: Authentication and Individual Profile' requestBody: required: true content: application/x-www-form-urlencoded: schema: type: object properties: name: type: string email: type: string userType: type: integer responses: '302': description: 'Redirect after editing the new user profile.' headers: Location: schema: type: string examples: 302Success: description: 'Edit successful. Redirect to user profile.' value: '/users/{id}' 302Failure: description: 'Failed to edit profile. Redirect to edit page with the error.' value: '/users/{id}' /profileEdited: get: operationId: R110 summary: 'R110: Profile successfully edited UI.' description: 'Profile successfully edited UI page. Access: USR' tags: - 'M01: Authentication and Individual Profile' responses: '200': description: 'Ok. Show User Profile UI' /home: get: operationId: R205 summary: 'R205: Home Page showing trending questions.' description: 'Home page. Access: PUB' tags: - 'M02: Posts' responses: '200': description: 'Ok. Show Home Page' /posts/{id}: get: operationId: R206 summary: 'R206: View post details' description: 'Show the post details page. Access: PUB' tags: - 'M02: Posts' parameters: - in: path name: id schema: type: integer required: true responses: '200': description: 'Ok. Show question details page.' delete: operationId: R209 summary: 'R209: Delete post given an ID' description: 'Delete post given an ID. Access: OWN, ADM' tags: - 'M02: Posts' parameters: - in: path name: id description: ID of the post schema: type: string required: true responses: '200': description: Success delete. /post/edit/{id}: post: operationId: R208 summary: 'R208: Edit question' description: 'Edit question (Edit property - 0/1). Access: OWN, ADM' tags: - 'M02: Posts' parameters: - in: path name: id description: ID of the post schema: type: string required: true requestBody: required: true content: application/x-www-form-urlencoded: schema: type: object properties: date: type: string score: type: integer content: type : string edit: type : integer required: - content - edit responses: '302': description: 'Redirect after processing the post.' headers: Location: schema: type: string examples: 302Success: description: 'Successful post. Redirect to question edited.' value: '/users/{id}' 302Error: description: 'Failed post. Redirect to post creating with errors.' value: '/postPage' /post/{type}/{question_id}: post: operationId: R211 summary: 'R211: Create question' description: 'Create question . Access: OWN, ADM' tags: - 'M02: Posts' parameters: - in: path name: question_id description: ID of the post schema: type: integer required: true - in: path name: type description: Type of the question schema: type: string required: true requestBody: required: true content: application/x-www-form-urlencoded: schema: type: object properties: date: type: string score: type: integer content: type : string edit: type : integer required: - content - edit responses: '302': description: 'Redirect after creating the post.' headers: Location: schema: type: string examples: 302Success: description: 'Successful post. Redirect to question edited.' value: '/users/{id}' 302Error: description: 'Failed post. Redirect to post creating with errors.' value: '/postPage' /post/update/{type}/{post_id}: post: operationId: R212 summary: 'R208: Edit question' description: 'Edit question (Edit property - 0/1). Access: OWN, ADM' tags: - 'M02: Posts' parameters: - in: path name: type description: Type of the post schema: type: string required: true - in: path name: post_id description: ID of the post schema: type: string required: true requestBody: required: true content: application/x-www-form-urlencoded: schema: type: object properties: date: type: string score: type: integer content: type : string edit: type : integer required: - content - edit responses: '302': description: 'Redirect after processing the post.' headers: Location: schema: type: string examples: 302Success: description: 'Successful post. Redirect to question edited.' value: '/users/{id}' 302Error: description: 'Failed post. Redirect to post creating with errors.' value: '/postPage' /score/{post_id}}: post: operationId: R401 summary: 'R401: Like/Dislike a post.' description: 'Like or Dislike a post given an ID. Access: USR' tags: - 'M04: Likes and Follows' parameters: - in: path name: post_id description: ID of the post schema: type: string required: true requestBody: required: true content: application/x-www-form-urlencoded: schema: type: object properties: id: type: integer eval: type: integer required: - id - eval responses: '302': description: 'Redirect after evaluation post.' headers: Location: schema: type: string examples: 302Success: description: 'Successful evaluation. Redirect to post page.' value: '/question/{id}' 302Error: description: 'Failed to evaluate. Redirect to post page.' value: '/question/{id}' /search: get: operationId: R201 summary: 'R202: Search Questions API' description: 'Searches for questions and returns the results as JSON. Access: PUB.' tags: - 'M02: Posts' parameters: - in: query name: query description: String to use for full-text search schema: type: string required: true - in: query name: item description: Tag of the questions schema: type: string required: false responses: '200': description: Success content: application/json: schema: type: array items: type: object properties: id: type: string score: type: integer content: type: string date: type: string example: - id: 1 score: 1 content: Can dogs bounce? date: "2011-10-12" - id: 2 score: 5 content: Can chicken bounce? date: "2015-11-10" /tags: get: operationId: R302 summary : 'R302: Tags page UI.' description: 'Page showing all available tags .' tags: - 'M03: Tags' responses: '200' : description : 'Ok. Show all available tags.' post: operationId: R310 summary: 'R10: Create tag.' description: 'Create a tag to be used later.' tags: - 'M03: Tags' requestBody: required: true content: application/x-www-form-urlencoded: schema: type: object properties: tag: type : string required: - tag responses: '200' : description : 'Ok. Tag created.' /tags/{id}: get: operationId: R303 summary : 'R303: Get the questions from a certain tag.' description: "Get the questions from a tag ID." tags: - "M03: Tags" parameters: - in: path name: id description: ID of the post schema: type: integer required: true responses: '200': description: Success content: application/json: schema: type: object properties: tags: type : array items : type : string id : type : integer example: - id: 1 tags: ["Animals", "Food"] delete: operationId: R305 summary: 'R304: Set the tag(s) to a question' description: 'Set the tag to a question. Access: OWN, ADM' tags: - 'M03: Tags' parameters: - in: path name: id description: ID of the post schema: type: integer required: true responses: '302': description: 'Redirect after deleting the tag.' headers: Location: schema: type: string examples: 302Success: description: 'Successful deleting tag. Redirect to question page.' value: '/question/{id}' 302Error: description: 'Failed to delete tag. Redirect to question page.' value: '/question/{id}' /api/users/{id}/manage_watch/tags: post: operationId: R402 summary: 'R402: Add a tag to follow.' description: 'Add a tag to follow an ID. Access: USR' tags: - 'M04: Likes and Follows' parameters: - in: path name: id description: ID of the post schema: type: integer required: true requestBody: required: true content: application/x-www-form-urlencoded: schema: type: object properties: user: type: integer required: - user responses: '302': description: 'Redirect after watching tag.' headers: Location: schema: type: string examples: 302Success: description: 'Successful follow tag. Redirect to post page.' value: '/question/{id}' 302Error: description: 'Failed to follow tag. Redirect to post page.' value: '/question/{id}' delete: operationId: R403 summary: 'R403: Unwatch tag.' description: 'Unwatch a tag from an id. Access: USR' tags: - 'M04: Likes and Follows' parameters: - in: path name: id description: ID of the post schema: type: integer required: true responses: '302': description: 'Redirect after deleting the tag.' headers: Location: schema: type: string examples: 302Success: description: 'Successful deleting tag. Redirect to question page.' value: '/question/{id}' 302Error: description: 'Failed to delete tag. Redirect to question page.' value: '/question/{id}' /notifications: delete: operationId: R420 summary: 'R420: Delete all notifications from the user.' description: 'Delete all notifications from the user. Access: USR' tags: - 'M04: Likes and Follows' responses: '302': description: 'Redirect after removing removing the notifications.' headers: Location: schema: type: string examples: 302Success: description: 'Successful removed notifications. Redirect to home page.' value: '/}' /notifications{id}: delete: operationId: R421 summary: 'R421: Delete a certain notification from an user.' description: 'Delete a certain notification id from an user. Access: USR' tags: - 'M04: Likes and Follows' parameters: - in: path name: id description: ID of the notification schema: type: integer required: true responses: '302': description: 'Redirect after removing removing the notification.' headers: Location: schema: type: string examples: 302Success: description: 'Successful removed notification. Redirect to home page.' value: '/}' /api/users/{id}/manage_ignore/tags: post: operationId: R308 summary: 'R308: Add a tag to ignore.' description: 'Add a tag to ignore from an ID. Access: USR' tags: - 'M03: Tags' parameters: - in: path name: id description: ID of the post schema: type: integer required: true requestBody: required: true content: application/x-www-form-urlencoded: schema: type: object properties: user: type: integer required: - user responses: '302': description: 'Redirect after iongoring tag.' headers: Location: schema: type: string examples: 302Success: description: 'Successful ignore tag. Redirect to post page.' value: '/question/{id}' 302Error: description: 'Failed to ignore tag. Redirect to post page.' value: '/question/{id}' delete: operationId: R309 summary: 'R309: Remove ignore a tag.' description: 'Remove ignore a tag from an id. Access: USR' tags: - 'M03: Tags' parameters: - in: path name: id description: ID of the post schema: type: integer required: true responses: '302': description: 'Redirect after removing ignore the tag.' headers: Location: schema: type: string examples: 302Success: description: 'Successful remove ignore tag. Redirect to question page.' value: '/question/{id}' 302Error: description: 'Successful remove ignore tag. Redirect to question page.' value: '/question/{id}' /api/users/{id}/manage_follow/communitites: post: operationId: R410 summary: 'R410: Follow a community.' description: 'Follow a community from an ID. Access: USR' tags: - 'M04: Likes and Follows' parameters: - in: path name: id description: ID of the post schema: type: integer required: true requestBody: required: true content: application/x-www-form-urlencoded: schema: type: object properties: user: type: integer required: - user responses: '302': description: 'Redirect after watching tag.' headers: Location: schema: type: string examples: 302Success: description: 'Successful follow tag. Redirect to post page.' value: '/question/{id}' 302Error: description: 'Failed to follow tag. Redirect to post page.' value: '/question/{id}' delete: operationId: R411 summary: 'R411: Remove community follow.' description: 'Remove community follow from an id. Access: USR' tags: - 'M04: Likes and Follows' parameters: - in: path name: id description: ID of the post schema: type: integer required: true responses: '302': description: 'Redirect after removing follow from community.' headers: Location: schema: type: string examples: 302Success: description: 'Successful removing follow from community. Redirect to home page.' value: '/' 302Error: description: 'Failed removing follow from community. Redirect to home page.' value: '/' /communities: get: operationId: R601 summary : 'R601: Get the list of all communities.' description: "Get the list of all communities." tags: - "M06: Communities" responses: '200': description: Success content: application/json: schema: type: object properties: tags: type : array items : type : string example: tags: ["Animals", "Food"] post: operationId: R602 summary: 'R602: Create new community.' description: 'Create a community. Access: USR' tags: - 'M06: Communities' requestBody: required: true content: application/x-www-form-urlencoded: schema: type: object properties: name: type: string required: - name responses: '302': description: 'Redirect after creating community.' headers: Location: schema: type: string examples: 302Success: description: 'Successful to create community. Redirect to home.' value: '/' 302Error: description: 'Failed to create community. Redirect to home.' value: '/' /communities/{id}: get: operationId: R603 summary : 'R603: Get the questions of a certain community.' description: "Get the questions of a certain communit id." tags: - "M06: Communities" parameters: - in: path name: id description: ID of the community schema: type: integer required: true responses: '200': description: Success content: application/json: schema: type: object properties: tags: type : array items : type : string example: tags: ["Animals", "Food"] delete: operationId: R604 summary: 'R604: Delete a community.' description: 'Create a community. Access: OWN' tags: - 'M06: Communities' parameters: - in: path name: id description: ID of the post schema: type: integer required: true responses: '302': description: 'Redirect after removing community.' headers: Location: schema: type: string examples: 302Success: description: 'Successful to remove community. Redirect to home.' value: '/' 302Error: description: 'Failed to remove community. Redirect to home.' value: '/' /admin: get: operationId: R501 summary: 'R501: Admin page.' description: 'Admin page. Access: ADM' tags: - 'M05: User Administration and Static pages' responses: '200': description: 'Ok. Show Post admin Page' /banid/{id}: delete: operationId: R502 summary: 'R502: Suspend/Ban User' description : 'Suspend/Ban user. Access: ADM' tags: - 'M05: User Administration and Static pages' parameters: - in: path name: id schema: type: integer required: true responses: '300': description: 'Ok. Redirect to admin Page' /removequestion: post: operationId : R503 summary: 'R503: Remove question.' description: 'Remove a certain question from an id. Access: ADM' tags: - 'M05: User Administration and Static pages' requestBody: required: true content: application/x-www-form-urlencoded: schema: type: object properties: id: type : integer required: - id responses: '300': description: 'Ok. Redirect to admin Page' /removeanswer: post: operationId : R504 summary: 'R504: Remove answer.' description: 'Remove a certain answer from an id. Access: ADM' tags: - 'M05: User Administration and Static pages' requestBody: required: true content: application/x-www-form-urlencoded: schema: type: object properties: id: type : integer required: - id responses: '300': description: 'Ok. Redirect to admin Page' /about: get: operationId: R505 summary: 'R505: About page.' description: 'About page. Access: PUB' tags: - 'M05: User Administration and Static pages' responses: '200': description: 'Ok. Show About Page' /faq: get: operationId: R506 summary: 'R506: FAQ page.' description: 'FAQ page. Access: PUB' tags: - 'M05: User Administration and Static pages' responses: '200': description: 'Ok. Show FAQ Page' /contacts: get: operationId: R507 summary: 'R507: Contacts page.' description: 'Contacts page. Access: PUB' tags: - 'M05: User Administration and Static pages' responses: '200': description: 'Ok. Show Contacts Page' ``` **9. Implementation Details** **9.1 Libraries Used** Besides Laravel (the mandatory framework), we didn't use any library or framework to enhance our project **9.2 User Stories** | US Identifier | Name | Module | Priority | Team Members | State | | -------- | -------- | -------- | -------- | -------- | -------- | | US15 | Ask questions | M02 | High | **Rui Andrade** | 100% | US16 | Comment | M02 | High | **Rui Andrade** | 100% | US17 | Remove comments | M02 | High | **José Rodrigues** | 100% | US05 | Access own Profile | M01 | High | **José Rodrigues** | 100% | US10 | Sign-up | M01 | High | **Luís Cabral** | 100% | US11 | Sign-in | M01 | High | **Luís Cabral** | 100% | US01 | Browse questions | M02 | High | **Luís Cabral** | 100% | US09 | Follow topics | M04 | High | **Bárbara Carvalho** | 100% | US08 | Block content | M04 | Medium | **Bárbara Carvalho** | 100% | US06 | Edit profile | M01 | Medium | **José Rodrigues** | 100% | US26 | Delete posts | M02 | High | **Rui Andrade** | 100% | US03 | Search topics | M03 | High | **Luís Cabral** | 100% | US28 | Browse Questions by Tags | M03 | Medium | **Luís Cabral**, Bárbara Carvalho | 100% | US02 | Access other profiles | M05 | High | **José Rodrigues** | 100% | US14 | Edit posts | M02 | High | **Rui Andrade** | 100% | US07 | Like posts | M04 | Medium | **Rui Andrade** | 100% | US29 | View my posts | M02 | High | **José Rodrigues** | 100% | US20 | Join communities | M06 | Medium | **Bárbara Carvalho** | 100% | US21 | Create communities | M06 | Medium | **Bárbara Carvalho** | 100% | US22 | Answer to question notification | M05 | High | **Bárbara Carvalho** | 100% | US23 | Vote on post notification | M05 | High | **Bárbara Carvalho** | 100% | US30 | Search users | M05 | Medium | **Luís Cabral** | 100% | US18 | Ban users | M05 | High | **José Rodrigues** | 50% | US24 | View top questions | M02 | Medium | **Rui Andrade** | 100% | US25 | View recent questions | M02 | Medium | **Rui Andrade** | 100% | US27 | Mark answer as correct | M02 | Medium | **Rui Andrade** | 100% | US04 | Consult FAQ | M05 | Low | **Luís Cabral** | 100% | US19 | Tag topics | M03 | Medium | | 0% | US12 | OAuth API Sign-up | M01 | Low | - | US13 | OAuth API Sign-up | M01| Low | - # A10: Presentation **1. Product Presentation** Askit is an information system for users to exchange knowledge through questions and answers. Users who have a particular question or want to help other users on subjects which they master can use this product to easily achieve their objectives. Through its search engine, various communities and tags system every last bit of information can be found or requested which makes sharing information much easier. URL to the product: http://lbaw22112.lbaw.fe.up.pt **2. Video presentation** Submitted in moodle **GROUP22112, 03/01/2023** * Luís Tiago Trindade Cabral, up202006464@edu.fe.up.pt * Bárbara Filipa da Silva Carvalho, up202004695@edu.fe.up.pt * Rui Brogueira Andrade, up202007539@edu.fe.up.pt * José Miguel Carvalho Rodrigues, up201809590@edu.fc.up.pt

    Import from clipboard

    Paste your markdown or webpage here...

    Advanced permission required

    Your current role can only read. Ask the system administrator to acquire write and comment permission.

    This team is disabled

    Sorry, this team is disabled. You can't edit this note.

    This note is locked

    Sorry, only owner can edit this note.

    Reach the limit

    Sorry, you've reached the max length this note can be.
    Please reduce the content or divide it to more notes, thank you!

    Import from Gist

    Import from Snippet

    or

    Export to Snippet

    Are you sure?

    Do you really want to delete this note?
    All users will lose their connection.

    Create a note from template

    Create a note from template

    Oops...
    This template has been removed or transferred.
    Upgrade
    All
    • All
    • Team
    No template.

    Create a template

    Upgrade

    Delete template

    Do you really want to delete this template?
    Turn this template into a regular note and keep its content, versions, and comments.

    This page need refresh

    You have an incompatible client version.
    Refresh to update.
    New version available!
    See releases notes here
    Refresh to enjoy new features.
    Your user state has changed.
    Refresh to load new user state.

    Sign in

    Forgot password

    or

    By clicking below, you agree to our terms of service.

    Sign in via Facebook Sign in via Twitter Sign in via GitHub Sign in via Dropbox Sign in with Wallet
    Wallet ( )
    Connect another wallet

    New to HackMD? Sign up

    Help

    • English
    • 中文
    • Français
    • Deutsch
    • 日本語
    • Español
    • Català
    • Ελληνικά
    • Português
    • italiano
    • Türkçe
    • Русский
    • Nederlands
    • hrvatski jezik
    • język polski
    • Українська
    • हिन्दी
    • svenska
    • Esperanto
    • dansk

    Documents

    Help & Tutorial

    How to use Book mode

    Slide Example

    API Docs

    Edit in VSCode

    Install browser extension

    Contacts

    Feedback

    Discord

    Send us email

    Resources

    Releases

    Pricing

    Blog

    Policy

    Terms

    Privacy

    Cheatsheet

    Syntax Example Reference
    # Header Header 基本排版
    - Unordered List
    • Unordered List
    1. Ordered List
    1. Ordered List
    - [ ] Todo List
    • Todo List
    > Blockquote
    Blockquote
    **Bold font** Bold font
    *Italics font* Italics font
    ~~Strikethrough~~ Strikethrough
    19^th^ 19th
    H~2~O H2O
    ++Inserted text++ Inserted text
    ==Marked text== Marked text
    [link text](https:// "title") Link
    ![image alt](https:// "title") Image
    `Code` Code 在筆記中貼入程式碼
    ```javascript
    var i = 0;
    ```
    var i = 0;
    :smile: :smile: Emoji list
    {%youtube youtube_id %} Externals
    $L^aT_eX$ LaTeX
    :::info
    This is a alert area.
    :::

    This is a alert area.

    Versions and GitHub Sync
    Get Full History Access

    • Edit version name
    • Delete

    revision author avatar     named on  

    More Less

    Note content is identical to the latest version.
    Compare
      Choose a version
      No search result
      Version not found
    Sign in to link this note to GitHub
    Learn more
    This note is not linked with GitHub
     

    Feedback

    Submission failed, please try again

    Thanks for your support.

    On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?

    Please give us some advice and help us improve HackMD.

     

    Thanks for your feedback

    Remove version name

    Do you want to remove this version name and description?

    Transfer ownership

    Transfer to
      Warning: is a public team. If you transfer note to this team, everyone on the web can find and read this note.

        Link with GitHub

        Please authorize HackMD on GitHub
        • Please sign in to GitHub and install the HackMD app on your GitHub repo.
        • HackMD links with GitHub through a GitHub App. You can choose which repo to install our App.
        Learn more  Sign in to GitHub

        Push the note to GitHub Push to GitHub Pull a file from GitHub

          Authorize again
         

        Choose which file to push to

        Select repo
        Refresh Authorize more repos
        Select branch
        Select file
        Select branch
        Choose version(s) to push
        • Save a new version and push
        • Choose from existing versions
        Include title and tags
        Available push count

        Pull from GitHub

         
        File from GitHub
        File from HackMD

        GitHub Link Settings

        File linked

        Linked by
        File path
        Last synced branch
        Available push count

        Danger Zone

        Unlink
        You will no longer receive notification when GitHub file changes after unlink.

        Syncing

        Push failed

        Push successfully