Preview with sample data. The real ALGR is being built.

ALGR

Design system

Liquid glass on gloss black.

Everything on these pages comes from one logo, glass letters in green and orange on a glossy black tile, and this page is the rulebook for the real build.

  • Glass green--green
  • Glass orange--orange
  • Gloss black--ink-0
One logo in. Three materials out.

The mark

Glass letters for dark surfaces. The tile for everything else.

The glass letters. Dark surfaces only. mark-720 720 by 403
The tile icon on a light surface Light The tile icon on a busy surface Busy
The tile. Light or busy surfaces, and the app icon. tile-640 640 by 640
  • Letters only on dark surfaces. They are clear glass. They need black behind them.
  • Use the tile on light or busy surfaces. It carries its own black.
  • Keep clear space around it. The space equals the height of the letter L, on every side.
  • Never recolor, stretch, outline or add effects. The glass is the effect.

Do not

  • Do not stretch it.

  • Do not recolor it.

  • Do not put the letters on a light surface.

Still needed: the original artwork. The logo came from the founder as a JPEG, and every mark on these pages was cut out of that one file. The real build needs the original artwork file.

Files

  • mark-160 mark-400 mark-720The letters, on a clear background. Each one comes as .avif and .webp.
  • tile-128 tile-320 tile-640The tile, with clear corners. Each one comes as .avif and .webp.
  • favicon-32.png favicon-48.pngThe browser tab icon. Brighter letters on a black square, so it reads when tiny.
  • icon-192.png apple-touch-icon.pngThe same square for home screens, at 192 and 180.

Color

Green means search and go. Orange means the coin and getting paid. White is neutral.

  • GreenSearch and go.
  • OrangeThe coin and getting paid.
  • WhiteNeutral. Everything else.

No other accent colors. If a new color feels needed, the answer is green, orange or white.

Surfaces

  • --ink-0#050605Base. The page itself.
  • --ink-1#0a0c0aOne step up from the base.
  • --ink-2#0f120fTwo steps up.
  • --ink-3#161a16Three steps up.
  • --ink-4#1e231eFour steps up.
  • --ink-5#2a302aFive steps up. The lightest dark.

Lines

  • --linergba(255,255,255,.09)Hairlines. Card edges, dividers, table rows.
  • --line-2rgba(255,255,255,.16)Stronger edges. Tiles, chips, fields.
  • --line-3rgba(255,255,255,.28)The strongest edge. Hover edges, dashed tags, the check box.

Text

  • --text#f3f7f0Headings and main text.
  • --text-2#c9d2c5Body copy, leads, chip labels.
  • --text-3#98a294Quiet text. Captions, hints, table heads.

Green

  • --green#63d936The base green. Fills, step numbers, the selected tab.
  • --green-hi#8cf060Green text on dark. Links, eyebrows, the focus ring.
  • --green-pale#bdf5a5Text on green tinted pills.
  • --green-deep#2c8a18The shadow side of the glass. Spare
  • --green-ink#051402Text on green fills.

Orange

  • --orange#ff8a24The base orange. The coin, orange steps, solid pills.
  • --orange-hi#ffa94fOrange text on dark. Amounts coming in, orange links.
  • --orange-pale#ffd6abText on orange tints. The balance chip.
  • --orange-deep#b3560bThe shadow side of the glass. Spare
  • --orange-ink#1d0d00Text on orange fills.

Bone, white and danger

  • --bone#eef3eaThe light band.
  • --white#fffPure white. The white button and hover text.
  • --danger#ff6b5eErrors only. Field edges and error text.

Contrast

Every pair below clears 7 to 1, the strictest WCAG level for normal text. The numbers are worked out on this page, from the live tokens, with the WCAG relative luminance formula.

  • Aa--text on --ink-018.72 to 1AAA
  • Aa--text-2 on --ink-013.06 to 1AAA
  • Aa--text-3 on --ink-07.66 to 1AAA
  • Aa--green-ink on --green10.39 to 1AAA
  • Aa--orange-ink on --orange8.03 to 1AAA

Type

Three families, one job each. Heavy for headings, clean for reading, mono only for code.

  • Display

    Get paid.

    Gabarito --display

    Headings and big numbers. Weight 800, set tight.

  • Text

    Plain words, easy to read on a phone.

    Figtree --sans

    Everything else. Body copy, buttons, labels, fields.

  • Code

    var(--green)

    Geist Mono --mono

    Code and key caps only. Never for copy or labels.

The scale

Sizes flex with the screen. Each line below is set live with its token, and the pill shows its size on this screen right now.

  • Search.

    --fs-heroclamp(2.75rem,10.5vw,5.75rem)

  • Do business.

    --fs-h1clamp(2.3rem,7vw,4.1rem)

  • Get paid.

    --fs-h2clamp(1.8rem,5vw,2.9rem)

  • A card or group heading

    --fs-h3clamp(1.22rem,2.6vw,1.5rem)

  • The one sentence that sits under a headline.

    --fs-leadclamp(1.06rem,2.3vw,1.24rem)

  • Body copy. Seventeen pixels with room between the lines, so it reads on a phone held at arm's length.

    body1.0625rem / 1.58

Weights in use

  • Aa400Figtree. Body copy.
  • Aa500Figtree. Nav links, chips, typed text.
  • Aa600Figtree. Small labels, toasts, the tab bar.
  • Aa700Figtree. Buttons, pills, eyebrows, bold text.
  • Aa800Gabarito. Headings and big numbers.
  • Aa900Gabarito. The giant step numbers on the home page.

Small rules

Heading tracking
-.012em
Heading line height
1.04
Body line height
1.58
Eyebrow
.78rem, 700, caps, .15em tracking
Numbers in columns
.num for even digits
Line breaks
Headings balance, paragraphs wrap pretty

Shape and space

Round like poured glass. Wide gutters. Sections that breathe.

Radius

  • --r-xs8pxSmall parts. Spare
  • --r-sm12pxSmall controls. Spare
  • --r-md18pxNotes and toasts.
  • --r-lg26pxCards and steps.
  • --r-xl38pxTiles.
  • --r-pill999pxButtons, chips, pills, tabs, the tube.

Layout

--wrap
1180px. The widest the content gets.
--gut
20px. 32px from 760 px up.
--top
58px. The sticky top bar.
--tabbar
64px under 760 px. Zero above.

Mind the tab bar. On phones it covers the bottom 64 px of the screen. The body already pads itself by --tabbar. Anything fixed to the bottom has to sit above it.

Section rhythm

content
.sec clamp(56px,9vw,116px)
content
.sec--tight clamp(40px,6vw,72px)

Breakpoints

760 px
Gutters grow. The tab bar leaves. Two column grids start. Sheets move to the middle.
900 px
Three column grids, the split, and steps in a row.
1020 px
The desktop nav shows.
1040 px
Four column grids.

Surfaces

Dark is right. Flat dark is not. Every surface catches a little light.

Card

Soft glass. Lists, forms and quiet content.

.card .card--pad

Tile

The glossy logo tile. A hard shine across the top.

.tile

Green tile

Lit from below in green. Search and go.

.tile .tile--g

Orange tile

Lit from below in orange. The coin and getting paid.

.tile .tile--o

The page has its own light. The body sits on --ink-0 with three soft glows: white from the top, green from the left, orange from the right.

Bright bands. Every page gets at least one. On a band the text turns to dark ink, the eyebrow follows, and the focus ring turns black.

Green band

.band .band--green

Orange band

.band .band--orange

Bone band

.band .band--bone

Components

Every part below is the real class from the shared style sheet, running live.

Buttons

.btn .btn--green .btn--orange .btn--white .btn--ghost .btn--ink Green for go, orange for the coin, ink on bright bands. One primary button per screen.
.btn--sm 44 px .btn 50 px .btn--lg 58 px Switch one off with disabled or aria-disabled="true".
.btn--block

Links

.link .link--o .arrow

Pills and the sample tag

GuideMatchedPaidNewCoinPlannedSample
.pill .pill--g .pill--o .pill--solid-g .pill--solid-o .pill--line .sample The dashed tag marks made up data.

Chips

tacos near downtown LA
.chips .chip .chip__n Selected with aria-pressed="true", aria-selected="true" or .is-on. Add .chips--scroll for one row that scrolls sideways, and give that row jump buttons. Sample count

The coin bead

248
.coin .coin--g .balance Sized in em, so it follows the text around it. Sample balance

Check box

.check .check.is-bad

Form fields

At rest. Tap in to see the green focus ring.
Shown the way it looks in focus.
Add the full number, like (213) 555 0142.
.field .input .select .textarea .hint .field.is-bad .err Every field has a real label. Text sits at 17 px, so phones never zoom in.

Tabs

The Answer panel. Plain words on top of the results.
Coins coming in.
.tabs .tab .tabs--o Both sets work. Arrow keys move, Home and End jump.

The search tube

At rest. .tube This one is live. Tap in and it suggests. Add .tube--sm for the short one.
With the list open. .suggest .suggest__o .suggest__foot The typed part stays plain, the rest goes bold. The key hints only show on screens with a mouse.
Loading. .tube.is-loading Liquid pours through the glass while the answer loads.

Toast

.toast Fired from the shared script with toast(message, { coin: true }). It leaves by itself.

Sheet

dialog.sheet .sheet__in .sheet__head Rises from the bottom on phones, sits in the middle on desktop. Escape closes it.

Steps

  1. Send the lead

    The customer asked you to refer them.

  2. It gets matched

    A local business takes it.

  3. You get paid

    Coins land in your wallet.

  1. Orange steps

    For lists about the coin.

.steps .steps--row .steps--o Only for things that happen in order.

Timeline

  1. Sent

    You send the lead.

  2. Matched

    A business takes it.

  3. Paid

    Coins land in your wallet.

.timeline li.is-o

Meter

.meter .meter__fill .meter--g Set the fill with --v. Sample

Skeleton

.sk Holds the place of text that is loading.

Key value list

Lead
Kitchen faucet repair
City
Los Angeles
Payout
40 coins
.kv Sample

Table

LeadCityCoins
Faucet repairLos Angeles40
Home buyer introPasadena120
.table .r Sample

Note

A green note. For rules and plain facts a visitor should not miss.

An orange note. For anything about the coin or getting paid.

.note .note--o

Small parts

Eyebrow Orange eyebrow / Esc +40Stat with a label
.badge-ic .badge-ic--o .badge-ic--w .icon .eyebrow .eyebrow--o kbd .stat__n .stat__l Icons are inline SVG on a 24 box, stroke only, round caps. Sample

Motion

Things arrive from all four sides, once, then hold still.

From belowdata-rv="up"
From abovedata-rv="down"
From the leftdata-rv="left"
From the rightdata-rv="right"
Grows indata-rv="zoom"
Slides travel 34 px up and down, 48 px from the sides. The fade takes .62 s, the move .78 s. Each item in a group starts 80 ms after the one before it.

Easing and time

  • --ease cubic-bezier(.2,.7,.2,1)

    The default. Fast out, soft landing. Reveals, hovers, sheets.

  • --spring cubic-bezier(.34,1.45,.5,1)

    A small overshoot. Toasts, the go button, the check mark.

  • --t-1 .16s Hover and press.

  • --t-2 .34s Sheets, menus, toasts.

  • --t-3 .7s Long moves. Spare

The rules

  • Transform and opacity only. Nothing that moves is allowed to push the layout around.
  • Headings slide but never fade. Add data-solid so the biggest words are there at once.
  • Everything respects reduced motion. The page tag gets calm and all of it holds still, fully visible.
  • Loops pause off screen. And decorative motion lives under .anim, never outside it.

Named moves

fade rise drop sink shimmer pour blink floaty spin

Voice

Confident and plain. A little street, never corporate.

Search. Do business. Get paid.

The brand line, straight from the founder's logo. Three short sentences. That is the whole voice.

  • Short sentences.One idea each. Then stop.
  • Plain words.Write it the way you would say it out loud.
  • No dashes or hyphens anywhere.Not in copy, numbers, dates or lists.
  • Say what a thing is on the first screen.A plain headline, one sentence, then the action.
  • One clear action per screen.One primary button. Everything else stays quiet.
  • Sample data is labeled.With the tag Sample or the word sample close by.
  • Coins are counted in coins, never dollars.Write 40 coins. Never a price.

The name

ALGR

Written ALGR. Said like algorithm.

Write it like this

  • sign in
  • real time
  • pay per lead
  • one tap
  • AI built in
  • 3 to 5
  • (213) 555 0142

Access

It has to work for a thumb, a keyboard and a screen reader.

  • Tap targets

    At least 44 px tall and wide. The dashed box is the measured size of each one.

  • Focus ring

    Two pixels of --green-hi, three pixels out. Black on bright bands. Press Tab to see it for real.

    On darkOn a band

  • Text sizes

    Body copy is 17 px. Fields are 17 px too, so phones never zoom on focus. Small labels stop near 11 px and stay bold.

    17 px body11 PX LABEL

  • Reduced motion

    The page tag carries anim or calm, set before first paint. Under calm everything is visible and nothing loops.

    Checking this device

  • Labels on every field

    A visible label, or a hidden one with .sr where the design has no room, like the search tube. Errors sit under the field in words.

  • Landmarks

    A skip link first. Then one header, named navs, one main and one footer. Dialogs trap focus and Escape closes them.

That is the whole system. Now see it at work.

Open the home page

A sample sheet

Sheets hold one small job, like a form or a confirm step. Tap outside, press Escape or use a close button to leave.