Components (and counting)
Accessible (WCAG 2.2)
Team Members
Years of Evolution
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
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
With these variables in place, creating new components is like "pttt!", easy peasy.
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.
Check out my certificate! lol.

Color Primitives

Color Tokens

Typography Primitives

Typography Tokens

Numbers

Modular Scale (π π½8pt grid system)
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.
When I inherited the NodeSource project, I was given the "Source Sans Pro" typeface. RED FLAG! π©. Why?
What a P.I.A. π«
So, guess what I did? Went to Google Fonts! And lo and behold, there was the almighty "Source Sans 3" π₯³. All kinds of "wins":
And for the monospaced font, NodeSource was already using "Source Code Pro" which is also on Google Fonts, lol. ππ½
All fonts, Source Sans Pro, Source Sans 3, and Source Code Pro are created by the same designer, Paul D. Hunt. HA! (that sounded funny in my head, not so much here, lol).
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.
All the font sizes used in the N|Core Design System are based on a modular scale. Check out the modular scale here. If you're not familiar with a Modular Scale, that page is going to mean π©.
Because:
em, which is much more useful for developers.Aaaaaaaaaanyway, check out the screenshot for the Typography System from Figma below ππ½:

Typescale using a Modular Scale
What the heck is happening in this demo?
calc() function.clamp() function wasn't supported at the time π€·π½.Here's an example YOU can drop in your CSS: font-size: clamp(12px, 4vw, 18px);
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.
After a π©-ton of work, using all kinds of color creation tools and Figma plugins, the final color palette is shown below in the screenshot from Figma.
Because:
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
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
These input fields are a work in progress, but for now I have:
Checkboxes and radio buttons are in their own pages.
The Small versions π.
![All current input fields [WIP]](/_next/image?url=%2Fimages%2Fnodesource%2Fncore-design-system-inputs.png&w=2048&q=90)
All current input fields [WIP]

Input text detail - Notice the Properties panel π
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
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
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
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
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:
0.2s and ease-in-out timing function. In other words, the damn thing feels organic and responsive, haha.Click on the hamburger icon in the prototype below ππ½:
Simple π« prototype
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.
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 = πͺπ½
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, you made it all the way down here! Thank you! ππ½lol