Skip to content

AleksandarJavorovic/cooktopia

Repository files navigation

CookTopia

CookTopia is an imaginary e-commerce site, selling modern, functional kitchenware. Currently, the e-store specializes in selling knives, pots, pans, and some extra accessories with the intention of expanding the scope.

Our target customers are anyone in need of functional, modern, high-quality products for domestic or professional use.

CookTopia live project here.

Am I Responsive

Table of Contents

UI/UX

The design of the site is pretty simplistic yet modern I would say, with the easy-to-see navbar presenting the products the site is offering. The site follows a mostly black-and-white theme, where the fancy shade of red was used for some detailing.

The main background shows the first-time visitor what the site is about, and that the site is for those who cook with passion and expect nothing but quality.

The site is fully responsive, making it easy to use on phones as well as on PCs.

Agile Development

The site is developed according to the Agile Methodology, where the GitHub Project feature was used to utilize the Kanban board for this purpose.

While developing, I chose one issue to work on from the "Todo" column of the Kanban board and moved it into the "In Progress" column.

After I was done with the issue by fulfilling all the acceptance criteria, I moved the issue into the "Done" Column.

MoSCoW Prioratization

I chose to follow the MoSCoW Prioritization method to label my issues(user stories/features):

  • Must Have
  • Should Have
  • Could Have
  • Won't Have

The Must Have having the highest priority, next being Should Have and then Could Have, Won't Have presenting the features not being implemented at this point and time.

Back to Top

User Stories

User Story Priority
As a customer, I can view listed products, so that I can find something to buy. MUST HAVE
As a customer, I can view a detailed preview of the product, so that I can get more information about it(price, description, image...). MUST HAVE
As a customer, I can search for the desired product by name or description, so that I can find the specific product I want to buy. MUST HAVE
As a customer, I can see the total cost of the items in my bag, so that I can see if I am getting out of my budget. MUST HAVE
As a customer, I can sort specific categories of products, so that I can find the cheapest/best-rated product in the given category. SHOULD HAVE
As a customer, I can sort the list of products, so that I can easily find the best-priced/best-rated one. SHOULD HAVE
As a customer, I can change the quantity of the added items within the shopping bag, so that I can add/remove specific items if desired. SHOULD HAVE
As a customer, I can easily view the items added to my shopping bag, so that I can have an overview of the all items added and total cost. MUST HAVE
As a customer, I can select the quantity of the products, so that I can be sure to add the right quantity of the products to my shopping bag. MUST HAVE
As a customer, I can enter my payment information, so that I can checkout easily without any issues. MUST HAVE
As a customer, I can have insight into the order confirmation details, so that I can be sure I made no mistakes. SHOULD HAVE
As a customer, I can get registered, so that I can have a personal account/profile. MUST HAVE
As a customer, I can view my profile, so that I can view my order history and save/update shipping/paying information. SHOULD HAVE
As a customer, I can receive the confirmation email, so that I can be sure everything went well and keep it for just in case. SHOULD HAVE
As a customer, I can receive email confirmation after filling in the register form, so that I can verify my account registration was successful. SHOULD HAVE
As a customer, I can add items to wishlist, so that I don't need to search for them all over again when I decide to buy them. SHOULD HAVE
As a customer, I can recover my password, so that I can get access to my account in case I forget my password. SHOULD HAVE
As a customer, I can rate the product I already bought, so that I can leave positive/negative feedback. SHOULD HAVE
As a customer, I can see if there are any special offers/deals, so that I can enjoy the discounted price and save some money. WON'T HAVE
As a admin, I can perform CRUD operations, so that I can manipulate the site as desired. MUST HAVE

Back to Top

Wireframes

I have created wireframes within Balsamiq to get initial idea of how the site will look like.

  • Mobile and Tablet

    Home Page

    Home Page

    Shop

    Shop

    Product

    Product

    Shopping Bag

    Shopping Bag

    Shopping Bag Empty

    Shopping Bag Empty

    Checkout

    Checkout

    Order Confirmed

    Order Confirmed

    Profile Details

    Profile Details

    Sign Up

    Sign Up

    Sign In

    Sign In

    Sign Out

    Sign Out

    Wishlist

    Wishlist

  • Desktop

    Home Page

    Home Page

    Shop

    Shop

    Product

    Product

    Shopping Bag

    Shopping Bag

    Shopping Bag Empty

    Shopping Bag Empty

    Checkout

    Checkout

    Order Confirmed

    Order Confirmed

    Profile Details

    Profile Details

    Sign Up

    Sign Up

    Sign In

    Sign In

    Sign Out

    Sign Out

    Wishlist

    Wishlist

Back to Top

Site Goals

CookTopia is an e-commerce site offering a variety of kitchenware. It is currently focused on knives, pots, pans, and a few extra accessories. Customers are able to pay with cards thanks to the implemented Stripe payment system and get the products delivered to their door.

CookTopia is still in the growing phase with the intention of expanding the range of products offered, focusing on modern design, functionality, and above everything, high quality of products.

Simply said the goal is to become the final destination for those searching for high-quality kitchenware products.

Back to Top

Design Choices

Color Scheme

The site uses a kind of minimalistic approach, using black and white throughout the the site, gray for some hover effects, and a fancy shade of red for some extra details such as within the logo itself, delivery banner, and some buttons.

Design Colors

Font and Icons

The font used is Lato, from Google Fonts, which is a versatile, open-source humanist sans-serif font family that has gained immense popularity for its warmth, legibility, and multilingual support across print and digital mediums.

Icons used are from the Font Awesome free packet of icons.

Images

Images used for the products are taken artistically for a nice presentation, with an attempt to bring the practicality of the products closer to the customers.

Back to Top

Database Design

Database Model

The database model or so-called ERD(entity relationship diagram) was created to visualize the connection between models within the project. The diagram was created using Drawsql.app, here is the link to the diagram itself: CookTopia-ERD.

CookTopia - ERD

CookTopia - ERD

Custom Models

The custom models made for this project were:

  • Product
  • ReviewRating
  • Wishlist

Back to Top

Features

Home Page

Home Page

  • The landing page consists of Navbar, Main Section where we can find Shop Now button which takes us to the list of all products present at the site, Newsletter sign up option from MailChimp as well as Footer at the bottom of the page.

Back to Top

Navbar

  • Desktop

Navbar-Desktop

  • Mobile-Collapsed

Navbar-Mobile-Collapsed

  • Mobile-Open

Navbar-Mobile-Open

  • Navbar is fully responsive. Here we can find:
    • Logo, which acts as a Home button
    • Search Bar
    • My Account, with Icon for bigger screens
    • Wishlist, with Icon for bigger screens
    • Shopping Bag Icon, with the total amount under it
    • Burger Icon on small and medium screens
    • Home button for small and medium screens

Back to Top

Footer

  • Desktop

Footer-Desktop

  • Mobile

Footer-Mobile

  • The Footer is pretty simple and self explanatory.
  • The Footer is present at every page.
  • The Links towards the social networks are being opened within the new tab as good UX practices.
  • Privacy Policy also opens an independent page where the Policy is.

Back to Top

My Account

Not Authenticated

My Account Not Authenticated

Authenticated

  • Admin

My Account Authenticated

  • User

My Account Authenticated Customer

  • My Account section is a drop-down with few different options for the authenticated and not authenticated user as well as Product Managment Tab for the admins.

Back to Top

Product Management

Product Management 1 Product Management 2

  • Product Management is a page available to the admins, which enables them to add the products to the e-store.

Back to Top

My Profile

My Profile

  • This page consist of 2 sections:
    • Delivery Informations, which is there to store personal info about the users, address, number, country...
    • Order History, contains all of the previous orders, if there are any.

Back to Top

Wishlist

  • Empty

Wishlist Empty

  • Not Empty

Wishlist Not Empty

  • Wishlist is an feature coming handy for storing desired items for some future purchase. The products can be removed from the wishlist as well by clicking on the heart icon.

Back to Top

Shopping Bag

  • Empty

Shopping Bag Empty

  • Not Empty

Shopping Bag Empty

  • Shopping Bag is a page, where we can see details of the added items and cost of the planned purchase.
  • We are also able to directly change the quantity of item/s to buy or completely remove them if needed.
  • We can also continue shopping by clicking on the Keep Shopping button or proceed to Secure Checkout by pressing the aforementioned button.

Back to Top

Secure Checkout

  • Checkout consists of 2 sections:
    • Left Side, where we need to enter personal and delivery details, as well as payment details at the bottom
    • Right Side, where we have Order Summary once again to ensure everything is as desired.

Secure Checkout

  • Payment Details, here we need to enter the card number, date of expiration and bic/swift code.

Secure Checkout Buttons

  • Here is an example of the testing the payment process, provided by Stripe. For this testing to work the month must be the present one or any month in the future.

Secure Checkout Buttons Test

  • Loading process/making payment, symbolically presented with a loading symbol, letting the customer know that the order is being processed.

Secure Checkout Loading

Back to Top

Thank You Page

  • After the successfully placed order, the customer is taken to the Thank You Page, where once again he/she is being presented with the order summery.
  • At the bottom is the Checkout Other Products button in case the customer wants to keep on searching through the site.
  • The Customer is also being informed that the confirmation e-mail has been sent to the provided e-mail address.

Thank You Page

Back to Top

Search Bar

  • No Search Criteria, in case someone clicks on search without typing in anything, the toast message will pop out.

Search Bar

  • No Matching, the look of the search page in case there are no matches. With the small line of text saying:"0 Products found for..."

Search Bar

  • Products Found, the look of the search page in case at least 1 product has been founded, in this case the line informs us that:"3 Products found for..."

Search Bar

Back to Top

All Products Page

  • By clicking on the All Products drop-down menu, we can choose to open the All Products page, sorting by one of the given criteria.
  • Similarly we can open one of the other sections, be it a Knives, Pans, Pots or Accessories.

All Products Drop-Down

  • All Products Page, lists all of the present products at the site, with possibility of sorting the products by:
    • Price
    • Rating
    • Name
    • Brand
    • Category

All Products Page

  • Under the picture of each product is a small section, where we can find:
    • Product Name
    • Brand
    • Price in €
    • Badge, representing the group of products
    • Rating
    • Edit/Delte Buttons (only for admins)
    • Add To Bag button
    • Quantity Button

All Products Page Closed Up View

  • Edit button takes the Admin to the Product Management page, in case some changes need to be done.
  • Delete button, deletes the product from the e-store.

Back to Top

Product Page

  • This page contains all info about the product as well as Review/Comment section under the Product.
  • The info about the Product from the All Products page is extended, and here we have added Description and Product Info.
  • Under the Product Info, we have:
    • Material
    • Diametar
    • Volume
    • Country of Origin

Product Page

Back to Top

Review Section

  • This section can be found under the Product Info on the Product Page.
  • In case the customer is authenticated and the given product is already in his order history, meaning he/she has already bought the product, the customer can leave a review.

Review Section

  • Authenticated, but the product is not in the order history

Review Section

  • Authenticated, the product is in the order history

Review Section

  • Not Authenticated

Review Section

Back to Top

Authentication

  • Depending on the status of the site user, different options will be rendered.

  • Not Authenticated users will see the option to Log In or Register

  • Authenticated users will have the option to Logout

  • The pages to Sign Up, Sign In, and Sign Out are pretty self-explanatory.

  • Sign Up

Sign Up

  • Sign In

Sign In

  • Sign Out

Sign Out

Back to Top

Password Reset

  • In case the customer forgets the password, there is a feature for password recovery.

  • It can be accessed from the Sign In Page, by clicking the Forgot Password? link.

  • Password Reset Form

Password Reset Form

  • Password Reseted, the info customer gets after he clicks Reset My Password button. At this moment the e-mail to reset the password is being sent to the customer.

Password Reseted

  • Password Change, the page customer is redirected to from the password reset e-mail.

Password Change

  • Password Changed, the page the customer lands on after the customer types in new passwords 2 times and clicks on the Change Password button.

Password Changed

Back to Top

Additional Features

  • Successful Registration

Successful Registration

  • Registration E-Mail Confirmation, the page the user lands on after clicking on the confirmation link within the registration confirmation e-mail.

Registration Confirmation

  • Product Badges, cards/links preseting groups of products, can be found at pages as Knives, Pots, Pans, and Accessories.

Product Badges

Back to Top

404 Page

  • The page that is rendered in case the user tries to open a non-existing page or simply appends /404 to the address of the site.

Password Changed

Back to Top

Future Features

  • A blog could be added, as a way of presenting the products to future customers to help them decide if the given product is the right one for them.

  • About Us Page, could be used to describe CookTopia as a reliable provider of high-quality kitchenware.

  • Some kind of counter where the staff, as well as customers, can see the most sold items.

  • The sales page could be used to introduce the discount possibilities.

  • Add wishlist button to the All Products Page to improve UX.

Back to Top

Business Model

  • The Site CookTopia is an e-commerce store, operating on the principles of Business to Customer model(B2C). For the sake of practicality, the site is designed so that both authenticated and non-authenticated users can make purchases.

Back to Top

Marketing Strategy

Social Media Marketing

  • The main task of this page on the social network Facebook is to inform others about our new products, as well as place targeted advertising.

    Facebook Marketing First

    Facebook Marketing First

    Facebook Marketing Second

    Facebook Marketing Second

Newsletter Marketing

  • At the Home Page is the Mailchimp newsletter form, where the customers can subscribe and get informed about the new arrivals.

    Mailchimp Marketing

    Mailchimp Marketing

    Subscribed Mails

    Mailchimp Marketing

Back to Top

Search Engine Optimization

Keywords

  • I tested several long-tail keywords using the websites Wordtracker, Moz. Most keywords showed low volume and competition.

    Keyword - Moz

    Keyword Moz

    Keyword - Wordtracker First

    Keyword Wordtracker First

    Keyword - Wordtracker Second

    Keyword Wordtracker Second

Meta Tags

  • In the head of base.html, under the Meta Tags section <meta name="description" ... and <meta name="keywords" ... tags were included.

Sitemap.xml

  • I created a sitemap.xml file using XML-Sitemaps, for the SEO improvements.

Robots.txt

  • I created a robots.txt file within my root directory.

    Robots.txt

    Robots.txt

  • The file instructs search engines which directories not to crawl and index. It also links to the sitemap. The existence of this file signals a level of quality to search engines and so improves SEO ranking as a result.

Back to Top

Technologies Used

Languages

  • HTML
  • CSS
  • Python
  • Javascript

Back to Top

Frameworks and Libraries

Back to Top

Tools

Back to Top

Testing

Back to Top

Deployment

A live version of the site is deployed to Heroku and can be found here: CookTopia.

PostgreSQL from Code Institute

  • Since the recent change at ElephantSQL, I've decided to go with the database CI provided for us.

  • To make the database for the project, the steps are next:

  • First go to PostgreSQL from Code Institute, enter your e-mail address and click submit.

    Step 1

    Step 1

  • Your database will get generated automatically and you will receive an e-mail with the info about your database.

    Step 2

    Step 2

  • Within the e-mail, you will have a link to your database dashboard. Here you can see all of the needed information about your database or delete them if you'd like to.

    Step 3

    Step 3

  • After you click the Info button, a list with all the needed information will pop up.

    Step 4

    Step 4

Back to Top

Heroku Deployment

Preparation

  • Before the deployment, the following steps were taken to prepare the application for the deployment on Heroku:

  • The setting DEBUG in the settings.py has to be set to FALSE.

  • It was achieved by the next lines:

  • Within settings.py:

      import os
      import dj_database_url
      if os.path.isfile('env.py'):
          import env
    
      DEBUG = 'DEVELOPMENT' in os.environ
    
  • Within env.py:

      os.environ["DEVELOPMENT"] = 'False'
    
  • Allow Heroku as host: In settings.py add ALLOWED_HOSTS = ['app-name.herokuapp.com', 'localhost']

  • All the dependencies were stored in the requirements.txt file with the command pip3 freeze --local > requirements.txt.

  • The start command for the application web: gunicorn cooktopia.wsgi:application was stored in a Procfile.

Back to Top

Deployment

  1. Go to Heroku, create account if you don't have and log in.

  2. Head to your dashboard and click New, then Create new app

    New/CreateNewApp

    New/CreateNewApp

  3. Next step is to give your app a name and to choose region. After that click on Create app.

    Name/Region/Create

    Name/Region/Create

  4. After that head to Settings tab which you can find on top of your Heroku page and under the Config Vars set your Key/Value Pairs.

    Config Vars

    Config Vars

  5. Then in the Buildpacks section you will need to add buildpacks. In this case Heroku/Python was already set, so I didn't need to change anything.

    Buildpacks

    Buildpacks

  6. Then head to the Deployment tab which you can also find on top of your Heroku page and under Deployment method click on GitHub(in my case that's where my repository is).

    GitHub

    GitHub

  7. After that, just under the Deployment method section is Connect to GitHub section where you need to find your repository and then click on Connect.

    Connect

    Connect

  8. Just under Connect to GitHub section is Automatic deploys section where you can click on Enable Automatic Deploys if that's what you want and just under is Manual Deploy section, where you need to click on Deploy Manually.

    Enable Automatic Deploys

    EnableAutomaticDeploys

    Deploy Manually

    EnableAutomaticDeploys

Back to Top

Amazon - AWS Hosting

  • This project uses AWS to store media and static files online, because Heroku doesn't persist this type of data.

  • Once you've created an AWS account and logged-in, follow these series of steps to get your project connected.

  • Make sure you're on the AWS Management Console page.

S3 Bucket

  • Search for S3.

  • Create a new bucket, give it a name (matching your Heroku app name), and choose the region closest to you.

  • Uncheck Block all public access, and acknowledge that the bucket will be public (required for it to work on Heroku).

  • From Object Ownership, make sure to have ACLs enabled, and Bucket owner preferred selected.

  • From the Properties tab, turn on static website hosting, and type index.html and error.html in their respective fields, then click Save.

  • From the Permissions tab, paste in the following CORS configuration:

     [
     	{
     		"AllowedHeaders": [
     			"Authorization"
     		],
     		"AllowedMethods": [
     			"GET"
     		],
     		"AllowedOrigins": [
     			"*"
     		],
     		"ExposeHeaders": []
     	}
     ]
  • Copy your ARN string.

  • From the Bucket Policy tab, select the Policy Generator link, and use the following steps:

    • Policy Type: S3 Bucket Policy

    • Effect: Allow

    • Principal: *

    • Actions: GetObject

    • Amazon Resource Name (ARN): paste-your-ARN-here

    • Click Add Statement

    • Click Generate Policy

    • Copy the entire Policy, and paste it into the Bucket Policy Editor

       {
       	"Version": "2012-10-17",
      "Id": "Policy111111111111",
      "Statement": [
       		{
       			"Sid": "Stmt11111111111",
         "Effect": "Allow",
         "Principal": "*",
         "Action": "s3:GetObject",
         "Resource": "arn:aws:s3:::bucket-name/*"
       		}
       	]
       }
    • Before you click "Save", add /* to the end of the Resource key in the Bucket Policy Editor (like above).

    • Click Save.

  • From the Access Control List (ACL) section, click Edit and enable List for Everyone (public access), and accept the warning box.

    • If the edit button is disabled, you need to change the Object Ownership section above to ACLs enabled.

Back to Top

IAM

From the AWS Services Menu, search for and open IAM (Identity and Access Management). Once on the IAM page, follow these steps:

  • From User Groups, click Create New Group.
    • Suggested Name: manage-cooktopia (manage + the project name)
  • Tags are optional, but you must click it to get to the review policy page.
  • From User Groups, select your newly created group, and go to the Permissions tab.
  • Open the Add Permissions dropdown, and click Attach Policies.
  • Select the policy, then click Add Permissions at the bottom when finished.
  • From the JSON tab, select the Import Managed Policy link.
    • Search for S3, select the AmazonS3FullAccess policy, and then Import.

    • You'll need your ARN from the S3 Bucket copied again, which is pasted into "Resources" key on the Policy.

       {
       	"Version": "2012-10-17",
       	"Statement": [
       		{
       			"Effect": "Allow",
       			"Action": "s3:*",
       			"Resource": [
       				"arn:aws:s3:::bucket-name",
       				"arn:aws:s3:::bucket-name/*"
       			]
       		}
       	]
       }
    • Click Review Policy.

    • Suggested Name: cooktopia-policy (site name-policy)

    • Click Create Policy.

  • From User Groups, click your manage-cooktopia.
  • Click Attach Policy.
  • Search for the policy you've just created ("cooktopia-policy") and select it, then Attach Policy.
  • From User Groups, click Add User.
    • Suggested Name: cooktopia-staticfiles-user (site name + staticfiles-user)
  • For "Select AWS Access Type", select Programmatic Access.
  • Select the group to add your new user to: manage-cooktopia
  • Tags are optional, but you must click it to get to the review user page.
  • Click Create User once done.
  • You should see a button to Download .csv, so click it to save a copy on your system.
    • IMPORTANT: once you pass this page, you cannot come back to download it again, so do it immediately!
    • This contains the user's Access key ID and Secret access key.
    • AWS_ACCESS_KEY_ID = Access key ID
    • AWS_SECRET_ACCESS_KEY = Secret access key

Back to Top

Final Setup

  • The DISABLE_COLLECTSTATIC within Heroku Config Vars can be removed now, as AWS will handle the static files from now on.
  • Within you S3 Bucket, create a new folder called: media.
  • Select any existing media images for your project to prepare them for being uploaded into the new folder.
  • Under Manage Public Permissions, select Grant public read access to this object(s).
  • No further settings are required, so click Upload.

Back to Top

Stripe

  • Stripe's API is used to handle payments. To setup Stripe follow next steps:

    • Create if you don't have and Log In to a Stripe account.
    • In the Stripe Dashboard -> Get your test API keys.
    • Add your STRIPE_PUBLIC_KEY and STRIPE_SECRET_KEY to your env.py, connect to your settings.py using your environment variables and then enter them into your project's Heroku Config Vars.
    • Including Stripe's Webhooks creates a failsafe if a customer exits the page during payment authorisation. In Stripe's Dashboard -> Developers -> Webhooks -> Add Endpoint: 'herokuapp url/checkout/wh'
    • Choose Retrieve all events -> Add Endpoint.
    • Add new key STRIPE_WH_SECRET to env.py, settings.py and Heroku Config Vars as before.

Back to Top

Google Mail API

  • Setup a Gmail Account that will be used to hold and store the emails for your project.
  • Log In and navigate to Settings -> See All Settings -> Accounts and Import -> Other Google Account settings
  • Activate 2-Step Verification
  • Once verified access App Passwords -> enter a name for the password.(e.g. Django-Project Name)
  • Click Create -> copy the 16 digit password that is generated.
  • In your settings.py add the following Email Settings:
# Sending Emails
if 'DEVELOPMENT' in os.environ:
    EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
    DEFAULT_FROM_EMAIL = 'cooktopia@example.com'
else:
    EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
    EMAIL_USE_TLS = True
    EMAIL_PORT = 587
    EMAIL_HOST = 'smtp.gmail.com'
    EMAIL_HOST_USER = os.environ.get('EMAIL_HOST_USER')
    EMAIL_HOST_PASSWORD = os.environ.get('EMAIL_HOST_PASS')
    DEFAULT_FROM_EMAIL = os.environ.get('EMAIL_HOST_USER')
  • Add EMAIL_HOST_PASS, EMAIL_HOST_USER to your Heroku Config Vars.

Back to Top

Development

Fork

  • A fork is a copy of a repository. Forking a repository allows you to freely experiment with changes without affecting the original project.

  • To fork a project, follow next steps:

    • Log into GitHub and click on repository to download: CookTopia
    • Click the Fork button in the top right-hand corner
    • Select a different owner, if desired
    • Click Create Fork
    • The repo is now in your chosen account

Back to Top

Clone

  • Changes made to a cloned repository will affect the original one if the branch to push to isn't changed.

  • To clone, follow the steps under:

    • Navigate to the main page of the repostitory (this could be a forked instance)
    • Click on the Code dropdown menu above the list of files
    • Choose a method to copy the URL for the repository: either via HTTPS, by using an SSH key, or by using GitHub CLI
    • In your work environment, open Git Bash and change current directory to target location for cloned repository
    • Type git clone followed by the copied URL and press enter Enter

Back to Top

Download as ZIP

  • Log In to GitHub and click on repository to download: CookTopia
  • Click on the Code dropdown menu and click Download Zip file
  • Once downloaded, extract ZIP file and use in your local IDE

Back to Top

Credits

Code

Back to Top

Media

  • Images used for this project are from Unsplash.
  • XXXLutz was used as inspiration while planning

Back to Top

Media

  • Images used for this project are from Unsplash.
  • XXXLutz was used as inspiration while planing the look of the site.

Back to Top

Acknowledgements

  • I want to say to my wife:"Thank you for all your love and support. <3"
  • I want to thank my mentor Mitko Bachvarov for tips and suggestions.
  • I want to thank our facilitator Kristyna, as well as our cohort members for advices and moral support during the course.
  • I want to thank to tutors at CI Tutor Support for all their help.
  • I want to thank to CI Student Support for their understaing and help.

Back to Top

About

E-commerce site for kitchenware.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors