Skip to content

Component gallery

50 components · 263 stories

Primitives

  • Buttons — variant × tone
  • Buttons — size and state
  • Button groups
  • Badges — variant × tone
  • Badges — size
  • Keys
  • Status
  • Avatars
  • Alerts
  • Cards
  • Dropdowns
  • Corner windows
  • Progress
  • Scroll cues

Forms

  • Toggles
  • Selects
  • Inputs
  • Textareas
  • Segmented controls
  • Attachments
  • Attachments — vertical
  • Attachment groups

Content

  • Quotes
  • Stats
  • Heatmap
  • Icon lists
  • Masonry
  • Accordion
  • Code
  • Contact methods

Chat

  • Messages
  • Message bubbles
  • Message groups
  • Interactive messages

Showcase

  • Media cards
  • Logos
  • 88x31s
  • Carousel
  • Blueprint frames
  • Card grids

Media

  • Figures
  • Audio player
  • Media player
  • Radio
  • Shorts

Toys

  • Terminal
  • Destructor
  • Status board

Sections

  • Section
  • Side hero
  • Navbar
  • Footer
  • Sidebar

Display

ThemeT
Mode
Mode
M
Spacing
Spacing
Radius
Radius
Font size
Font size
Preview width
Default preview width
Effects
S

ShortcutsAlt+Shift+key

Components

Primitives

  • Buttons — variant × tone
  • Buttons — size and state
  • Button groups
  • Badges — variant × tone
  • Badges — size
  • Keys
  • Status
  • Avatars
  • Alerts
  • Cards
  • Dropdowns
  • Corner windows
  • Progress
  • Scroll cues

Forms

  • Toggles
  • Selects
  • Inputs
  • Textareas
  • Segmented controls
  • Attachments
  • Attachments — vertical
  • Attachment groups

Content

  • Quotes
  • Stats
  • Heatmap
  • Icon lists
  • Masonry
  • Accordion
  • Code
  • Contact methods

Chat

  • Messages
  • Message bubbles
  • Message groups
  • Interactive messages

Showcase

  • Media cards
  • Logos
  • 88x31s
  • Carousel
  • Blueprint frames
  • Card grids

Media

  • Figures
  • Audio player
  • Media player
  • Radio
  • Shorts

Toys

  • Terminal
  • Destructor
  • Status board

Sections

  • Section
  • Side hero
  • Navbar
  • Footer
  • Sidebar

Primitives

12 components

Buttons — variant × tone

Preview width for Buttons — variant × tone

src/components/ui/button.astro20 stories

Fill style and colour are independent axes.

solid-primary
solid-secondary
solid-destructive
solid-warning
solid-success
outline-primary
outline-secondary
outline-destructive
outline-warning
outline-success
ghost-primary
ghost-secondary
ghost-destructive
ghost-warning
ghost-success
link-primary
link-secondary
link-destructive
link-warning
link-success

Buttons — size and state

Preview width for Buttons — size and state

src/components/ui/button.astro8 stories

lg
default
sm
icon
icon-lg
disabled
anchor
Anchor
no-lift

Button groups

Preview width for Button groups

src/components/ui/button-group.astro3 stories

default
icons
disabled-member

Badges — variant × tone

Preview width for Badges — variant × tone

src/components/ui/badge.astro15 stories

Fill style and colour are independent axes.

solid-primary
Primary
solid-secondary
Secondary
solid-destructive
Destructive
solid-warning
Warning
solid-success
Success
outline-primary
Primary
outline-secondary
Secondary
outline-destructive
Destructive
outline-warning
Warning
outline-success
Success
ghost-primary
Primary
ghost-secondary
Secondary
ghost-destructive
Destructive
ghost-warning
Warning
ghost-success
Success

Badges — size

Preview width for Badges — size

src/components/ui/badge.astro6 stories

lg
Lg
default
Default
sm
Sm
icon-lg
Lg
icon-default
Default
icon-sm
Sm

Keys

Preview width for Keys

src/components/ui/kbd.astro4 stories

A key, or a combination in `keys`. Apple devices see ⌥ ⇧ ⌃ ⌘ for the modifiers.

single
K
word
Esc
combo
Ctrl+K
three-keys
Alt+Shift+S

Status

Preview width for Status

src/components/ui/status.astro8 stories

A light takes the text colour unless given a tone. Pulse is off under reduced motion.

default
Offline
primary
Primary
secondary
Secondary
destructive
Destructive
warning
Warning
success
Success
pulse
Live
in-badge
Available for new projects

Avatars

Preview width for Avatars

src/components/ui/avatar.astro8 stories

Initials stand in when there is no image.

lg
GH
default
GH
sm
GH
initials-lg
GH
initials-default
GH
initials-sm
GH
initials-single-word
G
initials-long-name
GH

Alerts

Preview width for Alerts

src/components/ui/alert.astro4 stories

default

Alert title

An alert with no icon and no variant.

success
Success:

Success alert

The action completed successfully.

warning
Warning:

Warning alert

Something might need your attention.

destructive
Error:

Destructive alert

This action could have serious consequences.

Cards

Preview width for Cards

src/components/ui/card.astro6 stories

primary

Primary

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore.

secondary

Secondary

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore.

destructive

Destructive

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore.

warning

Warning

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore.

success

Success

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore.

no-lift

No lift

Hover does nothing on this one.

Dropdowns

Preview width for Dropdowns

src/components/ui/dropdown.astro4 stories

A native popover: opens, closes on Esc or an outside click, no JS.

default

Any content goes here: settings, links or a short form.

titled

Settings

Any content goes here: settings, links or a short form.

align-end

Any content goes here: settings, links or a short form.

solid

Any content goes here: settings, links or a short form.

Corner windows

Preview width for Corner windows

src/components/ui/corner-window.astro3 stories

Pinned to the viewport's corner on a page; inline here. A popover on wide screens, a bottom sheet on narrow ones.

message

Chat with Greg

Greg Heffley
GH

Hi! I'm Greg.

Greg Heffley
GH

Need a hand with anything?

content

Help

Any content goes here: a note, some links or a short form.

start

Settings

Lines up with the button's start edge, for the bottom-left corner.

Progress

Preview width for Progress

src/components/ui/progress.astro8 stories

Takes the tone it sits in unless given one. Attachments and carousel pips are built on it.

value-0
value-40
value-100
max
secondary
destructive
warning
success

Scroll cues

Preview width for Scroll cues

src/components/ui/scroll-cue.astro2 stories

The arrow nudges, except under reduced motion.

default
Scroll
label
More below

Forms

7 components

Toggles

Preview width for Toggles

src/components/ui/toggle.astro5 stories

default
checked
disabled
checked-disabled
with-text

Selects

Preview width for Selects

src/components/ui/select.astro3 stories

default
selected
disabled

Inputs

Preview width for Inputs

src/components/ui/input.astro8 stories

default
filled
email
password
search
invalid
readonly
disabled

Textareas

Preview width for Textareas

src/components/ui/textarea.astro7 stories

default
filled
max-rows
required
invalid
readonly
disabled

Segmented controls

Preview width for Segmented controls

src/components/ui/segmented-control.astro4 stories

Plain radios: they submit with a form and can drive CSS via :has().

text
View
icons
Alignment
small
View
disabled
View

Attachments

Preview width for Attachments

src/components/blocks/attachment/attachment.astro11 stories

The description names the state; colour and shimmer only echo it.

done
cool-dashboard.pdfPDF · 2.4 MB
idle
notes.mdReady to upload
uploading
cool-report.xlsxUploading · 64%
processing
research-summary.pdfProcessing document
error
recording.movFailed · File exceeds 100 MB
image
greg.jpgJPG · 184 KB
link
test-pattern.jpgClick to download
long-name
an-unreasonably-long-file-name-that-will-not-fit-v2-final-FINAL.tar.gzTAR.GZ · 48.1 MB
size-lg
main.tsTypeScript · 3 KB
size-default
main.tsTypeScript · 3 KB
size-sm
main.tsTypeScript · 3 KB

Attachments — vertical

Preview width for Attachments — vertical

src/components/blocks/attachment/attachment.astro5 stories

For image previews: the media stacks above the name.

lg
greg.jpgJPG · 184 KB
default
greg.jpgJPG · 184 KB
sm
greg.jpgJPG · 184 KB
icon
slides.keyKeynote · 12 MB
uploading
test-pattern.jpgUploading · 30%

Attachment groups

Preview width for Attachment groups

src/components/blocks/attachment/attachment-group.astro2 stories

Scrolls sideways and snaps; the overflowing edges fade.

default
cool-dashboard.pdfPDF · 2.4 MB
greg.jpgJPG · 184 KB
cool-report.xlsxUploading · 64%
recording.movFailed · Too large
main.tsTypeScript · 3 KB
vertical
photo-1.jpg
photo-2.jpg
photo-3.jpg
photo-4.jpg
photo-5.jpg

Content

8 components

Quotes

Preview width for Quotes

src/components/blocks/quote.astro4 stories

default

It's not a diary, it's a journal.

GH
Greg HeffleyAuthor of a diary, not a journal
no-avatar

A quote with no avatar.

Greg HeffleyMiddle schooler
name-only

A quote with just a name.

Greg Heffley
long

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore.

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore.

GH
Greg Heffley

Stats

Preview width for Stats

src/components/blocks/stat.astro4 stories

Counts up on first scroll into view, with JS.

default

12,48012,480

Downloads

prefix

$1.2M$1.2M

Spent on kebab this year

percent

99.95%99.95%

Uptime over the last 90 days

decimals

4.0/54.0/5

Average rating, from a long list of reviewers that wraps

Heatmap

Preview width for Heatmap

src/components/blocks/heatmap/3 stories

Levels from 0 to 4 on a grid of any size, optionally as a calendar. Can play the Game of Life on its cells.

calendar
OctNovDecJanFebMarAprMayJunJulAugSep
MonWedFri
1,204 contributions in the last yearLessMore
small, secondary
LessMore
life
OctNovDecJanFebMarAprMayJunJulAugSep
MonWedFri
LessMore

Icon lists

Preview width for Icon lists

src/components/ui/icon-list.astro2 stories

default
  • Somewhere on Earth
  • UTC+1
  • Open source first
wrapping
  • Full-stack developer
  • English, French
  • Runs on tea
  • Likes accessible things
  • Portal soundtrack

Masonry

Preview width for Masonry

src/components/blocks/masonry.astro2 stories

Columns of uneven items. `min` sets the narrowest column, `columns` the most there are.

quotes

Short.

Person 1

A quote of middling length, long enough to wrap onto a second line.

Person 2

A much longer quote, to show items keeping their own height. In a grid, the other items in its row would stretch to match it and leave blank space at the bottom; here they don't.

Person 3

Another short one.

Person 4

Items read down each column, then across.

Person 5

The last one.

Person 6
two-columns

Short.

Person 1

A quote of middling length, long enough to wrap onto a second line.

Person 2

A much longer quote, to show items keeping their own height. In a grid, the other items in its row would stretch to match it and leave blank space at the bottom; here they don't.

Person 3

Another short one.

Person 4

Accordion

Preview width for Accordion

src/components/blocks/accordion/2 stories

default
What is this?

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore.

Does it need JavaScript?

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore.

A much longer question that wraps onto a second line at narrow widths?

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore.

exclusive
What is this?

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore.

Does it need JavaScript?

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore.

A much longer question that wraps onto a second line at narrow widths?

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore.

Code

Preview width for Code

src/components/blocks/code.astro8 stories

Highlighted at build time by Shiki, in the palette's colours. The copy button needs JS and is absent without it.

typescript
src/lib/pointer.tsts
/** Writes the pointer position on each subscriber, once a frame. */
export const track = (targets: HTMLElement[]) => {
    let raf = 0;
    addEventListener("pointermove", (event) => {
        if (event.pointerType !== "mouse") return; // touch has no hover
        raf ||= requestAnimationFrame(() => {
            raf = 0;
            for (const el of targets) el.style.setProperty("--x", `${event.clientX}`);
        });
    });
};
astro-numbered
save.astroastro
---
import Button from "../components/ui/button.astro";

const { label = "Save" } = Astro.props;
---

<form method="post">
    <Button type="submit">{label}</Button>
</form>
css
css
.card {
    padding: var(--space-md);
    border: 1px solid var(--color-border);

    &:hover {
        border-color: var(--color-primary);
    }
}
shell
shellsession
$ deno run build
✓ Completed in 1.2s
$ deno run check
wrap
js
const message = "A line long enough that it runs past the edge of the block, which shows whether it wraps or scrolls";
scroll
js
const message = "A line long enough that it runs past the edge of the block, which shows whether it wraps or scrolls";
plain
plaintext
No language: plain text.
inline
font: var(--type-code)

Contact methods

Preview width for Contact methods

src/components/blocks/contact-method.astro3 stories

default

GitHub

github.com/example(opens in new tab)
copyable

Email

test@example.com
name-only

Email

Chat

4 components

Messages

Preview width for Messages

src/components/blocks/message/message.astro8 stories

Start for the other side, end for the reader. The avatar sits level with the bubble, not the footer.

start
Greg Heffley09:41
GH

Did you finish the history project yet?

end
09:42

Not even close. Rowley spilled juice on the poster.

status

Here's the draft, tell me what you think.

Read
ghost-actions
Rowley Jefferson16:20
RJ

New Zoo-Wee Mama strip is up on the class board! This one finally has a sidekick.

Greg says the ending is too predictable but I think it's the best one yet.

typing
Greg Heffley
GH
Greg Heffley is typing
error

Can you send me your notes?

Not delivered
attachment
Greg Heffley09:44
GH

Found the old one, use this.

history-poster.pdfPDF · 2.4 MB
long-word

https://example.com/an/extremely/long/link/that/has/no/spaces/to/break/at/whatsoever

Message bubbles

Preview width for Message bubbles

src/components/blocks/message/message-bubble.astro8 stories

Ghost drops the frame and the 80% width cap.

solid-neutral

Solid bubble, neutral tone.

solid-primary

Solid bubble, primary tone.

tinted-neutral

Tinted bubble, neutral tone.

tinted-primary

Tinted bubble, primary tone.

outline-neutral

Outline bubble, neutral tone.

outline-primary

Outline bubble, primary tone.

ghost-neutral

Ghost bubble, neutral tone.

ghost-primary

Ghost bubble, primary tone.

Message groups

Preview width for Message groups

src/components/blocks/message/message-group.astro3 stories

The first message names the sender; the last carries the avatar (the first, for ghost messages).

start
Greg Heffley18:02
GH

Hey.

Greg Heffley18:02
GH

Are you coming to the Halloween party?

Greg Heffley18:02
GH

Mom says I can go if you go.

ghost
Rodrick Heffley07:15
RH

Who took the last juice box from the fridge?

Rodrick Heffley07:15
RH

It was labelled.

Rodrick Heffley07:15
RH

In marker.

end

Maybe.

Only if we skip the haunted house.

Interactive messages

Preview width for Interactive messages

src/components/blocks/message/interactive-message.astro3 stories

Pick a reply to walk the dialogue tree. Without JS, only the opening shows. Rodrick's branches run page-wide actions.

default
Rowley Jefferson
RJ

Hey Greg!

Rowley Jefferson
RJ

Want to come over and play Twisted Wizard?

page-actions
Rodrick Heffley
RH

What do you want, dweeb?

capped-height
Greg Heffley
GH

Hey Greg!

Greg Heffley
GH

Want to come over and play Twisted Wizard?

Showcase

6 components

Media cards

Preview width for Media cards

src/components/blocks/media-card.astro4 stories

default
Greg Heffley

Diary of a Wimpy Kid

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore.

  • Source
  • Website
  • Docs
no-header

No header

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore.

  • Source
  • Website
  • Docs
no-links
Greg Heffley

No links

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore.

secondary

Secondary tone

Tone and lift pass straight through to Card.

  • Source
  • Website
  • Docs

Logos

Preview width for Logos

src/components/blocks/logos.astro1 story

default

Arch Linux

Docker

HTML

NixOS

PNPM

Supabase

Vite

Arch Linux

Docker

HTML

NixOS

PNPM

Supabase

Vite

Arch Linux

Docker

HTML

NixOS

PNPM

Supabase

Vite

Arch Linux

Docker

HTML

NixOS

PNPM

Supabase

Vite

Arduino

Firebase

JavaScript

Node.js

Python

TailwindCSS

Vue

Arduino

Firebase

JavaScript

Node.js

Python

TailwindCSS

Vue

Arduino

Firebase

JavaScript

Node.js

Python

TailwindCSS

Vue

Arduino

Firebase

JavaScript

Node.js

Python

TailwindCSS

Vue

Bun

Git

jQuery

NPM

Raspberry Pi

TypeScript

Yarn

Bun

Git

jQuery

NPM

Raspberry Pi

TypeScript

Yarn

Bun

Git

jQuery

NPM

Raspberry Pi

TypeScript

Yarn

Bun

Git

jQuery

NPM

Raspberry Pi

TypeScript

Yarn

CSS

GitHub

Laravel

Nuxt 3

React

Ubuntu

CSS

GitHub

Laravel

Nuxt 3

React

Ubuntu

CSS

GitHub

Laravel

Nuxt 3

React

Ubuntu

CSS

GitHub

Laravel

Nuxt 3

React

Ubuntu

Discord.js

Godot

Next.js

PHP

Rust

Unreal Engine

Discord.js

Godot

Next.js

PHP

Rust

Unreal Engine

Discord.js

Godot

Next.js

PHP

Rust

Unreal Engine

Discord.js

Godot

Next.js

PHP

Rust

Unreal Engine

88x31s

Preview width for 88x31s

src/components/blocks/badge-88x31.astro15 stories

alex
A small icon representing Alex's website
astrid yu
A small icon representing Astrid Yu's website
lily
A small icon representing Lily's website
sophari
A small icon representing Sophari's website
yassie
A small icon representing Yassie's website
lexi
A small icon representing Lexi's website
ari
A small icon representing Ari's website
nexy
A small icon representing Nexy's website
june
A small icon representing June's website
noohance
A small icon representing Noohance's website
austin huang
A small icon representing Austin Huang's website
virkunnen
A small icon representing Virkunnen's website
nelson
A small icon representing Nelson's website
abigail
A small icon representing Abigail's website
ginger
A small icon representing Ginger's website

Carousel

Preview width for Carousel

src/components/blocks/carousel/3 stories

Swipes and scrolls natively without JS. Autoplay pauses on hover and stops for good on focus or a press.

default

Any component

A slide can hold any component. This one is a side hero.

Greg Heffley

Sized to fit

The track is as tall as its tallest slide, so nothing is clipped and the frame never jumps.

A TV test pattern

Controls below

Arrows, counter and pips sit in the footer, clear of slide content.

Greg Heffley

Keyboard ready

Focus the track and use the arrow keys, Home or End.

A TV test pattern

01/

autoplay

Any component

A slide can hold any component. This one is a side hero.

Greg Heffley

Sized to fit

The track is as tall as its tallest slide, so nothing is clipped and the frame never jumps.

A TV test pattern

Controls below

Arrows, counter and pips sit in the footer, clear of slide content.

Greg Heffley

Keyboard ready

Focus the track and use the arrow keys, Home or End.

A TV test pattern

01/

many

Slide 1

One of many, to see how the pips hold up.

Greg Heffley

Slide 2

One of many, to see how the pips hold up.

A TV test pattern

Slide 3

One of many, to see how the pips hold up.

Greg Heffley

Slide 4

One of many, to see how the pips hold up.

A TV test pattern

Slide 5

One of many, to see how the pips hold up.

Greg Heffley

Slide 6

One of many, to see how the pips hold up.

A TV test pattern

Slide 7

One of many, to see how the pips hold up.

Greg Heffley

Slide 8

One of many, to see how the pips hold up.

A TV test pattern

Slide 9

One of many, to see how the pips hold up.

Greg Heffley

Slide 10

One of many, to see how the pips hold up.

A TV test pattern

Slide 11

One of many, to see how the pips hold up.

Greg Heffley

Slide 12

One of many, to see how the pips hold up.

A TV test pattern

Slide 13

One of many, to see how the pips hold up.

Greg Heffley

Slide 14

One of many, to see how the pips hold up.

A TV test pattern

Slide 15

One of many, to see how the pips hold up.

Greg Heffley

Slide 16

One of many, to see how the pips hold up.

A TV test pattern

Slide 17

One of many, to see how the pips hold up.

Greg Heffley

Slide 18

One of many, to see how the pips hold up.

A TV test pattern

Slide 19

One of many, to see how the pips hold up.

Greg Heffley

Slide 20

One of many, to see how the pips hold up.

A TV test pattern

Slide 21

One of many, to see how the pips hold up.

Greg Heffley

Slide 22

One of many, to see how the pips hold up.

A TV test pattern

Slide 23

One of many, to see how the pips hold up.

Greg Heffley

Slide 24

One of many, to see how the pips hold up.

A TV test pattern

01/

Blueprint frames

Preview width for Blueprint frames

src/components/blocks/blueprint-frame.astro3 stories

Draws around any content, which brings its own surface. The label is optional.

terminal
fig. 01jessew@website
whoami
jessew
guest@cpluspatch.com:~$
card
fig. 02

Any content

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore.

no-label

No label

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore.

Card grids

Preview width for Card grids

src/components/blocks/card-grid.astro3 stories

One, two, then three columns. A short last row is centred; narrow the preview to see two columns.

full-rows

Card 1

Same size as the rest.

Card 2

Same size as the rest.

Card 3

Same size as the rest.

Card 4

Same size as the rest.

Card 5

Same size as the rest.

Card 6

Same size as the rest.

two-left-over

Card 1

Same size as the rest.

Card 2

Same size as the rest.

Card 3

Same size as the rest.

Card 4

Same size as the rest.

Card 5

Same size as the rest.

Card 6

Same size as the rest.

Card 7

Same size as the rest.

Card 8

Same size as the rest.

one-left-over

Card 1

Same size as the rest.

Card 2

Same size as the rest.

Card 3

Same size as the rest.

Card 4

Same size as the rest.

Card 5

Same size as the rest.

Card 6

Same size as the rest.

Card 7

Same size as the rest.

Media

5 components

Figures

Preview width for Figures

src/components/blocks/figure.astro4 stories

default
A test pattern of colour bars
A test pattern, as broadcast between programmes.
no-caption
A test pattern of colour bars
portrait
Greg Heffley
Greg Heffley, from Diary of a Wimpy Kid.
cropped
A test pattern of colour bars
Cropped to 21 / 9 with ratio. A longer caption wraps under the image without pushing the frame any wider than it is.

Audio player

Preview width for Audio player

src/components/blocks/audio-player.astro4 stories

Falls back to the browser's own player without JS.

default
0:00 / 0:00
titled
0:00 / 0:00
Test Tone
secondary
0:00 / 0:00
Test Tone
unframed
0:00 / 0:00
Test Tone

Media player

Preview width for Media player

src/components/blocks/media-player.astro3 stories

Falls back to the browser's own player without JS. K, J/L, M, C and F work while focus is inside.

default
0:00 / 0:00
titled
0:00 / 0:00
Test pattern
captions
0:00 / 0:00
Test pattern

Radio

Preview width for Radio

src/components/blocks/radio/5 stories

Without JS, the browser's own player for the first track, and links to each file.

default
CPlusPatch FM On air Off air
Test Toneffmpeg
0:00 / 0:00
  1. 1Test Toneffmpeg
  2. 2Test Pattern BluesGreg
  3. 3Untitled Demo With No CoverUnknown
  4. 4Instrumental
secondary
CPlusPatch FM On air Off air
Test Toneffmpeg
0:00 / 0:00
  1. 1Test Toneffmpeg
  2. 2Test Pattern BluesGreg
  3. 3Untitled Demo With No CoverUnknown
  4. 4Instrumental
capped
Test Toneffmpeg
0:00 / 0:00
  1. 1Test Toneffmpeg
  2. 2Test Pattern BluesGreg
  3. 3Untitled Demo With No CoverUnknown
  4. 4Instrumental
  5. 5Test Toneffmpeg
  6. 6Test Pattern BluesGreg
  7. 7Untitled Demo With No CoverUnknown
  8. 8Instrumental
single track
Test Toneffmpeg
0:00 / 0:00
  1. 1Test Toneffmpeg
unframed
CPlusPatch FM On air Off air
Test Toneffmpeg
0:00 / 0:00
  1. 1Test Toneffmpeg
  2. 2Test Pattern BluesGreg
  3. 3Untitled Demo With No CoverUnknown
  4. 4Instrumental

Shorts

Preview width for Shorts

src/components/blocks/shorts/2 stories

Without JS, a feed of the browser's own players. Up/Down, K and M work while focus is inside.

default
T
T
@test-pattern

Zooming into the Mandelbrot set until something happens (nothing happens) #math #fractal

G
G
@greg

Conway's Game of Life but the cells are pink

C
C
@calm-pixels

8 seconds of gradients to reset your brain

T
T
@test-pattern

Rule 110 is Turing complete and it looks like this

secondary
G
G
@greg

Conway's Game of Life but the cells are pink

C
C
@calm-pixels

8 seconds of gradients to reset your brain

Toys

3 components

Terminal

Preview width for Terminal

src/components/blocks/terminal/4 stories

default
whoami
jessew
uname -a
Linux website 7.2.8-2-cachyos #1 SMP PREEMPT_DYNAMIC x86_64 GNU/Linux
ls ~/projects
website versia dotfiles
cat motd.txt
Welcome! Type a command below. Try `help` for a list of commands.
guest@cpluspatch.com:~$
empty
guest@cpluspatch.com:~$
interactive
guest@cpluspatch.com:~$
interactive with history
whoami
jessew
guest@cpluspatch.com:~$

Destructor

Preview width for Destructor

src/components/blocks/destructor.astro1 story

Equip the gravity gun, then click anything on the page to pull it out and throw it. Needs a mouse.

default

Perhaps with a mouse?Perhaps on a desktop browser?

Status board

Preview width for Status board

src/components/blocks/status-board/4 stories

Hosts and the probes run against them, with a timeline of results from a live status feed.

live

Status unknown

Hosts up
—
Endpoints up
—
Firing alerts
—

faithplateEverything public

  • Matrixmatrix.cpluspatch.dev—Unknown
  • Mailfaithplate.infra.cpluspatch.com:993—Unknown
  • Nextcloudcloud.cpluspatch.com—Unknown
  • Immichphotos.cpluspatch.com—Unknown
  • Vaultwardenvault.cpluspatch.com—Unknown
  • Sharkeymk.cpluspatch.com—Unknown
  • Versiavs.cpluspatch.com—Unknown

freemanDatabases and monitoring

  • PostgreSQLpg_up—Unknown
  • Redisredis_up—Unknown

eliMinecraft

  • Minecraftmc.cpluspatch.com:25565—Unknown
Live from PrometheusUpDownNo data
outage

1 endpoint down

Hosts up
3/3
Endpoints up
9/10
Firing alerts
1

faithplateEverything public

  • Matrixmatrix.cpluspatch.dev20 msUp
  • Mailfaithplate.infra.cpluspatch.com:99333 msUp
  • Nextcloudcloud.cpluspatch.comtimeoutDown
  • Immichphotos.cpluspatch.com59 msUp
  • Vaultwardenvault.cpluspatch.com32 msUp
  • Sharkeymk.cpluspatch.com45 msUp
  • Versiavs.cpluspatch.com58 msUp

freemanDatabases and monitoring

  • PostgreSQLpg_up—Up
  • Redisredis_up—Up

eliMinecraft

  • Minecraftmc.cpluspatch.com:2556557 msUp
A snapshotUpDownNo data
no results

Status unknown

Hosts up
—
Endpoints up
—
Firing alerts
—

faithplateEverything public

  • Matrixmatrix.cpluspatch.dev—Unknown
  • Mailfaithplate.infra.cpluspatch.com:993—Unknown
  • Nextcloudcloud.cpluspatch.com—Unknown
  • Immichphotos.cpluspatch.com—Unknown
  • Vaultwardenvault.cpluspatch.com—Unknown
  • Sharkeymk.cpluspatch.com—Unknown
  • Versiavs.cpluspatch.com—Unknown

freemanDatabases and monitoring

  • PostgreSQLpg_up—Unknown
  • Redisredis_up—Unknown

eliMinecraft

  • Minecraftmc.cpluspatch.com:25565—Unknown
No resultsUpDownNo data
fill

Status unknown

Hosts up
—
Endpoints up
—
Firing alerts
—

faithplateEverything public

  • Matrixmatrix.cpluspatch.dev—Unknown
  • Mailfaithplate.infra.cpluspatch.com:993—Unknown
  • Nextcloudcloud.cpluspatch.com—Unknown
  • Immichphotos.cpluspatch.com—Unknown
  • Vaultwardenvault.cpluspatch.com—Unknown
  • Sharkeymk.cpluspatch.com—Unknown
  • Versiavs.cpluspatch.com—Unknown

freemanDatabases and monitoring

  • PostgreSQLpg_up—Unknown
  • Redisredis_up—Unknown

eliMinecraft

  • Minecraftmc.cpluspatch.com:25565—Unknown
Live from PrometheusUpDownNo data

Sections

5 components

Section

Preview width for Section

src/components/sections/section.astro3 stories

With an id, the heading names the section for screen readers.

default

A section

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore.

alt

Alternate background

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore.

center

Centred

Lead copy, centred under its heading.

Side hero

Preview width for Side hero

src/components/sections/side-hero.astro2 stories

right

Image on the right

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore.

Greg Heffley
left

Image on the left

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore.

Greg Heffley

Navbar

Preview width for Navbar

src/components/sections/navbar.astro5 stories

default
CPlusPatch
HomeProjectsBlog
final-link
CPlusPatch
HomeProjectsBlog
Contact
external
CPlusPatch
HomeProjectsBlogGitHub
Elsewhere
no-links
CPlusPatch
many-links
A rather long site title
Page 1Page 2Page 3Page 4Page 5Page 6Page 7Page 8
Contact

Footer

Preview width for Footer

src/components/sections/footer.astro1 story

default

This was a triumph I'm making a note here Huge success

A cool badge with a cool description.

© Testy McTestface 2026. Licensed under CC BY-SA 4.0.
  • A small icon representing Alex's website
  • A small icon representing Astrid Yu's website
  • A small icon representing Lily's website
  • A small icon representing Sophari's website
  • A small icon representing Yassie's website
  • A small icon representing Lexi's website
  • A small icon representing Ari's website
  • A small icon representing Nexy's website
  • A small icon representing June's website
  • A small icon representing Noohance's website
  • A small icon representing Austin Huang's website
  • A small icon representing Virkunnen's website
  • A small icon representing Nelson's website
  • A small icon representing Abigail's website
  • A small icon representing Ginger's website

Sidebar

Preview width for Sidebar

src/components/sections/sidebar/2 stories

A collapsible menu on its own; open and sticky beside the content in a wide SidebarLayout, as on this page.

collapsed
Docs

Guides

  • Getting started
  • Theming

Reference

  • Tokens42
  • Components27
open
Docs

Guides

  • Getting started
  • Theming

Reference

  • Tokens42
  • Components27
50 components · 263 storiesBack to top