TMartin88 / ski_shop

1 stars 2 forks source link

Ski Shop

Site Goals


Ski Shop is an online ecommerce shop developed in Django.

This shop is initially targetting the Irish market.

The shop is populated with great value offers of leading brands of skis, snowboards and accessories.

The shop has most of the functionality you would expect from an online store.

Products by:



User Stories


Shoppers


Shop Owner



UX/UI & Features


Design Choices


This is a GUI application which has been designed to work across all devices.

Bootstrap allows for seamless responsiveness.

The site header and brand is preserved at the top of the page.

Good quality images are used for products to attract user attention.

The Main Background image is very striking and exciting.

Wireframe


Using Balsamiq as a design tool, the home page wireframe is designed to grab the attention of a shopper.

It is a simple design without any clutter, with a Shop now button and Subscribe popup.

Site Navigation is split into 2 areas.

Product Nav and My Account Nav.

The header is visible at all times so the shopper can always see the Basket.

In addition there is a popup to encourage the shopper to Subscribe.

Database Schema


AllAuth

Product/Product Size

Order/Profile

Shipping

The database is designed to allow the shop owner to set specific sizes that are relevant to certain products.

Also the shipping is calculated based on Package Weight.

It is assumed that all of the products of the basket will be shipped at the same time.

In this version only Standard Shipping is applied.

In future versions the shopper at checkout will have the opportunity to select other shipping methods such as Express Shipping.

All Users have indiviudual profiles and the country can be used in shipping calculations.

Responsive


This GUI application is responsive using Bootstrap and looks good on different device screen sizes.

Shopping Concept


Shoppers can buy Ski related products in a simple secure way. They can get calculated shipping costs and can purchase products with relevant sizes.

For example Skis.

They are available in sizes that are appropriate to Skis.

Small 100-109 cm, Medium 150-159 cm and Large 180-190 cm.

These sizes are available in Beginner Intermediate and Expert.

There is more detailed information on this in Product Size section

When the shoppers purchase items the checkout process is secure using Stripe for payments and retaining orders stored against the shoppers profile.

There is more detailed information on this in Checkout section


Site Navigation


Main Menu


Site navigation is primarily by way of:

There are Logged In Status changes to the navigation experience for My Account:

Not Logged In Logged In SuperUser

Manual Testing and Walkthrough


My Account

Signin Signed In

This is all working as expected.

My Profile Profile Updated

This is all working as expected.

Logout Profile Updated

This is all working as expected.

Register Error Trap Registered

This is all working as expected.

Logged in Superuser


IMPORTANT! There is additional functionality to superusers. Shop Managers are superusers and responsible for Product Maintenance

Product Management

Select Category Add Product

This is all working as expected.

Product Added

This is all working as expected.

Edit Product Editing Product

Note Price Change

Edited Product

Note that Has Sizes has been selected as True, the default size option is now visible

But this is not the same as assigning Product Sizes to a Product see the following image

Product with sizes

These sizes are available for selection because they are sizes that have been assigned to the product.

This is all working as expected.


Sizes Management

Please note that sizes share the same category model as Products

Add Size Size Added

This is all working as expected.

Edit Size Size Edited

This is all working as expected. Rollers Included now in description.

Delete Size (Wooly Hat) Size Deleted

This is all working as expected. Wooly Hats is now gone.


Product Sizes Management

Please note that because sizes share the same category model as Products, sizes can only be assigned to Products of the same category

Add Product Size Product Size Added

This is all working as expected.

Edit Product Size Product Size Edited

This is all working as expected.

Please note there is a bug here the available sizes to edit should be filtered by the category and ski bag should not be an option

Delete Product Size Product Size Deleted

This is all working as expected.


Has Sizes

The Product has sizes boolean indicates whether Sizes are available for selection for this product or not.

Product Size Allocated Default Size Select No Size Select

The default sizes available are: XS, S, M, L, XL and they are hard coded.

With the Product Size functionality implemented in the shopping experience the sizes available are dynamic.

As in each product can have its own size options.

Like for instance Skis have size options like this:

In this way products can be assigned sizes that are relevant to that type of product.

Shipping Management

Shipping Methods

Add Shipping Method Shipping Method Added
Edit Shipping Method Shipping Method Edited

This is all working as expected. Description is now "really really really"

Delete Shipping Method Shipping Method Deleted

Shipping Costs

Add Shipping Cost Shipping Cost Added
Edit Shipping Cost Shipping Cost Edited

This is all working as expected. Cost is now 55.00

Delete Shipping Cost Shipping Cost Deleted

Django Admin

Please note all Product, Sizes and Product Size Management functionality is also in the admin section.

Django Admin Product Size Admin

Please note all Shipping Methods and Shipping Costfunctionality is also in the admin section.

Shipping Methods

Shipping Costs

The Shipping Costs have Weight Bands to which different costs are applied.

The package weight dictates which band is used.

At the moment only Standard Shipping is being applied.

In future versions the shopper can select from various shipping methods at checkout.

Note Admin is only available to superusers

This is all working as expected.


Search Results Page


This is all working as expected.


Product Categories Main nav


All Products Skis Snowboards Accessories Others

Shopping (Showing No Size, default Size and Relevant sizes examples)


Shopping for Skis

Shopping for Snowboards

Shopping for Ski Mask

Skis with Sizes Snowboards Default Sizes Mask No Sizes

Shipping/Delivery Costs


Shipping Cost Calculated

There are 2 variables in settings

FREE_DELIVERY_THRESHOLD = 500
FLAT_DELIVERY_CHARGE = 150

All orders above the threshold have free delivery. The Flat Delivery Charge is applied where the order is less than the threshold and either the shopper is not logged in or there is no standard delivery set for this shoppers country.

Otherwise the rates are applied from the shipping cost model.

Shopping Basket


This is where the user is Logged in and their profile country is in shipping costs.


Add Skis with Product Size to Basket Add Snowboard with Default Size to Basket

Note there is no Delivery cost because the threshold is exceeded

Remove Skis from Basket Calculated Standard Delivery Applied

Note on the left image there is now a prompt to purchase more to avoid delivery cost

Note on the right image and Calculated Standard Delivery is applied

This is where the user is Not Logged in or their profile country is not in shipping costs..


Add Snowboard with Default Size to Basket Flat Delivery Charge

Note on the left image there is now a prompt to purchase more to avoid delivery cost and Flat Delivery notice

Note on the right image there is Flat Delivery Charge applied

Shopping Checkout


Checkout Complete Order

Note on the left image that the country is New Zealand which has a designated shipping cost hence no Flat charge

This is all working as expected.


Newsletter with Mailchimp


This is all working as expected.


Facebook


This is all working as expected.

In Chrome Developer Tools, the Console had no errors


Testing


CRUD Testing


Try to spoof the Management CRUD while not logged in on other Browser

This signin challenge appears for all spoof attempts.


Validator Testing


The Default Django Admin Panel does generate this warning:

Consider avoiding viewport values that prevent users from resizing documents.

As this has no negative impact on the app I am ignoring this.

Lighthouse Testing


home desktop home mobile
search results desktop search results mobile
product management desktop product management mobile

Performance is low here for mobile particularly. THis iwll be improved in production when I introduce proper appropriate images for products

size management desktop size management mobile
admin desktop admin mobile
django admin desktop django admin mobile
admin desktop admin mobile

Pycodestyle Testing


The 3 warnings that are listed are apparently in relation to the docker file and have nothing to do with the code in run.py and so can be ignored.

python3 -m flake8 Testing


The following code line from checkout views.py is too long but anytime I tried to fix it , the checkout broke so I have left it.

self.order_total = self.lineitems.aggregate(Sum('lineitem_total'))['lineitem_total__sum'] or 0

The following code line from ski_shop urls.py is required ofr 404 for work.

./ski_shop/urls.py:33:1: F811 redefinition of unused 'handler404' from line 20

Javascript Testing


JSHint.com


Marketing Strategy

E-Commerce Business Model


We have recognised that an online presence with a top end Online Shop is essential for Shoppers to enjoy shopping on our store.

This online store offers easy navigation, robust search functionality, secure payment processing, and detailed product descriptions.

Continuous improvement will ensure that this online shop will maximise the traffic coming to our store.

We offer a wide range of ski equipment, including skis, boots, poles, helmets, goggles, and clothing.

Customer Service

We provide excellent customer support, including assistance with product selection, sizing, and addressing any concerns or inquiries.

Target Market

Our target market includes skiers of all ages and skill levels, catering to both beginners and experienced enthusiasts.

Initially targetting Ireland only.

Revenue

Our revenue comes exclusively from our online store as we do not have a high street presence.

Fulfillment and Shipping

Once a shopper clicks Complete Purchase then the logistics kick in. How do we get the products to the shopper?

While our market is in Ireland we will do this through the postal service and some courier services.

A Shipping calculator will be provided.

Dropshipping

This is an important consideration once we progress to the international market. In this instance we will not have any stock at all and all shipping will be handled by our wholesalers.

This will require an integration with wholesalers so that the correct shipping cost as calcualted by the wholesaler is provided to the shopper in our online checkout business process.

Define Unique Selling Proposition (USP)

We have identified our unique selling proposition, which includes a combination of competitive prices, exceptional customer service, and a wide selection of exclusive products.

SEO and Content Marketing

We will continually optimize our website for search engines by targeting relevant skiing-related keywords. We will also create informative and engaging content, such as blog posts, guides, and tutorials, to attract and educate potential customers.

Social Media Marketing

We will leverage platforms like Instagram, Facebook, and Twitter to showcase our products, share skiing tips, post customer testimonials, and run targeted advertising campaigns. We will use Social Media tools like Hootsuite to manage all of our Social media platforms

Email Marketing

We will build an email list by offering exclusive discounts, updates on new products, and informative content to subscribers. We will send regular newsletters to engage with our audience and encourage repeat purchases.

Retargeting and Remarketing

We will implement strategies to reach potential customers who have shown interest in our products by displaying targeted ads on other websites they visit or through social media platforms.

Affiliate Marketing

We will collaborate with skiing-related websites, blogs, and influencers to drive traffic to our store. We will offer them a commission for each sale generated through their referral. We will regularly contribute articles for Winter Sport websites and Magazines. We will be a presence at Tradeshows and Ski and Snowboarding events.

Customer Loyalty Program

We will implement a loyalty program to incentivize repeat purchases. We will offer discounts, rewards, and exclusive perks to encourage customer retention.

Customer Reviews and Testimonials

We will encourage customers to leave reviews and testimonials on our website. Also a rating system for our products.

**Note this has not yet been developed.


Development Transition


Initial Workflow and Design Concept


This online shop has all the standard functionality and look and feel of an online shop.

The additional development is based around expanding size, colour options and functionality.

Also Shipping where shipping calculations are more sophisticated.

Planned Final Workflow and Design and Future features


This Project is not the final step but the building blocks are in place.

Helpful tools like Size Calculators for the various product categories will be developed.

Colors as well as sizes will be implemented in future developments.

Shipping will be expanded to allow for International Markets.


Bug Fixes


Solved Bugs


Unfixed Bugs



Deployment

Deployment to Heroku


The site is deployed to Heroku.

Initial Deployment


In Heroku

In Gitpod

Final Deployment


In Heroku

In Gitpod

Please click this link to see it in Heroku

Performance Improvements



Credits