Code a website
from scratch
as UX Designer

ā€œDesigners that understand enough
code can make better design
decisions, and also communicate
better with the developers.ā€

 

Type

Self-driven upskilling project

 

Timeline

December 2021 - January 2022

 

Tools

My Role

  • Frontend Development: I coded the website by putting my newfound skills in HTML5, CSS3, and JavaScript into good use. I also did code listing (to make sure that my code is of good quality), and also cross-browser testing (to verify that the website is responsive across all platforms).

  • UX/UI Design: I did usability testing, iterate, and check the accessibility to improve the interaction on my website.


 

Context

During my career as a Product Designer, I often heard that having coding skills can help designers come up with much better designs. Thus this had always been one of the skills in my checklist that I was so eager to tick. I wanted to understand the possibilities and limitations of the system I'm working with by being familiar with front-end development. Additionally, having this skill will enable me to efficiently discuss my designs with the development team.

For these reasons, combined with my love of learning something new, I began to study frontend development (HTML, CSS, and JavaScript) at CareerFoundry, the University of Michigan through Coursera, and Uxcel. While studying, I also started coding my own portfolio website. Once I began to master the foundational aspects of frontend code, I added more unique flairs to improve the user experience of my website’s visitors.

Goals

Create a responsive website from scratch, where it works properly across all devices (mobile, tablet, desktop), modern browsers, and operating systems.

Set up the foundation with HTML

 

Since I already have a live online portfolio that I created on Squarespace, I'm using more or less the same UI elements like the one I use on my online portfolio. Naturally, the direction I'm headed is to recreate the portfolio while studying frontend development in parallel, and I also wanted to add some personal twists that weren't possible with templates from website builders like Squarespace.

 

To help me have a structured layout, I began by creating a rough sitemap before I start writing lines of code.

The initial sitemap for my website

 

Once I have this sitemap as a guide, I started to compile all the copies, files and images I need for the website. I created three versions for each image: one for the very large viewport with 2400px width, one for the large viewport with 1200px width, and the other one for the smaller viewport with 600px width. All these images are then being compressed so they become smaller in size and help to decrease the loading time for my portfolio website.

Example of different size versions of the images

 

To provide me with some inspiration, I researched and visited other portfolios as I created a preliminary version of my site. I wrote my code on Atom and after each edit, I committed the changes to GitHub.

 

Decorate and animate with CSS

 

I created an external style sheet to define and edit the color and typography of each page, and also to create some animation. The color palette that I used is basically the same as my existing portfolio. But the typeface that I use on my existing portfolio (i.e., Bagatela from Adobe Fonts) is not available on Google Fonts, therefore I searched for something similar and found Noto Serif from Google Fonts as a substitute.

 
 
 

Buttons are one of the UI elements that the visitor will often interact with on the page, therefore I created a style for its various states i.e., hover, active, and also visited states. Defining separate styles for these states is important because the visitor needs to get feedback to know whether the action they do on the page is successful or not.

 

Since I have several contents that are placed side by side on the same row, I developed columns using a CSS grid layout. This column layout is set to be responsive: the browser will display the two columns side by side on tablet and desktop, but all are stacked on the mobile viewport.

I also adjusted the width of the columns based on the type of content placed in the column. For example, I usually want to have an image take more space when it’s placed next to a block of text, therefore I would set a wider column for the image and have the text column smaller.

The CSS grid layout that I use on my website.

 

As I want the visitors to be able to have good experience in navigating my website across all devices, I utilized media queries and created several layouts with breakpoints as follows:

  • Extra small screens (under 400px)

  • Small screens (smaller than 640px)

  • Medium screens (640px or larger)

  • Large screen sizes (1024px and up)

  • Extra large screens (more than 1440px)

CSS Animation

In order to be more advanced in CSS, I tried to learn CSS animation and transition. Then I practiced on a scalable vector graphic (SVG). I picked an SVG online and then copy the HTML code onto my index file. Using CSS keyframes, I animated the clouds on the illustration so it moves to the right and left (reversed). I also created color-changing animation on the sun into three different colors (yellow to orange to red and then alternate).

 

The CSS animation that I made

Add interaction with JavaScript

To add interactivity to my website, I studied JavaScript. It took me a while to grasp JavaScript, and I have to admit I still need to study further to really get the hang of it.

For this project, I mainly used JavaScript to create specific interactivity on the hamburger menu which I set to only appear on the smaller viewports (640px and smaller), and also to make it possible for the visitors to copy my email address to their clipboard (by clicking on the email icon on the footer).

Interactivity using the burger menu for the smaller viewports

Interactivity on the email icon to copy my email address

 

Color check for accessibility

Providing accessibility to my visitors is important to me, thus one of the accessibility measurements that I implemented was a contrast checking on the color variations that I use on my website design.

I found out that the result for the normal state of the primary button was not so good, so I changed the background color for the primary button from #E8742C to #DD3800. (click to zoom in)

 

Usability Testing

 

In order to ensure that my website is easily accessible and that my target users can find the most important information quickly, I did usability testing. I decided on the characteristics of my target user and started to recruit people who fulfilled the following characteristics:

Then I tested my site on 5 different users to identify any issues with the usability in the design, running them through a different scenario with three different tasks to complete:

  1. Find my projects: You want to have a look at my past projects. Where do you think you can find this information?

  2. Download my resume: After seeing my projects, you get interested and want to check my resume further. Where would you go to do this? What would you do if you want to save my resume?

  3. Contact me: You think I might be a good fit at your company, so you want to reach out to me. What would you do then?

 

Based on these tasks, I defined success criteria for easier comparison:

  • How long did the user take to complete the task?

  • Did the user need help to complete the task?

  • How many tries did the user need to complete the task?

  • Were there murmurings of discontent?

  • Were there inaccurate assumptions about interface elements such as navigation, header, or footer?


The participants provided me with invaluable feedback. Generally, my portfolio got positive feedback, the users particularly appreciated the clean layout, the smooth interaction, and also the animations. Once all testings were done, I documented the data and discovered a few repeated usability errors that needed to be fixed. I used Jakob Nielsen’s Error Severity Rating Scale to rate the severity of the errors, and then I improved my design accordingly.

Jakob Nielsen’s Error Severity Rating Scale

  • 0 = I don't agree that this is a usability problem at all

  • 1 = Cosmetic problem: need not be fixed unless extra time is available on the project

  • 2 = Minor usability problem: fixing this should be given low priority

  • 3 = Major usability problem: important to fix, so should be given high priority

  • 4 = Usability catastrophe: imperative to fix this before the product can be released

Code Quality & Cross-Browser Testing

 

At this stage, I moved into checking the quality of my code and testing the website across various browsers. I used Atom Beautify to create readable code and to always be consistent with my code formatting. I also did code linting to make sure that my code is of good quality and doesn’t produce any errors by installing several packages in Atom for different code files:

  • For HTML, I used W3C Validator.

  • For CSS, I used linter-stylelint.

  • For JavaScript, I used linter-js-standard.

I managed to fix all errors in my HTML files, although there are some remaining errors on my CSS files. There are a bunch of warnings on my CSS file, for example:

  • ā€œProperty ā€œfillā€ doesn’t exist.ā€ >>> I found the use of "fill" to be valid, so I left it as it is.

  • ā€œRedefinition of ā€¦ā€ >>> I did some research and found out that these issues were happening because I'm redefining what I already defined for the padding. As this is what I intended, I left these as it is as well.

The remaining errors in CSS


To verify that the website was fully functional and responsive across all platforms, I used BrowserStack to test my website. The result was no issues are found when I check my website on modern browsers (Safari, Chrome, Edge, and Firefox) and popular operating systems (iOS and Android OS).

Final Result

Click here to see how my responsive website looks! 😃

 

Homepage

 

About Page

 

Project Page

Why I did what I did

Get to know more about the thought process behind my design in the conversation between me and my frontend mentor in the video below. 😃

(Time: 30 mins)

Wrap Up

 

While I still have a lot to learn to make my website better, I’m proud of my effort in learning how to code and put together a responsive website. This project showcases the array of my coding abilities, with a well thought- out navigation, subtle animations, and three breakpoints for every page. I will continue to sharpen my skills in responsive web design in my spare time.

Lesson learned

  • Understand the logic behind the code. I learn that coding is not just about memorizing the code, but it is also about understanding the logic behind it. Once I understand the concept and the algorithm behind it, then it will be easier to find a solution to the problem I’m trying to solve with my coding.

  • This project taught me the value of mobile-first web development. I began my code as a large viewport first. Once I learned how to inspect my website on various sizes of the viewport, I realized how important it is for a website to be responsive in order to create a better user experience. Since most of us are mobile and often rely on our mobile phones to access online information, it becomes all the more imperative for me to remember to implement a mobile-first approach on my web design.


Back to content list

You may also like:

  • Delivering style inspiration and guidance to the customer through user-generated content.

  • Placing employee wellbeing as the main priority through a mental health app.

  • Helping dreams to come true for young adults through simplifying their finances.