Green Pages
/design.md

The Lovable of WhatsApp

Brand
Design
System

The complete visual language for Green Pages, the team that built Paige, the Lovable of WhatsApp. Build in minutes, launch to millions.

02 — Logo Motion

Logo Motion Spec

A three-beat sequence built around the chat-bubble + storefront mark, now driven by the traced lockup paths. Use it for splash screens, first-load reveals, and product onboarding.

GREEN
PAGES
Sequence

Build → Launch → Ring

Total runtime ~2.4s. Each element animates as a real traced path — what builds here is the asset designers ship. Honors prefers-reduced-motion — collapses to a 0.3s fade.

Bubble Pop

0s → 0.8s

The icon arrives as a unit — scale 0.85 → 1, spring (220, 18). The white speech bubble + tail pop in together at a quarter-beat, like a notification landing.

Build the Storefront

0.8s → 1.6s

Green disc pops on top of the bubble. The mint and white storefront halves slide up into the disc. The navy awning drops down last to crown the storefront.

Wordmark Reveal

1.6s → 2.6s

GREEN letter-staggers in (brand green), then PAGES (white) — 0.05s per letter, ease-brand. A green underline sweeps left-to-right to settle the lockup.

Timing reference

BeatDurationCurve
Icon arrivespringstiffness 220, damping 18
White bubble popspringstiffness 260, damping 16 · delay 0.25s
Green disc popspringstiffness 280, damping 16 · delay 0.55s
Storefront slide0.50sease-brand · delay 0.85s
Awning drop0.55sease-brand · delay 1.15s
Letter stagger0.05s × 9ease-brand · from delay 1.55s
Underline sweep0.60sease-brand · delay 2.15s
03 — Shape Language

Soft Curves, Confident Corners

The mark is the only sharp geometric element. Everything around it breathes — rounded containers, pill badges, and gentle wave dividers keep the system feeling friendly without losing structure.

Rounded Containers

Use 16px on small surfaces, 24–32px on cards and panels. Reserve 999px (pill) for badges and CTAs.

LiveBeta12 newDraft

Pill Badges

Status, counts, and tags ride on fully-rounded pills. Pair coloured backgrounds with one shade darker on hover — never opacity.

Wave Dividers

Soft arcs replace hard horizontal rules between major sections. Use sparingly — one per page is plenty.

Do

  • Use rounded containers with 16–32px radius
  • Pill shapes for tags, badges, and primary CTAs
  • Let the logo be the only geometric anchor
  • Pair brand colors with one shade darker on hover

Don't

  • Use sharp 90° corners on interactive surfaces
  • Separate sections with thin horizontal rules
  • Stack multiple wave dividers in sequence
  • Use opacity-based hover (use darken instead)
04 — Motion Language

Buoyant, Not Bouncy

Movement should feel like a notification landing — soft entrance, gentle settle. Avoid clinical or snappy easing. Everything decelerates.

Fade Up

Fade Up

opacity 0→1, y 24→0 · 0.5s expo
Pop In

Bouncy Pop

spring · stiffness 260, damping 18

Staggered Cascade

delay: i × 0.08s

Hover Lift

scale 1.04, y -2 · cubic
GP

Soft Float

±8px · 4.5s loop

Glow Pulse

opacity 0.6→1 · 3s loop

Timing reference

ContextDurationEasing
Micro (hover, toggle)0.15–0.2sease-out
Standard (fade, slide)0.4–0.6sexpo out [.22,1,.36,1]
Emphasis (pop, bounce)springstiffness 200–300, damping 15–20
Dramatic (hero, page)0.7–1.0sexpo out

Rules

  • • Never use linear easing — everything decelerates
  • • Exits run faster than entrances (0.2–0.3s)
  • • Stagger max 6 items — beyond that, batch in groups
  • • No spinning, flipping, or 3D rotations
  • • Always respect prefers-reduced-motion
05 — Color Palette

Click any swatch to copy

Three brand colors anchor the system, with Beta Blue scoped to the paige product mark. Neutrals follow a cool grey ramp that complements navy. Status colors stay close to the brand — success is the brand green itself.

Brand

Product mark

Used only inside the paige product wordmark. Do not introduce blue anywhere else.

Neutrals

Status

Tints & shades

Five-stop scale per brand color. Use 50/200 for surfaces and washes, 500 as the base, 700/900 for hover states, depth, and on-color text. Always pick from the scale — never use ad-hoc shades.

Navybase #131D37
Greenbase #81D741
Green Softbase #DCF8C6

Semantic mapping

Tokens map differently depending on surface. Marketing surfaces lead with brand green as primary; in-product chrome (the paige app) leads with a neutral primary and treats brand colors as accents. Both maps share the same hex palette.

Marketing

  • --primaryGreen — CTAs, links, accents
  • --primary-foregroundNavy — text on green
  • --secondaryNavy — secondary CTAs, dark surfaces
  • --secondary-foregroundWhite — text on navy
  • --backgroundWhite — page base
  • --foregroundInk — primary text
  • --accentGreen Soft — highlight panels
  • --mutedGrey 50 — subtle backgrounds
  • --muted-foregroundGrey 500 — captions, hints
  • --borderGrey 200 — dividers, outlines

Platform (paige app)

  • --primaryNeutral dark — primary buttons, headers
  • --primary-foregroundWhite — text on primary
  • --brandNavy #131D37 — brand-accent buttons (Send, Deploy primary)
  • --successGreen — Deploy succeeded, confirmations
  • --accentGreen Soft — chat bubbles, subtle highlights
  • --backgroundWhite — app canvas
  • --foregroundNear-black — primary text
  • --mutedGrey 100 — subdued surfaces
  • --muted-foregroundGrey 500 — captions, placeholders
  • --borderGrey 200 — dividers
Why two maps? Marketing earns the brand's full voice — green is the hero. Inside the product, green is a status cue (success, deployed) and should stay rare so it lands when it appears. Don't blur the two.

Accessibility

Contrast ratios for the most common pairings. Aim for AA on body text and AAA where possible. Anything marked Fail must not ship.

PairingRatioWCAGUsage
Aa sample15.6 : 1AAABody & headlines on navy
Aa sample15.6 : 1AAABody & headlines on white
Aa sample8.4 : 1AAAText on green CTAs
Aa sample13.1 : 1AAAText in chat bubbles
Aa sample5.4 : 1AAAccent text & paige wordmark on navy
Aa sample4.5 : 1AA[beta] suffix on white
Aa sample3.4 : 1AA Large[beta] suffix on navy — large text only
Aa sample1.9 : 1FailNever — white on green is unreadable
06 — Typography

Two faces, three roles

Buvera carries the brand voice — wide, confident display type for headlines. Geist Sans does the heavy lifting across the product. Geist Mono labels code, tokens, and the paige product wordmark.

Display
Buvera
GREEN PAGES

Hero headlines, the wordmark, section titles. ExtraBold at hero scale; SemiBold for section heads. Never below 24 px.

font-family: "Buvera", system-ui;
UI / Body
Geist Sans
Build in minutes, launch to millions

Default UI font across marketing and product. Navigation, forms, buttons, body copy, in-product chrome.

font-family: "Geist", system-ui;
Mono
Geist Mono
--brand-green: #81D741

Code, CSS variables, hex values, file paths, eyebrow tags — and the paige product wordmark.

font-family: "Geist Mono", monospace;
Type pairing

How the three faces work together

A live composition at real scale. Eyebrow in Geist Mono, headline in Buvera ExtraBold, body in Geist Regular, in-line accents in Geist Mono.

03 — Live pairing

Build in minutes,
launch to millions.

Paige turns plain English into production-grade WhatsApp commerce flows. Set a price in settings.json and deploy from the same conversation that built the bot. No code ceremony, no infrastructure.

paige[beta]v0.18 — released today

Type scale

Marketing sizes use Buvera; UI sizes use Geist Sans; eyebrow tags use Geist Mono. Stay on the ladder — don't invent intermediate sizes.

display-xl
88px · 5.5rem
Hero
Marketing hero only
display-lg
60px · 3.75rem
Green Pages
Landing headline
display-md
48px · 3rem
Build in minutes
Section title
h1
36px · 2.25rem
Launch to millions
Page H1
h2
30px · 1.875rem
Section heading
Section H2
h3
24px · 1.5rem
Subsection heading
Subsection / minimum Buvera size
xl
20px · 1.25rem
Subheading text
Lead-in subheading (Geist)
lg
18px · 1.125rem
Lead paragraph
Intros, long-form lead
base
16px · 1rem
Body copy that customers read every day
Default body (Geist)
sm
14px · 0.875rem
Captions and small UI labels
UI labels, captions
xs
12px · 0.75rem
Fine print and metadata
Microcopy, legal
mono-tag
11px · 0.6875rem
01 — EYEBROW TAG
Eyebrow tags, technical labels (Geist Mono)

Buvera guardrails

Do
  • Headlines, section titles, hero copy
  • Minimum 24 px (h3 / 1.5 rem)
  • Weights 700–900 for impact, 500–600 for restrained heads
Don't
  • Body copy, captions, UI labels
  • Below 24 px — fidelity collapses
  • Inside the paige product chrome — Geist only there

Geist Mono guardrails

Do
  • Code, file paths, hex values, CSS variables
  • Eyebrow tags (uppercase, wide tracking)
  • The paige product wordmark
Don't
  • Body paragraphs or marketing headlines
  • Brand wordmarks other than paige
  • Anywhere readability matters more than mood
07 — Buttons

Two tracks, one button

Buttons split by surface. Marketing buttons are loud — pill shapes, bounce, glow. In-app buttons are quiet and functional — flat, compact, rooted in the paige product. The shadcn Button supports both via variants. Never reach into className to override hover styles.

Marketing surfaces

Loud, bouncy, pill-shaped

For landing pages, ads, decks
variant="hero"
variant="hero-secondary"
variant="green"
variant="brand"
variant="default"
variant="secondary"
variant="outline"
variant="ghost"
variant="link"
variant="destructive"

Marketing interactions

  • btn-bounce — lift on hover, compress on press
  • shadow-hero — soft green glow under the CTA
  • rounded-full — pill shape on hero/secondary
In-app · Platform

Flat, compact, functional

Mirrors paige/components/ui/button.jsx
variant="platform-brand"
variant="platform-default"
variant="platform-secondary"
variant="platform-outline"
variant="platform-ghost"
variant="platform-destructive"
variant="platform-link"
variant="platform-success"

Platform sizes

size="platform-lg"
size="platform-default"
size="platform-sm"
size="platform-xs"
size="platform-icon-lg"
size="platform-icon"
size="platform-icon-sm"
size="platform-icon-xs"
Case study

Deploy button — four states

The Deploy button in the paige header is the canonical example of status-driven button states. Each state is a different variant or inline class combo — never a className override on hover.

Connect WhatsApp
Before WhatsApp is linked
Deploy (changes pending)
Undeployed changes — orange ping
Deploying…
In progress, button disabled
Deployed
Success — brief confirmation state

Anti-patterns

From the paige in-app DESIGN.md. These apply to any button you ship — marketing or platform.

Raw <button> with hover:bg-* classes
shadcn <Button> with a variant
hover:opacity-* to suggest hover
Darker shade (hover:bg-[colour]-700) — fade is mushy
Override hover: classes on <Button> via className
Add a new variant to button.tsx
Native title= attribute on icon buttons
shadcn <Tooltip> wrapping the button
window.alert() or alert()
Sonner toast (toast.success / error / info)
window.confirm() for destructive actions
AlertDialog with Cancel + Confirm
08 — Components

Platform primitives

A visual showcase of the shadcn primitives used inside the paige app. Same components, same variants. Reach for these instead of native HTML or hand-rolled equivalents.

Badge

Status labels, tags, counts

Default
Secondary
Outline
Destructive

Tooltip

Hover hint for every interactive button

Switch

Toggle on/off — never a native checkbox

Notifications on

Input

Text fields, file uploads

Select

Single-value dropdown — replaces native <select>

Dropdown menu

Action menu on click

Tabs

Tabbed interfaces

Conversation volume, active flows, deploy status.

Dialog

Forms and informational modals

Alert dialog

Destructive / irreversible confirmations

Toast (Sonner)

Transient feedback — never window.alert()

Rule of thumb

If you're about to write window.alert(), a native <select>, or a hand-rolled hover style — stop, and reach for the matching primitive above. Consistency across paige and the marketing site starts here.

08 — Effects & Utilities

The glue between everything

Gradients, shadows, radii, and motion utilities that bring the system to life.

shadow-soft
Cards, panels
shadow-hero
CTAs, key actions
shadow-navy
Dark surfaces
rounded-md
8px
rounded-lg
12px
rounded-xl
16px
rounded-full
999px
GP
float
±8px, 4.5s loop
btn-bounce
cubic bounce on hover/press
paper-grain
Subtle dotted overlay
09 — Component Patterns

Recurring building blocks

Combinations of the primitives above that show up across the Green Pages landing page, marketing surfaces, and in-product moments.

Badges

built on WhatsAppEarly AccessMost PopularFree to start

Feature Card

WhatsApp-Native

Sell, support, and broadcast — all inside the chat your customers already use.

Build in Minutes

Describe your flow in plain English. Paige writes the bot, you ship it.

Meta-Verified

Official Cloud API. Real templates, real delivery, real trust.

Pricing Pill

Launch plan
R499 / month
Unlimited contacts. Pay-as-you-go on conversations.*

CTA Group

Ready to launch?

Build your WhatsApp commerce flow in minutes. No code. No credit card.

Navigation Bar

11 — Voice

How we sound

Playful but precise. The voice of someone who knows the product cold and respects the reader's time. Lovable's warmth, Linear's economy. If a sentence sounds like a press release, rewrite it.

01

Plain over clever

Say the thing. Don't dress it up. If the sentence sounds like a brochure, rewrite it as if you were telling a friend.

02

Short sentences. One idea each.

Vary length, but lean short. Long sentences belong in the README, not the hero. Use periods like fences.

03

Specific beats vague

"Deploy in under a minute" beats "Fast and reliable." Numbers, nouns, verbs — not adjectives stacked on adjectives.

04

Cheeky, never smug

A little wink is fine. Punching down isn't. We are not the smartest thing in the room — paige is.

05

Developer-aware, not jargon-soaked

Talk about APIs, deploys, flows — but assume the reader sells things, not ships infrastructure. Define unusual terms once, then use them.

Tone by context

Same brand, four registers. The dial moves; the voice stays.

Context
Marketing headline
Pitch

Confident, slightly cheeky. Says what's true, not what's safe.

Example
Build a WhatsApp bot in the time it takes to brew coffee.
Context
Product UI copy
Pitch

Quiet, descriptive, never pleading. Buttons say what they do.

Example
Send test template
Context
Error message
Pitch

Acknowledge, explain, give a next step. No "oops", no winking.

Example
We couldn't reach your WhatsApp number. Try reconnecting from Settings → WhatsApp.
Context
Support reply
Pitch

Warm, direct, accountable. Name the problem, name the fix, name the timeline.

Example
That deploy failed because the template wasn't approved by Meta yet. I've kicked off a re-submission — you should see it in about an hour.

Before & after

Real rewrites. Use these as a calibration tool — if your draft sounds like the left column, push it toward the right.

Before

Revolutionize your business with AI-powered conversational commerce.

After

Sell on WhatsApp. Without writing the bot.

WhyNames the channel. Names the win. No buzzwords.
Before

Unlock the power of WhatsApp at scale.

After

Launch to millions on the messaging app they already use.

Why"Unlock" is filler. Pick a concrete verb and a concrete audience.
Before

Oops! Something went wrong. Please try again.

After

We couldn't save that. The connection dropped — your last edit is still in the editor.

WhyTells the user what failed, why, and what they still have.
Before

Click here to learn more.

After

See the pricing breakdown

WhyLink text describes the destination, not the action of clicking.
Before

We are excited to announce that paige now supports broadcast templates.

After

Broadcasts are live. Send templated messages to anyone who's opted in.

WhyDrop the announcement language. Lead with what changed for the reader.
Before

Game-changing AI that supercharges your team's productivity.

After

Describe a flow in English. Paige builds the bot, writes the code, ships it.

WhyShow, don't claim. Specifics build trust faster than adjectives.
Before

Your free trial is ending soon!

After

Trial ends in 3 days. Add a card to keep your bot live.

WhyExact deadline + exact action. No exclamation marks for routine UI.

Banned words

These signal a press release, not a person. If you find one in a draft, swap it for the alternative on the right.

Game-changing / game-changer
Say what changes.
Revolutionary / revolutionize
Say what's different.
Synergy / synergistic
Say which two things work together and why.
AI-powered
Say what the AI does. "Generates bot code from a description."
Unlock
Use a real verb. "Open", "send", "launch", "earn".
Supercharge
Say the actual gain. "3× faster", "in one click".
Leverage
"Use."
Ecosystem
Be specific. "Apps", "integrations", "partners".
Solution / solutions
Say what it actually is. "Bot builder", "broadcast tool".
Cutting-edge / state-of-the-art
Show, don't claim. Demos beat adjectives.
Empower
"Let", "help", "give".
Seamless / seamlessly
Describe how it actually flows. "One click", "no copy-paste".
Rhythm

Vary length. Lean short.

A paragraph that's all medium sentences sounds robotic. A paragraph that's all short sentences sounds breathless. Aim for a mix — most short, the occasional longer one to give the reader a place to breathe. Read everything aloud. If you run out of air, the sentence is too long.

Example. Paige writes the bot. You describe what you want, in plain English, and the agent builds the flow — including the WhatsApp template, the code that handles incoming messages, and the database table for orders. Deploy is one click. You don't touch infrastructure. Ever.
12 — Tagline library

Approved copy

Sanctioned lines you can drop into ads, video, social, decks. Anything not on this list needs to clear the voice principles in the previous section before it ships.

Hero tagline

Single-line hero tagline. Used in marketing site hero, decks, primary ads.

Supporting one-liners

For ads, social posts, deck slides, video openers. Use the closest match to the context — don't rewrite without running it past the voice principles.

Product mark line

How to refer to paige in body copy

paige[beta]
  • • Always lowercase paige in body copy. "Paige" capitalised is only OK at the start of a sentence.
  • • Always paired with [beta] in the visual wordmark. In body copy, drop the suffix.
  • • Never write "the paige" or "a paige" — it's a proper noun, not a thing.
  • • "Green Pages" capitalised in body copy. Refers to the company, not the product.

Sign-offs

End-of-email, video outro, and footer lines. Keep them dry — the farewell is not where the brand strains for personality.

13 — Imagery

Screenshots, not stock

The product is the imagery. Most of what we ship is a paige screenshot in a brand-treated device mockup. No business-people stock, no generic startup photography. When we need atmosphere, we use abstract shapes and the navy/green glow — not models in offices.

Default treatment

Phone in hand,
navy in back.

The hero formula: paige screenshot inside a stylised phone frame, against a navy backdrop with a soft green ambient glow. Works on landing, social, video, and decks.

9:41●●●●
p
paige[beta]
Hey — can you ship a stock-takedown bot by Friday?
Yep. Setting up the flow now.
And broadcasts to the regulars?
Done. Live in 4 min.

Approved background treatments

Three backdrops, ranked by frequency. Navy ambient is the default; white minimal is for product-doc surfaces; green-soft accent is reserved for chat-focused stories.

9:41●●●●
p
paige[beta]
Hey — can you ship a stock-takedown bot by Friday?
Yep. Setting up the flow now.
And broadcasts to the regulars?
Done. Live in 4 min.
Navy ambient
Default — hero, video, ads
9:41●●●●
p
paige[beta]
Hey — can you ship a stock-takedown bot by Friday?
Yep. Setting up the flow now.
And broadcasts to the regulars?
Done. Live in 4 min.
Clean white
Product docs, blog hero
9:41●●●●
p
paige[beta]
Hey — can you ship a stock-takedown bot by Friday?
Yep. Setting up the flow now.
And broadcasts to the regulars?
Done. Live in 4 min.
Green-soft accent
Chat-focused stories, testimonials

Do

  • Show real paige UI — actual screenshots, not faked mockups
  • Frame in the stylised phone or desktop device
  • Use the navy backdrop with soft green ambient glow
  • Crop screenshots to one job-to-be-done — never the whole app
  • Hide real customer phone numbers and names — use plausible fakes

Don't

  • Stock photos of business people, handshakes, headsets
  • Generic startup imagery — laptop in café, sticky-note wall
  • Raw screenshots without the device frame and brand backdrop
  • AI-generated people imagery — uncanny is not on-brand
  • Real customer faces, phone numbers, or addresses

Banned imagery

Categories that explicitly do not belong on any Green Pages or paige surface. If a draft uses one, swap it for a product screenshot or an abstract shape composition.

Stock business handshake
Laptop in café headset
Stock startup whiteboard
Generic happy customer
AI-generated people
Inspirational mountain top
14 — Illustration

Geometric, brand-coloured, low-fuss

When a screenshot won't do the job, reach for an illustration — never a stock vector. Spot illustrations are geometric, drawn only from the brand palette, and live in marketing surfaces (never the in-app UI).

Geometric

Built from circles, rounded rectangles, and the speech-bubble silhouette. No gradients except the brand hero. No skeuomorphism.

Brand palette only

Navy, Green, Green Soft, plus one neutral. Never introduce a colour outside the palette to make an illustration “pop.”

Texture optional

Use the paper-grain utility for atmosphere on hero compositions. Skip texture for in-line spot illustrations.

Anchor illustrations

Five placeholder marks reserved as the spot-illustration anchors. Final art will be drawn in a follow-up pass — these stubs lock the slot, scale, and palette.

paige bird
Product mascot — flagship spot mark
Placeholder — final art pending
WhatsApp bubble
Conversations, messages, support
Placeholder — final art pending
Broadcast wave
Broadcasts, announcements, reach
Placeholder — final art pending
Storefront
Commerce, catalogues, shop flows
Placeholder — final art pending
Phone
Mobile-first, in-hand, WhatsApp-native
Placeholder — final art pending
Disc + dot
Generic placeholder while drafts are pending
Placeholder — final art pending

Screenshot · Illustration · Shape

Three image categories, three jobs. Don't substitute one for the other.

Use thisWhenDon't use it for
ScreenshotShowing what paige actually doesHero atmosphere or abstract concepts
IllustrationAnchoring a concept (commerce, reach, conversations)Replacing a real product UI demo
Abstract shapeBackground atmosphere, section breaks, decksStanding in for an icon or illustration

Do

  • Draw from circles, rounded rectangles, the speech-bubble shape
  • Stick to navy, green, green-soft + one neutral
  • Keep stroke widths consistent (2 px at 64 px artwork)
  • Use the same artwork at multiple scales — don't redraw per size

Don't

  • Use stock vector illustrations (Storyset, unDraw, etc.)
  • Introduce off-palette colour to "differentiate"
  • Use illustration inside the paige app UI
  • Add 3D, isometric, or hyper-detailed line art
15 — Iconography

One library, three sizes

Icons are Lucide React, full stop. Same shape across paige and marketing. Stroke widths are consistent; sizes are fixed. Other icon libraries are off-limits.

Sizes

Three icon sizes cover 95% of cases. Inline with text uses 16 px; standalone or paired with a single label uses 20 px; large feature callouts use 24 px. Don't invent intermediate sizes.

Send broadcast
16 px (inline)
Inside buttons, next to text
3 new notifications
20 px (standalone)
Toolbar icons, list rows
Deploy in one click
24 px (feature)
Feature blocks, illustrations

Stroke

Lucide ships at stroke-width="2" by default. Don't override unless an icon is >48 px — at which point step down to 1.5.

stroke-width="2"
stroke-width="1.5"
Never bold strokes

Colour

Icons inherit from currentColor. Default navy on light, white on navy, destructive on destructive surfaces. Don't tint icons green unless they pair with a green CTA.

Common icons

The everyday roster. If your feature needs an icon, look here first and reuse the existing meaning before introducing a new one.

Send
Bell
Search
Settings
Rocket
MessageSquare
Plus
Trash2
Edit2
Eye
ExternalLink
Copy
ChevronDown
Check
X
AlertCircle
Loader2
Download
Filter
User
LogOut

Off-limits libraries

Mixing icon libraries breaks visual consistency instantly — the stroke, corner radius, and grid all subtly differ. Stick to Lucide.

  • Material Icons / Material Symbols
  • Heroicons
  • Phosphor
  • Font Awesome
  • Bootstrap Icons
  • Bespoke one-off SVGs
16 — Motion principles

One curve, four durations

Every animation on every Green Pages surface uses the same easing curve and pulls its duration from the same four-step scale. Same dial, same drift — across web, video, and the in-product UI.

Easing

ease-brand

cubic-bezier(0.22, 1, 0.36, 1)

An ease-out curve with a snappy entrance and a long, soft tail. Things appear quickly, settle slowly. Already the default in every framer-motion transition on the site.

live preview
Duration

Four-step scale

Pick the closest step. Don't invent durations between rungs — half-measures dilute the rhythm.

Micro
150 ms
Default
300 ms
Hero
600 ms
Intro
1200 ms
Click Replay to retrigger.
Direction

Entrance ease-out · exit ease-in

Elements arrive fast and settle, then leave the way they came. ease-brand is already ease-out — flip the curve for exits (or use ease-in ).

Toast notification
enter 600 ms · exit 300 ms
Choreography

Stagger 50–100 ms

Sibling elements animate in sequence, not at once. 50 ms for small lists, 80–100 ms for hero-scale staggers.

80 ms stagger · 450 ms duration each
Reference patterns

Logo intro · outro

Specs a video editor or motion designer can replicate in After Effects / Premiere / a browser. Same brand curve, same scale, different durations.

Intro · 1200 ms
Green Pages
opacity 0 → 1 · scale 0.92 → 1 · blur 8 px → 0 · ease-brand · 1200 ms
Outro · 600 ms
Green Pages
opacity 1 → 0 · y 0 → -12 px · ease-in · 600 ms
Re-renders both motion components in sync
17 — Ad templates

Three frames, one system

Square, vertical, horizontal. Each ad pulls its headline from the Tagline library, its CTA from the in-app brand variants, and its backdrop from the imagery system. Below each preview: the layout spec a designer can replicate in Figma or Canva.

Click Show safe areas to overlay the layout grid: logo zone, headline zone, CTA zone, and the 8% safe-area inset that keeps content clear of platform UI (Stories caption, Reels icons).

1 : 1 · 1080 × 1080

Instagram feed, LinkedIn post, Facebook post

Green Pages

Sell on WhatsApp. Without writing the bot.

Describe the flow in English — paige builds, codes, and ships it.

9 : 16 · 1080 × 1920

Instagram Stories & Reels, TikTok, YouTube Shorts

Green Pages

Build in minutes, launch to millions.

Paige writes the bot for you.

16 : 9 · 1920 × 1080

YouTube thumbnail, LinkedIn banner, X header

Green Pages

The Lovable of WhatsApp.

Conversations that ship product.

Layout spec

Pixel values for the production-size template (not the scaled preview above). Match these in Figma at 1× and the artwork translates cleanly to every channel.

FormatSafe-area insetHeadline sizeLogoCTA
1 : 1 · 1080²80 px (~8%)96 px Buvera ExtraBoldTop-left · 60 px tallBottom-left · green pill
9 : 16 · 1080 × 1920160 px top / 240 px bottom (caption + reactions safe zone)108 px Buvera ExtraBoldTop-centre · 56 px tallCentre-aligned above safe-area
16 : 9 · 1920 × 1080120 px (~6%)120 px Buvera ExtraBoldTop-left · 72 px tallBottom-right · green pill

Rules of the road

  • • Headline always Buvera ExtraBold. Body always Geist.
  • • CTA is the hero variant (green pill) on light ads; hero-secondary on green-soft.
  • • Logo top-aligned, paired with the white wordmark only on navy.
  • • Never set a headline over a screenshot — use the navy backdrop and put the screenshot beside or beneath.
  • • Save as PNG at 1× plus a Figma source — never JPEG.
18 — Video templates

Same brand, in motion

Four reusable beats every video needs: an intro to open, an outro to close, a lower-third for talking heads, and a subtitle treatment that survives autoplay-muted viewing. Replicate the specs in After Effects, Premiere, or a browser-based render.

Intro · 2.0 s

Logo intro

Opens every video — landing-page demos, ads, customer stories. Logo blurs in, settles, ambient green glow expands. Hold on final frame for ~600 ms before content begins.

Spec
  • · Frame: 1920 × 1080 (HD) or 1080 × 1920 (Stories)
  • · Background: navy #131D37
  • · Glow: radial green at 20% opacity, 800 px blur, scales 0.6 → 1.0
  • · Logo: white wordmark, scales 0.92 → 1, blur 8 → 0, opacity 0 → 1
  • · Easing: ease-brand cubic-bezier(0.22, 1, 0.36, 1)
  • · Duration: 1200 ms motion + 600 ms hold + 200 ms exit
Green Pages
REC
Outro · 2.4 s

Logo + URL + tagline

Closes every video. Logo enters first, URL fades in 200 ms later, tagline 400 ms later. Final frame holds 1.5 s before fade-out for editor handoff.

Spec
  • · Frame: same as intro
  • · Background: navy with subtle vignette
  • · Logo enters: opacity 0 → 1, y -8 → 0, ease-brand, 600 ms
  • · URL enters: opacity 0 → 1, delay 200 ms, ease-brand, 400 ms
  • · Tagline enters: opacity 0 → 1, delay 400 ms, ease-brand, 400 ms
  • · Hold: 1500 ms · then fade everything, ease-in, 400 ms
Green Pages
greenpages.app
The Lovable of WhatsApp.
REC
Lower-third · 4.0 s

Speaker identification

For customer-story or interview videos. Pill enters from the left, holds while the speaker introduces themselves, exits the way it came. Lives in the lower-left quadrant — clear of subtitle area.

Spec
  • · Position: bottom-left, 80 px from left, 120 px from bottom
  • · Background: navy pill with 4 px green left-border accent
  • · Type: name in Geist SemiBold 22 px white · role in Geist Regular 14 px white/70
  • · Enter: x -40 → 0, opacity 0 → 1, ease-brand, 500 ms
  • · Hold: 3000 ms
  • · Exit: x 0 → -40, opacity 1 → 0, ease-in, 500 ms
Themba NkosiFounder, Vumba Online
REC
Subtitles

Bottom-centre, always-on

Most viewers watch autoplay-muted. Every produced video ships with burned-in subtitles in this style. Never bottom-aligned to the frame — always 8% safe-area inset.

Spec
  • · Position: bottom-centre, 88 px from bottom edge
  • · Pill: navy 92% opacity, 6 px radius, 18 px horizontal padding, 10 px vertical
  • · Type: Geist Regular 22 px, white, line-height 1.35
  • · Max width: 70% of frame width (forces line breaks on long sentences)
  • · Animation: opacity 0 → 1 over 150 ms · hold · fade-out 150 ms
"Paige wrote the bot in about four minutes. The hard part was deciding what to call it."
REC

For the editor

  • Easing. Every motion usescubic-bezier(0.22, 1, 0.36, 1)for entrance andcubic-bezier(0.7, 0, 0.84, 0)for exit.
  • Frame rate. 30 fps for web/social, 24 fps for cinematic long-form. Never 60 fps unless the platform demands it.
  • Background music. Off by default. Add only when the cut needs pacing — keep it instrumental and at -18 LUFS for narration headroom.
  • Logo placement. Bottom-right persistent watermark at 60% opacity for clip reuse on social.
19 — Email templates

Two skeletons, same chrome

One marketing template for outbound comms, one product template for in-product / transactional. Both are mobile-first, both lean on the type scale and palette already defined. Self-contained HTML — download, fill in copy, send.

Newsletter, announcement, launch

Marketing email

/templates/email-marketing.html

Lead with the Green Pages parent mark. Bold display headline, generous spacing, single green pill CTA. Use for product launches, newsletters, partnership news.

Spec
  • · Mark: Green Pages parent lockup at 36 px
  • · Headline: Geist 34 px / 38 px line-height · weight 700
  • · Body: Geist 16 px / 24 px line-height
  • · CTA: green pill (#81D741 bg / #131D37 text · radius 9999 px)
  • · Container: 600 px max-width · 16 px radius · soft shadow
  • · Background: #f3f4f6 grey
Welcome, billing, system notification

Product email

/templates/email-product.html

Lead with the paige product wordmark in the header bar. Dense layout, monospace metadata, flat navy CTA. Use for transactional and product-system emails.

Spec
  • · Mark: paige wordmark in Geist Mono 18 px · [beta] in Beta Blue 13 px
  • · Headline: Geist 22 px / 28 px · weight 600
  • · Body: Geist 14 px / 22 px
  • · CTA: flat navy rect (#131D37 bg / #fff text · radius 6 px) — platform-brand variant
  • · Container: 600 px · 12 px radius · 1 px grey border
  • · Background: #f3f4f6 grey

Email rules

  • Width. 600 px max. Inboxes below that scale fluidly; above, the layout caps and centres.
  • Fonts. Geist + Geist Mono via web fallback stack. Most clients won't load the brand font —-apple-system, Segoe UI, Arialtakes over. Buvera is never used in email.
  • Images. Use the Green Pages logo PNG (not SVG — Outlook ignores SVGs). Always alt-text.
  • Single CTA. One primary button per email. Secondary links inline below the button, never as a second button.
  • Dark mode. Don't fight it. Cards stay white, type contrast holds. Test in Apple Mail dark mode and Gmail dark mode before sending.
20 — Resources

Take the assets with you

Everything you need to apply the brand off-site. Logos, the font family, email templates. Hand this URL to agencies and contractors so they pull from a single source.

Logos

PNG plus self-contained SVG (font embedded) for every variant.

Logo lockup — light
Logo lockup — dark
Logo lockup — broader frame
Icon — navy frame
Icon — no frame

Buvera font family

Display face — licensed for use by external collaborators on Green Pages and paige projects.

Buvera Regular
Buvera Medium
Buvera SemiBold
Buvera Bold
Buvera ExtraBold
Buvera Black
License. Buvera is licensed for use on Green Pages and paige projects only. Don't redistribute outside that scope.

Email templates

Self-contained HTML — open, fill in copy, send. Inline CSS, mobile-tested.

Marketing email — HTML
Product email — HTML

Ad templates

1:1, 9:16, 16:9 layouts. Figma source to be added.

Coming soon

Figma source file lands here once the working file is ready. In the meantime, the on-page previews in section 17 are pixel-true wireframes — replicate at 1× and the artwork translates.

One source of truth

Share this URL with anyone touching the brand.

New collaborator? Agency working on an ad? Video editor cutting an intro? Point them here. The brand stays consistent because everyone pulls from the same standard.