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:
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.
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.
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.
This GUI application is responsive using Bootstrap and looks good on different device screen sizes.
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 is primarily by way of:
Main Menu.
Top Line
There are Logged In Status changes to the navigation experience for My Account:
Not Logged In | Logged In | SuperUser |
---|---|---|
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.
IMPORTANT! There is additional functionality to superusers. Shop Managers are superusers and responsible for Product Maintenance
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.
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.
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.
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.
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 |
---|---|
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 |
---|---|
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.
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.
This is all working as expected.
All Products | Skis | Snowboards | Accessories | Others |
---|---|---|---|---|
Shopping for Skis
Shopping for Snowboards
Shopping for Ski Mask
Skis with Sizes | Snowboards Default Sizes | Mask No Sizes |
---|---|---|
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.
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
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
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.
This is all working as expected.
This is all working as expected.
In Chrome Developer Tools, the Console had no errors
Try to spoof the Management CRUD while not logged in on other Browser
This signin challenge appears for all spoof attempts.
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.
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 |
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.
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
JSHint.com
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.
We provide excellent customer support, including assistance with product selection, sizing, and addressing any concerns or inquiries.
Our target market includes skiers of all ages and skill levels, catering to both beginners and experienced enthusiasts.
Initially targetting Ireland only.
Our revenue comes exclusively from our online store as we do not have a high street presence.
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.
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.
We have identified our unique selling proposition, which includes a combination of competitive prices, exceptional customer service, and a wide selection of exclusive products.
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.
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
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.
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.
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.
We will implement a loyalty program to incentivize repeat purchases. We will offer discounts, rewards, and exclusive perks to encourage customer retention.
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.
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.
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.
April 24th 2023 Color Functionality not working
April 27th 2023 ProcFile incorrectly placed
May 12th 2023 Path is wrong
June 8th 2023 Fix email send
June 10th 2023 Div class incorrect
June 14th 2023 Product size not working
August 6th 2023 Edit shipping method not working
The site is deployed to Heroku.
In Heroku
Sign up for Heroku Account or Login
Create New App in Heroku
Use a unique App name that does not already exist.
Select Region.
Create App.
Postgres.
In Settings Reveal Config Vars
Manual Deploy (Select Github as deployment method)
Search for Django Repo
Deploy Branch
Check Build Log for errrors.
Run App
In Gitpod
In Heroku
In Gitpod
Please click this link to see it in Heroku