(Developer: Ana Runje)
- Project Goals
- Web Marketing
- User Experience
- Design
- Technologies Used
- Features
- Testing and validation
- Bugs
- Deployment
- Credits
- Acknowledgments
BookHideout is a e-commerce web app. Users can shop for books on the page.
- Buying books
- Providing a platform for users to buy books
As Facebook is be a staple in any social media marketing strategy. A Facebook Business Page was created for my site and the facebook social link on the footer will bring a user directly here.
Mailchimp email marketing was used generate an email signup form for the footer. This free service allows the site owner to manage, run and analyse the success of their newsletter marketing campaign by following the simple steps on the mailchimp site to generate an email form.
In order to improve the sites search engine ranking two important files were added to the project :
A sitemap.xml file This file was added to help speed up content discovery for search engines when they crawl and index the web applications. A robots.txt file This fil was added to acknowledge that search engines are allowed on the site and that they may have free access to it. A robots.txt file is a simple text file that tells search engines where they are not allowed to go on a website. It lists out any folders or files that will not be crawled or indexed by search engine spiders.
- people looking to buy books
- A simple and intuitive navigation system
- Quick and easy to use
- Links and functions that work as expected
- Good presentation and a visually appealing design regardless of screen size
- Options for superusers to create, view, edit and delete new products and sales
- Accessibility
- As a shopper I want to be able to see a list of products so that I can find something to purchase
- As a shopper I want to be able to view products by category so that I can quickly find products I'm interested in, without having to go through all products
- As a shopper I want to be able to view individual products so that I can see all the information available about this product
- As a shopper I want to be able to quickly identify sales so that I can save on products I want to purchase
- As a shopper I want to be able to easily see how much the total of my shopping cart is so that I can keep track of my spending
- As a shopper I want to be able to filter products so that I can find what I'm looking for more easily
- As a shopper I want to be able to sort products so that I can find the best priced or best-rated product or sort products by name
- As a shopper I want to be able to search for a product by name, description, or ISBN so that I can find a specific product
- As a shopper I want to be able to see a search summary so that I can decide if my search query was a good one and if the product I want is available
- As a shopper I want to be able to select the quantity of a product so that I can easily add multiples of the same product to my shopping cart
- As a shopper I want to be able to view my cart so that I can see all the products I'm about to purchase and the total cost of them
- As a shopper I want to be able to change the quantity or remove items from the cart so that I can make changes to my purchase before checkout
- As a shopper I want to be able to enter my shipping and payment details so that I can quickly and securely complete my purchase
- As a shopper I want to be able to see an order confirmation after checkout so that I can make sure my purchase was successful and without any mistakes
- As a shopper I want to be able to receive a confirmation email after checking out so that I can keep the confirmation of what I've purchased for my records
- As a site user I want to be able to easily navigate the site so that I can easily find what I'm looking for
- As a site user I want to be able to register for an account so that I can have a personal account and can view a personal profile
- As a site user I want to be able to login or logout of my personal account so that I can access my personal information securely
- As a site user I want to be able to recover my password so that I can access my account if I forget my password
- As a site user I want to be able to receive a confirmation email after registering an account so that I can verify my account registration was successful
- As a site user I want to be able to access my user profile so that I can view my order history, and save my payment and shipping information
- As a site user I want to be able to edit the information in my user profile so that I can keep my shipping and payment information up to date
- As a store owner I want to be able to add a product so that I can add new items to the store when needed
- As a store owner I want to be able to update product information so that I can change prices, descriptions and other product information
- As a store owner I want to be able to delete products so that I can remove products from the store that are no longer available
- As a shopper I want to be able to see a homepage that clearly shows the purpose of the site so that I can decide whether to shop here
- As a shopper I want to be able to feel my personal and payment information are safe and secure so that I can confidently provide the information needed to complete a purchase
- As a store owner I want to be able to create sales so that I can offer sales to customers
- As a store owner I want to be able to edit sales so that I can edit a sale if there is a mistake in it
- As a store owner I want to be able to delete sales so that I can remove past sales or sales that I changed my mind about
- As a store owner I want to be able see all sales created so that I can plan for future sales
The webpage was designed to be simple, clean and modern looking
The page is structured in a user-friendly and easy-to-learn way. Upon arriving at the website the user sees the home page, with a call to action. The website consists of 16 separate pages:
- Home page
- All products page
- Product details page
- Add product page
- Edit product page
- Add sale page
- Edit sale page
- Bag page
- Checkout page
- Checkout success page
- Profile page
- Login page
- Sign up page
- Logout page
- Manage sales page
- 404 page
- HTML
- CSS
- JavaScript
- Python
- Django 3.2.8
- Django supporting libraries:
- allauth for authentication, registration, login and logout functionality
- gunicorn as the server for Heroku
- psycopg2 as an adaptor for Python and PostgreSQL databases
- dj-database to parse the database URL from the environment variables in Heroku
- boto3 for aws s3 storage
- stripe as a payment provider
- crispy-forms to style forms with Bootstrap 4
- Bootstrap 4
- Fontawesome
- aws
- Heroku Postgres
- Git
- GitHub
- Gitpod
- Balsamiq
- Favicon.io to create the favicon
- JSHint
- Lighthouse
- W3C Markup validation service
- W3C Jigsaw CSS validation service
- WAVE WebAIM web accessibility evaluation tool
- flake8 to check for errors in python code
- Techsini Multi Device Website Mockup Generator
- Heroku Cloud Application Platform
The site consists of 16 pages and 30 features
- Call to action (shop now button)
- Navigation bar
- Newsletter sign-up form
- Search bar
- Lower navbar for filtering and sorting items
- Product details page
- All products page
- Sort by selection box
- Product details page
- Add to basket
- Quantity input for items
- Checkout form
- Shopping bag overview
- Save delivery information
- Bag preview
- Action messages to the user
- Order summary
- Checkout success summary
- Account sign-up form
- Registration confirmation email
- Profile page
- Update delivery information
- Order history
- Product management
- Add book form
- Edit book form
- Delete book
- Sales management
- Add sale form
- Edit sale form
- Delete sale
The website was tested on the following devices:
- Lenovo Yoga 2 Pro (both in pc and tablet mode)
- Xiaomi Redmi Note 7
- Samsung Galaxy A52s 5G
- MacBook Pro
In addition, the website was tested using the Google Chrome Developer Tools Device Toggling option for all available device options.
The website was tested on the following browsers:
- Google Chrome
- Mozilla Firefox
- Microsoft Edge
The page was tested manually. The testing write-up can be found in testing.md
Remaining bugs:
- unable to add/update images for products both by url and by selecting a file
The app was deployed on Heroku by following these steps:
- Create your Heroku app
- Navigate to the Heroku website
- In the Heroku browser window, create an account by entering your email address and a password
- Activate the account through the authentication email sent to your email account
- Click the new button and select create a new app from the dropdown menu
- Enter a name for the application which must be unique
- Select the region closest to you
- Click create app
- Create the Database
- In the Heroku dashboard click on the Resources tab
- Scroll down to Add-Ons, search for and select 'Heroku Postgres'
- Set up Environment Variables
- In the Heroku Settings tab, scroll down to 'Reveal Config Vars' and transfer you environment variables here
- Set up aws s3 for static and media files storage
- Add Heroku Hostname to ALLOWED_HOSTS: ALLOWED_HOSTS = ['favoureats.herokuapp.com', 'localhost'] in your settings.py
- Create Procfile in top level directory:
- In Procfile add: web: gunicorn app_name .wsgi
- Heroku Deployment:
- Click Deploy tab in Heroku
- In the 'Deployment method' section select 'Github' and click the 'connect to Github' button to confirm.
- In the 'search' box enter the Github repository name for the project
- Click search and then click connect to link the heroku app with the Github repository. The box will confirm that heroku is connected to the repository.
- Final Deployment
- When development is complete change the debug setting to: DEBUG = False in settings.py
- To manually deploy click the button 'Deploy Branch'. The default 'main' option in the dropdown menu should be selected in both cases. When the app is deployed a message 'Your app was successfully deployed' will be shown. Click 'view' to see the deployed app in the browser. The live deployment of the project can be seen here
- To fork the project navigate to the repository on GitHub
- Click on the Fork button in the upper right-hand corner
- To clone the project navigate to the repository on GitHub
- Above the list of files click the dropdown code menu.
- Select if you prefer to clone using HTTPS, SSH, or Github CLI and click the copy button to copy the URL to your clipboard
- Open Git Bash
- Change the current working directory to the one where you want the cloned directory
- Type git clone and paste the URL from the clipboard ($ git clone https://github.com/YOUR-USERNAME/YOUR-REPOSITORY)
- Press Enter to create your local clone.
- Homepage background image: Photo by Jessica Ruscello on Unsplash
- noimage.png taken from Boutique Ado walkthrough project
- Book cover images taken from Kaggle dataset (https://www.kaggle.com/yamqwe/bulk-bookstore-dataset)
- Remove Arrows/Spinners from input type number - code taken from https://www.w3schools.com/howto/howto_css_hide_arrow_number.asp
- book data was mostly taken from a dataset at Kaggle (https://www.kaggle.com/yamqwe/bulk-bookstore-dataset), other data was added manually from Goodreads (https://goodreads.com) and Amazon (https://www.amazon.co.uk/)
I would like to take the opportunity to thank:
- My husband Jure Runje for his support, advice, help with testing, and for giving me some kids free time to work on my project.