Skip to content
ivSaav edited this page Jun 9, 2021 · 13 revisions

PA: Product and Presentation

This project consists of an online auction platform for users to buy and sell all kinds of digital products, such as Games, Series & Movies, Software and others, through a bidding system.

A9: Product

Currently, most websites that provide auction services focus on physical items that must be transported from the seller to the buyer, which entails various complications such as creating false addresses to bypass shipping costs and using built-in or third-party messaging applications to transfer the item bought. Therefore we seek to explore this untapped market by creating a web platform to auction exclusively digital products.

Our platform provides a wide array of useful features for both users and administrators. We have implemented systems and workflows to facilitate tracking, saving, planning and creating auctions. User can intuitively rate and review each other to build their reputation on the website and allow other users to feel more safe in the platform. If a user has any doubts about an auction they can directly contact the seller through our platform using our live messaging service.

To facilitate the maintenance of the platform, we offer the tools required for a moderation team to manage user's permissions and to terminate any auctions that go against the terms of service users previously agreed upon.

The design developed is fluid and responsive, with usability in mind to prioritize the ease of use and the user experience in our website, be it through a smartphone, a tablet or a laptop.

1. Installation

Source code of the final version of the project: https://git.fe.up.pt/lbaw/lbaw2021/lbaw2112/-/tree/PA

docker-compose up && docker run -it -p 8000:80 -e DB_DATABASE="postgres" -e DB_USERNAME="postgres" -e DB_PASSWORD="pg!lol!2021" lbaw2112/lbaw2112

2. Usage

URL to the product: http://lbaw2112.lbaw-prod.fe.up.pt

2.1. Administration Credentials

Important: Administration login is hidden by default, accessed through this link: http://lbaw2112.lbaw-prod.fe.up.pt/admin/login

Username Password
iargo mosco
oivo saav
skelo gizzard
toilmo gacha

2.2. User Credentials

The password to all the user accounts in the population is 'zawarudo'.

Type Username E-mail Password
Basic account Jonathan_Joestar [email protected] zawarudo
Banned account Jesus [email protected] zawarudo

3. Application Help

We have tooltips around the website to help users understand better what the element means, for example, in the auction page we can hover on the colored circle to see the tooltip explaining the status of the auction.

That can be checked on the page of an auction.

There's also visual feedback on actions to help the user understand the status of the action, for example, in the settings page, there will be alerts to inform the server response to the user, that can be checked in the settings page given that you're logged in.

Check the following link to go to your profile page, you must be logged in.

We also implemented a FAQ page where the most general questions can be answered.

We also have an About page where more information about our site and its developers is provided.

4. Input Validation

4.1 HTML

  • Used "required" tag on every input field that was obligatory in each form.
  • Data types for form input fields.

Eg.: login.blade.php

<label for="inputEmail" class="sr-only float-start">Email/Username</label>
<input type="text" id="inputEmail" class="form-control" name="email" value="{{ old('email') }}" required>

<label for="inputPassword" class="sr-only float-start">Password</label>
<input type="password" id="inputPassword" class="form-control" name="password" required>
  • Integer limits and step values for integer input fields.
  • Converting all applicable characters to HTML entities using Blade's autoescape {{ }}.

4.2 Server-side

  • Created custom requests and constructed validation rules so as to validate all user input.

Eg.: CreateAuctionRequest.php

public function rules() {
    return [
        'title' => 'required|min:5|max:50',
        'description' => 'required|min:10|max:255',
        'start_date' => ['required', 'date', new AfterToday],
        'end_date' => 'required|date|after:start_date',
        'starting_bid' => 'required|integer',
        'increment_percent' => 'required_without:increment_fixed|numeric|integer|min:1|max:50',
        'increment_fixed' => 'required_without:increment_percent|numeric|integer|min:1',
        'category' => ['required', 'string', Rule::in(Auction::CATEGORY)],
        'nsfw' => 'nullable',
        'image' => 'required',
        'image.*' => 'required|image|mimes:jpeg,jpg,png'
    ];
}
  • Used Laravel's query builder as it doesn't allow SQL injections.
  • Avoided using user input data on "raw" queries as they don't have any native protection.
  • Added constraints to the database to prevent invalid operations.
  • Added default values to the database, wherever needed.
  • Used policies to check whether a user may perform an action or not.

Eg.: AuctionPolicy.php

public function bid(Member $member, Auction $auction) {
    return $member->sell_permission
        && !$member->banned
        && $auction->open
        && $member->id != $auction->seller_id
        && !$auction->holdsLatestBid($member->id);
}
  • Used middleware groups in routes to prevent unauthorized users to access certain parts of the website.

5. Check Accessibility and Usability

6. HTML & CSS Validation

6.1 HTML

Some reports on pages that have paginators have an aria-label warning, which falls out of our control because it is handled by Laravel.

6.2 CSS

This validator does not support variables or any of the primary webkits, resulting is several warnings relative to valid CSS code.

7. Revisions to the Project

  • Replaced top auctions with site banner
  • Introduced a real time messaging system
  • Merged auction details page and auction page into one

8. Implementation Details

8.1. Libraries Used

Throughout our application, 4 extra libraries were used:

  • AnchorJS - JavaScript utility for adding deep anchor links
    • Used in FAQ page
  • Pusher - Hosted API service which makes adding real-time data and functionality to web and mobile applications seamless
    • Used to make realtime messaging possible
  • Chart.js - JavaScript charting
    • Used to display bid history of an auction
  • noUiSlider - JavaScript Range Slider
    • Used in search results to improve the UX of controlling the price range and user rating

8.2 User Stories

US Identifier Name Module Priority Team Members State
US001 See Home Other Mandatory TS, EC, TB, IS 100%
US102 Sign-in Authentication and Individual Profile Mandatory IS, EC, TS 100%
US101 Sign-up Authentication and Individual Profile Mandatory IS, EC, TS 100%
US207 Sign-out Authentication and Individual Profile Mandatory IS, EC, TS 100%
US506 Sign-out (Admin) Administration Mandatory IS, EC, TS 100%
US005 View auction Auctions Mandatory TS, EC, IS 100%
US401 Create an auction Auctions Mandatory IS 100%
US404 Schedule auctions Auctions Mandatory IS 100%
US402 Set base price for auction Auctions Mandatory IS 100%
US301 Bid Auctions Mandatory TS 100%
US201 See Dashboard Authentication and Individual Profile Mandatory EC, TS 95%
US202 Edit profile Authentication and Individual Profile Mandatory TB 100%
US208 Consult bookmarked auctions Auctions Mandatory EC 100%
US209 Consult bidding history Auctions Mandatory EC 100%
US210 Consult auctions history Auctions Mandatory EC, IS 100%
US006 View user profile Users Mandatory TB, TS 100%
US205 Rate user Users Mandatory EC 100%
US002 Search by keywords Users and Auctions Mandatory IS, TS 100%
US003 Filter search results Users and Auctions Mandatory IS, TS 100%
US004 Sort search results Users and Auctions Important IS, TS 100%
US203 Report user Users Mandatory TB 90%
US204 Report auction Auctions Mandatory EC, TS 100%
US012 View auction bidding history Auctions Mandatory TS, EC 100%
US303 Bookmark add Auctions Important TS 100%
US304 Bookmark remove Auctions Important TS 100%
US403 Cancel auction Auctions Mandatory IS, EC 0%
US213 Follow User Users Important TS 100%
US214 Unfollow User Users Important TS 100%
US013 Send message Users Important TS, EC 100%
US014 Receive message Users Important TS, EC 100%
US215 Consult notifications Authentication and Individual Profile Important EC, IS, TS 100%
US302 Notify outbid Auctions Important EC, TS 100%
US305 Notify auction opening Auctions Important EC, TS 100%
US406 Edit auction Authentication and Individual Profile Important EC, IS, TS 100%
US206 Delete account Authentication and Individual Profile Mandatory TB 100%
US011 View top auctions Other - - -
US405 Get notification about the auctions I created Auctions Important EC, TS 0%
US501 Restrict user Administration Mandatory IS 100%
US502 Unrestrict user Administration Mandatory IS 100%
US503 Ban user Administration Mandatory IS 100%
US504 Unban user Administration Mandatory IS 100%
US507 Check reported auctions Administration Important IS 100%
US508 Check reported users Administration Important IS 100%
US505 Terminate auction Administration Mandatory IS 100%
US216 Filter inappropriate auctions Auctions Important TS, IS 100%
US007 See About Other Important TS 100%
US008 See Contact Other Important TS 100%
US010 See FAQ Other Important TS 100%
US211 Consult personal statistics Authentication and Individual Profile Optional TS, TB 0%
US212 Consult recently visited auctions Auctions Optional TB 0%
US103 OAuth Sign-up Authentication and Individual Profile Optional EC 100%
US104 OAuth Sign-in Authentication and Individual Profile Optional EC 100%
US009 See statistics Other Optional TS 0%
US217 Consult today's auctions Auctions Optional TS 100%

Note: US0013, US0014 and US217 are new User stories.


A10: Presentation

This artefact (A10) provides a presentation of our product and its main features.

1. Product presentation

The purpose of this project was to develop a web application for an online auction system, called Trade-a-Bid.

Some our main features include creating and bidding on auctions, bookmarking them, checking relevant information about them, search for users and auctions, consult a user's profile, follow them, contact them through a messaging system and consult our notifications.

URL to the product: http://lbaw2112.lbaw-prod.fe.up.pt

2. Video presentation

Video screenshot

URL to the video: https://drive.google.com/file/d/1Kgi2tDyDU2JAhm6ZieTUtu2zNeh3yfcs

3. Known bugs

  • Real time messages only work locally as we couldn't configure the Pusher in the production server.
  • Email verification and password recovery only work locally because the openssl module requires secure connections which the production server does not provide.
  • On user registration a server error is shown because of the afformentioned problem. The registration works though and the user can then login after signing up.
  • We forgot to specify one route in the homepage's frontend.
  • We forgot to check for terminated status when displaying an auction. In the cases where an administrator forces the closing of an auction.

Revision history

Changes made to the first submission:

  • We only added/changed 3 lines after the final deadline because our production image wasn't working due to minor errors. After having fixed this problems we pushed the new image which worked as intended.

GROUP2112, 09/06/2021