Giter VIP home page Giter VIP logo

ms1-cathotel's Introduction

MS1: The Cat Hotel.

User Centric Frontend Web Development Project Submission

Access

View the project live: here

View the Github repo: here

Table of Contents

UX

Strategy

Business Objectives

To increase the number of bookings Prior to website creation, the primary method of booking was by phoning the number listed on social media.

To provide key information all in one location Until now, all information regarding location, phone number etc. was kept on directory websites like Tripadvisor/Yelp.

To be able to control the branding of the business The business can select which photos are to be seen by potential customers as opposed to user-submitted photos on social media.

User Stories

The project is for a fictional cattery business based in South West England. The website serves multiple purposes:

  • Attract new customers by discovering the website via Google searches, review websites or social media.
  • Facilitate customers making a booking request for a stay for their cat.
  • Provide some background information on both the owners and the cattery.
  • Exhibit multiple photos that convey what the cattery is like before a customer decide to book.
  • Allow customers to contact the business for additional questions before they decide to book.

Scope

Current Features

  • Immersive photographic experience, allowing the photos to be a primary source of colour to the overall site design.
    • Every photo is high resolution.
    • Every photo is linked so the viewer can see it full-size.
  • Booking form located at the top so it is immediately available upon arival.
    • Booking form location and structure changes depending on the breakpoint for a better mobile experience.
  • Navigation designed for both desktop and mobile experiences.
    • When in mobile view, the navbar is fixed at the top for easy access.
    • When in mobile view, a 'book' nav item appears for easy booking.
    • Smooth-scrolling enabled (browser-compatability limited)
    • Responsive 2 column grid detailing pricing and terms that stacks vertically when resized to a smaller screen size.
  • Responsive grid of publications the cattery has been featured in to provide a sense of legitimacy and popularity to the business.
  • Selected testimonial with link to source for customer verification
  • Descriptive 'About' section with accompanying photographs showcasing the incredible surrounding garden.
    • Photos in about section turn into a carousel for a better mobile experience.
  • Responsive grid of products that business is partnered with to provide potential customers the knowledge of what products are used while the cat is in care.
    • This also helps the customer understand the quality of the experience, that good well-known food brands are used.
  • Gallery showcasing photos of both the exterior and environment of the cattery, but also some of the cats that have previously stayed.
    • Gallery turns into a carousel in mobile view for a better mobile experience.
  • Dedicated contact section that provides the customer with a map of the location, a contact form for questions and opening hours.
    • This section of 3 column changes to a vertical stack when in mobile view to allow enough space for each sub-section.
  • Footer contains up arrow to easily get back to the top of the site, especially useful on mobile as it saves the user continuinally scrolling up.
  • Footer contains social media links for customers to subscribe or see user-generated content.
    • The footer structure changes to be stacked vertically at different breakpoints.

Long-term Vision

  • Dynamic testimonials. This could be done either by changing on each visit/time of day, using a carousel that continually scrolls through, or embedding an external review source such as Tripadvisor/Yelp.
  • Using Javascript to have the fixed mobile nav highlight the section of the page the user is seeing based on their current scroll position.
  • Having a dark-mode version of the site that automatically detects what mode the device is in.
  • Including an AR experience - there are an increasing amount of web-based AR technologies available, which would offer a great immersive insight for the customer.
  • Customer account system, this could allow:
    • Loyalty discounting by keeping track of bookings
    • See photos of your cat during its stay
    • See log of previous bookings, retrieve invoices
  • Booking calendar so the customer can see live availability without the need to 'request' a booking, they would receive an immediate confirmation
  • Payment system so they can pay a deposit through the website as opposed to in-person on the premises
  • Review system so the testimonials section can run independent of third party websites such as TripAdvisor/Yelp
  • Improve Performance of load times, using Google Lighthouse as a metric to track any improvements. A few ways to approach this would be:
    • To use Javascript to dynamically change the resolution of images to be appropriate for the screen size viewing them.
    • To convert the images to a next-gen image format such as WebP, which is steadily gaining more browser support (Safari 14 just announced support). Until WebP gains complete cross-browser support, writing in a fallback image format would be ideal to avoid some users not being able to load any images.

Structure

I made the decision to have the site appear all on one page with clear sections for easy navigation.
This decision was partly influenced by design, as I felt having the section sit next to each other with photographs surrounding them was visually more appealing, but also because I felt it made for a better mobile experience as everything can be loaded in one instance and the user can access different sections without waiting.
The order of the sections was intentional, I wanted the ability to book to be the first container visible upon arrival so the user didn't have to spend time searching in order to book.
Rather than immediately going to About/Gallery/Contact, I wanted to include sub-sections that appear when the user is transitioning from one section to another. This took the form of a grid showcasing the publications that the business has been featured in, and a grid of products the cattery uses during its operation. Having this works very well with a one-page design as opposed to multiple pages as this content isn't worthy of a page of it's own, and will be more frequently seen when it appears between sections of importance.

Skeleton

Wireframing

I started the project by first creating a wireframe with Balsamiq, this helped me visualise how the structure of the page would look on all device sizes.

You can see how the final design retains a lot of the structure from the wireframe, but also how it has deviated in the way it responds at different breakpoints. This was as a result of learning and becoming more comfortable with Bootstrap and allowing it to influence the best structure based on its own grid system.

Click the image to see it full-size.

submit button

Surface

Animation

  • Smooth scrolling enabled so the transition from clicking a link to the page arriving at the anchor isn't abrupt. This is unfortunately not compatible with Safari unless Javascript is applied.

GIF of smooth scrolling

  • Applied an opacity filter to all links with a smooth fade (0.3s) to avoid an abrupt changing of hue.

hover effect

Colour

There is a light accent colour of a gradiented-blue throughout the site found on the submit buttons, but primarily I wanted the colour to derive from the photos used extensively throughout rather than from text or icons.

Buttons

Default:

#0B44EF swatch of #0B44EF
#007dfa swatch of #007dfa
(-45 degree angle)

Hover:

opacity: 0.9;
filter: saturate(4);

Default / Hover

default booking submit buttonhover booking submit button
default contact submit buttondefault contact submit button

Typography/Icons

Useage Source
Logo Icon FontAwesome
Booking button icon FontAwesome
Contact button icon FontAwesome
Facebook icon FontAwesome
Yelp icon FontAwesome
Instagram icon FontAwesome
TripAdvisor icon FontAwesome
Footer up icon FontAwesome
Title Roboto
Navigation Roboto
Titles Roboto
Content Roboto

Accessibility

Alt tags

As images make up a big portion of the design of the project, I wanted to ensure the equivilent experience to someone using a screen reader was of comparable quality by providing all images with descriptive alt tags.

Forms

Both forms featured on the site, Booking and Contact, have aria-labels so that screen readers read out what content belongs in each input field.

Technologies Used

Technology Use
HTML Content
CSS Styling
Bootstrap Responsive structure, carousels
FontAwesome Logo and Submit button icons
Google Fonts Importing of Web Fonts
Git & Github Version Control & Deployment

Resources

Resource Use
Shoelace.io Visualising Bootstrap grids before coding
Balsamiq Wireframing
VS Code IDE and used for Git version control
Chrome Dev Tools For debugging CSS issues
Notion Notes & todo list, tracking progress
W3C HTML Validator Validation of HTML code
W3C CSS Validator Validation of CSS code

Testing

Manual Test Cases

To ensure the functionality of the project any time code is changed, I have written a series of test cases to be performed to thoroughly check every function remains working.

Action/Item Expected behaviour
Favicon Appears correctly, easiest to test by looking at tab in Chome
Links All links open in new tab
Design scales depending on sceen size All elements are clearly visible on various sceen sizes, eg. form elements move to below hero carousel on mobile
Hero carousel image Should rotate image every 4 seconds
Cursor over navigation item (desktop) Should change font colour to white and show a semi-transparent rounded rectangle over the hovered item
Clicking on nav icon (mobile) Drops down list of nav items
Booking form missing/incorrect data Shows a message asking the user to fill in the missing/incorrect field
Booking form 'number of nights' Should enforce a minimum of 1 night, 0 and minus numbers aren't accepted
Cursor over booking form submit button (desktop) Changes brightness/contrast on hovered button
Clicking on nav icon (mobile) Drops down list of nav items
Featured In and Testimonial icons (desktop) Fade increase in brightness when hovered over
Photos in About section Appear as carousel on mobile, static grid on desktop
Photos in About section Fade increase in brightness when hovered over
Photos in Gallery section Appear as carousel on mobile, static grid on desktop
Photos in Gallery section Fade increase in brightness when hovered over
Google Maps embed Appears correctly, showing location of Code Institute school
Contact form missing/incorrect data Shows a message asking the user to fill in the missing/incorrect field
Cursor over contact form submit button (desktop) Changes brightness/contrast on hovered button
Both forms 'phone number' field Should only accept numbers, no letters
Footer social media icons Changes colour to match companies branding when hovered
Up icon in footer Takes user back to the top of the website

Validation

w3 css validation passed w3 css validation passed

Lighthouse

lighthouse score

Performance improvements detailed in Scope: Long Term Vision section.

Bugs

After deployment, I found multiple bugs that needed addressing.

Bug Fix
Mobile nav didn't collapse after click Found the appropriate collapse class from Bootstrap documentation. Resolved.
Links stop working after applying collapse code Wrapped nav items in a <li> as advised (see Credits section) Resolved.
Footer social icons too small at mobile breakpoint Changed font-size at various breakpoints to keep it responsive Resolved.
Gap of white space between mobile nav and hero image Changed nav to be a fixed height and specified the top positioning to the hero image Resolved.
Indicators on carousel visible on top of mobile nav Adjusted z-index for mobile navbar until it was on a higher level than the Bootstrap carousel indicators Resolved.
Mobile nav icon flickers when carousel slides Changing container-fluid from 100% to 100vw resolves issue but breaks nav fixed positioning. Keeping flickering bug as it has less impact on the user experience. Outstanding.

Cross-browser Compatability

  • Smooth Scrolling enabled, currently isn't supposed in Safari without additional Javascipt.

Accessibility Testing

When the project was nearing completion, I enabled VoiceOver on my iPhone to ensure that it was able to select all of the elements without issue and that it read out the correct alt tags.

Deployment

  • I spent time studying how Git works for this project, in particular a workflow called Git Flow. This was beyond what was covered in our Code Institute module as I felt it was important to get used to the tools an everyday developer would use and I had an interest in how it worked. Rather than using GitPod, I used my own IDE and its built-in terminal to handle version control.
  • I primarily worked on the master branch as I knew the project wouldn't be public until I pushed it to my remote repository on Github. Ordinarily, I would have worked on a develop branch and only push production-ready code to master.
  • While working on this project, there were a few occasions where I wanted to try an implement a feature but wasn't sure the best approach. In these scenaros, I created a separate branch named after the feature and tested the code there before deciding whether I wanted to use this new method in my master branch.
    • An example of this was with the hero image at the top of the site. I had created a static image, and a carousel version that scrolled through several images. I wasn't sure which would look better, on various device screen sizes, so I deployed both and spent time deciding which to use.
    • Another example was with the booking form container. Initially this was a Bootstrap column, but it became difficult to work with at different breakpoints. I tried another way of doing this using CSS positioning and found it worked a lot better.

Final product

Initially I had completed around 70-80% of the project by writing it in vanilla HTML and CSS, primarily using CSS grids for structure. I decided to remake the project from scratch using Bootstrap as I felt it would produce a better experience for mobile users. It was also a useful exercise as it meant I became a lot more comfortable with using Bootstrap.


Below are examples of how it looked vs the end product:

GIF demonstrating first draft

GIF demonstrating final product

Credits & Attributes

  • All photographs taken by me
  • 'About' section text taken and lightly modified from Secret Garden Cattery (with permission)
  • Bootstrap Documentation
  • W3 Schools Documentation for HTML & CSS
  • Carousel Source Code here
  • Adding dark gradient filter on hero carousel image here

Code Institute Tutors/Slack

  • Miklos
    • Discussed my existing knowledge of how Git works to ensure I understood it properly and if I was missing anything from its basic usage
    • I was unsure how to have a Bootstrap column push to a new line at a breakpoint, Miklos explained having a col-12 only appear at certain breakpoints will push subsequent columns to a new line.
  • Tim
    • Recommended Shoelace.io to me which helps visualise Bootstrap grid's and how they look at different breakpoints
  • Johann
    • I wanted to have my booking container change width at a certain breakpoint. Up until this point my booking container was a column in Bootstrap. Johann suggested it might be better to have the container be outside of a grid system and instead use positioning to determine its location at various breakpoints.
  • Cormac
    • Helped me identify what elements was overflowing causing a horizontal scrollbar to appear. Talked me through ways of using Chrome Dev Tools to debug this type of issue.
  • Jim Morel (JimLynx_Lead)
    • After I implemented Bootstrap's mobile navigation bar collapse-after-click code my links suddenly stopped working. Jim advised me to wrap them in a
    • to regain the functionality.
    • The assessment guidebook indicated that students should "remove commented-out code before publishing final files to version control and deploying" and elsewhere in the guidebook asks to include comments with attributes and defining clear sections. To confirm whether these types of comments should stay I asked Jim. Message link here.

ms1-cathotel's People

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.