Skip to content

Ethra8/english-grows

Repository files navigation

ENGLISH GROWS

image

Overview

This site is an e-commerce with integrated marketing tools capable of easily creating a marketing emailing campaign within minutes, apart from creating and sending a newsletter to subscribers. This functionality allows authorized users to create customized email templates, and send an email campaign/newsletter to all subscribers.

The site offers services in the education industry, both to B2C and B2B potential customers. More specifically, online English teaching services by live qualified English teachers. The services provided are the following:

  • B2C

    • Individual Lesson Packs
    • Reduced Group courses
  • B2B

    • Customized corporate professional training plans

Live Site

  • You can view the deployed site on Heroku here

Repository

  • You can check the Github repository here

Author

Edna Torres Munill

TABLE OF CONTENTS

UX

You will find in the points stated below a brief study aiming at providing the user with the best possible experience when visiting this site.

Target Audience

B2B

Any company interested in improving its employees' level of English for one of the following reasons:

  • Wants to compete in the international market
  • Operates locally with international customers

B2C

Any individual person wanting to improve their level of English for one of the following reasons:

  • Travel
  • Careers
  • University Students (e.g: Students must certify a B2 level of English to apply to the Erasmus program)

Project Goal

  1. The site aims at providing B2B and B2C customers with services they can buy: live online lessons in individual or reduced groups format.
  2. Any user can register for an account.
  3. B2B users can send a contact form to receive customized offers on the type of service desired for their company.
  4. B2C services available can be stored in a shopping bag and bought online through Stripe API.
  5. All users can subscribe to the monthly newsletter. Members of the monthly newsletter are informed of interesting cultural events, and social and historic facts related to the British culture, and English speaking countries around the world.

USER STORIES

AS A FIRST-TIME VISITOR

B2C and B2B

  • 1. MUST: I want to check the social media links to see the website profile on social media platforms such as FB, for instance, to look at photos from past events, and maybe follow.
  • 2. MUST: I want to check the about page, to be informed of the site's purpose.
  • 3. MUST: I want to clearly see at first glance the part of the site that is specially dedicated to me (B2B or B2C)
  • 4. MUST: I want to subscribe to the newsletter to receive special offers and tips.

B2B

  • 5. MUST: I want to be able to easily contact the site to receive a customized training plan and quote.

B2C

Viewing and Navigation
  • 6. MUST: I want to view all the available services listed, so that I can easily choose what service suits me best.
  • 7. SHOULD: I want to be able to view specific type of service, so that I can quickly find services I'm interested in without having to go through all the services (e.g.: individual exam preparation classes)
  • 8. MUST: I want to be able to view individual service details, so that I can read a more detailed description, and check further details.
  • 9. SHOULD: I want to be able to easily view the total of my purchase at any time, so that I can avoid spending too much.
Sorting and Searching
  • 10. SHOULD: I want to sort the full list of available services by categories or by price, so that I can easily identify the one that suits me best.
  • 11. SHOULD: I want to sort a specific category of services by price, or alphabetically so that I can identify the best-priced services in a specific category.

AS A RETURNING VISITOR

  • 12. MUST: I want to be able to easily register for an account, and receive an email confirmation after registering, so that I can verify that my account registration was successful.

AS AN AUTHENTICATED USER & SHOPPER

  • 13. MUST: I want to be able to easily login and logout, so that I can access my personal account information.
  • 14. MUST: I want to be able to easily recover my password in case I forget it, so that I can recover access to my ccount.
  • 15. MUST: I want to be able to have a personalized user profile, so that I can view my personal order history and order confirmations.
  • 16. MUST: I want to be able to update and save my personal account information on my user profile.
  • 17. MUST: I want to able to easily access my bag, and update or delete any items in it.
  • 18. MUST: I want to be sure that my personal is secured, and that no one else can access my profile, nor my order urls, which also contain personal .
  • 19 MUST: I want to make secure online payments to be able to purchase online teaching services.
  • 20. MUST: I want to receive a confirmation email after a purchase, with the details of my order.
  • 21. MUST: I want to be able to view past orders, and read their full information from my personal profile.
  • 22. MUST: I want to see success or error messages for every action undertaken so that I can be informed of the state of my actions.

AS A SITE OWNER OR ADMIN USER:

  • 23. MUST: I want to be able to sort orders by users, so that I can easily check the orders related to a specific user.
  • 24. MUST: Each order is automatically linked to the authenticated user making it.
  • 25. SHOULD: Each user's email is stored in a separate email list, to easen up future emailing campaigns.
  • 26. MUST: I want to be able to store in admin from B2B contact requests, so that I can easily rewiew company requests, and have their contact emails, name, company name, and request secured and handy.
  • 27. SHOULD: I want to be able to edit and delete existing services directly from the site, without having to access the lesser user-friendly admin panel.
  • 28. SHOULD: I want to be able to add a new service directly through the site, without having to access the lesser user-friendly admin panel.
  • 29. MUST: I want that only authenticated users can make an order, so that personal from all users is protected.

AS A MARKETER

  • 30. SHOULD: I want to be able to create editable email templates for the newsletter or emailing campaigns (Marketing campaigns).
  • 31. SHOULD: I want to be able to send marketing campaigns to subscribed users.
  • 32. SHOULD: I want to be able to send a newsletter to users that are subscribed.

N.B.: FUTURE FEATURES or 'WISHES' stated in Future Features

UI

AGILE METHODOLOGY

This project has been development with the Agile development method in mind, although at times, it might not have fully followed the methodology to a full extent.

  • User stories have been created and implemented one at a time, and have been labelled following the MoSCoW priorization logic: Must & Should have. Future features have been, and will be, created following the same logic, adding Could and Won't/Wish labels.
  • Keeping in line with the Agile development methodology, a Kanban board has been created, and used to track user sttories, and bugs during development: Kanban Project

STRUCTURE

PAGES

The following fully responsive pages form the structure of this site:

HOME Page

English.Grows.-.Am.I.Responsive_.-.Home.PAGE.mp4

INDIVIDUAL SERVICES Page

Am.I.Responsive_.-.Service.details.page.2.mp4

SERVICE DETAILS Page

Am.I.Responsive_.-.final.service.details.page.mp4

BAG Page

English.Grows.-.Responsive.BAG.PAGE.mp4

CHECKOUT Page

  • MOBILE:

    English.Grows.-.Checkout.Page.-mobile.mp4
  • TABLETS:

    image

  • DESKTOP:

    image

COMPANIES Page

English.Grows.-.Am.I.Responsive_.-.COMPANIES.PAGE.mp4

ABOUT Page

image

404 ERROR Page

image

ACCOUNT Pages

  • User authentication has been implemented in this site by installing django-allauth, whose User model is also used.
  • An instance of the UserProfile model in the profile app is automatically created each time a new User model instance is created. Therefore, each time a user registers for an account, a personalized user profile is created, which includes basic user personal information, and past order details.
  • The django default templates have been customized to match the look and feel of the site.
CLICK HERE to view a sample of the MOBILE customized account pages
  • image
  • image
  • image
CLICK HERE to view a sample of the TABLET customized account pages
  • image
  • image
  • image
CLICK HERE to view a sample of the TABLET customized account pages
  • image
  • image
  • image

SITE STRUCTURE

The site has been developed using Django 5.1 framework for Python 3.12, and contains the 5 different apps stated below, forming its overall structure. Within each app, different models, views, urls, and templates create the logic of the site. The User model from django all-auth has also been used:

  • DJANGO CUSTOM APPs:
    • Bag
    • Checkout
    • Home
    • Individual_services
    • Profiles

BAG app

This app does not contain any model, but contains different views, templates and urls to perform the following functionalities:

  • Add items in bag
  • Show styled bag to user
  • Update de quantity of a specific item in the bag
  • Delete a specific item.

CHECKOUT app

This app contains the following pages (templates) and functionalities (models & views):

  • PAGES:

    • Checkout page
    • Checkout Success page (order details)
    • Checkout Confirmation Email (template used to send order confirmation email to user)
  • FUNCTIONALITIES:

    • Create an order if user if authenticated, for protection
    • Include in the order the items in the bag
    • Stripe API Integration to allow secure online payments
    • Checkout functionality
    • Sends order confirmation email to user

HOME app

This app contains the following pages (templates) and functionalities (models & views):

  • PAGES:

    • Home page
    • Companies page (B2B contact form)
    • About page
    • Subscribe form page
  • FUNCTIONALITIES:

    • Users can navigate to different sections of the site from the home page, which is the landing page
    • Users can check the about page
    • B2C & B2B customers can identify their dedicated section, and can navigate anywhere on the site
    • B2B can send a contact request via the form in the companies page
    • Users can subscribe to the newsletter
    • Admin Users can create email templates for a newsletter or an emaling campaign

INDIVIDUAL SERVICES app

This app contains the following pages (templates & urls) and CRUD functionalities (models & views):

  • PAGES:

    • View all individual services
    • View service details page
    • Add a new service page
    • Update a service page
    • Delete a service page
  • CRUD FUNCTIONALITIES

    • Authorized users can CREATE (add) a service
    • Users can READ (view) all services for individuals
    • Authorized users can UPDATE a service
    • Authorized users can DELETE a service
  • OTHER FUNCTIONALITIES

    • Users can sort services by type or price, and sort within a certain type by price or alphabetical order
    • Users can search the site for a specific word
    • Users can check each service's details page
    • Users can adjust quantity of a specific service to include in the bag

PROFILES app

This app contains the following pages (templates & urls) and CRUD functionalities (models & views):

  • PAGES:

    • Profile page
  • FUNCTIONALITIES:

    • Users can update their personal information
    • Users can view past order details

DATABASE STRUCTURE - MODELS

  • A PostgreSQL database has been used to build this project from scratch. For th initial stages of the developments, the sjango sqlite3 was utilized at first, but quickly moved to PostgreSQL database.
  • Several apps have been created to store the different modules that have been created, using Django 5.1 framework, in order to store the site's data in the database. All the data models of the site can be found in this Googlesheet

ERD (Entity Relationship Diagram)

Als on this sheet:

image

CHECKOUT App - Models

This app has the following models:

image

HOME App - Models

This app has been created to store the home page index.html template, views and urls. For simplicity sake, the model that store data from the Companies section form has also been included in this app. Should the companies' section be widenned in the future, an independent app would be created to store this model and the subsequent templates, urls, and views.
This app contains 2 forms, whose data is stored, and CRUD can be performed from the admin panel by an authorized user:

  • The B2B Contact Form takes user input in the companies page form, and posts the user request from CompanyContactform model, passing data to CompanyContact model whihc takes all the data and is registered to the admin model.

  • The Subcribe Form only takes the name and email of any user, and stores it to create marketing campaigns, more specifically, emailing campaings. The data is reflected in the admin.

  • The EmailTemplate model allows authorized users to perform CRUD functionality, to create email templates for marketing campaigns.

  • The function send_email_campaign in the utils file is included in the options dropdown of the Email Template model in the admin panel.

  • To conduct a marketing campaign (emailing), the authorized user only has to create or edit an existing email template, then save it, select it, select the option send email campaign on the dropdown, click on go, and the email template selected is automatically and instantly sent to all subscribers.

    image

INDIVIDUAL SERVICES App - Models

image

PROFILES App - Models

image

DESIGN CHOICES

The design of this site has been thought to reflect professionality and inspire trust.

HERO IMAGE

The following image has been created to be the hero image. The globe is the same as in the logo, and has been selected to represent both the global reach that online classes have, and the global importance of English as a lingua franca. Three small birds have been included to the image, to represent the freedom that learning English can bring to people (traveling, business, etc.), the communication capability boost, and all three form a small group, to represent the small group learning format offered. The colours of the hero image match the look and feel of the site, also in harmony with the logo.

image

COLOUR PALETTE

This is the palette used, contrasting with white fonts on darker backgrounds. Blue tones are proven to foster a state of relaxation and wellbeeing, optimal for the learning process:

English Grows color palette

TYPOGRAPHY

The following fonts have been used, all from Google Fonts:

  • Montserrat: Used for all main text in the site, the header and subheader of the For Companies page, and the alert messages.

  • Big Shoulders Display: On the main heading of the landing page for the title English Grows, to match the logo styling, as well as for the other pages headings

  • Charmonman: Used for the landing page's subheading/slogan, and for the services page's part of the heading that says'for you', to match the logo styling

    English.Grows.-.fonts.mp4

WIREFRAMES

MOBILE & TABLET (Portrait)

CLICK HERE to see the Mobile & Tablet (portrait) Wireframes - HOME Page

image

  • INDIVIDUAL SERVICES Page

    image

  • SERVICE DETAILS Page

    image

  • SHOPPING BAG Page (form)

    image

  • MY PROFILE Page (list)

    image

  • COMPANIES CONTACT Page (form)

    image

  • ABOUT Page

    image

  • SUBSCRIBE Page

    image

DESKTOP & TABLET (Landscape)

CLICK HERE to see the Desktop and Tablet (Landscape) Wireframes
  • HOME Page

    image

  • INDIVIDUAL SERVICES Page

    image

  • PACK DETAILS Page

    image

  • SHOPPING BAG Page

    image

  • MY PROFILE Page

    image

  • COMPANIES Page (B2B contact form)

    image

  • ABOUT Page

    image

  • SUBSCRIBE Page (newsletter susbscription form)

    image

FEATURES

IMPLEMENTED FEATURES

Responsiveness

This site has been designed and coded to be fully responsive, even in extra small devices of the range of a 250px wide viewport, assuring that the site has an optimal display to virtually every device in the market.

Accessibility

This site has been coded by always keeping accessibility in mind, and achieving good results during the testing phase. For further reference, please check the accessibility reports here.

User Authentication

  • These models also come from django-allauth, and is used to give certain permissions to users, to verify them manually, update information, or delete them. Groups can be created to group users by current English language level, for instance:

    image

Django all-auth module has been implemented in the site. It allows to easily secure user personal imnformation stored in the profile, or to restrict access to order url to the same authenticated user. Templates have been customized to match the look and feel of the site.

CLICK HERE to see the customised templates
  • image

  • image

  • image

  • image

  • image

  • image

  • image

  • image

English.Grows.-.Google.Chrome.2024-09-11.21-40-48.mp4

Online Payments - STRIPE API

Stripe secure payment platform has been implemented in this site, and is fully functional. Users receive a confirmation email after the purchase, and webhooks have also been implemented:

image

image

CRUD Functionalities

Admin Console - CRUD Funtionalities

The admin console reflects most of the models present in this site, and also some features from django-allauth module's user model. Authorized users (admin superusers) can create,read,update and delete (CRUD) any data model from the admin panel. Therefore, admin users with the necessary permissions can perform full CRUD functionalities on the following data models stored in its postgreSQL database:

  • Services

  • Types of Services

  • Users

  • User Profiles (profile model)

  • Contact Requests (via B2B contact form)

  • Orders

    image

Accounts

From django User model, stores registered users' emails for future emailing campaigns.

Profile

  • After each user is created, a profile is automatically created as well, and is stored in the admin. The user can update their information through their 'profile', but the admin can also update each user profile manually:

    image

Home

  • As the contact form on the 'For Companies' page is stored in the home app, this model has been created to store the contact requests sent by the users:

image

image

  • This app also features the subscription form, and the functionality to create an emailing campaign directly and easily from the admin panel. Authorized users can create an email template with user-friendly editable text area (used django-summernote for this purpose), and a function sends the email to all subscribers with just one click:

    english-grows-477471d17e50.herokuapp.com_admin_.-.Google.Chrome.2024-11-13.13-45-25.mp4

Checkout

The orders created by the Order model are stored in the database, and reflected in the admin panel:

image

image

Services - CRUD from site

  • To improve UX and the overall UI, authorized users (admin superusers) can create,read,update and delete (CRUD) the data model for Individual Services, including the service image, directly through the site without need to enter the lesser user-friendly admin panel. Thus, Services can be created, read, updated, or/and deleted through the main service page in the site:

    image

    image

Navigation Bar

There are two navigation bars and both are fully responsive:

  1. The first, topnav, is fixed to the top of each page in the site, including the 404 error page, for an improved UX. It has a dark blue #003366 background color, with white font and icons. It contains the logo on the left, which links to the home page, and two icons taken from Fontawesome:
  • user icon: Has a dropdown menu whose options link to the user's profile (when signed in) and logout (when signed in, login if logged out). When the user is logged in, the user name displays below the icon.
  • bag icon: Links to the shopping bag. Below the icon, the total amount of items stored in the bag is displayed.
  1. The second, nav, is only present in the individual services page, accessed through the For You button on the home page. It has a search bar to search for specific words within all the services names and descriptions.
English.Grows.-.Google.Chrome.2024-09-11.21-11-33.mp4

Footer

The fully responsive footer is pushed to the bottom of every page, including the customized 404 error page. It includes the following features and links:

image

  • Links to the following pages of the site, as some sort of secondary navigation bar:
    • About Page
    • Services Page for B2C customers (your you)
    • Companies page (B2B contact form)
  • Banner links to newsletter subscription form
  • Social media icons for facebook, instagram, youtube, and twitter
  • Copyright notice
English.Grows.-.Google.Chrome.2024-11-12.04-01-43.mp4

Forms

B2B CONTACT Form

English.Grows.-.Google.Chrome.2024-09-11.21-06-53.mp4

SUBSCRIBE FORM

image

Product Sorting

English.Grows.-.Google.Chrome.2024-09-11.20-26-00.mp4

Search Bar

The search bar is on the for you service page:

image

Shopping Bag

Whithin the shopping bag, users can update quantity of service packs to buy, and delete any service from the bag as well. The subtototal is updated too depending on the quantity of each item. Then the user can check out, or return to services. Please refer to the following videos and screen captures to see all these features in action.

English.Grows.-.Google.Chrome.2024-09-11.20-26-00.mp4

image

image

English.Grows.-.Google.Chrome.2024-09-12.06-07-54.mp4
  • For the sake of improving UX on mobile, without loosing too much screen space, a quantity picker has been added to the bag:

    image

Organize Users by Groups or Levels

This site offers the possibility to the admin users to create groups with unique names, and include users in them:

image

404 Error Page

To improve UX, the 404 error page has been styled to the look and feel of the site.

image

WEB MARKETING

SEARCH ENGINE OPTIMIZATION (SEO)

KEYWORDS AND METATAGS

To improve SEO ranking, the tool Word Tracker has been used to research keywords.

  • Keywords and phrases have been included in the about page within tags to highlight their importance to the SE:

    image

  • I have included the following meta tags and other SEO relevant info:

<meta name="theme-color" content="teal">
<meta name="description" content="English Grows is a site that offers English teaching services online to B2B and B2C customers, offering     
   individual lesson packs and reduced group formats">
<meta name="keywords" content="English learning, teaching English, English classes online, English lessons online, English tutor, online teacher, English teacher, private lessons online, reduced group classes, online reduced groups, e-learning, corporate English lessons, online reduced classes, live English lessons">
<meta name="author" content="Edna Torres Munill">

sitemap.xml

This file lists the website’s essential pages, making sure Google can find and crawl them all. It also helps search engines understand the website structure, and can help speed up content discovery. Having included this file, improves the site quality, allowing for a better SEO indexing.

To create the file, follow these steps:

  1. Go to Xml-sitemaps.com, and include the site's url to generate the xml file, and click on START:

    image

  2. The file will automatically be generated after the tool crawls all the site's urls (could take a moment, depending on site's complexity). Once completed, click on 'view sitemap details':

    image

  3. Download the file, and include it in the site's main root directory

robots.txt

This files disallows crawler spiders to crawl to certain urls in the site, which should not be shown to users on a search engine. All urls of the following directories have been disallowed for security and for a meaningfulness search:

  • Account
  • Bag
  • Profile

SOCIAL MEDIA MARKETING

To promote this site's visibility and to improve customer reach, a mockup profile has been created in the social media platform of facebook:

image

EMAIL MARKETING

NEWLETTER

A form has been included to enable users to subscribe in order to receive special offers and tips. Only a name a an email is requested, and the data is stored and easily accessed through the admin panel. A model allows authorized users to perform CRUD functionlity on the admin panel to create email templates for a newsletter, in this case.

EMAIL MARKETING CAMPAIGNS

A model allows authorized users to perform CRUD functionlity on the admin panel to create email templates for emailing campaigns, in this case. A fucntion hsa been added, so that when a specific email is checked (selected), and the option send email campaign is selected on the dropdown in the email templates model, when the user clicks on go, the email template selected gets automatically sent to all the users who subscribed to the newsletter.

This way, this function has a double purpose: To send the newsletter, and to send other marketing campaigns.

English.Grows.-.Google.Chrome.2024-11-12.05-25-03.mp4

FUTURE FEATURES

These future features are thought of as being some of the user's imagined wishes:

  • WISH: As an admin user, I want to include additional fields in the user profile, in order to be able to track students' progress.
  • WISH: As an admin user, I want to receive an email each time a B2B user sends a request via the contact form, in order to be able to easily keep track of incomming requests.
  • WISH: As an B2B user, I want to receive a copy of the request made via the contact form, in order to be able to have a reminder of my request.

TESTING

DEFECT TRACKING

GITHUB ISSUES

All issues have been solved, and closed in Github by the creator of this site.

DEFECTS OF NOTE

No defects of note have been detected on this site.

OUTSTANDING DEFECTS

No outstanding defects have been detected in this site.

COMPATIBILITY AND RESPONSIVE TESTING

PRESELECTING TESTING TARGETS

  • For a meaningful testing of the site, Stat Counter has been used, in order to get an insight of the following:

    • BROWSER MARKET SHARE - Most commonly used browsers worldwide:

    image

    • BROWSER VERSION MARKET SHARE - Most commonly used browser versions worldwide:

    image

    • OS MARKET SHARE - Most commonly used operation systems worldwide:

    image

    • MOBILE vs DESKTOP vs TABLET MARKET SHARE - Most commonly used devices worldwide:

    image

    • SCREEN RESOLUTION STATS - Most common screen resolution (in pixels) worldwide:

    image

TESTING TARGETS TABLE

Following all the above information, compatibility and responsive testing has been done on the most common browser versions, OS, and screen resolution combinations, by using Browser Stack Chrome extension, the Chrome Dev tool's emulator, and real devices. On the mobile real device, XRecorder app has been used.
NB: As BrowserStack now charges for testing a device over 1 minute limit time for their free version, the following testings for this project have been adapted to this inconvenience. In case of it being a real business, I would pay the subscription to get a full-time testing account.

Please find the correspondent compatibility and responsive testing reflected in the following table:

TEST no. TOOL DEVICE BROWSER OS VIEWPORT width x height (px)
1 Chrome Dev emulator Samsung Galaxy S8 Chrome 117 Windows 11 360 x 740
2 BrowserStack Samsung Galaxy S20 Samsung Android 10.0 360 x 800
3 BrowserStack iPhone XS Safari iOS 15.0 375 x 812
4 REAL mobile device Samsung Galaxy A22 5G Chrome Android 13.0 384 x 729
5 BrowserStack Samsung Galaxy S23 Ultra Chrome Android 13.0 384 × 824
6 BrowserStack iPhone 15 Pro Safari 17 iOS 393 × 852
7 REAL Laptop Device HP Laptop 15s-fq4xxx Chrome 129.0.6668.72 Windows 11 Home 1536 x 776
8 BrowserStack HP Laptop 15s-fq4xxx Firefox 131 Windows 11 -64bit 1536 x 776
9 BrowserStack MAC Safari 17 MacOs Sequoia 1536 x 776

TEST RESULT VIDEOS

TEST 1

English.Grows.-.Google.Chrome.2024-11-13.23-59-37.mp4

TEST 2

Samsung.Galaxy.S20.v10.0.-.Google.Chrome.2024-11-14.00-03-10.mp4

TEST 3

iPhone.XS.v15.3.-.Google.Chrome.2024-11-14.00-06-38.mp4

TEST 4

english-grows.testing.mp4

TEST 5

Samsung.Galaxy.S23.Ultra.v13.0.-.Google.Chrome.2024-11-14.00-11-27.mp4

TEST 6

iPhone.15.Pro.v17.2.-.Google.Chrome.2024-11-14.00-16-58.mp4

TEST 7

English.Grows.-.Google.Chrome.2024-11-13.23-49-23.mp4

TEST 8

Dashboard.-.Google.Chrome.2024-11-13.23-30-22.mp4

TEST 9

Dashboard.-.Google.Chrome.2024-11-14.00-25-14.mp4

CORE WEB VITALS

The following tests have been run for this project:

LIGHTHOUSE REPORTS

To improve my first report, the following actions have been taken:

  • Include a site.manifest
Click HERE to check the HOME PAGE Lighthouse Reports

image

image

Click HERE to check the COMPANIES PAGE Lighthouse Reports

image

image

Click HERE to check the ABOUT PAGE Lighthouse Reports - Mobile & Tablet (portrait) * You can access full report: [Lighthouse report MOBILE - About page.pdf](https://github.com/user-attachments/files/17694805/Lighthouse.report.MOBILE.-.About.page.pdf)

image

image

Click HERE to check the INDIVIDUAL SERVICES PAGE Lighthouse Reports - Mobile & Tablet (portrait) * You can access full report: [Lighthouse report MOBILE - Individual services page.pdf](https://github.com/user-attachments/files/17694753/Lighthouse.report.MOBILE.-.Individual.services.page.pdf)

image

image

Click HERE to check the SERVICE DETAILS PAGE Lighthouse Reports - Mobile & Tablet (portrait) * You can access full report: [Lighthouse.report.MOBILE.-.services.details.page.pdf](https://github.com/user-attachments/files/17706699/Lighthouse.report.MOBILE.-.services.details.page.pdf)

image

image

Click HERE to check the SERVICE DETAILS PAGE Lighthouse Reports - Mobile & Tablet (portrait)

You can access full report: Lighthouse report MOBILE - bag page.pdf

image

image

Click HERE to check the CHECKOUT PAGE Lighthouse Reports - Mobile & Tablet (portrait) * You can access full report: [Lighthouse report MOBILE - checkout page.pdf](https://github.com/user-attachments/files/17706908/Lighthouse.report.MOBILE.-.checkout.page.pdf)

image

image

Click HERE to check the PROFILES PAGE Lighthouse Reports

image

image

Click HERE to check the 404 ERROR PAGE Lighthouse Reports
  • This customized 404 error page has received a 100% score in accessibilitty, although, of course, SEO and Best Practices encounter the 404 error in the system and therefore reesult in a lower percentage due, precisely at fact of it being a 404 error page. (pardon the redundancy).

  • Mobile & Tablet (portrait) You can access full report: Lighthouse report MOBILE - 404 Error page.pdf

image

image

Click HERE to check the ACCOUNT PAGES Lighthouse Reports

As these are django built-in templates which have only been styled using some CSS classes, only one page has been tested, as to reflect their overall performanco"

image

image

CODE VALIDATION

HTML 5

No errors nor warnings have been found when passing HTML validator:

  • BAG App

    • bag.html

      image

  • CHECKOUT App

    • checkout.html image

    • checkout_success image

    • order_confirmation_email.html image

  • HOME App

    • about.html image

    • companies.html image

    • index.html image

    • subscribe_form-html image

  • INDIVIDUAL SERVICES App

    • add_service.html image

    • delete_confirmation.html image

    • edit_service.html image

    • individual_services.html image

    • pack_details.html
      image

  • PROFILES App

    • profiles.html image

CSS 3

No errors were found when passing the W3C validator:

Main CSS

This file contains the main CSS of the site. It is in the directory: /static/css/base.css. Check the file here

image

Profiles CSS

This file contains some CSS specific for the profiles app. It is in the directory: /profiles/static/profiles/css/profiles.css. Check the file here:

image

JS ES6

The validation of the code has been successful. The validator used has been JShint. In order to remove inaccurate warnings related solely to the fact that it by itself does not support JS ES6, I found the helpful and easy way to make the tool read and analyse the ES6 code effectively, by simply adding this comment to the top of the code:
// jshint esversion: 6

  • checkout/static/checkout/js/stripe_elementss.js - Initial errors fixed:

    • JShint was not recognizing $ JQuery, so I click on 'CONFIGURE' at the top, and activate JQuery.
    • JSHint was flagging Stripe as an undefined variable because it didn't know that Stripe is defined in the Stripe.js library, which is loaded externally. To fix this in JSHint, I declared Stripe as a global variable by adding a JSHint directive at the top of the file. This way, JSHint understands that Stripe is expected to be available globally: /* global Stripe */

    image

  • static/js/quantity_selector.js - No errors found:

    image

PYTHON 3.12

Validation has been done using CI Python Linter by Code Institute, and the results have been the following:

BAG APP

  • contexts.py - No errors found:

    image

  • views.py -

    image

CHECKOUT APP

  • admin.py

    image

  • forms.py

    image

  • models.py - The only line that is too long, is due to the unability to separate the operation in two lines

    image

  • views.py

    image

ENGLISH GROWS PROJECT

  • settings.py

    image

HOME APP

  • admin.py

    image

  • forms.py

    image

  • models.py

    image

  • utils.py

    image

  • views.py

    image

INDIVIDUAL SERVICES APP

  • admin.py

    image

  • forms.py

    image

  • models.py

    image

  • views.py

    image

PROFILES APP

  • admin.py

    image

  • forms.py

    image

  • models.py

    image

  • views.py

    image

ACCESSIBILITY TESTING

This site has been tested to be ADA compliant, and has achieved WCAG 2.1 validation. Find below the contrast audits from Juicy Studio website and the general accessibility reports generated by EqualWeb Accessibility Checker Chrome extension, which have all achieved positive results.

CONTRAST VALIDATION REPORTS

Font and backgroud colors have passed at AAA and AA levels, as can be seen in the following reports that have been generated by Juicy Studio:

image image

GENERAL WCAG 2.1 REPORT

This website is compliant with all international standards, as proved after EqualWeb Accessibility Checker scan of the site, which gave no errors:

image

MANUAL TESTING

Manual testing of the site has been performed following the user's stories:

  • 1. Check the social media links to see the site's social media profile: Check Facebook profile

    image

  • 2. Check the about page

    English.Grows.-.can.se.about.mp4
  • 3. See at first glance the part of the site that is specially dedicated to me (B2B or B2C)

    image

  • 4. Users can subscribe to the newsletter - Users can register to the newsletter via the form, and get success message:

    https://github.com/user-attachments/assets/1dcfb229-a354-4ae6-b03a-7bc1b8fc3918 - Admin user can perform CRUD functionality on subscribers via the admin panel:

    english-grows-NEWSLETTER.susbscriber.created.success.mp4

CONTACT FORM (B2B customers)

  • 5. B2B can contact the site to receive a customized training plan.

    English.Grows.-.B2B.customers.can.sent.contact.requests.mp4

VIEW AND SORT SERVICES

  • 6. All available services are listed

    English.Grows.-.All.available.services.are.listed.mp4
  • 7. View specific type of service

    English.Grows.-.Sort.a.specific.type.of.service.mp4
  • 8. View individual service details

    English.Grows.-.view.service.details.mp4
  • 9. view the total of my pending purchase at any time

    English.Grows.-.view.total.amount.of.pending.purchase.at.any.time.mp4
  • 10. sort the full list of available services by categories (types) or by price

    • By Types:

      English.Grows.-.sort.services.by.type.mp4
    • By price:

      English.Grows.-.sort.all.services.by.price.mp4
  • 11. sort specific category of services by price, or alphabetically

    English.Grows.-.within.a.specific.type.of.service.sort.by.price.or.name.mp4

ACCOUNT - USER AUTHENTICATION

  • 12. Register for an account, and receive an email confirmation after registering.

    • Once a new user is registered, its data is automatically stored in the database.

      English.Grows.-.New.user.data.is.reflected.in.admin.-.stored.in.db.mp4
    • User receives verification email

      image

    • Verification url in email works as expected, and once user clicks on 'verify', he is redirected to home page, already logged in:

      verification.link.to.verify.account.from.email.received.works.as.expected.mp4
  • 13. Easily login and logout.

    English.Grows.-.easy.login.logout.mp4
  • 14. Easily recover user password:

    • After user clicks on 'forgotten password", user inputs the account email and confirmation message is displayed
    • User receives an email with link to restore password
    • Link to restore password works as expected
    English.Grows.-.Reset.Password.Complete.Workflow.mp4
  • 15. Have a personalized user profile:

    image

  • 16. Update and save my personal account information on my user profile:

    English.Grows._.Update.personal.info.in.profile.mp4
  • 17. Access my bag, and update or delete any items in it:

    English.Grows.-.View.Update.and.Delete.items.in.Bag.mp4
  • 18. Users' personal data is secured: No one else can access a user's profile, nor order urls, which also contain personal data:

    English.Grows._.My.Profile.-.personal.data.in.order.secured.mp4
  • 19. ONLINE PAYMENT - STRIPE API - Users can make secure online payments * User can easily access the checkout page and proceed to checkout (video below) * Stripe API works as expected and payment intent is successfully reflected on Stripe API, without any errors (video below)
    * User views an order confirmation message and order details on the screen image

English.Grows.-.Stripe.API.works.fine.mp4
  • 20. Receive a confirmation email after a purchase, with details of the order:

    English.Grows.-.Order.confirmation.email.with.order.details.and.stored.in.user_profile.mp4
  • 21. View past orders, and read their full information on the user's personal profile:

    English.Grows._.My.Profile.-.view.past.orders.details.in.user.profile.mp4
  • 22. See success or error messages for every action undertaken*:

ADMIN

  • 23. Sort orders by users (by profiles):

    english-grows-.Sotr.orders.by.users.mp4
  • 24. Order is automatically linked to the authenticated user who made it:

    image

  • 25. User's email is stored in a separate email list, to easen up future emailing campaigns.

    image

  • 26. Store data in admin from B2B contact requests:

    image

  • 27. Edit and delete existing services directly from the site, without having to access the lesser user-friendly admin panel.

    English.Grows.-.Edit.and.delete.service.-.Google.Chrome.mp4
  • 28. Add service directly directly from the site

    English.Grows.-.Superuser.can.add.service.from.site.mp4
  • 29. Only authenticated users can make an order, so that personal data from all users is protected.

    English.Grows.-.only.authenticate.dusers.can.order.-.data.security.mp4

MARKETING STRATEGIES

SUBSCRIPTION to NEWSLETTER

All the functionalities described below related to marketing have been tested, and work as expected, summing up to the facebook profile page created, to improve social media presence of the brand, as part of the marketing campaign (num. Please refer to the video below num. 32 which includes the three features testing:

  • 30. create editable email templates for the newsletter or emailing campaigns (Marketing campaigns).

  • 31. send marketing campaigns to subscribed users.

  • 32. send a newsletter to users that are subscribed.

    english-grows-update.and.send.EMAILING.CAMPAIGN.mp4

    image

    image

    **PROOF of EMAILING CAMPAIGN FUNCTIONING: One subscription was made using [email protected] email (does not exist), and when sending campaign to all subscribers, I receive an error email informing that email could not be delivered to inexistent email [email protected]:

    image

INDIVIDUAL SERVICE - CRUD Full Functionality

Create Service

  • The Admin user can easily create a service directly through the admin, with no need to upload fixtures, as initially.

  • Only authorized users can add/update/delete service.

    English.Grows.-.Unauthorized.users.can.t.add_update_delete.services.mp4

Read Service

  • Services created can be Read, or viewed:

    English.Grows.-.Google.Chrome.2024-11-09.18-54-07.mp4

Update Service

Admin users can Update a service directly through the site, without need to access the admin panel, for a better UX. This can be done on the general services page, or on the service details page, both with a success message to inform user of the action completed:

English.Grows.-.Update.service.and.delete.mp4

Delete Service

Admin users can Delete a service, with confirmation step, and success message:

English.Grows.-.Google.Chrome.2024-11-03.20-32-06.mp4

MARKETING STRATEGIES

SUBSCRIPTION to NEWSLETTER

All the functionalities described below reñlated to marketing have been tested, and work as expected, summing up to num. 1 story, which allows users to chceck social media profile at FB, as part of the marketing techniques. Please refer to the video below num. 29 which includes the three features testing:

  • 27. create editable email templates for the newsletter or emailing campaigns (Marketing campaigns).
  • 28. send marketing campaigns to subscribed users.
  • 29. send a newsletter to users that are subscribed.

TECHNOLOGIES USED

LANGUAGES

  • Python 3.12
  • JS ES6
  • CSS3
  • HTML5

FRAMEWORKS, LIBRARIES AND PROGRAMS USED

The following have been used for the development of this site:

  • Django 5.1 - Whithin django framework, many libraries and modules have been used. For mode details on these, please refer to requirements.py on the root directory. - Check Django 5.1 Documentation
  • Chrome Dev Tools - To inspect the elements, and be able to spot what element was having an unexpected behaviour, and correct it more efficiently. Also have used Lighthouse tool's reports to check and improve core web vitals.
  • Github - To deploy the code in order to be accessed by Heroku.
  • Heroku - To deploy this python site.
  • PostgreSQL - A database has been created through Code Institute handy link, to store all the site's data, such as user personal data, order details, available services, users' contact requests, and more.
  • AWS - Amazon Web Services have been used to create an s3 bucket to store all media and static files of this site.
  • Bootstrap 5 - Check documentation here
  • Django Summernote - To enable the site owner to easily create an email template to launch an email marketing campaign to subscribers, or a newsletter. Documentation can be found here
  • Favicon - To create the necessary files for the logo to be on the upper part of the browser tab next to the site tir.
  • Font Awesome - For the icons used
  • Google Fonts - To select fonts and implement them in the site
  • Github - To deploy the site online, and Github desktop app to link Visual Studio Code to Github.com
  • Coolors - To insert colors selected previously directly through visual studio code, but used this tool to display the palette beautifully, and insert it in this readme file.
  • Amiresponsive - To display the site in all types of devices simultaneously.
  • EqualWeb Accessibility Checker - Google Chrome extension to check general errors and contract errors for optimal accessibility.
  • Juicy Studio tool to generate accessibility reports related to contrast, following the WCAG 2.0's luminosity contrast algorithm.
  • Blisk to check the viewport of multiple devices, very useful for selecting testing targets.
  • Viewport Sizer - Used to check the viewport of multiple devices, very useful for selecting testing targets.
  • BrowserStack to test responsiveness by emulating different devices, operating systems and browser vendors.
  • XRecorder for Android, to record the compatibility and responsiveness testing performed on real Android device.
  • Google Gmail: Used as email provider to send emails to users and customers, also via smtp.
  • Word Tracker - To track the best keywords to include for SEO improved ranking.
  • XML sitemaps - To generate the sitemap.xml file for this site

DEPLOYMENT

VERSION CONTROL

The site was created using Gitpod editor and pushed to Github to the remote repository ‘english-grows.
The following git commands were given to the terminal throughout development to push updated code to the remote repo on Github:

  1. git add . - Command to add the updated file(s) to the staging area before they are committed to the main branch, represented by a '.'.
  2. git commit -m “commit text” - Command to commit changes to the local repository queue ready for the final push.
  3. git push - Command to push all updated code to the remote repository on Github.
  4. python3 manage.py runserver - Command to run python app on local server.

REQUIREMENTS

  • Make sure all the modules and requirements have been correctly installed by:
    • Install the necessary modules with command: pip3 install module
    • Make sure you install versions that are compatible, to avoid system issues. Check the requirements file in this repository for surther reference, and type the command on the terminal: pip3 install -r requirements.txt

SECRETS

WARNING - DATA PROTECTION To avoid pushing sensible credentials stores in variables (e.g.: DATABASE_URL, SECRET_KEY) to Github:

  1. Create an env.py file on the main directory of the app.
  2. Ensure that env.py is included in the .gitignore file.
  3. To include secret variables on the env.py file:
    • (i) On the top of the file, include the imports: -import os from pathlib import Path
    • (ii) Include eac hsecret var following this example:
    • os.environ.setdefault('DATABASE_URL', 'your-data-base-url')
    • (iii) Import Operational System to your settings.py, so it can access the system variables secretly stored in your env.py file:
    • import os
    • (iv) To access the system variables in your settings.py file, use the following method to store them in other safe variables:
    • DATABASE_URL = os.environ.get("DATABASE_URL")
  4. BEFORE COMMITTING TO GITHUB:
    • On the terminal, type git add ., then git status and make sure the env.py file is not in the list. Once you are reassured that it is not in the list of files to be committed, safely commit.

HEROKU

App Preparation

  1. Create and add the 'Procfile' to the root directory of the app, and include web: gunicorn candlelight.wsgi --log-file - Heroku relies on this file to determine how to run your application, ensuring the correct setup of your web server. Use commands like web: gunicorn PROJECT_NAME.wsgi in the 'Procfile' to instruct Heroku on starting your web server with Gunicorn.
  2. If you haven't done so yet, create a requirements.txt file to store necessary modules and libraries:
    • pip3 install -r requirements.txt
  3. Ensure you have updated the requirements.txt file listing all project dependencies. The comnmand to update the file is pip3 freeze > requirements.txt
  4. Set up necessary configuration variables in Heroku setting tab > Config Vars (eg. SECRET_KEY, DATABASE_URL, etc.).
  5. Add Heroku to your ALLOWED_HOSTS in your app's 'settings.py' file: candlelight-worlds.herokuapp.com.

Create Heroku App

  1. Sign up to an account on Heroku
  2. Create new app. Remember that app name must be unique on the whole of Heroku site.
  3. Store all the secret environment variables (secret keys) on settings > Config Vars.

Deployment Method

  1. Ensure that in your settings.py, DEBUG = False before doing the last commit to Github before deploying to Heroku.
  2. On Heroku, click the deploy tab on the top navigation bar.
  3. Scroll down and select Github as 'Deployment method'
  4. Use the github link and type in the name of your repository
  5. Scroll down, to 'Manual Deploy' configuration and select main on the dropdown for the branch the deploy
  6. Then click on deploy from branch
  7. Once the app is loaded, click on the 'View' button that appears only then.
  8. Once your application is running, you can switch to Automatic Deploys so that any changes in the repositori are automatically reflected in Heroku deployed app.

CREDITS & ACKNOWEDGEMENTS

Images

  • All the images are free copyright, and have been taken from [Pexels.com]
  • The logo had previously been created by the creator of this site with the free version of Canva for her personal freelance website as a certified teacher of English as a second language.

Acknowledgements

About

Project 5 : E-commerce

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published