Error border-magenta and mt-1 text-xs text-magenta
Example
Live component
Invite code
K7Q2-M8XA
Name
Name
Tell us what to call you.
Phone number
With the country code
Search by title or language
Title
Directions from the market
Name on the account
Amara Okafor
CodeInput
File
components/CodeInput.tsx (Nzinga): six boxes over a hidden TextInput (number pad, one-time-code autofill) · onComplete at six digits · error · disabled
Box h-14 flex-1 rounded-lg border, gap-2
Current border-highlight with a blinking h-7 w-0.5 Volt caret
Digit text-2xl font-semibold
Error every box border-magenta, mt-2 text-xs text-magenta
Example
Live component
482
482910
That code is not right. Check it and try again.
Switch
File
components/forms/Switch.tsx label · description · icon · value · onChange
Left: the setup choice with the pay line. Right: Review, Privacy and the change sheet (description and pay joined), with sharing paused so only "Only me" is enabled.
04
Navigation
Getting around: headers, the tab bar, tabs, steps and sheets.
Label text-[9px], shown only when focused (labelAnimated)
Badge h-3 w-3 bg-magenta
Record h-10 w-10 rounded-full bg-highlight, Mic 18 in black; pushes Record, not a tab
Example
Live component
ThemeTabs
File
components/ThemeTabs.tsx · text-accent bar h-[48px] border-b · type fixed (tab flex-1) | scrollview (px-4) · label text-base, active · indicator h-[2px] bg-highlight · headerComponent scrolls away above the sticky bar
Example
Live component
MultiStep
Template
from Feedy
File
Feedy components/MultiStep.tsx, extended: Header with back (after the first step), close and a ghost "Skip" on optional steps · ProgressBar segments under it (mb-8 px-global, h 4, gap-1, rounded, bg-border, Volt fill; segmentTotal spans the whole setup) · footer px-global py-3 › Pressable rounded-full bg-highlight py-5 › text-base font-semibold text-black · nextDisabled dims it, error sits above in magenta
Example
Live component
Setup, step 3 of 6 (About you, optional).
Could not save the request. Try again.
Payout, step 2 of 4 (Method), disabled until a method is saved.
Sheets
File
components/ActionSheetThemed.tsx · components/ConfirmationModal.tsx colors.sheet, top radius 40, bottom inset; screens add px-global pb-4 pt-6, a text-xl font-bold title and rounded-2xl bg-background item groups · : colors.bg, radius 20, p-8 pb-14, title text-xl font-bold, message text-subtext, Cancel bg-secondary and Confirm bg-flame with black semibold text
Example
Live component
Sort by
Discard this recording?
It is deleted from your phone. Nothing was sent anywhere.
05
Content
The building blocks of a screen and what fills it.
Screen shell
File
ThemedScroller · ThemedFooter (ThemeScroller.tsx) flex-1 bg-background px-global with a trailing h-20 spacer · (ThemeFooter.tsx) px-global pt-global, paddingBottom insets.bottom, no border · every screen has a Header; sticky actions go in the footer
Example
Live component
Section
File
components/layout/Section.tsx title · subtitle · titleSize sm | md | lg | xl (default) | 2xl | 3xl | 4xl · link / linkText · icon
Title font-bold at the titleSize class
Subtitle text-subtext at the 14px default
Link text-primary underline (14px), right-aligned
Page titles 4xl on Library, Circle, Payout, Statements, All Activity, Languages, Notifications
components/SessionCard.tsx · Courso , from FeaturedCourse: session (lib/sessions.ts) · status · width (260; Sessions screen up to 320) · opens /screens/session
Panel min-h-[200px] rounded-3xl p-5 in the session's tone: cyan, violet, magenta or flame; content is black
Top icon tile h-11 w-11 rounded-2xl bg-black/10 and the status pill (New, 2 of 5 recorded, Complete)
Title mt-6 font-outfit-bold text-xl · Meta "5 prompts · 8 min · about $1.60" text-sm text-black/70
Progress mt-3, h 5, bg-black/15 with a black fill
Session header the same panel at full width with the title at font-outfit-bold text-3xl
Example
Live component
SessionRow and PromptUnit
Template
from Courso
File
components/SessionRow.tsx · Courso · PromptUnit , from CourseList · in app/screens/session.tsx, Courso's unit row
SessionRow tone tile h-16 w-16 rounded-2xl, title text-base font-bold, meta text-xs subtext with dot separators, a thin progress line once started, h-11 w-11 rounded-xl chevron tile
PromptUnit py-4 border-b, h-12 w-12 rounded-xl tile (Volt with a check once recorded, else the number), state line Recorded / Up next / Not yet, Mic or RotateCcw tile
Example
Live component
Avatar
File
components/Avatar.tsx src · name (initials) · size xxs 28 · xs 32 · sm 40 · md 48 · lg 64 · xl 80 · xxl 96 · border · link
Example
Live component
AOAOAOAOAOAO
Initials are 14px font-medium at every size; Home uses xs, Circle rows sm, Profile xl, the setup photo xxl with a border.
Cards
File
components/Card.tsx Bordered card (Luna profile.tsx: rounded-3xl border, no fill) · list group (rounded-3xl bg-secondary, shadow medium) · info note (rounded-2xl bg-secondary p-4, Icon 18, text-sm text-subtext) · is present but no screen uses it
Example
Live component
AO
Amara Okafor
Phone number on file
Swahili · member since October
HausaEnglish
Requested on this phone; Nzinga confirms by SMS before any money moves. Check the number and name: they must match the account.
Found by comparing scrambled phone numbers. Nzinga keeps none of them, and people who are not members are never revealed.
plain 24 · contained xs / s / m · bordered l / xl · the Volt disc on Saved and Payout (h-20 w-20 bg-highlight, black icon).
06
Feedback
Status, progress and what to show when there is nothing yet.
StatusBadge
Template
from Multia
File
components/StatusBadge.tsx · Multia , from 's order pill: label · tone · dot · rounded-full px-2 py-1, text-xs font-semibold in the tone, the fill a tint of the same colour (alpha 2E dark, 24 light) so it reads on both themes
Example
Live component
highlight / green → accent · cyan / amber → cyan · flame / red → flame · magenta · violet · muted: bg-secondary with subtext.
ProgressBar
Template
from Feedy
File
Feedy · SetupProgress components/ProgressBar.tsx, extended: percentage · height (8) · backgroundColor (bg-secondary) · fillColor (bg-highlight) · segments · label · animates on focus · is the 6-piece setup line under the setup headers
Example
Live component
Ready to withdrawminimum $5.00
$1.90 more to reach the minimum payout.
Wallet's minimum payout bar · the setup line at step 4 of 6 · a session row's 4pt line.
Walley components/FlipBalance.tsx: value (formatted) · visible · label · textClassName · each digit in a 48pt window slides to "•" when hidden, 280 ms, 30 ms stagger; symbols and separators stay
Example
Live component
Available balance
+$1.80 this week
2h 11m accepted · in US dollars
Available balance
+$1.80 this week
2h 11m accepted · in US dollars
BalanceChart
Template
from Walley
File
Walley components/BalanceChart.tsx: data · labels · visible · height (Wallet 220) · formatYLabel · line and fill in colors.highlight (fill .25), dashed grid · Wallet reveals it left to right over 2 s each time the tab is focused
Example
Live component
TransactionItem
Template
from Walley
File
Walley components/TransactionItem.tsx: title · time · amount · method · isIncome · pending · icon · href / onPress
components/RecordButton.tsx · AiCircle , on Luna's : size (Record screen 200) · live · busy · icon · ring size × 0.56 on bg-background (shadow large), gradient ring − 12 in the brand spectrum Magenta → Flame → Volt, disc ring − 20, Mic at disc × 0.3, stroke 1.2 · live: the ring breathes to 1.06, the icon turns magenta and speaking.json plays over it at 0.2 · the recording screen's level meter draws magenta bars
Example
Live component
AudioPlayerBar and recording controls
File
components/AudioPlayerBar.tsx · recording.tsx (Nzinga, in Luna's ChatInput box): uri · durationSeconds · unavailableText · tap the bars to seek · controls in the same box
Play h-11 w-11 rounded-full bg-primary, Play/Pause 18 in invert
Bars 36, played in Volt, the rest subtext at .45 · Time text-xs tabular
Recording Pause and Trash2 in h-11 w-11 bg-secondary circles, Done in a Volt pill (min-w 120) with black text
Example
Live component
09
Brand
The mark and the wordmark as components. They are generated from docs/logo; never retype the wordmark as text. The rules for using them are on Brand, Logo.
Cowrie
File
components/brand/Cowrie.tsx size · color (the shell) · ground (the slit) · spectrum · small (seven bars, automatic below 32)
Example
Live component
Spectrum · 96
Volt · in the app
Black on Volt
40 · 24 · 16
Welcome tints the mark per slide (spectrum, cyan, Volt); About sets the spectrum mark over the two-line wordmark.
Wordmark
File
components/brand/Wordmark.tsx width · color · descriptor (adds NETWORK) · short form 3079 × 1000, two-line form 3079 × 1421
Example
Live component
Short form · Home 92, Welcome 104, Phone 112
About · 168
Note
Colour, type, spacing and shadows moved to Foundations. The original single-page gallery is still at ds/index.html.