Skip to content

Freyja Healing is statically generated nuxt.js application & is the culmination of my work as a full stack software developer. The project was developed as part of my diploma program, and it showcases my skills in building a fully functional web application from scratch. The application is built using a variety of technologies and tools.

Notifications You must be signed in to change notification settings

ciaran-io/freyja-healing

Repository files navigation

mockup

Fréyja healing

The path to optimal health is closer than ever. At Fréyja healing, we believe in the bodies natural healing ability's.
However, if you a suffering with a lingering ache or chronically stressed, book an appointment with any of our experienced naturopaths & begin your journey to better health.


UX 🎨

User stories

As a user, customer I would like to the following:

✅ successfully implemented
❌ not yet implemented

  • ✅ View information (prices and details) on all available services.
  • ✅ View opening times & contact information.
  • ✅ View information on naturopaths (practitioners).
  • ✅ View privacy policy on how the users information is handled.
  • ✅ Send inquires about a service.
  • ✅ Book an appointment.
  • ❌ Add uniques image for each available service.
  • ❌ Improve SEO (Add open graph meta information).
  • ❌ Receive email appointment confirmation.
  • ❌ Receive email contact form confirmation.
  • ❌ Setup payment processing.
  • ❌ Add account page for users:
    • User can view account information
    • User can place booking via payment method
    • User can write review
  • ❌ Improve security:
    • Add Cloudflare Turnstile (privacy focused captcha).
    • Protect mailto address (further research needed).
    • Add Content Security Policy (further research needed).
  • ❌ Add unit testing & CI workflow (further research needed)

Design

Color pallet

color pallet

Icons

  • I utilized the nuxt icon module to generate the icons. The Icons are from Google Fonts Material Symbols

icons

Typography

  • I chose to use default browser fonts & not to use a custom font.

Wireframes (High fidelity)

note icon NOTE
These wireframes are exported wireframes from Figma. They are not screenshots from a browser.

Mobile

Booking (step 1)

Booking page (step 1)

Booking page (step 2)

Booking page (step 2)

Booking page (confirmation)

Booking page (confirmation)

Home page

Home page

Contact page

Contact page

Contact page write to us

Contact page write to us

Privacy page

Privacy page

Team page

Team page

Treatment page

Treatment page


Desktop

Booking page (step 1)

Booking page (step 1)

Booking page (step 2)

Booking page (step 2)

Booking page (confirmation)

Booking page (confirmation)

Home page

Home page

Contact page

Contact page

Contact page write to us

Contact page write to us

Privacy page

Privacy page

Team page

Team page

Treatment page

Treatment page


Features

1. Book appointment

Book Appointment

  • Users can choose from any of our 6 appointments & place a booking. The user is required to enter the following:
    • Name
    • Email
    • Contact number
    • Choose a time & date
    • Submit after verifying their details are correct

2. View all services

View all services

  • View all services with an overview of the following INFORMATION
    • Treatment Details
      • Treatment
      • Treatment duration
      • Treatment Price
    • A list of benefits of the treatment
    • Treatment brief description

3. Send inquiry

View all services

  • Users can send inquiry about any of the services offered with the following INFORMATION
    • Name
    • Email
    • service
    • Short message

4. Navigation flyout menu

View all services

  • Users can easily navigate to any of the available services.
  • Users can easily navigate to the contact page.
  • Users can easily navigate to the about us page.

Future features 🔮 (2023)

  • ❌ Add uniques image for each available service.
  • ❌ Improve SEO (Add open graph meta information).
  • ❌ Receive email appointment confirmation.
  • ❌ Receive email contact form confirmation.
  • ❌ Setup payment processing.
  • ❌ Add account page for users:
    • User can view account information
    • User can place booking via payment method
    • User can write review
  • ❌ Improve security:
    • Add Cloudflare Turnstile (privacy focused captcha).
    • Protect mailto address (further research needed).
    • Add Content Security Policy (further research needed).
  • ❌ Add unit testing & CI workflow (further research needed)

🔝 Back to Top


Technologies ⚙️

Web development

Design


Front-End Technologies

  • HTML5

    • Markup language used within VueJS templates.
  • CSS3

    • Used to style elements within pages & add transition effects.
  • JavaScript

    • Used to add reactivity.
    • From validation (client side)
    • Return data based on query parameters

Ui Library / CSS framework

  • Tailwind css
    • Tailwindcss 🔗 (Used to enhance workflow & improve maintainability of CSS).

JavaScript Library

  • VueJs
    • Vue.js 🔗 (The Progressive JavaScript Framework)
    • Reactivity.
    • Reusable components.

JavaScript Framework

  • NuxtJS 🔗 (The Intuitive Vue Framework)
    • Used for server side rendering.
    • Enhanced SEO.
    • Image optimization.
    • Code optimization (minified CSS & JavaScript).
    • State management.

Additional modules to extend NuxtJs 🔌

  1. NuxtJS Modules 🔗 (Extends NuxtJS functionality)
    • Nuxt Icon 🔗 Used to generate Icons for project.
    • Nuxt image 🔗 Used to optimize images for variable screen sizes & convert to webp image format.

  1. VueJS devtools 🔗 Used to inspect debug VueJS (performance issues & reactivity issues)

🔝 Back to Top


Testing 🧪

1. Page speed metrics & SEO analytics

Google page speed insight (Used for testing performance & SEO) 🔗

Mobile

About us

About us

Booking

Booking

Contact

Contact

Home

Home

Privacy

Privacy

The team

The team

Treatments

Treatments


Desktop

About us

About us

Booking

Booking

Contact

Contact

Home

Home

Privacy

Privacy

The team

The team

Treatments

Treatments


2. Browser Testing

note icon NOTE
I tested responses in Firefox Developer & Google Chrome from 300px to 1200px & Iphone for mobile device testing.

Iphone SE responsive screenshot

sss

Ipad responsive screenshot

sss

Desktop responsive screenshot

sss

Firefox Developer Edition (v.108.0.5343.2)

note icon NOTE
knowledge of accessibility is limited, application will need audit at later date to improve accessibility for screen readers.

  • Check for overflow issues.
    1. Home page information cards overflow at 300px
  • Check for accessibility issues (contrasting colors).
    1. None found

Google Chrome Dev (v.108.0.5343.2)

note icon NOTE
knowledge of unit testing is limited, application will need unit testing at later date.

information icon INFORMATION
NuxtJS & Vite provide excellent development experience & detailed errors in development.

  • Check for JavaScript errors
    1. All known errors resolved in development.

Safari iOS (v16.0.2)

bug icon BUG CSS
is() CSS pseudo-class does not work on invalid form input.

  • View mobile experience (validate page links work & inputs on forms)

3. Form validation (Manual input to check validity of forms)

note icon NOTE
Input validation is based on pattern attribute value

Form input testing booking

sss

Form input testing contact

sss

  1. Contact us page: The form will not send unless the following rules are met.
  • First & last name: (Required) must have 2 - 20 characters using alphabetic notation only.
  • Email: (Required) must be a valid email address & math pattern.
  • Service option: (Not required) Choose a service are predefined options.
  • User message: (Required) must be 5 - 300 characters.
  1. Booking page: The form will not send unless the following rules are met.
  • Name: (Required) must have 2 - 20 characters using alphabetic notation only.
  • Email: (Required) must be a valid email address & math pattern.
  • Phone number: (Required) must be numeric only and 5 - 10 characters.
  • Calender: (Required) Choose date, calender is not viewable beyond December 2022 & before the current month of the current year.
  • Time: (Required) Time must be between 9AM - 5PM, 9AM is predefined input if no time is chosen.
  • Booking confirmation details: Check users details are correct.
    • Name
    • Email
    • Phone number
    • Appointment date
    • Appointment time

External Validation Testing HTML | CSS | JavaScript

tip icon Important
HTML & CSS validation returns 54 CSS parsing errors. This issue is discussed by the maintainer of Tailwindcss & has provided a solution however,
I cannot use the recommended fix as I use scoped styles within VueJS. This will break styles used within the application. Remove --tw- variables from universal selector #7317 🔗

1. HTML

W3C Markup Validation 🔗 (Validate HTML)

About us page

About us

Booking page

Booking

Contact page

Contact

Home page

home

The team page

The team

Treatments page

Treatments page


2. CSS

W3C CSS Validation 🔗 (Validate CSS)

About us page

About us

Booking page

Booking

Contact page

Contact

Home page

home

The team page

The team

Treatments page

Treatments page


3. JavaScript

JS Hint 🔗 (Validate JavaScript)

I added the following rule to ignore missing semicolons and test for ECMAScript 9 support.

/* jslint asi: true, esversion: 9 */

Not all VueJS files contain JavaScript that can be tested with JS Hint. I tested the following files.

  • Pages

    • contact.vue
    • booking.vue
    • treatments.vue
  • Components

    • AppFormInput.vue
    • ContactForm.vue
    • TheFooter.vue
  • Composables

    • Services.js
Js Hint results

Js Hint results

Development Automated Testing | Linting

important icon Important
NuxtJS auto imports VusJS components, Eslint will display no-undefined warnings, I have yet to find a fix for this.
Nuxt Auto imports 🔗

VueJS & JavaScript

I added Eslint & Eslint-plugin-vue to validate & check for errors during development as well as follow VueJS best practices based on VusJs style guide. Linting errors are shown in visual studio code terminal.

  1. Eslint Plugin Vue

🔝 Back to Top


About

Freyja Healing is statically generated nuxt.js application & is the culmination of my work as a full stack software developer. The project was developed as part of my diploma program, and it showcases my skills in building a fully functional web application from scratch. The application is built using a variety of technologies and tools.

Topics

Resources

Stars

Watchers

Forks