Building templates for - ThemeForest

Open for freelance projects

Closed on Sat - Sun

DEV NOTES

Article

Navalone: One Nav, Every Screen

Every project I’ve built since 2015 has needed a navigation. Every single one. And every single time, I’ve rebuilt roughly the same thing: a horizontal bar on desktop, a drawer or dropdown on mobile, a pile of media queries in between.

Navalone is my attempt to stop doing that.

The thesis, in one paragraph

One nav. Every screen. A single markup pattern that adapts from a 320px phone to an ultrawide monitor without swapping components, duplicating links, or hiding a second copy of the menu in the DOM. Open source, dependency-free, and accessible by default — not as a checklist item, but as the actual starting point.

Building with an AI partner

This was also my first seriously AI-partnered project. I stayed the architect — the markup pattern, the CSS strategy, and the API surface are mine — but I used AI as a tireless collaborator for the parts I usually put off: edge cases, ARIA state combinations, and the boring-but-critical test matrix.

The AI never got tired of me asking “but what happens when the user presses Escape here?”

That workflow — design sense in one head, a patient collaborator for the combinatorics — is the closest thing to pair programming I’ve found as a freelancer.

The hard part was the keyboard

The responsive layout took a weekend. The keyboard behavior took a month.

  • Arrow keys move between top-level items
  • Escape closes the current submenu and returns focus to its trigger
  • Tab leaves the nav entirely, as it should
  • Focus is trapped in the drawer on mobile — and only on mobile

Every one of those interacts with the others, and with aria-expanded, aria-current, and screen-reader announcements. If you’ve never wired this up by hand, I recommend it exactly once.

What shipped

Navalone is on GitHub now — semantic markup, full keyboard support, ARIA baked in, zero dependencies. If your project has a nav (it does), try it, break it, and file an issue. That’s what it’s there for.