Keyboard enthusiast since ᴡɪɴᴅᴏᴡs 98.
Django-based E-COMMERCE application designed for keyboard enthusiasts. The project offers a comprehensive platform for buying and selling keyboards, including new, retail, exclusive, and limited-edition models. Users can also craft customized keyboards to suit their preferences.
The application is engineered for easy navigation and efficient shopping, providing a seamless experience for users.
Developer: Kim Bergström
Live webpage
Project Repository
- 📄Bussniess model & Marketing
- 📄User Experience UX
- 📄Methodology
- 📄Database
- 📄Design UI
- Technologies Used
- 📄Features
- 📄Testing
- 📄Bugs
- 📄Deployment
- 📄Credits
- 📄Acknowledgments
Table of contents generated with markdown-toc and modified by myself
Easy Keyboard Maker is a thriving B2C e-commerce platform with a mission to provide high-quality keyboard-related products to our valued customers through our online store. Product range includes keyboards, mechanical keyboards, and essential keyboard accessories.
- Scalability: Business can grow seamlessly as our customer base expands.
- Online Presence: Saving on physical locations, focusing resources on product quality and customer satisfaction.
- Global Reach: Can reach customers worldwide, eliminating geographical restrictions.
- Niche Focus: Cater to keyboard enthusiasts, building a brand that resonates with our audience.
- Cost-Efficiency: Low startup costs allow us to allocate a significant budget for customer acquisition and marketing.
- Impulse Buying: Competitive pricing encourages spontaneous purchases from customers exploring keyboard options.
- Getting Customers: It may be hard to attract customers in a crowded market. Effective marketing strategies are essential.
- Building a Brand: Creating a brand from scratch takes time. Immediate success requires a well-planned marketing strategy.
- Marketing Efforts: Attracting organic customers takes time. We'll need to actively promote our business and consider paid advertising.
- Building Trust: Operating online can make it harder to build trust and loyalty. Offering discounts and promotions may help.
- Order Volume: Due to competitive pricing, we need a reasonable number of orders to ensure business viability.
Considering the pros and cons of our business model, implementing a subscription-based approach may not be viable initially. Such a model requires an established customer base and some degree of brand loyalty, which may take time to cultivate.
Primary strategy is to offer products in a traditional pay-as-you-go e-commerce format. As our business grows and customer loyalty deepens, the implementation of a subscription model may become a more viable option in the future. This approach ensures our immediate success while allowing flexibility for future expansion.
-
User 1: The typical site user for Easy Keyboard Maker would be an individual, male and female, aged between 18 and 50. They have a strong interest in computer IT, gaming, and customizing their keyboard setups. They may range from beginners to advanced users, including gamers, programmers, and professionals looking for ergonomic solutions.
-
User 2: In addition to the primary site users, we also consider partners and gift shoppers. These individuals may visit our site to explore gift options for the keyboard enthusiasts in their lives. They could be of any gender and age, looking for thoughtful and unique presents, such as customized keycaps or accessories, to surprise and delight the keyboard enthusiasts they know.
-
User 3: Represents individuals who are deeply immersed in Asian culture, particularly those who have a strong affinity for anime. There is a significant overlap between anime culture and keyboard customization in Asia, making it a promising target audience. By offering unique keycaps and keyboard customization options that resonate with anime themes.
- Create a user-friendly website with a clear purpose.
- Provide products that meet user expectations.
- Enable users to access, read, and engage with informative articles.
- Offer insights and tips on keyboard care to build trust and loyalty.
- Allow users to checkout quickly and easily.
- Allow users to create profiles for order history and profile updates.
The business's marketing strateg2y for the future includes the following elements:
-
Utilizing the company's Social media pages for store promotion and building community.
-
Sharing the page with friends and family and encouraging them to like and share it within their extended network.
-
Organizing a soft online launch sale to stimulate early adoption and attract potential clients for initial purchases.
-
Building a subscriber base through the Mailchimp option on the website and subsequently sending out special offers and promotions to foster customer loyalty.
-
Crafting informative and valuable articles and blog posts to enhance the store's SEO ranking on search engines like Google.
-
Exploring the possibility of using paid advertising channels such as Google Ads and other social Ads to target the desired demographic.
-
Creating multiple ads with distinct product cover images, monitoring the click-through rates, and focusing on the most successful ones.
-
Depending on the available budget, the business may consider collaborating with influencers in its niche to promote custom-made products. This could involve providing complimentary items or a modest fee in exchange for a shout-out or product review. The target influencers would ideally have a following of at least 10,000 in the relevant niche, which is feasible even for a business with limited initial funding and can help drive traffic to the website.
Easy Keyboard Maker E-Commerce will primarily utilize social media platforms such as Twitter, Facebook, Instagram, and TikTok for promotion. Additionally, we will establish and operate a Discord Server and live stream on our Twitch channel for content and interactive sessions. There is also a possibility of creating a YouTube channel to compile all the highlights in the future.
Our social media links and e-commerce webshop were combined on a single page to enhance navigation and foster a sense of community. You can access all our social links through our main link, which is managed using LINKTR.
Below, you can find images of every page for documentation purposes.
Regular social media contests and giveaways on our platforms. These contests will feature enticing prizes, such as free keyboards and accessories, to create excitement and attract potential customers.
To participate, individuals will be required to complete simple actions, including liking our posts, sharing content, tagging friends, or leaving comments. These activities not only foster engagement but also increase brand visibility as participants interact with our content.
This is to build a sense of community among keyboard enthusiasts, where participants engage not only with our brand but with each other. This approach fosters brand loyalty and extends beyond the giveaways.
Additionally, reward our most active and engaged customers with exclusive discounts or opportunities.
Success in this strategy will be measured through engagement rates, new followers, and customer conversion data, guiding our ongoing social media efforts.
By optimizing the e-commerce for search engines, it will increase and reach the right audience, build trust, and stay competitive in the market. SEO is our cost-effective strategy for enhancing user experience and attracting both local and global customers.
After finalizing the business model for keyboard selling in the e-commerce sector, I began the process of strategizing how to market the website and identify target keywords. I leveraged Google Trends to uncover popular search terms and employed a tool named SEO quake to assess the competition and learn from their successful tactics. Additionally, I conducted keyword research on wordtracker.com by signing up for a trial to maximize its benefits. This comprehensive approach led to the compilation of a list of both short and long-tail keywords intended for use in this project.
By strategically leveraging short-tail keywords and conducting in-depth analysis through Google Trends and Wordtracker, related questions, I've curated a powerful list of long-tail keywords tailored to our niche. These carefully chosen keywords are strategically placed across various sections of the website to enhance visibility and attract a specific audience interested in our unique keyboard and keycap offerings.
- Mechanical Keyboards
- Keycaps
- Wireless Keyboards
- Gaming Keyboards
- Custom Keycaps
- Keyboard Accessories
- Quality Mechanical Keyboards
- Affordable Keycaps for Sale
- Limited Edition Keyboards
- Custom Keycap Retailer
- Personalized Mechanical Keyboards
- Wireless Gaming Keyboards
- Unique Keyboard Accessories
- Best Custom Keycap Maker
- Exclusive Limited Edition Keyboards
- Top-rated Mechanical Keyboards Shop
By taking advantage of this keyword, i have implemented this keywords in different ways in my ecommerce site. This will also continuing to be implemented as long the site are live.
Content Integration:
- Integrate long-tail keywords into product descriptions, blog posts, and other content sections. Ensure a natural flow of language while highlighting the unique features of each product.
Meta Tags and Descriptions:
- Incorporate long-tail keywords into meta tags, meta descriptions, and image alt text. This enhances the search engine optimization (SEO) and improves its ranking for relevant search queries.
Header Tags (H1, H2, H3):
- Utilize header tags to structure the content. Long-tail keywords in H1 tags for main headings and H2, H3 tags for subheadings.
Strong Tags (Strong Emphasis):
- Apply the
<strong>HTML tag to emphasize important keywords or phrases. This helps search engines understand the significance of those terms within your content.
Link Descriptions:
- Ensure that all internal and external links are appropriately described. Use relevant anchor text that incorporates long-tail keyword.
Alt Text for Images:
- When using images, include descriptive alt text that features long-tail keywords.
I created a sitemap for the website to ensure effective searchability by search engines like Google once it is live. Implemented and generated the xml file from Xml Sitemaps.
I generated a robots.txt file to facilitate Google's crawling of the site. I excluded the accounts app and checkout payment app from being crawled as it doesn't provide any significant benefit for Google to index those pages.
The favicon and social media logo were crafted using Photoshop and Adobe.
The logo was conceptualized with a keyboard theme in mind, symbolizing the company's focus on keyboards. A catchy word break was implemented for better readability due to the company's lengthy name.
This logo is prominently featured on all social media platforms and e-commerce sites.
EasyKeyboardMaker is designed for the following target audience:
- Keyboard enthusiasts and individuals looking to purchase mechanical keyboards and accessories.
- Shoppers interested in exploring a variety of keyboard types, brands, and designs.
- Gamers, streamers, and developers who rely on keyboards as a key tool for their work or leisure.
- Users who want to easily browse, select, and purchase mechanical keyboards and related products.
- Individuals seeking a platform to stay updated with the latest keyboard trends and innovations.
- People interested in sharing their own product reviews, recommendations, and experiences.
When using the E-commerce EasyKeyboardMaker, users can expect the following features and characteristics to meet their needs:
- An intuitive and user-friendly interface for effortless navigation and product discovery.
- High-quality product listings, including detailed descriptions, specifications, and user reviews.
- Responsive design for an optimal shopping experience on various devices, including desktop and mobile.
- Personalized user profiles with order history, saved payment information, and preferences.
- Interactive features, such as product reviews, ratings.
- Updates and special promotions to keep users informed.
EasyKeyboardMaker is a e-commerce platform for users, including gamers, streamers, and developers, to explore, select, and purchase mechanical keyboards and accessories while staying updated with the latest trends.
The EasyKeyboardMaker project follows a methodology inspired by AGILE principles, fostering collaboration, flexibility, and gradual development. The outlined approach has guided the project's evolution.
To streamline project management, GitHub Projects is employed as a central hub. User stories and tasks are structured as GitHub issues, creating an organized workflow. The GitHub project board serves as a visual representation, tracking progress effectively.
Transforming user stories into GitHub issues captures user-centric functionalities. These issues interlink with respective user stories, simplifying access to criteria, tasks, and discussions.
The EasyKeyboardMaker project adheres to an iterative development approach, facilitating continuous enhancements within a predefined timeline. Despite its condensed schedule, the project accommodates future iterations and expansions.
To ensure efficient prioritization, our project employs the MuSCoW (Must have, Should have, Could have, Won't have) method. User stories critical to the app's success are categorized as Must-haves, followed by Should-haves, Could-haves, and Won't-haves. You can refer to our Kanban board to view the prioritization.
Within each sprint, a MoSCoW method is used to further prioritize user stories. They are classified as Must Do, Should Do, Could Do, and Won't Do, representing the remaining user stories that will not be included in the sprints. This approach ensures a clear differentiation between our overall project prioritization and the prioritization within each sprint, minimizing any potential confusion.
Labels and User Story Distribution (MoSCoW):
- Must-Have: 22/38
- Should-Have: 7/38
- Could-Have: 5/38
- Wont-Have: 4/38
- Task: 4
- Documentation: 2
After completing sprint 2, the project will be ready for its initial demonstration, showcasing the Minimum Viable Product (MVP). This milestone will be reached two weeks after the start of development.
Epic 1: Viewing and Navigation (Shopper) #3
- USER STORY: Easy Product Browsing and Selection (must-have)
- USER STORY: Detailed Product Information Viewing (must-have)
- USER STORY: Quick Identification of Discounts and Special Offers (must-have)
- USER STORY: Easy Access to Total Cost of Selected Items (should-have)
Epic 2: Registration and User Accounts (Site User) #4
- USER STORY: Convenient User Registration (must-have)
- USER STORY: Easy User Login and Logout (must-have)
- USER STORY: Password Recovery for User Account Access (must-have)
- USER STORY: Email Confirmation for Registration (must-have)
Epic 3: Sorting and Searching (Shopper) #5
- USER STORY: Product Sorting Options (must-have)
- USER STORY: Category-Specific Product Sorting (should-have)
- USER STORY: Product Search by Name or Description (should-have)
- USER STORY: Search History and Result Count (wont-have)
Epic 4: Purchasing and Checkout (Shopper) #6
- USER STORY: Product Size and Quantity Selection (should-have)
- USER STORY: Review Shopping Bag and Confirm Purchase (must-have)
- USER STORY: Flexible Item Quantity Adjustment in Shopping Bag (must-have)
Epic 4: Purchasing and Checkout (Shopper) #6 - Continued
- USER STORY: User-Friendly Payment Information Entry and Swift Checkout (must-have)
- USER STORY: Assurance of Personal and Payment Information Security (should-have)
- USER STORY: Order Confirmation on Website (must-have)
- USER STORY: Email Confirmation for Purchase Record (should-have)
Epic 5: Admin and Store Management (Store Owner) #7
- USER STORY: Add New Products to the Store (must-have)
- USER STORY: Edit/Update Product Details (must-have)
- USER STORY: Delete Products from the Store (must-have)
Epic 6: User Profiles and Order History (Site User) #8
- USER STORY: Update User Profile Information (could-have)
- USER STORY: View Detailed Order History (could-have)
- USER STORY: Track Delivery Status of Current Orders (wont-have)
- USER STORY: Order Confirmation Email with Shipment Details (could-have)
Epic 7: Product Reviews and Ratings (Site User) #9
- USER STORY: Read and Write Product Reviews (should-have)
- USER STORY: Rate Products and Provide Feedback (could-have)
- USER STORY: Sort and Filter Products by User Ratings and Reviews (could-have)
- USER STORY: Receive Review Notifications (wont-have)
After finishing sprint 4, the project will be presented as the finished product. During this presentation, there will also be introduce new features planned for future implementation.
Epic 8: Blog (Site Owner) #10
- USER STORY: Access to Blog Section for Reading (should-have)
- USER STORY: Search and Filter Blog Posts by Topics (could-have)
- USER STORY: Leave Comments on Blog Posts (wont-have)
- USER STORY: Create, Edit, and Delete Blog Posts (must-have)
Epic 9: SEO and Marketing (Site Owner) #11
- USER STORY: Optimize Website for Search Engines (must-have)
- USER STORY: Share Product Pages and Blog Posts on Social Media (could-have)
- USER STORY: Receive Email Newsletters (could-have)
- USER STORY: Track Website Traffic and User Behavior (could-have)
The 38 user stories are implemented into 9 Epics and they are organized into 4 distinct sprints (milestones) to establish a well-defined work structure. You can access the details of these sprints by clicking here, which will redirect you to the sprint information and find all the user stories and epics.
Bugs uncovered during development are documented as GitHub issues, offering insights into each bug's characteristics, impact, and reproduction steps. By hyperlinking these issues in README.md, users can stay updated on bug resolutions and contribute insights.
The project board efficiently manages user stories, with the "Not started" column representing upcoming iterations. This backlog previews user stories set for subsequent development phases.
Emphasizing that the project timeline is expedited, the iterative approach maintains adaptability, enabling ongoing refinements and improvements aligned with evolving user needs.
When creating the database structure schema for this project, I utilized the dbdiagram.io website. This online tool allowed me to visually design and document the database schema, making it easier to plan and implement the database for the e-commerce application.
I utilized the terminal command python manage.py inspectdb > models.py to generate all the models in my code. Subsequently, I manually selected and removed Django's built-in models as well as those from the Allauth package.
Checkout App
- Represents order information.
- Fields:
- order_number = models.CharField
- full_name = models.CharField
- country = models.CharField
- postcode = models.CharField
- town_or_city = models.CharField
- street_address1 = models.CharField
- street_address2 = models.CharField
- county = models.CharField
- id = models.BigAutoField
- date = models.DateTimeField
- delivery_cost = models.DecimalField
- order_total = models.DecimalField
- grand_total = models.DecimalField
- original_bag = models.TextField
- stripe_pid = models.CharField
- user_profile = models.ForeignKey
- Stores individual items within an order.
- Fields:
- id = models.BigAutoField
- quantity = models.IntegerField
- lineitem_total = models.DecimalField
- order = models.ForeignKey
- product = models.ForeignKey
Products App
- Stores categories for products.
- Fields:
- id = models.BigAutoField
- name = models.CharField
- friendly_name = models.CharField
- Stores information about products available.
- Fields:
- id = models.BigAutoField
- sku = models.CharField
- name = models.CharField
- description = models.TextField
- price = models.DecimalField
- image_url = models.CharField
- image = models.CharField
- category = models.ForeignKey
- deal = models.BooleanField
- out_of_stock = models.BooleanField
- created_at = models.DateTimeField
Profiles App
- Extends the User model to store additional user-specific information.
- Fields:
- id = models.BigAutoField
- default_phone_number = models.CharField
- default_country = models.CharField
- default_postcode = models.CharField
- default_town_or_city = models.CharField
- default_street_address1 = models.CharField
- default_street_address2 = models.CharField
- default_county = models.CharField
- user = models.OneToOneField
- bio = models.TextField
- country = models.CharField
- first_name = models.CharField
- last_name = models.CharField
- profile_picture = models.CharField
Blog App
- Represents user comments on products.
- Fields:
- id = models.BigAutoField
- text = models.TextField
- rating = models.DecimalField
- created_at = models.DateTimeField
- product = models.ForeignKey
- user = models.ForeignKey
- Represents blog posts.
- Fields:
- id = models.BigAutoField
- title = models.CharField
- slug = models.CharField
- content = models.TextField
- featured_image = models.CharField
- created_on = models.DateTimeField
- updated_on = models.DateTimeField
- author = models.ForeignKey
- status = models.IntegerField
- excerpt = models.TextField
Home App
- Stores information related to newsletters.
- Fields:
- id = models.BigAutoField
- email = models.CharField
- created_date = models.DateTimeField
- subscribed = models.BooleanField
- Represents user information.
- Fields:
- user_id (IntegerField, primary key)
- username (CharField)
- email (CharField)
- password (CharField)
This database schema defines the structure and relationships for an e-commerce, including blog application, users, posts, comments, review, newsletter, user profiles, products, cart, payment checkout and more.
This E-commerce project embraces a light theme, a user-centric platform where products take center stage. With a focus on professionalism and user engagement, the design thinking revolves around the harmonious use of color, the strategic allocation of visual elements, and the integration of purple and blue accents to enhance interactivity and capture users attention.
Design choices were thoughtfully curated to resonate with professionals, developers, work enthusiasts, and keyboard aficionados. Crafted an environment that exudes professionalism and caters to the diverse interests of our audience.
Decision to adopt the 60-30-10 rule in our UI design is driven by its ability to create a cohesive and engaging user experience. This approach guarantees consistency by allocating 60% of our color palette to the dominant color, fostering brand recognition and trust. The 30% dedicated to the secondary color enables a visual balance, allowing for variations in content, headers, and backgrounds without overwhelming users. The remaining 10% allocated to the accent color serves to highlight interactive elements and calls to action. This strategy ensures that the web application not only looks appealing but also functions effectively, guiding users to key elements while maintaining a harmonious and dependable design.
Dominant (60%):
Our dominant color, which makes up 60% of our color palette, is a subtle departure from pure white. It features a hint of gray to enhance its visual appeal, contributing to a more captivating and elegant appearance. This nuanced modification to the dominant color elevates the user experience and contributes to a light and inviting theme.
Secondary (30%):
The secondary color, comprising 30% of our color palette, is characterized by its vibrant and distinctive shade of deep lavender (#8739F9). This color serves as a key supporting element in our design, offering a balanced and visually engaging backdrop for content, headers, and backgrounds. Its presence complements the dominant color and allows for creative variations while maintaining a cohesive and user-friendly aesthetic.
Accent (10%):
Our accent color, accounting for the remaining 10% of our color palette, is a lively and captivating shade of bright cyan (#37B9F1). This bold color is strategically employed to accentuate interactive elements and calls to action throughout the web application, enhancing user engagement and guiding users to key features.
Text colors:
Lato (Headers):
Lato as the primary font for headers, titles, and navigation elements in our e-commerce project. This modern and elegant sans-serif font offers versatility and a clean design, making it an ideal choice for highlighting essential information. Lato not only exudes professionalism but also adds a touch of style to our website's visual identity.
Poppins (Text Paragraphs):
For text paragraphs, product descriptions, and other textual content, we've opted for Poppins. This sans-serif font is recognized for its exceptional readability and clarity, ensuring that our textual content is easily legible and visually engaging. Poppins contributes to a clean and modern appearance that aligns perfectly with our commitment to providing a seamless user experience.
User-friendly structure, ensuring seamless navigation and easy access to the website's content. Here's an overview of the website's structure:
Landing Page:
- Description: The landing page serves as the initial entry point to the website.
- Content: This page contains introductory text, visuals, and key highlights about the website's offerings and promotions. It also displays a footer section and a newsletter subscription option.
All Products Pages:
- Description: These pages provide access to various products.
- Content: Visitors can explore products such as keyboards, accessories, and the complete range of items available in the shop. These pages also feature a search function and a list view update that displays price ranges and other information.
Article Page:
- Description: The blog page is a hub for articles related to products and relevant topics.
- Content: Users can read articles, reviews, and guides about various products, making informed decisions.
Support Page:
- Description: The support page is a resource for user assistance and information.
- Content: Visitors can find details about the company, contact information, warranty policies, and delivery information, making it a valuable resource for inquiries and understanding the company's policies.
Signup Page:
- Description: This page allows new users to register for an account.
- Content: Users can sign up using their email and create an account to access additional features and services.
Login Page:
- Description: The login page is for returning users to access their accounts.
- Content: Registered users can log in with their credentials to access personalized features and information.
In addition to the pages available to visitors who are not logged in, logged-in users will have access to the following pages:
Profile Page:
- Description: The profile page allows users to manage their personal information and preferences.
- Content: Users can update their profile details, change their password, and customize their user settings.
Order History:
- Description: The order history page provides a comprehensive overview of the user's past orders.
- Content: Users can view details of their previous orders, including order numbers, products purchased, order dates, and order status.
Shipping Details:
- Description: The shipping details page allows users to manage their shipping information.
- Content: Users can add, edit, or delete shipping addresses, making it convenient for order placements and deliveries.
These additional pages enhance the user experience for logged-in visitors, providing them with tools to manage their profiles, track their order history, and simplify the process of providing shipping details for orders.
The wireframes serve as a visual blueprint for our web application, outlining the structure and functionality of each page. They provide a detailed representation of the user interface and overall user experience. These wireframes were meticulously crafted using Figma, a design tool renowned for its ability to facilitate rapid and intuitive prototyping. Click on each page to view the wireframe.
- HTML
- CSS
- Python
- Javascript
- Django: A high-level Python web framework used for building the Gamers Insight Blog web application.
- Crispy Forms: A Django package used for rendering forms in a more efficient and customizable way.
- Bootstrap v5.0: A popular CSS framework used for creating responsive and visually appealing user interfaces.
- Amazon Web Services: A cloud-based media management platform used for storing and serving images in the E-commerce plattform.
- ElephantSQL: ElephantSQL is a PostgreSQL database as a service. It is used as the database for the EasyKeyboardMaker project, providing a reliable and scalable storage solution for the application's data.
- Git: A distributed version control system used for tracking changes in the project's source code.
- GitHub: A web-based hosting service for version control repositories, used for storing and managing the project's source code.
- Gitpod: An online integrated development environment (IDE) used for developing and testing the EasyKeyboardMaker project.
- Heroku: A cloud platform that enables deployment and hosting of web applications. Heroku was used for deploying the EasyKeyboardMaker project to a live server.
- Adobe Photoshop: A professional image editing software used for advanced image manipulation.
- Figma: An online collaborative design tool that offers a wide range of design and prototyping capabilities. Figma was used for creating mockups, prototypes, and design assets for the EasyKeyboardMaker website.
- DB diagram: An online database design and diagramming tool that simplifies the process of creating and visualizing database schemas. dbdiagram.io was used for designing and documenting the database schema of the EasyKeyboardMaker project.
- Google Fonts: A collection of free and open-source fonts used for typography on EasyKeyboardMaker's website.
- Font Awesome: A library of icons used for adding scalable vector icons to EasyKeyboardMaker's website.
- Mailtrap: In this project, Mailtrap was integrated to power the contact form, providing a secure environment for users to reach out to EasyKeyboardMaker via email.
- asgiref==3.7.2
- boto3==1.29.0
- botocore==1.32.0
- dj-database-url==0.5.0
- Django==3.2.23
- django-allauth==0.41.0
- django-countries==7.2.1
- django-crispy-forms==1.14.0
- django-environ==0.7.0
- django-social-share==2.3.0
- django-storages==1.14.2
- django-summernote==0.8.20.0
- gunicorn==21.2.0
- jmespath==1.0.1
- oauthlib==3.2.2
- Pillow==10.1.0
- psycopg2==2.9.9
- python3-openid==3.2.0
- pytz==2023.3.post1
- requests-oauthlib==1.3.1
- s3transfer==0.7.0
- sqlparse==0.4.4
- stripe==7.5.0
-
Navbar
-
Newsletter Signup
-
New Product Sections
-
Footer Sections
-
All products
-
Grid / list view
-
Ordered list dropdown
- Product information section
- Review section
- Multiple image view
- Article page
- Article detail page
- Support page
- FAQ section
-
The account sign-up form allows new users to create an account and join the exclusive deals at the e-commerce. The form has validation to make sure that the user enters the correct information needed. This is a Django built-in validation system. Such validation is:
- Username: Required and has a maximum of 150 characters or fewer. Only letters, digits, and @/./+/-/_ are allowed.
- Email: Required and must be in a valid email format.
- Password: Subject to the following constraints:
- Cannot be too similar to your other personal information.
- Must contain at least 8 characters.
- Cannot be a commonly used password.
- Cannot be entirely numeric.
- See Screenshot
-
The login form ensures secure access to EasyKeyboardMaker by verifying your username and password. If you face login issues, use the 'Forgot Password?' link to reset your password. The form also displays validation error messages to guide you through any input errors.
- See Screenshot
-
When an account is successfully created, the user will receive a confirmation message and gain access to their account and profile page.
-
User profile page
-
User profile update
-
User profile defualt shipping settings
The navigation are divided in three parts in this project. I have one right top side navbar, one category menu bar, and then i have one mobile view navbar, with an search field input, were users can search for products on the site.
- Navbar
On smaller screens, the navigation bar collapses into a burger menu, allowing for a compact and mobile-friendly navigation experience. Users can access the menu by clicking on the burger icon, which reveals the navigation options in a dropdown fashion.
- Mobile view
Here are some exciting features that I would like to add to the EasyKeyboardMaker E-commerce in the future:
- USER STORY: Track Delivery Status of Current Orders (wont-have)
- USER STORY: Receive Review Notifications (wont-have)
- USER STORY: Leave Comments on Blog Posts (wont-have)
- USER STORY: Search History and Result Count (wont-have)
These future enhancements aim to enrich EasyKeyboards's user experience, foster community engagement, and expand its reach to a global audience.
The EasyKeyboard E-commerce website went through a comprehensive testing process to guarantee its functionality, accessibility, and performance. This included checking the code, such as code validation, accessibility assessment, performance testing, cross-device testing, verification of browser compatibility, assessment of user stories, and the integration of user feedback to enhance the overall user experience.
All testing, including both manual and automated testing, was carried out and documented in Testing.md.
The bug section descriptions have been linked with the bug issues in my documentation for better visibility, added color coding, and divided the content into sections, all aimed at enhancing readability. Click on each bug's link for additional information or documentation, and these links will redirect you to the respective bug card on the kanban board.
For deploying Your app, Heroku is used. Follow these steps:
Create a New App:
- Create a new app on Heroku dashboard.
Configure Settings:
- Navigate to "Settings" in new app.
Config Vars Setup:
- In "Config Vars," add
PORTas the key and8000as its value.
Add PostgreSQL Database:
-
Choose PostgreSQL as database.
Example "ElephantSQL" was used in this project
Configure DATABASE_URL:
-
In "Config Vars," add
DATABASE_URLand copy the URL from PostgreSQL dashboard.Note: If using ElephantSQL as PostgreSQL provider, you can use the URL provided by ElephantSQL.
Environment Variable Setup:
- Create a new file in workspace called
env.py. - Import the
oslibrary and set the environment variable forDATABASE_URLto the Heroku address (or ElephantSQL URL) - Add a secret key using
os.environ["SECRET_KEY"] = "your secret key here".
Heroku Config Vars:
- Add the secret key to the Heroku app's config vars in the settings.
Django Settings:
- In
settings.pyof Django app, importPathfrompathlib,os, anddj_database_url. - Add
if os.path.isfile("env.py"): import envto the file. - Replace the SECRET_KEY with
SECRET_KEY = os.environ.get('SECRET_KEY'). - Replace the database section with
DATABASES = {'default': dj_database_url.parse(os.environ.get("DATABASE_URL"))}.
Migrate Models:
- In workspace terminal, migrate the models to the new database connection.
-
Register Domain:
- Register a domain with a domain registrar (e.g., GoDaddy).
-
Add Custom Domain in Heroku:
- Go to the "Settings" tab of your Heroku app.
- Scroll down to "Domains" and click "Add Domain."
- Enter your custom domain (e.g.,
www.easykeyboardsmaker.com). - Copy the provided DNS target. It will look something like
shallow-atoll-32t56jvds3s5fhf8767d9a9c.herokudns.com.
-
Configure DNS Records:
- Log in to your domain registrar (e.g., GoDaddy).
- Navigate to DNS settings.
- Add a CNAME record:
- Type: CNAME
- Name: www
- Value: Paste Heroku's DNS target
- TTL: Set to default
-
Verify Domain Configuration:
- Check the "Domains" section in your Heroku dashboard.
- Wait for DNS changes to propagate (up to 48 hours).
-
HTTP and HTTPS Forwarding (Optional):
- Optionally, configure forwarding in your domain registrar's settings.
-
Verify Custom Domain:
- After DNS propagation, access your app using the custom domain.
-
Add ACCESS_HOSTNAME to your project settings:
- Add "www.yourdomain.com" to
ALLOWED_HOSTSin your Django app's settings.py file.
- Add "www.yourdomain.com" to
To manage version control and push code to the main repository on GitHub using GitPod, follow these steps:
Add Changes:
- In the GitPod terminal, use the command
git add .to stage changes.
Commit Changes:
- Commit changes with a descriptive comment using the command:
git commit -m "Push comment here"
Push to GitHub:
- Push the updates to the repository on GitHub with the command:
git push
Migrate Models: - In the terminal, migrate the models to the new database connection.
By forking the GitHub Repository, can create a copy of the original repository without affecting the original. Follow these steps:
GitHub Account Setup:
- Log into GitHub account or create one if you don't have one.
Locate the Repository:
- Find the repository at https://github.com/KimBergstroem/PP5.
Fork the Repository:
- At the top right of the repository page, click "Fork" to create a copy in your own GitHub repository.
Creating a clone allows you to have a local copy of the project. Follow these steps:
Repository URL:
- Navigate to https://github.com/KimBergstroem/PP5.
- Click the green "Code" button at the top right.
Clone the Repository:
- Select the "Clone by HTTPS" option and copy the provided URL to the clipboard.
Terminal and Git:
- Open your code editor or terminal and navigate to the directory where you want to clone the repository.
- Run
git clonefollowed by the copied URL. - Press enter, and Git will clone the repository to your local machine.
To fork the repository, follow these steps:
- Go to the GitHub repository.
- Click on the Fork button in the upper right-hand corner.
- Wait for the forking process to complete. Once done, you will have a copy of the repository in your GitHub account.
To clone the repository, follow these steps:
- Go to the GitHub repository.
- Locate the Code button above the list of files and click it.
- Select your preferred method for cloning: HTTPS, SSH, or GitHub CLI, and click the copy button to copy the repository URL to your clipboard.
- Open Git Bash (or your preferred terminal).
- Change the current working directory to the location where you want the cloned directory to be created.
- Type the command
git clonefollowed by the URL you copied in step 3. The command should look like this:git clone https://github.com/YOUR-USERNAME/YOUR-REPOSITORY. - Press Enter to create your local clone.
I would like to express my gratitude to the following resources, which have been a huge help to me in the development of the EasyKeyBoard E-commerce project.
Images are taken from the following page:
- Leonardo.ai Used as a landing page hero image
- Keychron Used for some of the product images, this images are not made by me or easy keyboard maker
The official Django documentation has been an invaluable resource throughout the project, providing comprehensive guidance on models, forms, templates, and various aspects of Django development.
- Models
- Form Validation
- Model Field Types
- CSRF Trusted Origins
- Built-in template tags and filters
- Creating forms from models
- Model instance reference
- Signals
- Using mixins with class-based views
- Using widgets in the form
- Date string form
- Custom Clearables
- Annotate() used to add aggregate values to each objects in a queryset
- Avg calculates the average value of my review star rating
- 'help_text' used to perform sub text under input field in forms
- DoesnotExist, used to check is product is existing
I would like to extend my appreciation to the authors of the tutorials and YouTube channels that have shared their knowledge and expertise in Django development, enabling me to learn and apply best practices in building this project.
- Django Tutorial - Setup
- Style The Login Page With Bootstrap
- User Profile Update Display View with Image
- Style The Post details view
- Automated Testing: Behaviour Driven Development with Naoise Gaffney
- Django Testing Tutorial - How To Test Your Django Applications
- Understand 'Newsletter' function and sending email with django
-
Paragraphs/text for the webpage/readme was written together with ChatGPT
-
Tips and inspiration on how to create a better readme.md file kera-cudmore PowerPoint
-
English spellchecker as Google Chrome extension Grammarly
I'd like to give recognition to the individuals who supported me in completing this project:
- My family, for their patience and assistance in identifying spelling mistakes and testing issues. Their support has been invaluable in improving the quality of this project.
- Testers Debbie B and Sandra B for their significant contributions in providing feedback, identifying errors, and offering valuable insights.
- Brian, my Code Institute Mentor, for his exceptional guidance and expertise, which greatly contributed to my growth as a developer.
- Alan Bushell, our cohort facilitator, for his dedication and weekly meetings where he has provided guidance, support, and encouragement to our cohort.
Code Institute Slack Channel: I received feedback from numerous users in a channel with over 3,000 members where I shared my E-commerce project. I am genuinely appreciative of the valuable feedback I received from the community.
I am truly grateful for their contributions, which have greatly enriched my learning and development.
This project is licensed under the MIT License - see the LICENSE file for details.










































