PromptReps
Design system · v1.0 · single source of truth

Put in the reps
with Claude.

The foundational design language for Prompt Reps — a hands-on course platform where non-developers learn by doing graded, repeated practice. Energetic and gamified, but credible enough to pay for.

WCAG AALight + DarkMobile-firstTailwind-ready tokensEmail-safe flat color
PromptReps

Today's session

12 1,840 XP
Daily goal3 / 4 reps
Brand

Reps, not videos

Every design decision should reinforce one idea: you get better by doing. Practice is celebrated, progress is visible, and feedback is immediate.

01

Earn the win

XP, streaks, and PASS verdicts are real, earned moments — celebrate them with snappy, springy motion.

02

Credible warmth

Cream surfaces and a warm near-black keep it friendly without feeling like a toy. A manager pays for this.

03

Coral means go

One energetic accent. Coral is reserved for action, progress, and achievement — never decoration.

Wordmark & logo

The mark is three “rep bars” — a rising set, like a workout. It works as a standalone glyph, locks up with the wordmark, and renders in a single flat color for stamps, favicons, and email.

Primary lockup
PromptReps
On ink / one flat color
PromptReps
Glyph only · small sizes
Color · light + dark

Color system

Warm coral leads, on warm cream (light) or warm ink (dark). Toggle the theme in the header — every swatch and token below is live. All hexes are flat solids, safe for email.

Primary — coral

Coral 100 · tint
--color-primary-100
#FFE7E0
Coral 200 · soft
--color-primary-200
#FFC9BC
CTA · streak · XP
Coral 500 · BRAND
--color-primary-500
#FF5A3C
Coral 600 · hover
--color-primary-600
#F0481F
small text & links
Coral 700 · ink
--color-primary-700
#C4371B
On-primary
--color-on-primary
#FFFFFF

Ink & text

body text
Ink
--color-ink
#1F1A17
Ink soft
--color-ink-soft
#463E38
meta text
Muted
--color-muted
#6B5F56
placeholder
Faint
--color-faint
#948678

Surfaces & borders

Surface · cream
--color-surface
#FBF7F2
Surface raised
--color-surface-raised
#FFFFFF
Surface sunken
--color-surface-sunken
#F3ECE3
Border
--color-border
#ECE2D6

Semantic — pass · warn · fail · info

PASS
Success · PASS
--color-success
#18A957
caution
Warning
--color-warning
#E8A317
FAIL
Error · FAIL
--color-error
#E5484D
note
Info
--color-info
#2E7CF6

Gamification accents

+50 XP
XP gold
--color-xp
#F0A21A
12 day streak
Streak flame
--color-streak
#FF5A3C
inner glow
Flame highlight
--color-streak-2
#FFB020

Contrast & accessibility (AA verified)

Text pairs — light mode
Ink on surface 13.9 : 1
Muted on surface 5.6 : 1
Coral-ink link on surface 5.4 : 1
Bold white on coral (large) 3.1 : 1 ✓ lg
Usage rule
Coral-500 is not for small text
Use --color-primary-700 (coral-ink) for body links and small labels. Reserve coral-500 for fills, bold ≥18px labels, icons, and highlights.

On coral fills, labels must be bold and ≥18px to meet AA large-text (3:1). The token sheet enforces this via the .btn weight defaults.

Typography

Type system

Three roles: Plus Jakarta Sans for UI & display, Source Serif 4 for long lesson reading, JetBrains Mono for prompts and code. Each ships a web-safe fallback for locked-down clients like email.

Display / UI
Aa
Plus Jakarta Sans
--font-display / --font-ui
Fallback: Arial, Segoe UI, system-ui
Reading
Aa
Source Serif 4
--font-reading
Fallback: Georgia, Times New Roman
Mono / prompts
Aa
JetBrains Mono
--font-mono
Fallback: Consolas, Courier New

Type scale

Display
56px · 800 · 1.05 · --text-display
Reps, not videos
H1
40px · 800 · 1.1 · --text-h1
Master prompting
H2
32px · 700 · 1.15 · --text-h2
Build the habit
H3
24px · 700 · 1.2 · --text-h3
Lesson 4 · Structured prompts
H4
20px · 700 · 1.3 · --text-h4
What you'll practice
Lead
18px · 500 · 1.5 · --text-lg
A short intro that frames the exercise ahead.
Reading body
19px · 400 · 1.8 (17px / 1.65 on desktop) · --text-reading
Long-form lesson text uses the serif at a generous line-height so learners can read comfortably for many minutes at a stretch.
Body UI
16px · 400 · 1.6 · --text-base
Default interface text used across buttons, cards, and forms.
Small
14px · 500 · 1.5 · --text-sm
Metadata, helper text, and secondary labels.
Caption / eyebrow
12px · 600 · 0.06em · --text-caption
Free intro course
Mono / prompt
14px · 400 · 1.65 · --font-mono
Summarize this email in 3 bullets for a busy exec.
Foundations

Spacing, radius, elevation & motion

A 4px spacing base, generous rounding to match the energetic feel, warm-tinted shadows, and snappy, celebratory motion.

Spacing — 4px base

--space-1 · 4px
--space-2 · 8px
--space-3 · 12px
--space-4 · 16px
--space-5 · 20px
--space-6 · 24px
--space-8 · 32px
--space-10 · 40px
--space-12 · 48px
--space-16 · 64px

Border radius

sm · 8px
md · 12px
lg · 16px
xl · 20px
2xl · 28px
pill · full

Elevation

--shadow-sm
--shadow-md
--shadow-lg
--shadow-primary

Motion

Durations
Fast120ms--dur-fast
Base200ms--dur-base
Slow360ms--dur-slow
Easings
Outsnappy decel--ease-out
In-outsmooth--ease-in-out
Springovershoot--ease-spring
Celebratory — tap to replay
+50 XP
Reference

Copy-paste token sheet

Every token with its Tailwind-style name and value. Hexes below reflect light mode; dark values are in the table's right column.

Color · core

TokenLightDark
--color-primary#FF5A3C#FF6A4D
Brand coral — CTAs, active, streak/XP
--color-primary-700#C4371B#FF9277
Coral-ink — AA small text & links
--color-on-primary#FFFFFF#1A0F0A
Label on coral fill
--color-ink#1F1A17#F6EEE7
Primary text / dark surfaces
--color-muted#6B5F56#B0A296
Secondary & meta text
--color-surface#FBF7F2#17120F
App background
--color-surface-raised#FFFFFF#211A15
Cards & sheets
--color-surface-sunken#F3ECE3#0F0B09
Inputs, code, wells
--color-border#ECE2D6#352B24
Hairline dividers

Color · semantic

TokenLightDark
--color-success#18A957#2FBE6E
Graded PASS
--color-success-ink#0F7A3D#4FD98C
PASS text (AA)
--color-warning#E8A317#F5B73D
Caution
--color-error#E5484D#FF5A5F
Graded FAIL
--color-error-ink#C0353A#FF8589
FAIL text (AA)
--color-info#2E7CF6#5B9BFF
Informational
--color-xp#F0A21A#F5B73D
XP gold
--color-streak#FF5A3C#FF6A4D
Streak flame

Typography

TokenLightDark
--font-displayPlus Jakarta Sans→ Arial, Segoe UI
UI & headings (safe fallback)
--font-readingSource Serif 4→ Georgia
Lesson body (safe fallback)
--font-monoJetBrains Mono→ Consolas
Prompts & code (safe fallback)
--text-display56px / 1.05 / 800
Hero
--text-h140px / 1.1 / 800
--text-reading19px / 1.8 / 400 · 17px desktop
Lesson body
--text-base16px / 1.6 / 400
Body UI
--text-caption12px / 1.4 / 600
Labels / eyebrow

Spacing · radius · elevation

TokenLightDark
--space-{1..24}4 → 96px
4px base scale
--radius-md12px
Default control rounding
--radius-lg16px
Cards, inputs
--radius-2xl28px
Course cards, modals
--radius-pill9999px
Buttons, tags, progress
--shadow-sm0 2px 6px /.08
Cards
--shadow-primary0 10px 26px coral/.34
Coral CTA glow

Motion

TokenLightDark
--dur-fast120ms
Hover / press
--dur-base200ms
Default
--dur-slow360ms
Sheets / modals
--ease-outcubic-bezier(.22,1,.36,1)
Snappy decel
--ease-springcubic-bezier(.34,1.56,.64,1)
Celebratory overshoot

The machine-readable source lives in apps/web/styles/tokens.css — imported by the app and mapped into tailwind.config.ts. Email templates should use the flat hex values and the *-safe font stacks.

Lesson UI

Reader, prose & quiz

The lesson reader uses .reader + .progress + .btn; lesson body text is tokenized prose; quizzes use .quiz-opt and the .graded feedback panel. Progressive-reveal uses .lesson-footer, .step-chip, .reveal-cta, .prompt-block, .spoiler, and .tryit. All reflow in dark mode via tokens.

Lesson prose

A heading inside a lesson

Body copy renders with the tokenized typography theme — links use the primary token and inline code gets a chip.

Before / after (Compare)

Weak

Write something about our launch.

Strong

You're our PR lead. Draft a 60-word launch note for existing customers announcing our scheduling feature. Tone: warm but factual.

Versus (concept contrast)

Search engine
Looks things up on the web and hands you a list of links to read.
Claude
Reasons over the material you put in front of it — paste the doc in, and it works with that.

Prompt anatomy

RoleYou're our PR lead
GoalAnnounce the launch
AudienceExisting customers
Format60 words
ToneWarm but factual

Quiz options & grading

Correct!
Nice — that's the right call. Here's why it works.

Step chips

Step 2✓ Step 1

Reveal CTA

the next section unfolds below

Ghost section

This content is locked until the learner completes the preceding step. The ghost treatment signals what is coming without revealing the full text.

Lesson footer

Prompt block

Prompt
You are a helpful writing coach.
Rewrite the paragraph below to be clearer and more concise.

Spoiler

💡 Why not "write a good email"?
Vague instructions give the model nowhere to aim. The more concrete your constraints — audience, length, tone, goal — the less room there is for a generic response.

Try it yourself

Multi-select quiz

Select all that apply.

Lesson sidebar (desktop)

At ≥1024px the lesson reader becomes a two-pane .lesson-shell grid; this step rail replaces the bottom progress bar; the reading column relaxes to 17px / 720px via the desktop token layer in tokens.css; below 1024px nothing changes; see ADR-0009.

Diagrams

Explanatory schematics

Six archetypes for lesson diagrams — text-only props, zero client JS. Authors never set colors or geometry. See ADR-0011 and content/AUTHORING.md.

Flow — linear steps

Each step is a separate prompt with one job

Branch — decision fork

Spectrum — scale between poles

Layers — stacked composition

Matrix — category grid

Cycle — iterative loop

Stop when the output is good enough
Account UI

Progress, certificate & error callout

Stat pills (.xp, .streak) used on /me, the public .certificate block used on /certificates/[code], and the .callout--error variant used on /admin.

Stat pills

70 XP1 day streak

Error callout

Validation error
lesson-03: missing quiz answer key

Certificate

Certificate of Completion

Prompt Reps — Claude 101

Verified

Issued 2026-06-09

Verify code: 9b775c8dea32b160

Mentor drawer & FAB

Side-panel chat: a fixed .fab opens a .drawer that slides in from the right (.is-open). No backdrop — content stays readable. Shown here statically; live on every lesson page.

Mentor
What does few-shot mean?

Showing the model a couple of worked examples before your real ask. A good example pair has:

  • an input like yours
  • the output you want, e.g. tone: warm
Polish kit · #62

Component utilities

New utility classes added in .glow, .dot-grid, .icon-sticker, .outline-numeral, .stat-tile, .ribbon-underline, and .lift. This section is the living visual-regression reference for all seven additions.

Danger button — .btn--danger

Destructive actions only (account deletion). Error tokens, same geometry as every other button.

Corner glow — .glow

.glow.glow--tr

A radial coral tint bleeds in from the top-right corner. Parent requires position:relative; overflow:hidden (built into the class).

.glow.glow--bl

An amber tint bleeds in from the bottom-left corner. Same positional requirements as .glow--tr.

Dot-grid texture — .dot-grid

.dot-grid

14 px dot pattern using --color-border. Works on any background — the dots adapt in dark mode to a 1 px radius.

Icon stickers — .icon-sticker

.icon-sticker variants
.icon-sticker
.icon-sticker--amber
.icon-sticker--success

Outline numeral — .outline-numeral

1
.outline-numeral

Place inside any position:relative container. The giant stroke-only digit sits behind step content as a decorative layer.

Stat tiles — .stat-tile

.stat-tile variants
120
XP
5
Day streak
3/9
Lessons
.stat-tile (default).stat-tile--amber.stat-tile--success

Ribbon underline — .ribbon-underline

.ribbon-underline

Section heading

A gradient pill (--color-primary to --color-warning) placed directly after an h3-level heading as a decorative accent.

Hover lift — .card.lift

.lift

Rises 2 px with a stronger shadow on pointer hover — decorative only; no information is hover-gated.

.lift.lift--high

Rises 2 px with a stronger shadow on pointer hover — decorative only; no information is hover-gated.

Cover link — .card__cover-link + .card__cta

Full-card anchor overlay for cards that also contain an interactive child (buy button, form). The card auto-becomes the positioning context via :has(> .card__cover-link) — no inline position: relative needed. .card__cta lifts the interactive child above the overlay (z-index 2). The focus ring uses outline-offset: -4px so it draws inside the clipping card boundary.

Demo card

Tab to this card and press Space/Enter — the cover link is keyboard-reachable and the focus ring is drawn inside the card border.

Avatar chip — .avatar-chip

Signed-in identity chip in the app nav: Google avatar (.avatar-chip__img) or the email initial. Links to /me; replaces the Sign in button once a session exists.

Ainitial fallback
Landing UI · #82

FAQ accordion & CTA banner

Two new classes used on the landing page: .faq is a native-<details> accordion with a +/× chevron; .cta-banner is the closing coral block.

FAQ — .faq

Do I need a paid Claude account?
No. Lessons, quizzes, and graded practice run right here. For try-it-yourself tasks a free claude.ai account is enough.

CTA banner — .cta-banner

Ready for your first rep?

Start the free intro course — three lessons, real practice, instant feedback.

Start free
Analytics UI · #5

Funnel & daily-bar chart

The minimal, zero-JS chart primitives used on /admin/analytics: .funnel__bar/.funnel__fill for per-step conversion bars and .daychart/.daychart__bar for the events-per-day column chart. Both fill with the brand coral over a sunken track.

Funnel bars — .funnel__bar / .funnel__fill

Funnel
Visits100 · 100%
Course views40 · 40%
Signups20 · 50%
Checkout started10 · 50%
Purchased5 · 50%

Daily bars — .daychart / .daychart__bar

Events per day