Skip to main content

Design

Green Goods has one design system, Warm Earth, and three dialects of it: the installed app, the public website, and the admin cockpit, with these docs as a quiet fourth. This page starts with the system everything shares, then shows what each dialect keeps, changes, and forbids, and ends with how the system is governed in the repo.

Three surface systems side by side in Storybook: the installed app, the public website, and the admin cockpit, each with its button specimens and the metrics measured in the browser
The app, website and dashboard share one token set. Open in Storybook.

Why the product feels this way​

Regenerative work happens in places, over seasons, and through relationships. The interface therefore favors natural light, earth tones, legible material layers, calm motion, and language that names the work plainly. The ontology supplies the names for entities, personas, and lifecycle states; the design system decides how those concepts look and move on each surface. The generated glossary is the public bridge between the two.

One system: Warm Earth​

The root DESIGN.md is the canonical source. Every dialect file extends it, and the shared theme.css is only the runtime projection of its tokens. The concept is a community garden: sun-bleached linen, charcoal ink, and the green of new growth, handmade but precise. Three qualities steer every decision: warmth (higher chroma, spring motion), clarity (functional layers, content-forward hierarchy), and purpose (no engagement hacking, no dark patterns).

Color by volume​

Color roles are defined by how much of the screen they occupy, not by a palette ranking. Green is third in volume and first in visual pull, and flooding a screen with it is the system's named failure mode.

RoleVolumeColorLight / darkJob
Neutral (canvas)80 to 90%Warm linen#FAF8F5 / #1C1917Background and breathing room
Primary (ink)8 to 15%Warm charcoal#292524 / #F5F5F4Headings and body
Secondary (stone)3 to 5%Earth stone#78716C / #A8A29EMetadata, borders, labels
Tertiary (accent)1 to 3%Garden green#1FC16BCalls to action, active states, value flow

Amber (#D97706) and sky (#3B82F6) are situational accents for warnings and information. A green fill that carries text uses the contrast-safe action pair, never the bright accent itself.

The Storybook color reference: the gray, brand green, blue, and red primitive palettes as rows of swatches with their RGB values
Primitive color palettes in light and dark themes. Open in Storybook.

Type, shape, motion, material​

  • Type. Inter in the installed app, Plus Jakarta Sans in the admin cockpit, and a serif (Fraunces) only for editorial headlines on the public website.
  • Shape. Buttons take one corner per surface whatever their emphasis: the 16px field corner in the app (12px while pressed), a capsule on the website, pills in the cockpit. Fields are 16px, and buttons and fields share one height scale: 48, 44, 40, and 32px.
  • Motion. Named spring tokens only, such as --spring-spatial and --spring-effects. Nothing settles on a hand-written curve or duration.
  • Material and elevation. Five material thicknesses from ultrathin to solid, matched to content density, and five elevation layers from the substrate to overlays. Body text never sits on the thinnest glass.

Tokens at a glance​

Every value below comes from the root DESIGN.md through a generated projection (docs/src/data/design-tokens.json), so this page cannot disagree with the file that governs the product. The Colors, Typography, and Shadows token stories in Storybook show the same values on real components, in both themes.

Colors

Sixteen named colors. Ink and canvas carry the reading surfaces; the greens carry every action.

Ink
primary#292524
primary-inverse#F5F5F4
secondary#78716C
secondary-inverse#A8A29E
Canvas
neutral#FAF8F5
neutral-dark#1C1917
Green
tertiary#1FC16B
tertiary-action#1A7544
tertiary-action-hover#16643B
tertiary-dark#C2F5DA
tertiary-dark-hover#84EBB4
On green
on-tertiary#0B4627
on-tertiary-action#FFFFFF
on-tertiary-dark#0C0A09
Signals
amber#D97706
sky#3B82F6

Pairings

Text on fill, as the components use them. Each one is a contract from the root DESIGN.md.

Canvas textprimary on neutral
Dark canvas textprimary-inverse on neutral-dark
Primary buttonon-tertiary-action on tertiary-action
Primary button, PWA darkon-tertiary-dark on tertiary-dark
Warning badgeneutral-dark on amber
Info badgeneutral-dark on sky

Type

Inter for the interface, Fraunces for editorial moments. Each sample loads the fonts the app loads, so it renders at its token's own weight.

app-title: Inter 22px / 600 / line 28px

Regenerative work, made visible

body-md: Inter 16px / 400 / line 1.5

Regenerative work, made visible

editorial: Fraunces 48px / 700 / line 1.1

Regenerative work, made visible

label-md: Inter 12px / 500 / line 16px

Regenerative work, made visible

Radii and spacing

Seven corner radii and three spacing steps. In the installed app, cards, fields, and buttons take the 16px lg corner; the 12px squircle is the step inside them, for content nested in a card and for a pressed button.

2xl
full
lg
md
none
squircle
xl
lg 24px
md 16px
sm 8px

From token to component​

A token becomes a material role, a role becomes a surface, and a component sits on that surface. The role map shows the stack in both themes; the button catalog shows one primitive carrying every emphasis and size from the same tokens.

Material role map story: how the canvas, sheet, glass, and chrome roles stack, shown in light and dark
Canvas, sheet, glass and chrome roles in both themes. Open in Storybook.
Button emphasis catalog story: primary, secondary, tertiary, and danger buttons at large, medium, small, and compact sizes
One Button primitive with four emphases and four sizes. Open in Storybook.

Three dialects​

The dialects share tokens and terminology without pretending every audience has the same needs. Each has its own DesignMD file, and the hard rule between them is the chrome: a bottom app bar means the installed app, a site header means the website, and the Material 3 shell means the cockpit. Never mix them. The client and admin package pages describe the shells that enforce the split.

The installed app: a field journal​

Gardeners install the client as a PWA and use it in the field, often offline. The dialect is practical and personal: mobile-first and thumb-zone optimized, a bottom AppBar with Home, Garden, and Profile, Inter only (a tool, not a magazine), the 16px field corner on every button (it tightens to 12px while pressed), and warm offline states rather than red ones. Sheets carry most of the work: every bottom sheet names one of four heights and shares one header, one action bar, and one loading anatomy, so a gardener never relearns a screen. Its rules live in packages/client/DESIGN.pwa.md.

App foundations story: the installed PWA's color roles, type ramp, corner radii, and spacing steps
The installed app’s color roles, type, radii and spacing. Open in Storybook.
Shared buttons inside a phone frame, showing emphasis and tone variants with their measured heights, corners, and hit areas
App button variants and measured hit areas at phone width. Open in Storybook.

The public website: editorial​

The browser site is a coffee-table garden journal crossed with a living public record: a sticky, transparent SiteHeader, Fraunces headlines at magazine sizes with Inter for everything else, capsule buttons on square cards and panels, generous photography, and editorial sections that stay warm walnut in dark mode rather than cold gray. The home page and the four navigation pages (Gardens, Impact, Fund, Actions) open on a three-line hero title at every width, and the accent green is reserved for the install and support calls to action. Its rules live in packages/client/DESIGN.browser.md.

The public Gardens page: a hero reading Explore the Gardens growing the public record, above a search field and the first garden cards
The Gardens page combines a shared hero layout with the garden directory.
Website foundations story: the live corner, weight, and font tokens the public site sets, with capsule button specimens and an editorial underline field marked on spec
The website’s button shapes, label weights and typography. Open in Storybook.
Website components story: the shared button at every emphasis and tone, capsule and semibold, at the 48 and 44 pixel sizes
The shared Button primitive with website styling. Open in Storybook.

The admin cockpit: Material 3, strictly​

Stewards and evaluators work in the cockpit, and its litmus test is blunt: if it would be out of place in Linear, GitHub, or Stripe's dashboard, it is out of place here. The same linen canvas and charcoal ink, but no serif, no lookbook layouts, and Plus Jakarta Sans throughout. Material Design 3 is the strict structural backbone, with exact component dimensions, M3 state layers, a six-step shape scale, and one elevation ladder; spring motion is the only permitted deviation. The nav dock (the NavigationBar and the FAB) is the only translucent surface, dialogs and side sheets and dense content stay solid, and each workspace tints the canvas with its own tone. Its rules live in packages/admin/DESIGN.md.

Admin foundations story: the Material 3 color roles, elevation levels, and type scale the steward cockpit uses
The dashboard’s Material 3 color roles, elevation and typography. Open in Storybook.
Admin components story: every AdminButton variant as a pill at the small and medium sizes, each with its measured height, corner, label, and hit area
Dashboard controls with measured dimensions. Open in Storybook.

These docs​

A quiet reading space: Manrope body, Bricolage Grotesque headings, a plain Docusaurus shell, and one primary green for active navigation everywhere. No cockpit chrome, no bottom navigation, no hero treatment. Its rules live in docs/DESIGN.md.

How the system is governed​

DesignMD files own the visual rules, and they nest: start at the root DESIGN.md, then read the DesignMD nearest the surface you're changing. Shared UI foundations live in shared with Storybook coverage, and the live Storybook at design.greengoods.app is the source of truth for what every primitive looks like in both themes. Executable guards keep token usage and shell composition honest in CI, so drift is caught by machines, not memory.

When you change UI: reuse a shared primitive before composing raw layouts, keep new strings in all three locales, and check the matching Storybook story in the same pass.

Seven regenerative principles​

Make the mycelium visible​

Show how work, evidence, recognition, and funding connect. A user should be able to follow a value flow without learning protocol internals.

Design for succession​

Match complexity to the community's current capability. New gardens need clear starting points; established gardens can carry denser coordination tools.

Enrich the edges​

Give extra care to transitions between people and systems: gardener to steward, funder to garden, online to offline, and familiar web behavior to on-chain records.

Treat failure as a path forward​

Recovery states should explain what happened, preserve work where possible, and make the next useful action obvious. Rejection, disconnection, and delayed confirmation need context, not blame.

Stay growth-agnostic​

Measure verified regenerative outcomes and growing community capability, not compulsive engagement. Seasonal rhythms replace artificial urgency, rankings, and fear-of-missing-out patterns.

Make capability the deliverable​

The product should help communities do more for themselves. A useful test is whether the people and records could remain legible if Green Goods were no longer the interface.

Choose regen over degen​

Avoid trading-terminal aesthetics, financialized status displays, and dark patterns. Favor collective context, clear evidence, garden-level stories, and calm action.

Source traditions​

These principles synthesize several traditions rather than claiming a new formal discipline:

  • Ethan Roland and Gregory Landua's Eight Forms of Capital broaden how value is described beyond money.
  • Kate Raworth's distributive and regenerative design framing asks systems to share value and operate within living limits.
  • Elinor Ostrom's commons research informs local rules, transparent roles, monitoring, and nested governance.
  • Suzanne Simard's work on forest networks and ecological research on succession and edge effects provide metaphors for visible flows, maturity, and boundary conditions.
  • Regenesis, biomimicry, post-growth HCI, and Self-Determination Theory inform the emphasis on capability, context, autonomy, and non-extractive motivation.
  • Solarpunk and Greenpill writing provide an optimistic visual and cultural frame for coordination around public goods.

Design resources​

Next steps​