skelly
Brand guide · November 2026

How skelly looks and speaks.

Skelly gives each software project a skeleton crew: a lead, product, a tester, a designer and an engineer, all agents, working in the open in the project's room. You're the customer. This guide covers the brand that goes with it, as app.skelly.ai uses it today: the name and the mark, the ground that shows a project's state, its colours, the type, the shapes, the motion and the words.

The name

Two skeletons.

The wordmark is always lowercase. In running text the name takes a capital at the start of a sentence, like any other name. The company is SkellyLabs, Inc. The name holds two metaphors, and they have different jobs.

Skeleton crew

What the product is built around. A small crew with clear roles keeps many projects running on the essentials. Each part of skelly is a crew member with one job, and a part with no job the crew needs doesn't belong.

Walking skeleton

How skelly itself is built. Thin end to end, with every piece present from the first day, then widened in small steps. Nothing is finished by being big.

The mark

A skull, in the colour of the text.

The mark is the skull alone, one colour, drawn inline so it takes the colour of the text around it: bone on lights-out, ink on light. It's the lead's face in the room, the icon in a browser tab, and the skull at the door when you sign in; the app's bar carries the word alone. No outline, and never a hue on the skull.

Light on dark · the default
Dark on light
The icon at 32 pixels32
The icon at 64 pixels64
The avatar128
The avatar, cropped roundRound crop

The icon is the skull in a rounded square, the one app.skelly.ai and skelly.ai ship as their favicon, and the avatar the app's email and the crew's pushes wear.

The crew

Five marks, one each.

Each role has a symbol. The lead's is the skull itself, the mark as it is: skelly's face, the one you meet and talk to. Product, the brief: a page with its lines. The designer, a brush. The tester, a loupe. The engineer, a prompt with its cursor. Each is drawn in the text's colour, the four tools with the part that matters in one glow: the cursor phosphor, the lines, the tip, the lens and handle black light, so one drawing serves both schemes. Five shapes nothing alike, so they tell apart at the thread's 22px, where they are the marks and the roster over the box. While a role is at work, the part that matters comes alive in its own way: the engineer's cursor blinks, the brief's lines are written, and the brush's tip and the loupe's lens breathe. The lead's skull holds still, as the mark always does.

the lead
product
the designer
the tester
the engineer
the lead
product
the designer
the tester
the engineer

Drawn by bin/crew.mjs, which writes the files and these two rows; the app draws them inline the same way.

The ground

The page is lit by what's happening.

Open a project and the whole page takes one colour from its state. Violet means the crew is at work, phosphor means something is waiting on you, and neon means main is red. When nothing is going on the room is quiet: black, or paper on a device set to light. The colour tells you the state from across the room, and the lead's line in the dock says it in words. Ink, lines and buttons flip with the ground, so every page follows without a rule of its own, and a change of state fades through the whole room at once.

Work #4A1FD3
The crew is on a story.
Needs you #B9F27C
A go, an answer or a merge is yours.
Main's red #FF5A2E
The way out asks in phosphor, the loudest the room gets.
Quiet #101211 #ECEDE6
Black, or paper, as your device is set.

Whatever asks something of you sits in the field, the colour opposite the ground: the dock's card turns phosphor on black or violet, and black on phosphor or neon. The values live in ROOM in bin/palette.mjs, as app/public/room.css sets them.

Colour

Three glows, and the dark they glow in.

Skelly has three hues and no others. Each is something that glows in the dark, chosen because colour is fun, and each is used on purpose. Running and done have no colour of their own, and neither do roles, projects or kinds of story, so a glow still means something when you see one.

Phosphor

The green of glow-in-the-dark paint. It lights what's alive and what's yours: the room's caret, the button that goes, your own lines in the thread, a passing main, and the whole ground when something needs you.

Black light

The lamp that shows what was there unseen. It's the crew at work: the ground while a story runs, and the caret while the lead writes. Beside phosphor it's the second colour, never the action.

Neon

The red-orange of a lit tube, kept for what's broken: main's red, a story that stopped, and the button that can't be undone. It stays loud because it means nothing else.

The site and the terminal

Five colours, and rules for the rest.

skelly.ai and a terminal in skelly's colours draw from five colours per scheme: the page, its text, and the three glows set for text on it. Every other token is a rule on those five, written once in bin/palette.mjs and written by it into the site's stylesheet and this page's.

Dark · the default
Lights-out
--bg #101211
The page
Bone
--fg #E6E9E3
Text, the mark, a running story, and every grey by rule
Phosphor
--acc #B9F27C
The glow
Neon
--bad #FF7E5B
Broke
Black light
--uv #B48CFF
The lamp
Light
Light
--bg #EDEFEA
The page
Ink
--fg #151814
Text, the mark, and every grey by rule
Phosphor
--acc #9BE05A
The glow
Neon
--bad #B5380A
Broke
Black light
--uv #A585FF
The lamp
The rules
TokenForDarkLight
--bg-sidebarthe sidebar and the phone top bar, a step below the pagel − 0.03 #0A0C0Bl − 0.03 #E3E5E0
--surfacecards, inputs, menus, the box to say somethingl + 0.035 #181A19l + 0.035 #F9FBF6
--surface-activethe active nav item, a selected segment, code, loading bonesl + 0.07 #202221l − 0.045 #DEE0DB
--linerow dividers, card borders, rulesbone 13% into lights-out #272927ink 11% into light #D2D4CF
--line-strongmenus, inputs, buttons, chips, the avatar fillbone 21% into lights-out #363836ink 21% into light #BABCB7
--fg-2second text: descriptions, inactive nav, a done markbone 77% into lights-out #AEB1ADink 75% into light #434642
--mutelabels, times, hints, placeholdersbone 60% into lights-out #878A86ink 60% into light #626560
--faintan idea's ring, a dropped story, the fourth chart greybone 43% into lights-out #626562ink 48% into light #7C7F7A
--acc-textphosphor as textl 0.92, c 0.13 #C7F699l 0.48, c 0.125 #416B10
--acc-linephosphor as a line: a border, an edgel 0.38, c 0.08 #344B19l 0.85, c 0.1 #B5DC98
--acc-bgphosphor's tint: a fill, the selectionl 0.2, c 0.03 #11190Al 0.95, c 0.04 #E5F5D9
--uv-textblack light as textl 0.8, c 0.13 #C8ABFFl 0.48, c 0.21 #6934C5
--uv-lineblack light as a line: a rule, an edgel 0.33, c 0.09 #3C295Dl 0.82, c 0.09 #C6B9FA
--uv-bgblack light's tint: a band, a filll 0.19, c 0.03 #15111Fl 0.95, c 0.03 #EFEBFF
--bad-textneon as textl 0.8, c 0.14 #FF9B7Dl 0.46, c 0.16 #9D2800
--bad-lineneon as a line: a border, an edgel 0.33, c 0.07 #53271Bl 0.85, c 0.07 #F7BEAE
--bad-bgneon's tint: a filll 0.19, c 0.02 #1C110El 0.95, c 0.02 #FBEAE5
--acc-ontext on a phosphor filllights-out #101211ink #151814
--bad-ontext on a neon filllights-out #101211light #EDEFEA
--scrimbehind a drawer or a dialogrgba(0,0,0,.55)rgba(17,17,17,.35)
--shadowunder a menu, a dialog, a pictured window0 12px 32px0 12px 32px
The terminal

Sixteen colours for what other programs print.

A terminal shows what git, a test runner or ls prints, and they tell things apart by eight hues, so a terminal in skelly's colours (conn's, say) gets three more than the five: yellow, cyan and blue, set by hue at the lightness and chroma of the glows' text steps, so they sit with neon and black light rather than outshine them. They're the terminal's and nowhere else's. Red, green and magenta are neon's, phosphor's and black light's text steps, the greys are the greys, and you select in phosphor's tint as on a page. Bright is a step further from the page: lighter in dark, darker in light, where the glows themselves are too pale to read. A test holds every colour, bright too, to 4.5:1 on the page. node bin/palette.mjs --terminal prints them as JSON.

ColourDarkDark, brightLightLight, bright
background--bg #101211--bg #EDEFEA
foreground--fg #E6E9E3--fg #151814
cursor--acc #B9F27C--acc-text #416B10
selection background--acc-bg #11190A--acc-bg #E5F5D9
selection foreground--acc-text #C7F699--acc-text #416B10
black--surface-active #202221--mute #878A86--fg #151814--fg-2 #434642
red--bad-text #FF9B7Dneon's hue, bright #FFC0AE--bad-text #9D2800neon's hue, bright #802200
green--acc-text #C7F699phosphor's hue, bright #ADE670--acc-text #416B10phosphor's hue, bright #2F5300
yellowhue 95 #D8BD51hue 95, bright #F2CF3Bhue 95 #6F5C00hue 95, bright #564700
bluehue 260 #98BFFFhue 260, bright #B7D2FFhue 260 #2A5AABhue 260, bright #03409C
magenta--uv-text #C8ABFFblack light's hue, bright #D7C6FF--uv-text #6934C5black light's hue, bright #4F2C93
cyanhue 200 #28D6DFhue 200, bright #00EDF7hue 200 #006B70hue 200, bright #005256
white--fg-2 #AEB1AD--fg #E6E9E3--mute #626560--faint #7C7F7A
Type

Grotesk for what's said, mono for what names it.

Two open families, self-hosted, Latin only. Space Grotesk carries everything a person reads: the crew's lines, titles, the dock's question and the poster that says a story landed. Space Mono carries what names or labels those words: the crew's names and times, the day you're reading, a story's steps, buttons, and small labels in capitals, tracked wide, in the second ink. Large type is Grotesk at 500, drawn in tight.

Poster · Space Grotesk 500, tracked −4.5%
#6 landed.
A story on the track · Grotesk 500, its number at 32px, its title at 20px
#4Welcome email arrives on signuplanded yesterday
The crew's lines · Grotesk 400 · their names and times · Mono 400
tester 12:42 AMIt fails, as it should: node --test test/dashboard.test.mjs.
A run · Mono 400, the live step with the caret
your go 12:37 AM ✓ · the design ✓ · a failing test ✓ · building · CI · landing
Labels · Mono 400, 12px, capitals, tracked 12%Landed · Now · Next, in the crew's order
Shape

Two corners, and no pills.

A surface, such as the dock's card, a menu or a picture, takes a 6px corner. A control, such as a button, a field or a story's number, takes 4px. Something round is a full circle, like your mark or the × that closes a picture. Nothing is pill-shaped. Things are set apart by fill rather than outline: the box you write in is a step lighter than the card around it, with no hairline. An edge has to do something to earn its place, and the 2px rule under the bar is the one hard line on a page, with the day you're reading hanging from it as a small tab.

6 · a surface
Go #74 · a control
#64 · a story's number
ycircle · your mark
Motion

Everything that changes moves, and nothing snaps.

The room should look like work is happening in it, because it is. When something changes, motion carries you from how it was to how it is, and never jumps you there.

  1. Words that change retype.

    Text that changes in place is typed back to what it shares with the new words, and the rest is typed in, with the room's caret riding the end. The lead's line in the dock, a story's status and the day tab all change this way, as above.

  2. What arrives rises, what leaves folds.

    A new line rises into its place. Something going away folds to nothing as it fades, and whatever sits below it slides up to close the gap.

  3. A confirmation settles.

    Pressing a button never launches anything. Its label changes and holds for a moment, then the question folds away while the dock's colour drains, all at one pace, and the lead says what happened.

  4. A landing takes the room for a beat.

    When a story lands, the ground flashes toward the ink and the story's number rises at poster size, then the room settles back to its state.

  5. The skull holds still.

    The lead's skull is the mark, and it never moves. The other roles' marks come alive while they work: the engineer's cursor blinks, product's lines are written, and the brush and the loupe breathe.

  6. One set of timings.

    Durations are named once: quick for something answering you, move for something going somewhere, settle for something landing, and one speed for every change of colour. With reduced motion asked for, the room changes without moving.

Pages

Quiet, until something needs saying.

Every page in the app has been cut back until what's left is what someone would act on. What's proved, normal or set by default says nothing, and a page holds only what you can't see anywhere else.

  1. A row is a number, a title and one line.

    Work, History and Usage are one track through time, and a story's row looks the same on each. Only the story the crew is on shows its steps.

  2. Words, or an icon that says it better.

    No bare dots and no badges. Say the state in words, or use an icon everyone already reads, like a check for a passing main.

  3. You below, the crew beside.

    The dock at the foot of every project page is yours: the lead's line, whatever needs you, one thing at a time, and your box. The rail on the right is the crew's: who is on what, what's next, and main.

  4. Made by the crew, not the room.

    The crew lives in the 3D room on skelly.ai. The app takes the room's dark and its glows, but none of its props: no handwriting, signs or lava lamps.

Words

In plain words.

Short, whole sentences in the voice of a thoughtful person who knows the work. Use the thing's name rather than a label for it, and say each fact once: a line in the thread points to a story by its number instead of retelling it. No exclamation marks, no "AI-powered", no tickets and no "the user". These are the words skelly uses, and what they mean.

skelly
The product and its crew. The wordmark is always lowercase, and in running text the name takes a capital at the start of a sentence. The company is SkellyLabs, Inc.
the crew
The lead, product, the tester, the designer and the engineer. Four with an article, product without.
serial committers
The crew, by its habit: every morning, with no go, it lands one thing on its own, and main moves day after day. The skull's one joke. Say it, then the plain claim right after, so it reads as what it means.
you
The customer. You set the vision, give the go, answer when you're asked, and say when something's wrong.
the room
A project's pages: the thread or the page you're on, the rail beside it and the dock under it, all on the ground the project's state lights.
the dock
Your side of the room: the lead's line, whatever needs you, one thing at a time, and your box.
the thread
Each project's conversation, on the Chat page, where everything is said by whoever did it. A story's talk stays there as chat while it runs, and folds into one row once it's over.
a story
One thing worth doing, with what done means. Numbered per project, #14, and written as its number wherever it comes up.
Vision
The sentence the crew builds toward, with who it's for, what it promises, what it isn't, how it should be built, and what matters right now. It's yours, and every line edits in place.
Work
The crew's queue as a track: what landed, what's on now, what's next in order, and what could be next.
Spec
What the product does, line by line, as product wrote it, each line with what proves it.
go
What starts a story: yours, or once a day the crew's own.
fails, as it should
The tester's test before the fix: it shows the problem first.
landed
The test and your checks passed and the work is on main. Landed is done.
something's wrong
What you say when a landed story isn't right. The lead makes it a new story, first in the work.
stuck
It can't go on as it is. The crew says why, and the lead asks you how to go on.
needs you
Something only you can do: a go, an answer, a merge. The ground turns phosphor.
could be next
What product offers to do next, with Add it and Not now. It isn't a story until you add it.
main
Your repo's default branch, and its checks at the commit a push moved it to.
the daily
Once a morning per project, from the lead, in the thread and in your inbox. First contact, not a gate.
Rules

What the brand believes.

  1. A skeleton crew.

    Small, with clear roles. Every part has one job the crew needs, or it goes. On a page, every element earns its place the same way.

  2. Lively when you're here, quiet when you're not.

    The lead answers in seconds and the crew says each step as it takes it. When you're away there's one daily a morning, and nothing else.

  3. In the open.

    Every step is said in the thread by the role that took it, and your own Claude session talks there too. There is no back room.

  4. Lit by what's happening.

    The ground is the project's state, and the glows mean something every time they appear: phosphor for what's alive or yours, black light for the crew at work, neon for what's broken.

  5. You decide.

    You set the vision and give the go. The crew brings ideas, pushes back and takes one thing a day on its own. What lands is done, and if something's wrong you say so and it's first in the work.

  6. Proof, not promises.

    Every story is proved by a test that failed first. The brand says what skelly does, in the words it does it in, and nothing it doesn't.

Files

Take the files.