Design systems are all the rage. Practically every single post on LinkedIn is about these darn design systems. Eeeeeeveryone is making them. Well, here's mine, lol.
Most of NodeSource's products start with the motif "N|"β¦ yeah, a vertical bar (Pipe symbol). The names with "Solid|" are pricing plans.
Check out all their product logos below ππ»:
All NodeSource's product logos
Design System
Name: N|Core
Obviously I had to use the "N|" motif somehow. And "Core" is a central system that everything else is built upon. That's how the name N|Core happened. Doh!
Below: Cover design for the Figma file and justification page for the name N|Core below ππ½:
N|Core Design System Cover
Justification for N|Core Design System
Figma Variables
Primitives & Tokens for Color and Typography, Numbers, and Modular Scale variables
With these variables in place, creating new components is like "pttt!", easy peasy.
Did you build this design system from scratch?
What! No way! I used the UI Prep Design System as a starting point. I got access to the full DS file after completing the Design System Bootcamp by Molly Hellmut. I completed this bootcamp on October 13, 2024.
Note: I will use the term "typeface" and "font" interchangeably. I DO KNOW the difference, but for the sake of making this thing somewhat enjoyable to read for designers and non-designers⦠whatever, lol.
The user would have to download a file for each style. Yeah, right.
Because this font had to be served locally.
Multiple files: One file per style. π€―
Headaches: That meant having to deal with TTF, OTF, and WOFF files. No thanks!
What a P.I.A. π«
So, I went to Google Fonts and lo and behold, there was the almighty Source Sans 3 π₯³.
Performance:
Variable font: One file to download.
Served by Google. Way faster servers.
No headaches: Didn't have to deal with TTF, OTF, and WOFF files.
And for the monospaced font, NodeSource was already using Source Code Pro which is also on Google Fonts, lol. ππ½
Fun fact π€‘
All fonts, Source Sans Pro, Source Sans 3, and Source Code Pro were created by the same designer, Paul D. Hunt.
β¦π€ Hmmβ¦ That sounded cool in my head, not so much here, lol.
Modular Scale, WTF is that?
A modular scale is a bunch of numbers/values that are harmonious with each other. These numbers can be used for typography, spacing, margins, line-heights, etc.
Every single designer on the planet uses that damn 8pt grid system. It makes them feel warm inside and look cool in front of their bosses. That's stupidβ¦ even though, I admitedly, also feel warm inside when using it π.
The Modular Scale app provides all font sizes in em, which is much more useful for developers.
Or are you on the rem team? πβ¦ Bah, you don't even know what you're talking about, lol.
Aaaaaaaaaanyway, check out the screenshot for the Typography System from Figma below ππ½:
Typescale using a Modular Scale
HTML + CSS
CodePen Demo
What the heck is happening in this demo?
As you shrink or enlarge the viewport, the font sizes change.
The font sizes are based on the Modular Scale, which keeps the harmony regardless of the viewport size.
This method uses the calc() function.
FYI, the clamp() function wasn't supported at the time π€·π½.
Drag the handle to test responsiveness
Here's an example YOU can drop in your CSS: font-size: clamp(12px, 4vw, 18px);
Color System
Let's talk colors, will ya?
When I inherited the NodeSource project, the client had 7 base colors defined. You can see them on the "Base Colors" column on the image below with white background.
As powerful as they may be, the Figma plugins do not consider accessibility. In other words, they can create shades that don't work with either White or Black text.
Most tools only create a Light mode ramp.
Some tools are unnecessarily complicated to use.
I ended editing each shade in each ramp manually to make sure they were accessible.
What tool did you use then?
Well, I went and built and designed the damn tool myself, lol.
Create accessible color ramps in less than 5 seconds, no BS: Color-Ramp.com
Middle column: 7 defined colors by the client
100% accessible Light and Dark mode color ramps
Design System Components
Friggin' Buttons, lol
144 buttons in total⦠damn, haha.
Although not all buttons are used (yet), they are ready when the moment comes. NodeSource has multiple products and with a design system like N|Core, supporting new products is easier.
Check out the buttons in Dark and Light modes below ππ½:
Dark mode buttons
Light mode buttons
Input Fields
These input fields are a work in progress, but for now I have:
Text
Password
Search
Upload file
Number
Textarea
Select menu
Checkboxes and radio buttons are in their own pages.
What's pending?
The Small versions π.
All current input fields [WIP]
Input text detail - Notice the Properties panel π
Tables
Oh boy, tables in Figma! Well, initially I was using the plugin Table Creator. It worked well for a while, until I realized that if the file had a lot of tables, the performance of Figma would go in the gutter.
I also wasn't too fond of depending on a plugin for this. So, following best practices and scalability, I created a table component.
I can build any kind of table in a snap with this component.
Check out the table component in Dark and Light modes below ππ½:
Table component
Table detail: Dark and Light modes
N|Solid Console
NodeSource's Flagship Product
Here is an example of the Dashboard table UI with selected rows.
Figma file showing the design with a 12-column layout
Dev handoff via Zeplin
Final Dashboard screen implemented by the devs
NodeSource Website Redesign
The 2020 and 2024 Websites
I started working with NodeSource in 2020 and inherited an old website with serious accessibility and branding issues.
In 2024, I was asked: "Hay amigo Ricardo, we need to redesign the website. Are you down for the job?" Well, DOH! π lol
AI with Midjourney
This is when I first started using Midjourney to generate images for the website. All icons and hero background textures were generated using Midjourney.
Check out the 2020 and 2024 websites below ππ½:
2020 Homepage design I inherited. SERIOUS accessibility issues πΆ
Redesign 2024: Homepage. Bolder branding and Accessibility-compliant.
The CEO provided me with the initial wireframes. Wait, WHAT?! πΆ. Yep! Talk about a client that has their shit together, eh!
The beauty of the provided wireframes was NOT that I didn't have to create any wireframes. I would've been happy to do so. The beauty was that it provided me with a clear⦠what? I'll give you 1 guess:
Icons and hero background texture were generated using Midjourney as well.
Check the design process for the N|Solid product page below ππ½:
Figma file. From left: Components & Exploration, Design, and Wireframe
Close-up of the design and the wireframe
Dev handoff using Zeplin
Final page implemented by the devs
Mobile Menu Prototype
This is a very bare prototype I built to show the devs how the mobile menu should look and work.
As simple as this prototype is, multiple design decisions are happening here:
Interaction Design:
40x40px target size of the hamburger menu button.
Slide-in navigation with a duration of 0.2s and ease-in-out timing function. In other words, the damn thing feels organic and responsive, haha.
Transforming the "3-line" icon to an "x" icon to clearly convey when the menu is open or closed. This also happens smoothly and quickly.
Dropdowns from main nav items are also smoothly animated.
For good measure, hover effects on menu and submenu items. This is also a visual cue when the link is tapped on a mobile device.
Accessibility:
All elements are accessible from a typography and color contrast perspective.
Hover effects on menu and submenu items.
Scalability: This structure uses the same menu used on the desktop version. One menu to rule them all! π€£
Click on the hamburger icon in the prototype below ππ½:
Simple π« prototype
A few more notes about Color Accessibility and Branding βπ½
Accessibility issues with the color off the bat! π¦ (there is no baseball bat emoji, WTF, lol)
The original green #5AC878 the client provided was OK.
The problem was that the prior designs had white text over that green which failed accessibility with a contrast ratio of 2.1:1 - Minimum contrast ratio should be 4.5:1 for Normal size text.
I knew I needed to use black text over that green. But I went a step further and lightened up that green a little to make it "pop" (π€¦π½lol ) in Dark mode, and settled on #71D08B. The contrast ratio was excellent: 11.09:1 with dark text.
This adjustment was ideal for Dark mode, which is NodeSourceβs default theme.
Retaining branding identity
To get to the new green #71D08B, I edited the Lightness in the HSL color space of the original green #5AC878 from 57% to 63%. It was light enough while retaining the same Hue and Saturation of the original green ππ½.
Branding improvement FTW! π
Old green: Accessibility = π
New green: Accessibility = πͺπ½
Brand enhancement for Light mode
The new green #71D08B was made for Dark mode. For Light mode, I took a similar approach but this time I edited the Saturation and Lightness of the original green #5AC878, from 50%, 57% to 52%, 24%.
This gave me a darker, more saturated green perfect for Light mode while retaining the same Hue of the original green. The contrast ratio is 7.9:1 with white text or over light backgrounds.
Check out all the greens and the NodeSource logo in both Dark and Light modes below ππ½:
Original vs. New greens
NodeSource logos with new greens
Phew! π - Look at you! Thank you for making it all the way down here! ππ½lol