Giter Site home page Giter Site logo

trips-ui's Introduction

UI Engineering Code Challenge

Project's live links πŸ”₯

✨ Completed application link ✨

Workflow steps status links...🐾🐾🐾

Project Development Overview

  • βœ… Review assignment, plan rough outline of steps-to-completion
  • βœ… Setup directory, Github repo, and hosting trips.json for mock API requests
  • βœ… Display the data, extend directory and set JS & CSS base variables
  • βœ… Resize images
  • βœ… Wireframe responsive grid
  • βœ… Filter and sort
  • βœ… Ad hoc design implementation
  • βœ… Performant refactor and review
  • βœ… Accessibility & semantic HTML refactor and review
  • βœ… Final touches & repo documentation review.
  • ...🟑 ⭐️ Bonus enhancements
    • Performant enhancements
    • Animated popup for listings...
    • Mock delay & loader.

Project Development Notes

Setup directory, Github repo, and hosting trips.json for mock API request

The data this application is build around, uses a provided trips.json file. However, I wanted to serve the trips.json resource externally, just to mock out an API request flow for the application.

I used a Google Cloud Storage Bucket to host and serve the file, and on the client-side, I used used the Fetch API to retrieve the data and convert it into a usable javaScript object.

Display the data, extend directory and set JS & CSS base variables

When setting up the foundation for this app. I wanted to make sure I had a reference to quickly change any base variables that may need to be changed at a later point. For CSS, I created css/vars.css to be the "source of truth" for site-wide colors, spaces, sizes, fonts and other vars to maintain.

For javascript, I created the file js/app.js to be the root trigger for any client-side events, handling initial onload events in addition to other ui events and routing if necessary.

Resize Images

With a helpful hint from the Code Challenge directions, I was able to tinker with the image url and discover that adding width, height and specifying my desired size of image, allowed me to scale my images smaller for the frontend to load quickly!

  • Here is the completed query parameter that was appended: ?height=200&width=356.

Note: While I was messing around with the scaling endpoint. I did discover that a few images didn't fit the 200/356 ratio. However they were only off by a few pixels, so I excepting "pinching" and "pulling" for this use-case.

  • But, something to consider down the road.

Responsive grid

I struggled a bit with this step. Getting the listings into columns wasn't too tricky. However, because the items needed to be sorted by date, reordering the columns with CSS would put them out of order. There may be a way, but I elected to use JS event to re-order the columns on LG - MD - SM break points.

Filter and Sort

Because of limited unit style filter types(4), I decided to go with a discovery UI. Clicking a filter when all filters are selected result in only the unit style selected showing in the listings. However, select another and that unit style is added to the listings, showing two types.


Additional Notes & Thoughts...

Choice to stay with native javaScript

I'd read on the directions that React + Typescript is used on internal projects. However, my depth of knowledge with typescript is limited, so I opted to keep it as close to native javaScript so it'd be ready to update to React or any other framework.


Resources used

  • A list of resources can be found in the Resources.md file.

trips-ui's People

Contributors

robbobfrh84 avatar

Watchers

 avatar

trips-ui's Issues

Review and iterate on `lazy-load` effets

The current onload transitions are a bit clunky. Fresh eyes will give better points of view here. And, it was implemented as a kind of inspirational catwalk, of sorts. So ideally, we scrap the parts that don't work and pair back the parts that do.

Performant enhancement: All Image loaded callback (promise all?)

When the images load for the first time, they sometimes pop up awkwardly. This (I think) is because the DOM renders before they're put in place.

  • So, here's what I propose. We're using a set scale. So, we an put a placeholder (blurred ambigious image?) that will be replaced when that images has been fully download. that way the structure isn't effected and it'll give a smooth "Soft-load" effect.

JS onload for dynamic elm being added to dom.

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.