Consistent Navigation Across My Inconsistent Websites, Part II

 I refreshed the little thing that let’s you navigate consistently between my inconsistent subdomains (video recording).

Animated gif of a dynamic-island like control that expands smoothly up when clicked to reveal additional selection options.

Here’s the tl;dr on the update:

  • I had to remove some features on each site to make this feel right.
    • Takeaway: adding stuff is easy, removing stuff is hard.
  • The element is a web component and not even under source control (🤫). I serve it directly from my cdn. If I want to make an update, I tweak the file on disk and re-deploy.
    • Takeaway: cowboy codin’, yee-haw! Live free and die hard.
  • So. Many. Iterations. All of which led to what? A small, iterative evolution.
    • Takeaway: it’s ok for design explorations to culminate in updates that look more like an evolution than a mutation.

Want more info on the behind-the-scenes work? Read on!

Design Explorations

It might look like a simple iteration on what I previously had, but that doesn’t mean I didn’t explore the universe of possibilities first before coming back to the current iteration.

Screenshot of a Figma canvas with lots of artboards too small to see but denoting a lot of iterations.

v0: Tabs!

A tab-like experience seemed the most natural, but how to represent it? I tried a few different ideas. On top. On bottom. Different visual styles, etc.

3 mobile-sized UI mockups of a blog post with different navigation bars.

And of course, gotta explore how that plays out on desktop too.

Three desktop-sized UI mockups of a blog post with different navigation bars.

Some I liked, some I didn’t. As much as I wanted to play with going to the edges of the viewport, I realized that every browser is different and you won't be able to get a consistent “bleed-like” visual experience across browsers. For example, if you try to make tabs that bleed to the edges, it looks nice in a frame in Figma, and even in some browsers. But it won’t look right in all browser, like iOS Safari.

Mobile UI mockups showing a folder-style segmented tab control. One is in the frame of an iPhone where the control bleeds up into the restricted space where the dynamic island lives as well as down into the website. Whereas the other mockup is in a frame in Figma, so the highlighted tab only bleeds down into the website.

So I couldn’t reliably leverage the idea of a bounded canvas as a design element — which, I should’ve known, has always been the case with the web.

v1: Bottom Tabs With a Site Theme

I really like this pattern on mobile devices, so I thought maybe I’d consider it for navigating between my sites.

But how to theme across differently-styled sites? The favicon styles seemed like a good bet!

Mobile-sized mocksups with a bottom tab bar whose active highlight color changes with the active color of each subdomain.

And, of course, what do to on larger devices? Just stacking it felt like overkill, so I explored moving it to the edge.

Desktop-sized mocks with tab controls on the far left of the page and the active site is higlighted according to the site's active theme color.

I actually prototyped this in code, but I didn’t like how it felt so I scratched the idea and went other directions.

v2: The Unification

The more I explored what to do with this element, the more it started taking on additional responsibility.

“What if I unified its position with site-specific navigation?” I thought.

This led to design explorations where the disparate subdomains began to take on not just a unified navigational element, but a unified header.

Mobile-sized UI mocks for Home, Blog, and Notes on jim-nielsen.com

And I made small, stylistic explorations with the tabs themselves too.

Mobile-sized UI mocks for Home, Blog, and Notes on jim-nielsen.com

You can see how I played toyed with the idea of a consistent header across all my sites (not an intended goal, but ya know, scope creep gets us all).

Different header + navigation styles for submdomains on jim-nielsen.com including a hamburger button.

As I began to explore more possibilities than I planned for, things started to get out of hand.

v3: Do More. MORE. MORE!!

Questions I began asking:

  • Why aren’t these all under the same domain?!
  • What if I had a single domain for feeds across all of them, e.g. feeds.jim-nielsen.com?
  • What about icons instead of words?

Four mobile-sized mockups for subdomains on jim-nielsen.com, each one getting a different highlight color.

Wait, wait, wait Jim. Consistent navigation across inconsistent sites. That’s the goal. Pare it back a little.

v4: Reigning It Back In

To counter my exploratory ambitions, I told myself I needed to ship something without the need to modify the entire design style of all my sites.

So how do I do that?

That got me back to a simpler premise: consistent navigation across my inconsistent sites.

Dynamic-island-like navigational pill for the subdomains on www, blog, and notes subdomains of jim-nielsen.com

Better — and implementable.

Technical Details

The implementation was pretty simple. I basically just forked my previous web component and changed some styles. That’s it.

The only thing I did different was I moved the web component JS file from being part of my www.jim-nielsen.com git repository to a standalone file (not under git control) on my CDN.

This felt like one of the exceptions to the rule of always keeping stuff under version control. It’s more of the classic FTP-style approach to web development. Granted, it’s riskier, but it’s also way more flexible. And I’m good with that trade-off for now. (Ask me again in a few months if I’ve done anything terrible and now have regrets.)

Each site implements the component like this (with a different subdomain attribute for each site):

<script type="module" src="https://cdn.jim-nielsen.com/shared/jim-site-switcher.js"></script>
<jim-site-switcher subdomain="blog"></jim-site-switcher>

That’s really all there is to say. Thanks to Zach for prodding me to make this post.


Reply via: Email · Mastodon · Bluesky

Jim Nielsen's Blog

19 Aug 2025 at 20:00

Bottomless Subtleties

 Jason Fried writes in his post “Knives and battleships”:

Specific tools and familiar ingredients combined in different ratios, different molds, for different purposes. Like a baker working from the same tight set of pantry ingredients to make a hundred distinct recipes. You wouldn't turn to them and say "enough with the butter, flour, sugar, baking powder, and eggs already!"

Getting the same few things right in different ways is a career's worth of work.

Mastery comes from a lifetime of putting together the basics in different combinations.

I think of Beethoven’s 5th and its famous “short-short-short-long” motif. The entire symphony is essentially the same core idea repeated and developed relentlessly! The same four notes (da-da-da-DAH!) moving between instruments, changing keys, etc.

Beethoven took something basic — a four note motif — and extracted an enormous set of variations. Its genius is in illustrating how much can be explored and expressed within constraints (rather than piling on “more and more” novel stuff).

Back to Jason’s point: the simplest building blocks in any form — music, code, paint, cooking — implemented with restraint can be combined in an almost infinite set of pleasing ways.

As Devine noted (and I constantly link back to): we haven’t even begun to scratch the surface of what we can do with less.


Reply via: Email · Mastodon · Bluesky

Jim Nielsen's Blog

17 Aug 2025 at 20:00

Just a Little More Context Bro, I Promise, and It’ll Fix Everything

 Conrad Irwin has an article on the Zed blog “Why LLMs Can't Really Build Software”. He says it boils down to:

the distinguishing factor of effective engineers is their ability to build and maintain clear mental models

We do this by:

  • Building a mental model of what you want to do
  • Building a mental model of what the code does
  • Reducing the difference between the two

It’s kind of an interesting observation about how we (as humans) problem solve vs. how we use LLMs to problem solve:

  • With LLMs, you stuff more and more information into context until it (hopefully) has enough to generate a solution.
  • With your brain, you tweak, revise, or simplify your mental model more and more until the solution presents itself.

One adds information — complexity you might even say — to solve a problem. The other eliminates it.

You know what that sort of makes me think of? NPM driven development.

Solving problems with LLMs is like solving front-end problems with NPM: the “solution” comes through installing more and more things — adding more and more context, i.e. more and more packages.

  • LLM: Problem? Add more context.
  • NPM: Problem? There’s a package for that.

Contrast that with a solution that comes through simplification. You don’t add more context. You simplify your mental model so you need less to solve a problem — if you solve it at all, perhaps you eliminate the problem entirely!

Rather than install another package to fix what ails you, you simplify your mental model which often eliminates the problem you had in the first place; thus eliminating the need to solve any problem at all, or to add any additional context or complexity (or dependency).

As I’m typing this, I’m thinking of that image of the evolution of the Raptor engine, where it evolved in simplicity:

Photograph of three versions of the raptor engine, each one getting progressively simplified in mechanical parts.

This stands in contrast to my working with LLMs, which often wants more and more context from me to get to a generative solution:

Photograph of three versions of the raptor engine, but the image is reversed showing the engine get progressively complicated in mechanical parts over time. Each engine represents an LLM prompt.

I know, I know. There’s probably a false equivalence here. This entire post started as a note and I just kept going. This post itself needs further thought and simplification. But that’ll have to come in a subsequent post, otherwise this never gets published lol.


Reply via: Email · Mastodon · Bluesky

Jim Nielsen's Blog

15 Aug 2025 at 20:00

Choosing Tools To Make Websites

 Jan Miksovsky lays out his idea for website creation as content transformation. He starts by talking about tools that hide what’s happening “under the hood”:

A framework’s marketing usually pretends it is unnecessary for you to understand how its core transformation works — but without that knowledge, you can’t achieve the beautiful range of results you see in the framework’s sample site gallery.

This is a great callout. Tools will say, “You don’t have to worry about the details.” But the reality is, you end up worrying about the details — at least to some degree.

Why? Because what you want to build is full of personalization. That’s how you differentiate yourself, which means you’re going to need a tool that’s expressive enough to help you.

So the question becomes: how hard is it to understand the details that are being intentionally hidden away?

A lot of the time those details are not exposed directly. Instead they’re exposed through configuration. But configuration doesn’t really help you learn how something works. I mean, how many of you have learned how typescript works under the hood by using tsconfig.json? As Jan says:

Configuration can lead to as many problems as it solves

Nailed it. He continues:

Configuring software is itself a form of programming, in fact a rather difficult and often baroque form. It can take more data files or code to configure a framework’s transformation than to write a program that directly implements that transformation itself.

I’m not a Devops person, but that sounds like Devops in a nutshell right there. (It also perfectly encapsulates my feelings on trying to setup configuration in GitHub Actions.)

Jan moves beyond site creation to also discuss site hosting. He gives good reasons for keeping your website’s architecture simple and decoupled from your hosting provider (something I’ve been a long time proponent of):

These site hosting platforms typically charge an ongoing subscription fee. (Some offer a free tier that may meet your needs.) The monthly fee may not be large, but it’s forever. Ten years from now you’ll probably still want your content to be publicly available, but will you still be happy paying that monthly fee? If you stop paying, your site disappears.

In subscription pricing, any price (however small) is recurring. Stated differently: pricing is forever.

Anyhow, it’s a good read from Jan and lays out his vision for why he’s building Web Origami: a tool for that encourages you to understand (and customize) how you transform content to a website. He just launched version 0.4.0 which has some exciting stuff I’m excited to try out further (I’ll have to write about all that later).


Reply via: Email · Mastodon · Bluesky

Jim Nielsen's Blog

13 Aug 2025 at 20:00



Refresh complete

ReloadX
Home
(106) All feeds

Last 24 hours
Download OPML
A Very Good Blog by Keenan
*
A Working Library
Alastair Johnston
Anna Havron
Annie
Annie Mueller
Apple Annie's Weblog
*
Articles – Dan Q
*
Baty.net posts
bgfay
*
Bix Dot Blog
Brandon's Journal
Chris Coyier
Chris Lovie-Tyler
Chris McLeod's blog
*
Colin Devroe
*
Colin Walker – Daily Feed
Content on Kwon.nyc
Crazy Stupid Tech
*
daverupert.com
Dino's Journal 📖
dispatches
dominikhofer dot me
*
Dragoncatcher the blog
Excursions
*
Flashing Palely in the Margins
Floating Flinders
For You
*
Frank Meeuwsen
frittiert.es
Hello! on Alan Ralph
Human Stuff from Lisa Olivera
*
inessential.com
*
jabel
Jake LaCaze
*
James Van Dyne
*
Jan-Lukas Else
*
Jim Nielsen's Blog
Jo's Blog
*
Kev Quirk
lili's musings
Live & Learn
Lucy Bellwood
Maggie Appleton
*
Manton Reece
*
Manu's Feed
Matt's Blog
maya.land
*
Meadow
Minutes to Midnight RSS feed
Nicky's Blog
Notes – Dan Q
On my Om
Own Your Web
Paul's Dev Notes
*
QC RSS
rebeccatoh.co
reverie v. reality
*
Rhoneisms
ribbonfarm
Robert Birming
*
Robert Birming
Robin Rendle
Robin Rendle
Sara Joy
*
Scripting News for email
Sentiers – Blog
*
Simon Collison | Articles & Stream
strandlines
Tangible Life
the dream machine
*
The Torment Nexus
*
thejaymo
theunderground.blog
Thoughtless Ramblings
tomcritchlow.com
*
Tracy Durnell
*
Winnie Lim
*
yours, tiramisu

About Reader


Reader is a public/private RSS & Atom feed reader.


The page is publicly available but all admin and post actions are gated behind login checks. Anyone is welcome to come and have a look at what feeds are listed — the posts visible will be everything within the last week and be unaffected by my read/unread status.


Reader currently updates every six hours.


Close

Search




x
Colin Walker Colin Walker colin@colinwalker.blog