Design SystemsCSSUI/UXFrontend•2026-08-30•2 min read

Design Systems for Solo Developers: How I Ship Fast Without A Designer

DD

Written by Daniel Dano (hello@danieldano.com)

Founder of Ryla Labs & Software Developer

Design Systems for Solo Developers: How I Ship Fast Without A Designer

When you're building solo, you don't have a UI/UX team handing you polished Figma files at 10:00 AM.

In the early days of Ryla Labs, every new page was an ad-hoc mess: three different shades of blue, five random button padding values, and arbitrary font sizes. The site looked like a patchwork quilt stitched together by five different people.

Fixing this didn't require an art school degree. It required treating design like code: building a strict, constraint-based design system.


The Power of Constrained Design Tokens

Design isn't about having unlimited artistic freedom; it's about eliminating micro-decisions so you can build at 10x speed.

I consolidated our entire design vocabulary into a single CSS root:

  • Palette: One deep brand navy (#1B2F4E), one warm background cream (#F7F5EE), and one high-contrast gold accent (#CCA043).
  • Typography Scale: Only four font sizes across the entire application: text-xs, text-sm, text-base, and text-4xl/6xl for editorial titles.
  • Spacing Steps: Everything on an 8px grid (8px, 16px, 24px, 32px, 48px).
"When your color palette and spacing scale fit on an index card, you never waste thirty minutes tweaking button padding again."

Using Unstyled Primitives for Flawless Accessibility

Never build dropdown menus, dialog modals, or tabs from scratch. Solo developers who build custom modals almost always botch keyboard focus trapping, Esc key handlers, and screen reader announcements.

Instead, I pair headless primitives from Radix UI with custom CSS styling:

tsx
// Clean, accessible, and completely bound to the site's design tokens

export function ConfirmModal({ title, description, onConfirm }: any) { return ( <Dialog.Root> <Dialog.Trigger className="rounded-full bg-navy px-5 py-2.5 text-sm font-medium text-white transition hover:bg-navy-deep"> Open </Dialog.Trigger> <Dialog.Portal> <Dialog.Overlay className="fixed inset-0 bg-navy-deep/60 backdrop-blur-xs animate-fade-in" /> <Dialog.Content className="fixed top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-full max-w-md rounded-3xl bg-white p-7 shadow-2xl border border-navy/10"> <Dialog.Title className="text-xl font-bold text-navy font-display">{title}</Dialog.Title> <Dialog.Description className="mt-2 text-sm text-navy/70 leading-relaxed">{description}</Dialog.Description> <button onClick={onConfirm} className="mt-6 rounded-full bg-gold px-6 py-2.5 text-sm font-semibold text-navy-deep"> Confirm </button> </Dialog.Content> </Dialog.Portal> </Dialog.Root> ); }


Key Takeaways

  • Limit your palette brutally: Two foundational colors plus one vibrant accent creates far more elegance than six competing hues.
  • Rely on headless primitives: Let Radix or React Aria handle accessibility, keyboard navigation, and focus management.
  • Design in the browser: Static Figma mockups lie about scroll friction and layout responsiveness; build directly in code.