The Zen Ceramics website is an online platform showcasing and selling artisanal ceramic products, emphasizing simplicity and elegance.
The purpose and goals of the Zen Ceramics website are to display and sell high-quality, artisanal ceramic products, promote the beauty and functionality of handmade ceramics, and connect with a community of ceramics enthusiasts who value craftsmanship and sustainability.
-
The target audience for the Zen Ceramics website includes art and design enthusiasts, individuals who appreciate handmade and artisanal home goods, professionals in the hospitality industry looking for unique tableware, and eco-conscious consumers interested in sustainable and locally crafted products.
-
For admins and employees, the Zen Ceramics website serves as a platform to manage product listings and process orders.
-
As an interior designer, I want to browse a curated selection of artisanal ceramics so that I can find unique pieces that complement my clientsβ design aesthetics.
-
As an eco-conscious consumer, I want to learn about the sustainability practices behind the ceramics, so that I can make informed decisions that align with my values.
-
As a home chef, I want to see detailed descriptions and high-quality images of ceramic tableware, so I can visualize how they would fit into my meal presentations.
-
As a gift shopper, I want to easily filter products by categories like price, occasion, or recipient preferences, so I can quickly find a thoughtful and unique gift.
-
As a repeat customer, I want the option to create an account where I can track my orders and save my shipping information to streamline future purchases.
-
As a new visitor, I want to see customer reviews and ratings for products, so I can gauge their quality and popularity before making a purchase.
-
As an enthusiast of handmade goods, I want to read about the artisansβ backgrounds and their creative processes, so I can feel a personal connection to the items I buy.
-
As a busy shopper, I want a mobile-friendly website that allows me to browse and purchase products easily from my phone, so I can shop whenever I have a few spare minutes.
-
As a site administrator, I want to easily add, update, or remove products from the website, so I can keep the product listings current with our inventory.
-
As a customer service representative, I want to access a customer's order history and current order status quickly, so I can provide them with accurate updates and support.
-
As a marketing manager, I want to create and manage promotional codes and discounts, so I can run marketing campaigns to drive sales and customer engagement.
-
As an email marketing specialist, I want to segment our customer base and target them with personalized email campaigns, so we can increase engagement and repeat purchases.
-
As a feedback analyst, I want to collect and analyze customer feedback and reviews, so we can identify areas for product improvement and enhance customer satisfaction.
- Direct Sales: Selling ceramics directly to consumers through the website.
- Commission from Artists: Earning a commission on sales for featuring independent artists' work on the platform.
- SEO: Implementing SEO best practices with a focus on keywords related to ceramics, pottery, and home decor to attract organic traffic.
- Social Media: Utilizing visually-driven platforms like Instagram and Pinterest to showcase products and share behind-the-scenes content from artists.
- Email Marketing: Developing a newsletter to share updates, artist stories, and exclusive offers with subscribers.
- Art and Craft Fairs: Participating in fairs to increase brand visibility and directly sell products.
- Collaborations with Designers: Partnering with interior designers and architects to recommend Zen Ceramics in their projects.
- Workshops: Hosting pottery workshops either virtually or in local studios to engage with the community and educate potential customers.
- Website Traffic: Measured through unique visitors and total visits.
- Conversion Rate: The percentage of website visitors who make a purchase.
- Customer Loyalty: Tracked through repeat purchases and subscription renewals for memberships.
- Market Saturation: Differentiating the product offering through unique, high-quality pieces and compelling artist stories.
- Dependency on Artists: Building a diverse network of artists to ensure a steady supply of new and varied ceramics.
- Economic Downturns: Offering products at various price points and promoting the intrinsic value and timeless nature of handcrafted ceramics.
Click here to view the Elements of the Design System
Color Palette
This color palette was selected to reflect the game theme, mood, contrast, and accessibility for an immersive and user-friendly experience.
This font was chosen for its bold and easy-to-read structure while maintaining the theme of of the website.
Font
Pacifico imported from Google Fonts
Inter 200 imported from Google Fonts
Inter 600 imported from Google Fonts
Inter 700 imported from Google Fonts
Iconography
Icons are taken from Bootstrap Icons
Additional Fonts, Buttons, Navbar, Activity Dasboard, Hover Effects and Cards
These elements are styled using Bootstrap 5.3
-
- Python 3.11.5: the primary language used to develop the server-side of the website.
- JS: the primary language used to develop interactive components of the website.
- HTML: the markup language used to create the website.
- CSS: the styling language used to style the website.
- Bootstrap: a CSS Framework used for developing responsive and mobile-first websites.
-
- SQLite: was used as a development database.
- PostgreSQL: the database used to store all the data.
- Elephant SQL: PostgreSQL database hosting service.
-
- Git: the version control system used to manage the code.
- Pip3: the package manager used to install the dependencies.
- Gunicorn: the webserver used to run the website.
- Spycopg2: the database driver used to connect to the database.
- Django-allauth: the authentication library used to create the user accounts.
- Heroku: the cloud platform used to host the website.
- ElephantSQL: the cloud database used to store all the data.
- GitHub: used to host the website's source code.
- VSCode: the IDE used to develop the website.
- Chrome DevTools: was used to debug the website.
- Bootstrap Icons: was used to create the icons used on the website.
- Miro was used to make a flowchart for the README file.
- Coolors was used to make a color palette for the website.
- W3C Validator: was used to validate HTML5 code for the website.
- W3C CSS validator: was used to validate CSS code for the website.
- JShint: was used to validate JS code for the website.
- PEP8: was used to validate Python code for the website.
- Django Q: Django Q is a native Django task queue, scheduler and worker application using Python multiprocessing. Used to update auction status after closure.
- Django Widget Tweaks: Used to add extra classes to django html.
- Cloudinary: Image/file cloud hosting service.
- Whitenoise: tool used in Django applications for serving static files.
- Unlighthouse: a tool designed to scan an entire website and evaluate it using Google's Lighthouse metrics.
- Mailchimp: Mailing list and Marketing service for newsletter.
Github's issues, issue labels, milestones and project management board was used to help me track and organise the work in this project:
The issues where orgnaised into Milestones and custom labels where create to add context and detail to each issue and it's status:
- #1 Project Setup and Configuration
- #2 Database and Model Design
- #3 User Authentication and Authorization
- #4 Core E-commerce Functionalities
- #5 Payment Gateway Integration
- #6 Frontend Development and UI/UX Design
- #7 Contact Form and About Page
- #8 Testing and Quality Assurance
- #9 Deployment and Initial Launch
- #10 Marketing and Outreach
- #11 Final Project Review and Documentation
- #12 User Profile Page and Purchase History
And then displayed on my Project Management Board:
Sorted by Issue Status and Milestone, clicking into the issue allowed for viewing labels and updating them:
Please refer to the FEATURES.md file for all features-related documentation.
- During develoopment the database was created using SQLite.
- The database was then migrated to PostgreSQL.
Field | Type | Description |
---|---|---|
user |
ForeignKey | Linked to Django's User model, nullable and blankable |
email |
EmailField | The email address of the user |
order_date |
DateTimeField | The date when the order was placed |
shipping_address |
TextField | The shipping address for the order |
total_price |
DecimalField | The total price of the order |
status |
CharField | The status of the order (Pending, Payment Complete, Shipped, Delivered) |
Field | Type | Description |
---|---|---|
order |
ForeignKey | Linked to Order model |
product |
ForeignKey | Linked to Product model |
quantity |
IntegerField | The quantity of the product |
price |
DecimalField | The price of the product |
Field | Type | Description |
---|---|---|
name |
CharField | The name of the product |
description |
TextField | The description of the product |
price |
DecimalField | The price of the product |
category |
CharField | The category of the product |
inventory |
IntegerField | The inventory count of the product |
image |
CloudinaryField | The image of the product, optional |
created_at |
DateTimeField | The date when the product was created |
updated_at |
DateTimeField | The date when the product was last updated |
Field | Type | Description |
---|---|---|
product |
ForeignKey | Linked to Product model |
user |
ForeignKey | Linked to Django's User model |
rating |
DecimalField | The rating given to the product |
comment |
TextField | The comment about the product |
created_at |
DateTimeField | The date when the review was created |
Field | Type | Description |
---|---|---|
user |
ForeignKey | Linked to Django's User model, nullable and blankable |
name |
CharField | The name of the person contacting |
email |
EmailField | The email address for contact |
subject |
CharField | The subject of the message |
message |
TextField | The message body |
created_at |
DateTimeField | The date when the contact was created |
Field | Type | Description |
---|---|---|
user |
ForeignKey | Linked to Django's User model |
product |
ForeignKey | Linked to Product model |
added_at |
DateTimeField | The date when the product was added to the wishlist |
notes |
TextField | Notes about the wishlist item, optional |
quantity |
IntegerField | The quantity desired, default is 1 |
Field | Type | Description |
---|---|---|
user |
ForeignKey | Linked to Django's User model |
name |
CharField | The name of the recipient |
address_line_1 |
CharField | The primary address line |
address_line_2 |
CharField | The secondary address line, optional |
city |
CharField | The city |
state_province_region |
CharField | The state, province, or region |
postal_zip_code |
CharField | The postal or zip code |
country |
CharField | The country |
phone |
CharField | The contact phone number |
is_default |
BooleanField | If this address is the default address |
created_at |
DateTimeField | The date when the address was created |
updated_at |
DateTimeField | The date when the address was last updated |
Please refer to the TESTING.md file for all test-related documentation.
-
The website was deployed to Heroku.
-
The database was deployed to ElephantSQL.
-
This website can be found here link.
Please refer to the DEPLOYMENT.md file for all deployment-related documentation.
- All images used on the website are taken from Pexels under free license.
- Lots of information taken from this youtube video on Django from FreeCodeCamp.
- The entire series on advacned Python from Patrick Loeber.
- This video on AJAX Requests from Net Ninja.