afterglow

32 components · 4 auth forms · copy, paste, own the code

Components that leave a little light behind.

Glossy, tactile React components with one shared glow, one set of springs, and one material. Copy, paste, restyle.

Type pairings

Compare Sans/Sans and Sans/Mono combinations against the same interface copy.

Sans + Mono · Inter + Geist Mono

Liquid glass, with a little light.

Tactile surfaces, careful motion, and one warm accent make each component feel considered.

Display
Inter Aa 0123
Reading
Inter Aa 0123
Code
Geist Mono Aa 0123
--accent: oklch(0.8 0.16 55);

font-pairing-lab

Switch pairings to compare headline shape, reading texture, numerals, and code in the Afterglow palette.

Auth forms

Four sign-in blocks, each one file. Here is Silk; try submitting it.

See all four

Log in to Afterglow

Don’t have an account? Sign up

or

By continuing, you agree to our Terms and Privacy Policy.

Liquid glass

Clear glass with a curved rim that bends what's behind it, like Apple's Liquid Glass. Refraction runs in Chromium; Safari and Firefox get frosted glass.

Brightness70%

liquid-button · liquid-switch · liquid-slider

Glass buttons that swell when pressed. Switch knobs and slider thumbs turn into lenses while you hold them.

Now playing

54 BPM

Golden Hour

Night Owl

1:24-2:01

Lisbon

21°

Mostly clear

H:24° L:15°

Now21°
19h20°
20h19°
21h18°
22h17°

Saturday

Oct 18
  • Design review

    10:00

  • Lunch with Aiko

    13:30

  • Golden hour walk

    17:00

Free after 18:00

liquid-toolbar · liquid-menu · liquid-segmented · liquid-card

A whole desktop in glass: grouped toolbar buttons, a button that morphs into a menu, a segmented control you can drag, and widgets that swell a touch under your pointer.

Listen now

Golden hour

Photos

Night drive

Playlist

Low tide

Journal

Embers

Photos

Violet hour

Playlist

First light

Journal

liquid-tabs

A tab bar whose selection becomes a magnifying lens as it moves. Drag across it, or scroll the feed under it.

Drag me

liquid-glass

The material on its own: a clear pane with a curved rim that bends whatever is behind it. Drag it around.

Liquid metal

Brushed silver and flowing chrome from one small WebGL shader. Every piece on the page shares a single GPU context, pauses offscreen, and holds still under reduced motion.

Liquid metal

Brushed silver and flowing chrome, drawn live on the GPU.

metal-text · metal-button

Polished lettering that glints now and then. Buttons in brushed silver, or dark with a hairline of moving chrome.

Pro

$29per month

  • Unlimited projects
  • Custom domains
  • Priority support

metal-card

A card edged in a hairline of chrome.

afterglowTITANIUM

•••• 2026

Night Owl

10/30

liquid-metal

The material on its own. Softened to satin and darkened, it becomes graphite; a lighter cut makes the chip.

Gloss

Surfaces with a specular rim, a shaded edge and real depth. Press them.

gloss-button

A glossy button with a sheen, a hotspot that follows your pointer, and a press that squishes.

Meet the team.

Bring someone into focus.

Maya R.

Product designer

Devon K.

Frontend engineer

Aria T.

Engineering lead

Ravi S.

Creative developer

Lena M.

Design lead

fan-cards

Liquid-glass cards in a gentle fan, with frosted depth and a curved, light-catching rim. Hover or focus one and it lifts, straightens, and comes to the front. On smaller screens they become a readable stack.

glass-switch

A toggle whose bead stretches like a drop of liquid as it travels. Drag it, too.

Glow intensity64%
Warmth

glass-slider

A slider that's hottest at the thumb, leans its bubble into fast moves, and stretches at the ends.

    glass-toaster

    Frosted toasts that stack, fan out on hover, swipe away, and burn down like an ember.

    Light

    Light that travels, and lingers for a moment after you leave.

    Queued
    0:00

    afterglow-ui

    main · 4f2a9c1

    Tune the glow springs

    deploy-card

    A liquid glass card that follows a deploy from Queued to Ready. The status dot turns into a check, the timer counts up, and Redeploy spins its icon and starts over.

    $npx shadcn add @afterglow/copy-button

    ag_live_••••••••••••3f9a

    copy-button

    Copy the command and a streak of light runs along it while the icon turns into a check. The key stays hidden until you reveal it, then decodes in place.

    .dev

    Changes go live on the next deploy

    trail-tabs

    Tabs that fold down to their icons. The one you pick opens up to show its name, its icon moves (the bell rings, the gear turns), and the panel slides in while the height follows.

    Accent

    accent-picker

    Pick a color and every glow and focus ring on the page turns that one solid color, in light and dark. It remembers your choice. Press T to flip the theme.

    Slow fire.

    flame-field

    Slow waves of accent color rise, fall, and drift across the surface, fading into white or black with the theme. They run only while on screen and hold still under reduced motion.

    magnetic-dock

    A frosted dock of glossy app tiles that grow toward your pointer. Apps bounce as they open, and a glow trails behind.

    Navigation

    Know where you are, and get anywhere in one move.

    Browse demo pages
    On this page

    Docs / Getting started

    Introduction

    Afterglow is a source-available collection of React components for interfaces that need thoughtful motion and tactile surfaces. Add a component to your project, then adapt its source to fit your product.

    What the library includes

    Afterglow includes interactive controls, navigation patterns, feedback states, and larger interface blocks. Each registry entry lists the files and packages it needs.

    Install only the pieces you want. They land in your project so you can inspect and adapt the implementation.

    TipThe components are source-available and intended to be customized in your app.

    Designed around interaction

    Motion and surface detail should help explain what just happened. A selected tab moves into place, a switch settles after a change, and a notification fades as its time runs out.

    Each effect follows a user action or communicates a state. This keeps the interface responsive without asking for attention all the time.

    Design principles

    A shared set of rules helps components from different categories feel consistent when they appear together.

    Calm by default

    Controls respond promptly and settle without a pronounced bounce. Ambient motion stays slow, and motion preferences are respected.

    Material with purpose

    Glass, gloss, and metal use different light and edge treatments. Each material supports the component’s role instead of acting as decoration alone.

    Your implementation

    The installed files are yours to edit. Change the markup, remove an effect, or connect a component to your own state and data model.

    Motion with a purpose

    Motion makes state changes easier to follow. Shared spring settings keep controls, panels, and navigation related without forcing them to move at the same speed.

    Timing and response

    Small controls respond quickly so a click feels immediate. Larger surfaces take a little longer to settle, which makes their movement feel measured rather than abrupt.

    The examples use springs for changes in position and short fades for secondary details. Set the reduced-motion preference to see transitions become immediate.

    Interaction states

    A component should make its current state visible. Hover, focus, pressed, disabled, loading, and selected states use clear visual changes with enough contrast to read.

    Keyboard users receive the same state feedback as pointer users. Focus indicators remain visible and controls use native button, link, and input behavior.

    Materials

    Glass uses translucency and a restrained edge to suggest depth. Gloss defines a lit surface, while metal uses contrast and directional shading to suggest a harder finish.

    These treatments are kept inside the component, so you can use them without changing the page background or adding a large decorative glow.

    Light and dark themes

    Components read shared theme tokens for backgrounds, text, borders, and accents. Both themes keep the same visual hierarchy while adjusting contrast for the surface behind them.

    Changing the accent

    Update the accent tokens in your global stylesheet to recolor the shared highlights. Component-specific colors remain available when a particular design needs them.

    Responsive layouts

    Previews adapt to the width available in their parent. On smaller screens, complex layouts stack or become scrollable rather than shrinking their controls until they are hard to use.

    Accessibility

    The components use semantic controls, visible keyboard focus, and reduced-motion support. Check text and accent contrast against the colors in your own theme before shipping.

    Performance

    Motion is driven by small animated values where possible, so pointer movement does not require a full React render for every frame. Components avoid running decorative animation when it does not communicate useful feedback.

    Source and license

    Afterglow is source-available under its published license. Review the license before redistributing components or using them in a product with a different distribution model.

    rail-nav · reading-rail

    A sidebar and table of contents linked by one clear rail. In the contents, nested headings bend the path and the active section stays in view as you read.

    Introduction

    Proximity Sidebar

    A compact document minimap turns headings and paragraph rhythm into interactive dashes. Every dash rests at the same short length, nearby marks expand toward the pointer, and the active mark brightens as you read.

    The rail gives readers a sense of document length without adding another table of contents. Each dash points to real content, so the minimap stays connected to the page instead of feeling decorative.

    Nearby dashes expand continuously as the pointer moves along the rail. The change is restrained at rest and becomes easier to read only near the pointer.

    Major titles, secondary headings, and paragraphs each get their own mark. The equal lengths keep the map calm while the article itself carries the hierarchy.

    Select any dash to move to its matching block. Keyboard focus uses the same preview and arrow keys move through the document in order.

    The current block gets one brighter mark. When the active section changes, the previous mark returns to its quiet opacity; every dash keeps the same length.

    Structure

    Content Model

    The sidebar reflects the sections you provide. That keeps the visual hierarchy predictable and makes the rail easy to tune for a different document.

    Title marks

    A title mark points to a major region of the document. It rests at the same short length as every other mark, then grows only when the pointer approaches.

    Use title marks for introductions, large feature areas, installation steps, or other sections that readers may want to revisit.

    Subtitle marks

    Subtitles use the same resting mark as titles and body sections. Their place in the article remains clear without adding visual noise to the rail.

    A subtitle can represent a feature group, a configuration step, an API category, or a meaningful turn in a longer explanation.

    Section marks

    Every section mark stays on the same regular rhythm. Group labels appear in the hover preview without interrupting the rail with extra gaps.

    Set a group to show its label in the preview. The marks keep an even rhythm from top to bottom, even when the group changes.

    Body marks

    Body sections use the same quiet mark as every other item. A dense page can show more destinations without turning the rail into a pattern of competing lengths.

    Any mark expands when the pointer passes nearby. The active section brightens but keeps its original length, so the rail stays even while you read.

    Interaction

    Pointer Response

    Proximity is measured from the center of each mark. A smooth falloff gives nearby dashes a connected response without changing their position in the rail.

    Proximity range

    The range spans a small group of neighboring marks. Moving the pointer farther away returns them to their original width and opacity.

    Scroll response

    Scrolling updates the active mark from the block nearest the reading line. The position follows the article without requiring the reader to point at the rail.

    The rail checks the same scroll container as the article. When the last block reaches the end of the view, the final mark becomes active as well.

    Keyboard navigation

    Focus a mark and use the arrow keys to move through the list. Home and End jump to the first and last marks, and Enter selects the focused block.

    Reduced motion

    When reduced motion is enabled, the rail changes directly to its next state. It stays useful without running spring animations.

    Customization

    Tuning the Rail

    The minimap can follow any long-form content. Give each item a stable ID, a short label, and an optional group for the hover preview.

    Dash lengths

    Every dash starts at the same short length. Nearby dashes grow with a smooth falloff, while the active section is shown through brightness alone.

    Groups and labels

    Set a group to show its label in the floating preview. Titles and excerpts appear when a reader hovers or focuses a mark.

    Scrollable containers

    Pass the element that owns scrolling as container. This keeps activation and click navigation inside the article even when the surrounding page also scrolls.

    scroll-rail

    A quiet document minimap with equal short dashes. Nearby marks expand toward the pointer, and the active block brightens as you read.

    Workspace / Projects

    Projects

    Good work starts with a little clarity.

    Website refresh

    Design · In progress

    Component library

    Development · In progress

    Brand exploration

    Research · Planning

    glass-sidebar

    A workspace sidebar with a continuous contour that opens around hovered links and flows back to your selection.