Skip to main content

Command Palette

Search for a command to run...

Wave 2 of Aetheric UI — 10 hand-coded button Web Components, zero dependencies

Updated
3 min read
A
EE student and founder of Aetheric Labs. Building framework-free dev tools and AI-integrated boilerplates. Quantum ML researcher. Moving to Germany soon.

Why I keep building in Vanilla JS

Every time I start a new project the same conversation happens.

Someone suggests a component library. The component library needs React. React needs a bundler. The bundler needs config. The config needs maintenance. Six hours later you have a button on screen and a node_modules folder the size of a small country.

I got tired of it. So I built Aetheric UI — a component library where every component is a Web Component. Pure Vanilla JS. Shadow DOM isolated. Zero dependencies. Drop in a script tag, use the custom element, done.

Wave 1 shipped 5 toggle and hardware components. Wave 2 ships 10 buttons.

The components

Icon Button — Dark neumorphic circle button. Smooth press feedback. Perfect for social links and action toolbars.

Soft Button — Warm pastel surface with an icon accent. Friendly and tactile without being loud.

Round Button — Light neumorphic round button. Minimal with a satisfying press state.

Press Button — Neobrutalist push-down button. Bold, physical, no-nonsense.

Pill CTA Button — Dark pill-shaped CTA with arrow accent and hover animation. Built to convert.

Neon Button — Glowing border, hover pulse, dark background. Subtle enough to look intentional.

Neobrut Button — Neobrutalist pill with bold border and sliding arrow. Sharp and clean.

Keyboard Button — Tactile keyboard-style button with physical press animation and glow. The best one to click.

Frosted Button — Frosted glass search-style button with a smooth dark surface. Great for nav UIs.

Hardware Button — Unlock-style hardware button with neumorphic press and ambient glow. Nothing else looks like it.

The technical approach

Each component is built using the Web Components API:

class KeyboardButton extends HTMLElement {
  connectedCallback() {
    const shadow = this.attachShadow({ mode: 'open' });
    shadow.innerHTML = `
      <style>/* all styles scoped here */</style>
      <div class="kb-btn">...</div>
    `;
  }
}
customElements.define('ae-keyboard-button', KeyboardButton);

Shadow DOM scopes all styles to the component. Nothing leaks in, nothing leaks out. No class name collisions with your existing codebase. The component is self-contained.

Attributes let you configure the component from HTML:

<ae-keyboard-button label="Command" icon="⌘"></ae-keyboard-button>
<ae-soft-button label="More info" icon="⚡"></ae-soft-button>

Every visual detail — neumorphic shadows, inset press states, ambient glows, CSS transitions — is hand-coded. No UI libraries. No shortcuts.

Live demo

All 10 components running live: [https://deusexspiravit.github.io/aetheric-ui/]

Pricing

Individual components at $9 each. Full Wave 2 Button Pack at $49.

aethericlabs.lemonsqueezy.com

Wave 3 is already in progress.