I'm a Front-end developer from Sร i Gรฒn, Vietnam, currently living in Toronto, Canada.
๐ Checkout my personal website: https://andrewnt.dev
๐ง Contact me: [email protected]
๐ Let's connect: https://www.linkedin.com/in/andrewnt219/
Home Page: https://dev-prj666-bookfair.vercel.app/
I'm a Front-end developer from Sร i Gรฒn, Vietnam, currently living in Toronto, Canada.
๐ Checkout my personal website: https://andrewnt.dev
๐ง Contact me: [email protected]
๐ Let's connect: https://www.linkedin.com/in/andrewnt219/
User Story
As a user I want to recover a forgotten password in order to access the system
Description
A password recovery system will be implemented using Firebase's Drop-in authentication solution which can be found at firebase.google.com/docs/auth. A form will be provided for the user to enter their email address. An email with the forgotten password will be sent to the email, or the user will be informed by a warning that the email is not registered to any account.
Acceptance Criteria
Users should be able to enter an email into a password recovery form and submit it
Invalid emails should result in an error message
Upon submission, users should recieve an email with the forgotten password
Testing
Test user accounts will be used and the following tests will be made:
valid email
invalid email
User Story
As a user I want to log out of my account in order to prevent unauthorized access to my account
Description
A log out system will be implemented using TypeScript. A logout button will be provided for the user to log out of their current session. After the session is ended, the user will no longer be logged in and they will be unable to access pages that require authentication.
Acceptance Criteria
Users should be able to log out of the system using the logout button
Upon logout, users should be redirected to the home page
A successful logout should persist across different pages
Testing
Test user accounts will be used and the following tests will be made:
log out of account
log out and deny user access to secure pages without authentication
User Story
As a user I want to display previous transactions in order to see all my transaction history
Description
A display previous transaction history system will be implemented using TypeScript, and firestore database. A transaction history button will redirect the user to a transaction history page that lists previous transaction periods and associated costs.
Acceptance Criteria
Users can enter the previous transactions page
Users can narrow down a transaction timeframe to a certain month
Testing
Test user accounts will be used and the following tests will be made:
display previous transactions over last 30 days
display previous transactions over last 60 days
display previous transactions over last 90 days
User Story
A buyer wants to see if the seller has any violations in the past like not sending product on time or a damaged product.
Description
A Stat will be made which will keep track of the violations made by the buyer in the past and it will be public to the users of the website
Acceptance Criteria
Violations are kept a record of
Violations are includes in the stats
Users can see the violations
Testing
Test listings will be used and the following tests will be made:
Users can see the violations
Violations are a part of the stats.
User Story
As a user I want to be notified about any alerts about changes made to account
Description
A listing search system will be implemented using TypeScript and Firestore. The users are shown a list of listings populated from the Firestore database. A field will be provided to users with a search button. After searching the Firestore database will be queried for listings that match the entered field or an option for alerts will be selected. If listing not found, a receive alert button will be provided where user can add id, title, tags that they want to receive emails about.
Acceptance Criteria
User sent email regarding match in listing query alerts
User notified upon login about matches in listing query alerts
Testing
Test user accounts will be used and the following tests will be made:
User able to add id, tags, title on what to be alerted for
user email alert received
user email alert not received
User Story
As a user, I don't want to see bad language used in the marketplace. Therefore, the system should prevent users from entering bad words.
Description
Add validation on the backend to search for bad words from user's input. Send back an error if any bad words are found.
Acceptance Criteria
Users cannot create a profile with bad words.
Users cannot create a listing contains any bad words.
Testing
Go to user's profile and update the profile with bad words. The system should display an error and does not save the updated profile.
Create a new listing that contains one or more bad words. The system should display an error and does not create the listing.
User Story
As a user I want to search by tag/search term in order to find listings relevant to me
Description
A listing search system will be implemented using TypeScript and Firestore. A field will be provided to users with a search button. After searching the Firestore database will be queried for listings that match the entered field which are then returned and used to populate a list of listings.
Acceptance Criteria
Users can search using tags
Users can search using search terms
Returned listings are relevant to the entered search field
Testing
Test listings will be used and the following tests will be made:
Search for term relevant to ~50% of listings
Search for term relevant to ~10% of listings
Search for term relevant to 0% of listings
Search using tag
Search using empty field
User Story
As a user, I want to be able to see all transactions (not done) from a listing.
Description
Transactions store the listingId
so they can be queried inside listing's detail.
Acceptance Criteria
Transactions are queried using listingId
Only show transactions belong to the current listing
Testing
Log in as user Andrew and go to one of Anho's listings. Click contact to notify Anho. Log in as user Anho and go to the contacted listing. Anho should see a transaction from Andrew is shown.
User Story
As a user I want to test and release in order to make sure everything is working
Description
Tests and release will be done using TypeScript and Firebase-Firestore. The users will be able to test and release updates and fix bugs in order to ensure project is working properly and up to date.
Acceptance Criteria
Testings ensure that everything works properly
Releases are up to date and users are able able to use the changes
Testing
Test listings will be used and the following tests will be made:
Correct tests and updates are performed
All releases are correct and properly fixed
User Story
As a user I want to delete my account in order to delete records of my private information
Description
An account deletion system will be implemented using Firebase's Drop-in authentication solution which can be found at firebase.google.com/docs/auth. A delete account button will be provided for the user on their user profile followed by a confirm deletion warning. A user will either be notified of account deletion or the process will be cancelled upon cancellation.
Acceptance Criteria
Users can delete their accounts
Users are asked to confirm their account deletion
Users are logged out upon account deletion
Users are unable to login upon account deletion
Users should be redirected to the homepage on account deletion
Testing
create and delete an account
attempt to log into a deleted account
User Story
As a seller I want to be able to remove listings incase of the product being sold or not being available anymore
Description
A page will be implemented using typescript and fire store. where the sellers will be able to go on their listing and delete it
Acceptance Criteria
Seller can delete the listing
Listing is removed from our database
listing doesn't show up on searches
Testing
Test listings will be used and the following tests will be made:
Listing is removed from our database
Listing dose not show up on searches
User Story
As a user, I want to see all the alerts that I have created
Description
Alerts are stored inside database. When authenticated users navigate to /user/alerts, they will only see their created alerts.
Acceptance Criteria
The list shows on-going alerts
Alerts show their search term
Alerts show when they are created
Testing
Create an alert and it should show up inside the dashboard
Create an alert from account Test-2 and alert should not show up in Test-1 dashboard
User Story
As a user I want to be able to sign up in order to authenticate myself
Description
A registration system will be implemented using Firebase's Drop-in authentication solution which can be found at firebase.google.com/docs/auth. Provide the user with a form that accepts email, password, and password confirmation. On submission the credentials will be sent to the Firebase Authentication SDK which will verify and return a response. That response will be passed onto the user which will either notify the user of account creation or give a warning message that the registration was invalid.
Acceptance Criteria
Users can sign up new accounts
Account creation should be restricted to academic emails
Users accounts should not be made and users should be sent a warning message if registration fails
Users should be asked to confirm their email using a confirmation link sent to the address
Testing
Account creation attempts will be made with:
correct email and password
correct email but incorrect password confirmation
non-school email domain
email that is already being used
User Story
As a seller i want to be alerted whenever a buyer looks at my listing or makes a bid for it.
Description
An alert will be sent to the seller using typescript and firestone. Whenever a buyer looks at a certain listing or makes a bid for it the bid will be added to the database and an alert will be sent to the seller and he will be notified.
Acceptance Criteria
The buyer receives an alert
The buyer is able to see who looked at the product and can catch up with the buyer
Testing
Test listings will be used and the following tests will be made:
Look at a listing and check if an alert is sent
The seller is notified about the buyers name and bid.
User Story
User will be able to review the transactions before confirming the purchase.
Description
A page will be generated which will display the products chosen and the total price of the products.
Acceptance Criteria
A page will be generated with the products in the cart
The page will have the total cost of the product.
Testing
Test listings will be used and the following tests will be made:
Page includes the products
Page includes the total cost
User Story
As a user I want to display active listings in order to see all potential listings
Description
A listing search system will be implemented using TypeScript and Firestore. A field will be provided to users with a search button. After searching the Firestore database will be displaying all active listings that are posted across by all active users
Acceptance Criteria
Users can see all active listings
Returned listings show any active listings
Testing
Test listings will be used and the following tests will be made:
List shows all active listings
No listing is displayed
User Story
As a user I want to activate an account that has been previously deactivated
Description
An account activation system will be implemented using Firebase's Drop-in authentication solution which can be found at firebase.google.com/docs/auth. An activate account button will be provided for the user to activate the deactivated user profile followed by a confirm warning. The affected user will either be notified of account activation via email about activation
Acceptance Criteria
Users can activate a deactivate account
Users are asked to confirm their account activation
Affected Users are able to log in
Users profile changes should update and persist on different pages
Testing
Test user accounts will be used and the following tests will be made:
Activate an account that was deactivated
confirm email sent to user that account activated
attempt to login enabled
User Story
As a system admin, I want to be able to create my own admin account for moderator purposes.
Description
Admin will go through creating accounts like a normal user, but later on is assigned as admin role from database.
Acceptance Criteria
Admin can register an account
Admin can login with created account
Admin account is stored in database
Admin account is assigned "admin" role
Testing
Successfully register as an admin account
Successfully login as an admin account
Is able to go to admin dashboard
User Story
As a user I want to sign in in order to access the system.
Description
An authentication system will be implemented using Firebase's Drop-in authentication solution which can be found at firebase.google.com/docs/auth . This will be a full-stack implementation. Provide the user with a form that accepts login credentials and a submission button. On submission the credentials will be sent to the Firebase Authentication SDK which will verify and return a response. That response will be passed onto the user which will either grant them access or give a warning message that the credentials were incorrect.
Acceptance Criteria
Users can log in using their correct credentials
Users should be denied access and sent a warning message when using incorrect credentials
Users should be redirected to the homepage on login
Users should maintain their session on different pages
Testing
Test user accounts will be used and the following tests will be made:
correct credentials
correct email and incorrect password
incorrect email and correct password
deny user access to secure pages without authentication
ensuring session persists while navigating throughout site
User Story
As a stakeholder, I want to be able to run ads on the website to generate extra revenue.
Description
Integrating Google Ads into the website and show its on sidebar or topbar.
Acceptance Criteria
Ads don't cause extra Cumulative Layout Shift in UX
Ads are visible to all visitors
Ads are managed from Google Adsense
Testing
Visit the website to see ads.
Go to Google Adsense to manage ads.
User Story
As a user I want to be able to create listings for products i want to sell.
Description
A page will be implemented using typescript and fire store. where users will be able to give description and add pictures for buyers. The listing will be saved on our database and posted later on our website and users will be able to see and search for the listing.
Acceptance Criteria
Users can add a name
Users can add a picture
Users can add a description
Testing
Test listings will be used and the following tests will be made:
Listing is added
Listing contains proper information
User Story
As a user I want to create a profile in order to personalize my user profile.
Description
A profile creation system will be implemented using TypeScript. Provide the user with a form that accepts profile image submission, name, and phone number. Use in-form verification for the name and phone number. Profile image should be verified to be atleast 180px on each dimension, at most 1200px on each dimensions, and a max file size of 10mb. On submission the form fields will be verified and used to update the user profile in the database. The user will be notified if the profile creation was successful or warned if there were any errors.
Acceptance Criteria
Users can change their profile image
Users can change their name
Users can change their biography
Users profile changes should update and persist on different pages
Testing
Test user accounts will be used and the following tests will be made:
change profile image with valid image
change profile image with invalid image
change name with valid name
change name with invalid name
change phone number with valid biography
change phone number with invalid biography
User Story
As a user I want to see the listings in order to purchase a textbook/school supplies
Description
Listings will be displayed using TypeScript and Firebase-Firestore. The users are shown a list of listings populated from the Firestore database. Users will be able to scroll through the list of listings and click listings to view the listing page
Acceptance Criteria
Listings within the list show a preview of the image, description, and price
Users are shown listings up to the page maximum
Users can scroll through pages of listings to view listings past the page maximum
Users can click on listings to navigate to the individual listing page
Testing
Test listings will be used and the following tests will be made:
View initial list of listings
View all pages of listings
View individual listing within list
User Story
As a user I want to promote my listing in order to increase user engagement
Description
A listing promotion system will be implemented using TypeScript and Stripe. A promote listing button will redirect the user to a promote listing page that lists possible promotion periods and associated costs. After a period is selected the user is redirected to stripe to provide payment. After payment is made the user is given a receipt of payment and redirected to a success page that shows promotion details.
Acceptance Criteria
Users can enter the promotion page
Users can select a promotion and be redirected to Stripe for payment
Users are redirected to a success page upon successful payment
Users listing is promoted upon successful payment
Testing
Test user accounts will be used and the following tests will be made:
promote listing for 3 days
promote listing for 5 days
promote listing for 7 days
cancel payment process
User Story
As an admin, I want to be able to accept a reported violation
Description
Admin can accept the violation as eligible to remove it from the marketplace and notify the seller.
Acceptance Criteria
Violation's status changes to "accepted"
Violation can no longer be edited
Violated listing is removed from the marketplace
Violated seller is notified by email
Testing
Mark a violation as accepted and the violation should be moved to the resolved list. The violated listing is removed from search and the violated seller is notified by email.
User Story
User wants to see more details about the violations to get a better understanding
Description
User can see more about the violations. A page will be created which includes more details about the violations
Acceptance Criteria
User can see the details about the violations
Testing
Extra details about the violations are available
User Story
User can edit listings that they have already posted to change description,image or name.
Description
Listings can edited once the edit button is selected. The page will be made using typescript and will allow the user to change the description, image or name.
Acceptance Criteria
Listing will be changed
Listing is updated on the database
Image, description and name can be changed
Testing
Test listings will be used and the following tests will be made:
Listing is changed
Appropriate things are changed
User Story
As a user I want to filter by course/name in order to find listings relevant to me
Description
A filter system will be implemented using TypeScript. When viewing a list of listings, users will be provided with a field to input a filter term. The listings will be compared to the filter term and matching listings will be used to populate the new updated list of listings.
Acceptance Criteria
Users can filter by course
Users can filter by name
Only relevant listings are returned
Testing
Test listings will be used and the following tests will be made:
Apply course filter
Apply name filter
Apply filter relevant to ~50% of listings
Apply filter relevant to ~10% of listings
Apply filter relevant to 0% of listings
User Story
As an admin, I want to be able to reject a reported violation
Description
Admin can reject the violation as rejected and nothing happens to the violated listing.
Acceptance Criteria
Violation's status changes to "rejected"
Violation can still be edited by the admin who has modified it
Violated listing is NOT removed from the marketplace
Testing
Mark a violation as rejected and the violation should only be moved to the resolved list.
User Story
As a user, I want to be able to stop receiving alerts from a search term
Description
The dashboard have all the navigations to other admin panels and can only be accessed by an admin account
Acceptance Criteria
The user no longer be notified about the deleted alerts
The deleted alerts don't show inside alerts dashboard
Testing
Successfully delete a created alert
Should not be able to delete delete a non-exist alert
Should not be able to delete other users' alerts
User Story
As a user I want to generate listing stats to see how many people are listing items
Description
Listings will be displayed using Firebase-Firestore. The users are shown a list of listings populated from the Firestore database. Users will be able to monitor the amount of usage and listings posted.
Acceptance Criteria
Listings seen restricted to admin
Users can see timeframe of listings posted
Users can scroll through to various timeframes
Testing
Test listings will be used and the following tests will be made:
View initial amount of listings created
View all amount of listings created
View listings created by timeframe
User Story
As a user, I want to be able to change my password for security purposes (eg. leaking)
Description
Add UI to change password right inside user's profile. Backend will verify authentication (user is logged in) and authorization (user can only change their account's passwords) of the request and automatically update if the request is valid.
Acceptance Criteria
Users can log in with new password
Users can change password by filling in password change's form
Users can change password as many time as they want
Testing
Go to user' profile and change password. Logout and try logging in again with the new password. Logging in with new password should be successful.
User Story
As a user I want to update the user profile to change profile as needed
Description
A profile update will be implemented using Firebase's Drop-in authentication solution which can be found at firebase.google.com/docs/auth. A form will be provided for the user to update their profile. A confirmation will appear in order for user to confirm they want to update the profile
Acceptance Criteria
Users should be able to update their profile
Users should be able to confirm profile update or cancel otherwise
Upon submission, user profile should be updated
Testing
Test user accounts will be used and the following tests will be made:
user profile updates
user profile not changed
User Story
As a user I want to deactivate an account in case of possible infringement or user alert raised
Description
An account deactivation system will be implemented using Firebase's Drop-in authentication solution which can be found at firebase.google.com/docs/auth. A deactivate account button will be provided for the user followed by a confirm deactivation warning. The deactivated user will be notified of account deactivation via email
Acceptance Criteria
Users can deactivate an account
Users are asked to confirm their account deactivation
Affected users are logged out upon account deactivation
Users are unable to login upon account deactivation
Affected user should receive email about account deactivation
Testing
create and deactivate an account
attempt to log in denied in a deactivated account
confirm email sent to deactivated account
User Story
As an admin, I want to have a dashboard to oversee the marketplace
Description
The dashboard have all the navigations to other admin panels and can only be accessed by an admin account
Acceptance Criteria
Dashboard shows admin profile
Dashboard has navigation tiles to other admin routes
Dashboard can only be accessed by an admin account
Testing
Dashboard successfully shows the profile of authenticated admin
Dashboard redirects unauthorized users to sign in page
Dashboard redirects unauthenticated users to sign in page
User Story
As a user, I want to see other's user rating to decide if they are trustworthy.
Description
Collect all rated reviews from a user's sold listings and calculate rating on scale of 0 to 5. Show the rating on their profiles.
Acceptance Criteria
User's rating is correctly calculated from reviews
User's rating show on scale of 1 to 5
User's rating is visible to other users
User's rating is updated on new rating added
Testing
Rate a review belong to the seller and see the seller's rating is changed accordingly
Rate a review belong to seller B and see the seller A's rating is not changed
See seller A's rating from user B account
See seller's rating at 0
User Story
As a user I want to see other users stats such as if they have bought something or are selling something
Description
A page will be developer using typescript and firestone. The page will display the users statistics including what they have bought or sold.
Acceptance Criteria
The page includes appropriate information
Testing
Test listings will be used and the following tests will be made:
Users can click on another user and see their stats
User Story
As a user I want to purchase slots in order to add more listings slots in my account
Description
A purchase slots system will be implemented using TypeScript, firestore database and Stripe. A purchase slots button will redirect the user to a purchase slots page that lists amount of slots purchaseable and associated costs. After an amount is selected the user is redirected to stripe to provide payment. After payment is made the user is given a receipt of payment and redirected to a success page that shows updated profile with added slots.
Acceptance Criteria
Users can enter the purchase slots page
Users can select to purchase slots and be redirected to Stripe for payment
Users are redirected to a success page upon successful payment
Users listing is updated with additional slots upon successful payment
Testing
Test user accounts will be used and the following tests will be made:
user listings slots increase 1 slot
user listings increase 3 slots
user listings increase 5 slots
cancel payment process
User Story
As an admin, I want to be able to see list for activated users and list for deactvated users
Description
Admin can go to /admin/users to see a list of activated users with overview of users' displayname and a deactivate button. List of deactivated users includes users' displayname, the reason for deactivation, the admin who deactivated, and the deactivation time.
Acceptance Criteria
Users are correctly divided into activated or deactivated list
Testing
Deactivate a user and see the account is moved into deactivated list
Activate a user and see the account is moved into activated list
User Story
As a user, I want my payment and credit cards to be securely handled by Stripe.
Description
Payment's amount is send to Stripe for billing. Upon successfully paid, the user is redirected back to Bookfair and the transaction is stored inside db.
Acceptance Criteria
Users are redirected to Stripe for billing
Stripe charges the correct amount
Users are redirected back to Bookfair after billing
Payments are stored in db
Users get what they have paid for
Testing
Go purchase more slots for listings. Enter tested credit card via Stripe. Got charged and redirected back to Bookfair. User's profile shows slots are increased.
User Story
As a user, I want the system to only allow users to create accounts with school email (@myseneca.ca).
Description
Add validation to backend to throw an error on non-school email. Add the same validation to frontend to improve UX
Acceptance Criteria
Use can register with seneca email
User cannot register with non-seneca email
Testing
Register a new account with seneca email. The account should be created and saved successfully.
Register a new account with non-seneca email. The UI should prompt an error saying only seneca emails are allowed
User Story
Users will get alerts if they select a product that they want news ok, if it's available or another option comes up
Description
An alert will be created using typescript and database. Once the user selects a product that he is interested in, the server will send an alert once a same product or product like that is available
Acceptance Criteria
Alerts are being sent once that product is available
User can select a product to be interested in.
Testing
Test listings will be used and the following tests will be made:
Users are sent alerts when they are interested
User can see the alerts
User Story
As a user, I want to see other profiles than my own.
Description
Implemented using Firestore. Profiles are fetched from the database with userId as the primary key. The userId comes from route /users/:userId.
Acceptance Criteria
Users can see the names of other users.
Users can see the biographies of other users.
Users can see the avatar of other users.
Users can see the ratings of other users.
Testing
Users can see other users without logging in
Users can see other users after logging in
Users see an error page if viewing a non-exist profile
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.