Skip to content
Rami Omran
All workRipplux · Nov 2025 – present

Principal DesignerNov 2025 – presentRemote

Ripplux

The problem
Solo Shopify founders were burning ad money they couldn't see, and every dashboard asked for time they didn't have.
My role
Principal designer. I ran the research, UX, design system and AI strategy, and shipped an AI employee that finds the waste, asks first, fixes it and shows the receipt.

Headline results

  • 65%of qualified stores ran a first fix within 7 days
  • 83%of proposed fixes approved by merchants
  • $38,700measured savings across 20 stores

Research

Merchants trusted the bank balance, not the dashboard.

I started with 14 interviews with founders who run Meta and Google ads themselves, usually late at night, with no marketer on payroll. I asked each one how they judge a week of ads. Eleven opened their bank or Shopify payouts before Ads Manager.

When nine of them shared read-only data, the reason was plain: Meta and Google together claimed 38% more conversions than Shopify recorded as orders. Each platform grades its own homework, and founders had learned to distrust the grade without having a better one.

Research board from 14 founder interviews, sorted into four clusters, each sized by how many founders raised the theme and each ending in the design decision it produced. The platforms grade their own homework, 12 of 14: “Meta says 4x. My bank disagrees.” “Both of them took credit for the same order.” “I trust Shopify payouts. That’s it.” Decision: reconcile every claim against real Shopify orders; never show platform ROAS as truth. No time, no marketer, 13 of 14: “Ads are one of nine jobs I have.” “I look at this at 11pm, after the kids are down.” “Just tell me what to do.” Decision: email is the front door, the app is optional, and every finding ends in one proposed action. Is this normal, 9 of 14: “I don’t know if $40 a sale is good or terrible.” “Nobody tells you what good looks like.” “Maybe everyone burns this much.” Decision: every finding states the number, the target and the gap in one sentence. Don’t touch my money without asking, 10 of 14: “If it pauses the wrong ad on launch day, I’m done.” “I’d try it if I can undo it.” “Show me what it did, not what it thinks.” Decision: approve first, disclose what undo can’t restore, and send a receipt after every action. Below the clusters, the anti-persona interview with Tom Brandt, a freelance media buyer, who wanted the API and every knob; agencies distrust automation that answers to the owner, so they were designed out. And what the data said: Meta and Google together claimed 38% more conversions than Shopify recorded as orders, the median across 9 consenting stores over 90 days.

14 founder interviews. Clusters sized by how many founders raised each theme.

Bottom band of each cluster = the design decision it produced.

12 of 14

The platforms grade their own homework

“Meta says 4x. My bank disagrees.”

“Both of them took credit for the same order.”

“I trust Shopify payouts. That’s it.”

Reconcile every claim against real Shopify orders. Never show platform ROAS as truth.

13 of 14

No time, no marketer

“Ads are one of nine jobs I have.”

“I look at this at 11pm, after the kids are down.”

“Just tell me what to do.”

Email is the front door. The app is optional. Every finding ends in one proposed action.

9 of 14

“Is this normal?”

“I don’t know if $40 a sale is good or terrible.”

“Nobody tells you what good looks like.”

“Maybe everyone burns this much.”

Every finding states the number, the target and the gap in one sentence.

10 of 14

Don’t touch my money without asking

“If it pauses the wrong ad on launch day, I’m done.”

“I’d try it if I can undo it.”

“Show me what it did, not what it thinks.”

Approve first, disclose what undo can’t restore, receipt after every action.

Anti-persona interview

Tom Brandt, freelance media buyer

“I want the API and every knob.” Agencies distrust automation that answers to the owner, and the owner often distrusts them. Designed out.

What the data said

+38%

Meta and Google together claimed 38% more conversions than Shopify recorded as orders (median across 9 consenting stores, 90 days).

What 14 founders told me: four themes, one design decision each

User journey map for Dana Reyes, founder of Tallow & Pine, who spends about $14,000 a month on Meta and Google with no marketer on payroll. Seven stages across her first week, each with what she is doing, what she is thinking, how she feels and the design response. Stage 0, install, a fit check: she installs from the App Store at 11pm and connects Shopify, thinking “Is this another dashboard?”; her feeling dips below the midline, toward anxious; the response is an honest spend gate, where small stores get a checklist and a kind no. Stage 1, first session, 10 minutes or less: she connects Meta and Google and sees one small, provable finding, thinking “Oh. $67 on a sold-out candle.”; she feels confident; the response is to show something real this session, never only check back tomorrow. Stage 2, day 1, the inbox: the full audit arrives by email the next morning, “So that’s where it went.”; confident; email is the venue, one proposed fix per finding. Stage 3, approve, by day 7: she taps Approve on a pause proposal from the email, thinking “What if it’s wrong?”; this is the low point of the week; the response states what changes, what undo restores and what it can’t, before the tap. Stage 4, receipt, by day 7: she gets a receipt showing what changed, spend before and after, and undo, “It actually did it.”; this is the value moment, the high point; first person, a dollar number, an undo link. Stage 5, waiting, 72 hours: the saving shows as provisional until it holds for 72 hours, “Did it work, or not?”; the feeling dips toward anxious again; the response is a provisional state with a date, never claiming a saving early. Stage 6, weekly, ongoing: clean weeks read “Nothing to fix. I checked 23 campaigns.”, “Good. Someone’s watching.”; confident; clean weeks build the watchtower, not doubt. Red dots mark the low points the design had to answer; green dots mark the moments the design protects.

Dana Reyes, founder of Tallow & Pine. About $14,000 a month on Meta and Google. No marketer on payroll.

0 · Install

Fit check

1 · First session

≤ 10 min

2 · Day 1

Inbox

3 · Approve

Day ≤ 7

4 · Receipt

Day ≤ 7

5 · Waiting

72 hours

6 · Weekly

Ongoing

Doing

Installs from the App Store at 11pm. Connects Shopify.

Connects Meta and Google. Sees one small, provable finding.

Full audit arrives by email the next morning.

Taps Approve on a pause proposal from the email.

Gets a receipt: what changed, spend before and after, undo.

Saving shows as provisional until it holds for 72 hours.

Clean weeks: “Nothing to fix. I checked 23 campaigns.”

Thinking

“Is this another dashboard?”

“Oh. $67 on a sold-out candle.”

“So that’s where it went.”

“What if it’s wrong?”

“It actually did it.”

“Did it work, or not?”

“Good. Someone’s watching.”

Feeling

LOW POINTVALUE MOMENT

confident

anxious

Design response

Honest spend gate. Small stores get a checklist and a kind no.

Show something real this session, never only “check back tomorrow”.

Email is the venue. One proposed fix per finding.

State what changes, what undo restores and what it can’t, before the tap.

The value moment. First person, dollar number, undo link.

Provisional state with a date. Never claim a saving early.

Clean weeks build the watchtower, not doubt.

Red dots = emotional low points the design had to answer.

Green = moments the design protects.

The week that decides everything: Dana's first seven days, mapped by feeling

Reframe

A better report was the wrong answer.

My first frame was an honest dashboard: true return on ad spend, reconciled against real orders. I tested it as a clickable audit report with six founders. All six understood the findings. One said they would act on them that week.

Founders didn't lack insight; they lacked time. So I changed the product's identity from auditor to employee: it finds the waste, asks permission, makes the change and reports back. The value moment moved from “I understand” to “it's fixed, here's the receipt.”

Problem framing: three frames, each tested against founders, left to right. Frame 1, an honest dashboard. The question: how might we show founders their true return on ad spend? What testing showed: 6 of 6 understood the findings; 1 of 6 would act that week. Rejected: insight without action. Frame 2, an honest auditor. The question: how might we tell founders exactly what to fix? What testing showed: founders asked the same question in every session, “Can you just do it?” Rejected: the fixing still happens at 11pm. Frame 3, an AI ads employee. The question: how might we get the fix made, with permission, and prove it worked? What testing showed: the value moment is the first approved fix and its receipt. Chosen. Then who it is for, as a funnel narrowing from all Shopify stores running ads, to founder-run stores with no marketer on payroll, to those running Meta and Google themselves at $3,000–50,000 a month, to stores with enough spend to waste, which pass the spend gate at install. Out of scope by design: agencies and in-house media teams, who want knobs and APIs, not an employee.

Frame 1

An honest dashboard

The question

How might we show founders their true return on ad spend?

What testing showed

6 of 6 understood the findings. 1 of 6 would act that week.

Rejected

Insight without action.

Frame 2

An honest auditor

The question

How might we tell founders exactly what to fix?

What testing showed

Founders asked the same question in every session: “Can you just do it?”

Rejected

The fixing still happens at 11pm.

Frame 3

An AI ads employee

The question

How might we get the fix made, with permission, and prove it worked?

What testing showed

Value moment: the first approved fix and its receipt.

Chosen

And who it is for

All Shopify stores running ads

Founder-run, no marketer on payroll

Running Meta and Google themselves, $3,000–50,000 a month

Enough spend to waste: passes the spend gate at install

Out of scope by design: agencies and in-house media teams (they want knobs and APIs, not an employee).

Three frames, each tested with founders; only the third moves money

Design and testing

The employee asks before it touches a dollar.

The approve step is where trust is won or lost, so I tested it three rounds deep. In round two, four of five founders hovered over Approve and asked some version of “what if it's wrong?” Undo alone didn't answer them: un-pausing an ad restores the setting, not the auction position.

So every proposal now says, before the tap, what will change, what undo restores and what it can't. In round three all five approved, with a median of 41 seconds from opening the email to approving. Structure was settled in grey first, and the shipped screens match the wireframes element for element.

Usability testing in three moderated rounds, April to June 2026: remote, think-aloud, on the founders' own ad accounts in read-only. Round 1, April, tested the audit report prototype with 6 founders: 6 of 6 understood the findings, but only 1 of 6 would act on them that week. Top issue: “Useful. But I’d still have to go and do it.” What I changed: reframed the product from auditor to employee. Round 2, May, tested version 1 of the approve card with 5 founders: 4 of 5 hesitated at Approve, and the median time to decide was 2 minutes 10 seconds. Top issue: “What if it’s wrong? What happens to the ad?” What I changed: added a pre-approval disclosure saying what changes, what undo restores and what it can’t. Round 3, June, tested version 2 with 5 founders: 5 of 5 approved, with a median of 41 seconds from opening the email to approving. Top issue: “Where do I see what happened after?” What I changed: a receipt email with before and after, and an Undo link. Below, the same proposal before and after round 2. Version 1 asks: Pause “Cedar Smoke, Video 3”? Estimated saving: $340 per week, with Approve and Skip buttons. It asks for trust without saying what it risks, and 4 of 5 stalled there. Version 2, shipped, says: This ad spent $340 this week for one sale against your $80 target. I’d pause it. Approve? Its disclosure reads: What changes: this ad stops delivering. Undo restores the setting, not the auction position. Paused under about 3 days, it usually keeps its learning; a week or more, it re-enters learning. The buttons are Approve pause and Skip, and 5 of 5 approved.

Three moderated rounds, April to June 2026. Remote, think-aloud, founders’ own ad accounts in read-only.

  1. Round 1 · Apr

    Audit report prototype

    6 founders

    6 of 6

    understood the findings

    1 of 6

    would act on them that week

    Top issue

    “Useful. But I’d still have to go and do it.”

    What I changed

    Reframed the product from auditor to employee.

  2. Round 2 · May

    Approve card, version 1

    5 founders

    4 of 5

    hesitated at Approve

    2 min 10 s

    median time to decide

    Top issue

    “What if it’s wrong? What happens to the ad?”

    What I changed

    Added a pre-approval disclosure: what changes, what undo restores, what it can’t.

  3. Round 3 · Jun

    Approve card, version 2

    5 founders

    5 of 5

    approved

    41 s

    median, email open to approve

    Top issue

    “Where do I see what happened after?”

    What I changed

    Receipt email with before and after, and an Undo link.

The same proposal, before and after round 2

Version 1

Asks for trust without saying what it risks. 4 of 5 stalled here.

Version 2 (shipped)

5 of 5 approved

Three rounds of testing: undo alone didn't earn the tap, disclosure did

The Ripplux user flow, from two entry points to one approve step, with a named outcome for every failure. First entry, the App Store install: the store meets a decision, ad spend above the gate? If no, a kind no: a free checklist, come back at $3,000 a month. If yes, the founder connects Meta and Google, in under 10 minutes. Connection healthy? If no, a loud banner and a retry, never shown as live. If yes: provable finding now? If no, an honest wait that says what is missing and when it matures, which feeds the audit email. If yes, the first finding with its evidence, then the full audit by email the next morning, which becomes the first proposal. Second entry, the weekly email, leads to the same approve step: the proposal says what changes, what undo restores and what it can’t. The founder decides. Skip: the proposal is logged and not re-proposed. Approve: blackout or out of scope? If yes, the action is held; Ripplux watches and never acts. If no, it executes on Meta or Google. Platform accepted? If no, a receipt that says “I never ran it.” and nothing changed. If yes, a receipt with before and after and an Undo link; undo restores the setting and discloses that the auction position resets. Then: does the saving hold for 72 hours? If yes, the saving is counted, net of reallocation. If no, inconclusive, and no credit is claimed.

App Store install

Ad spend above the gate?

Kind no: free checklist, come back at $3,000 a month

Connect Meta and Google, under 10 min

Connection healthy?

Loud banner and retry. Never shown as live.

Provable finding now?

Honest wait: what is missing and when it matures

First finding, with its evidence

Full audit by email, next morning

Weekly email

Proposal: what changes, what undo restores, what it can’t

Founder decides

Skipped. Logged, not re-proposed.

Blackout or out of scope?

Held. Watches, never acts.

Execute on Meta or Google

Platform accepted?

Receipt: “I never ran it.” Nothing changed.

Receipt: before and after, with Undo

Undo: setting restored, auction reset disclosed

Saving holds for 72 hours?

Saving counted, net of reallocation

Inconclusive. No credit claimed.

noyesnoyesnoyesSkipApproveyesnoyesnoUndoyesno
  • Entry point
  • The approve step
  • Value delivered
  • Honest wait or hold
  • Decision
  • Failure, named to the founder
The user flow: every path ends in a fix, an honest wait or a clear no

Greyscale wireframes of the Ripplux Decisions screen, the approve inbox, drawn element for element like the shipped screen and in real copy, with seven numbered teal callouts. Desktop at 1440 pixels: a sidebar with the Tallow and Pine switcher and eight nav items, Decisions active; an All systems connected pill; the heading Ready to fix, with your approval, over the promise: Approve the ones you want. I act only on your tap and start measuring the result from your own spend. You can undo anything anytime (callout 1). The inbox card holds Select all (2) and an Approve button (callout 2), then two proposals: Pause 1 ad losing money, whose reason uses the founder's own break-even, ROAS 2.00 (callout 3), with $1.8k a month saved, estimated, right-aligned (callout 4); and Cut $20 a day on Prospecting, Broad US, with $600 a month saved, estimated, its Why this disclosure (callout 5) and its Skip button (callout 6). Below sit two receipts, each with Undo (callout 7): Paused Spring bundle carousel on Sep 12, measured from your data at about $540 a month, and Reduced Retargeting, 30 day visitors, daily budget $80 to $64 on Sep 25; each carries the caveat that undo restores the setting, not the auction position. Mobile at 390 pixels, the same screen cut in two: the upper half holds the same heading, promise, inbox bar and both proposals, each dollar amount still top right, with Why this and Skip; the lower half, scrolled, holds both receipts with Undo. Mobile keeps every element; the amount stays top-right so the dollar is read first.

Element for element the same as the shipped Decisions screen. Greyscale on purpose: hierarchy before colour.

Desktop · 1440 px

Mobile · 390 px

Mobile · scrolled to the receipts

  1. 1Promise before buttons: “I act only on your tap.”
  2. 2One deliberate gesture: select, then Approve N, then a confirm.
  3. 3Plain reason with the founder's own break-even.
  4. 4Dollar amount right-aligned, always labelled (est.).
  5. 5“Why this” holds the evidence, one level down.
  6. 6Skip on every row: saying no is one tap.
  7. 7Receipts sit beside proposals, with Undo.

Mobile keeps every element; the amount stays top-right so the dollar is read first.

Wireframes, desktop and mobile: structure settled before colour
The approve inbox, as shipped: every element earns trust

The Ripplux approve confirm on a phone. Over the dimmed Decisions page, a full-width dialog asks Approve 2 actions? It says, in plain words, that this pauses 1 ad on Meta right now and changes one campaign's daily budget, about 2.4 thousand dollars a month in estimated waste, that each action can be undone from its receipt, and that nothing else on the account changes. It states the combined effect, about 81 dollars a day less ad spend, estimated, then a grey panel: undo restores the setting, not the auction position. A near-black Approve 2 actions button sits within thumb reach, with a full-width Keep reviewing button directly below. Five numbered notes explain the design.

Round 3 of testing shipped this pattern.

  1. 1The count is in the title and repeated on the button: “Approve 2 actions”.
  2. 2Consequences in plain words, including “Nothing else on your account changes.”
  3. 3The combined effect is labelled (est.).
  4. 4The asymmetry of undo is disclosed before the tap, not after.
  5. 5Primary action within thumb reach; the safe exit directly below it, full width, 44 px or taller.
The confirm on a phone: disclosure before the tap

“I didn't open the app for two weeks. I just kept tapping approve in my email, and my cost per order came down.”

Founder, specialty coffee brand, founding cohort

MVP

The MVP was one loop, including the ways it fails.

I scored 31 candidate features on one criterion: how close each sits to the first approved fix. Eleven made the line. Report pages, a creative generator and full autopilot didn't. For founders who never open the app, the weekly email became the main surface.

Inside the loop I refused to cut the unhappy paths: a dead ad connection shown loudly instead of passing as live, a 72-hour window before any saving is claimed, and a spend gate that turns away stores too small to benefit, with a free checklist.

The prioritization board. 31 candidate features, each scored 0 to 5 on proximity to the first approved fix, split into three columns. MVP, shipped first, 11 features: Shopify install and order sync, connecting Meta and Google fast, a spend gate with an honest no, the first provable finding in session one, the audit and weekly email, a proposal with pre-approval disclosure, approving from the inbox, pausing an ad on Meta, brand negatives on Google, a receipt with Undo and a loud stale-data banner, all scored 4 or 5. A dashed MVP line separates them from NEXT, earned by the loop, 9 features scored 2 or 3, from bulk approve with a blast-radius confirm to benchmarks. NOT NOW, 11 features scored 0 or 1, includes the true-ROAS dashboard pages, a custom report builder, TikTok ads and a native mobile app; the agency view, a public API and non-Shopify stores score 0 because they sit outside the chosen customer.

MVP · Shipped first11

  • Shopify install and order sync, proximity 5 of 5
  • Connect Meta and Google fast, proximity 5 of 5
  • Spend gate with an honest no, proximity 4 of 5
  • First provable finding in session one, proximity 5 of 5
  • Audit and weekly email, proximity 5 of 5
  • Proposal with pre-approval disclosure, proximity 5 of 5
  • Approve from the inbox, proximity 5 of 5
  • Pause an ad on Meta, proximity 5 of 5
  • Brand negatives on Google, proximity 4 of 5
  • Receipt with Undo, proximity 5 of 5
  • Loud stale-data banner, proximity 4 of 5

Next · Earned by the loop9

  • Bulk approve with blast-radius confirm, proximity 3 of 5
  • Blackout windows, proximity 3 of 5
  • Outcome self-reports, proximity 3 of 5
  • “Stop asking” standing permission, proximity 3 of 5
  • Morning briefing, one decision, proximity 3 of 5
  • Creative briefs, AI-assisted, proximity 2 of 5
  • Budget autopilot within caps, proximity 2 of 5
  • Holdout experiments, proximity 2 of 5
  • “Is this normal?” benchmarks, proximity 2 of 5

Not now11

  • True-ROAS dashboard pages, proximity 1 of 5
  • Custom report builder, proximity 1 of 5
  • Chat over raw ad data, proximity 1 of 5
  • Full image and video ad generation, proximity 1 of 5
  • TikTok ads, proximity 1 of 5
  • Agency multi-client view, proximity 0 of 5
  • Public API, proximity 0 of 5
  • Non-Shopify stores, proximity 0 of 5
  • Slack alerts, proximity 1 of 5
  • LTV cohort explorer, proximity 1 of 5
  • Native mobile app, proximity 1 of 5

Dots = proximity to the first approved fix (5 = on the loop itself). Anything scored 0 is outside the customer we chose.

31 candidates scored on proximity to the first approved fix; 11 made the MVP line

AI strategy

Code counts, AI assists, the founder decides.

Every dollar amount comes from plain code that gives the same answer every run. A language model never writes a number, never alters a finding and never triggers an action. AI is reserved for language: one of the next features to use it drafts replacement creative briefs when an ad wears out, labelled AI-assisted, and a check rejects any number.

Autonomy is earned, not configured. Today merchants approve every fix; next, a clean record earns the offer: “You've approved 14 of 14. Want me to stop asking?” In my own process, AI drafted first-pass interview clusters (I checked them line by line) and stress-tested every build spec.

The AI decision flow, in three swim lanes. Code counts, deterministic, the same answer every run: sync orders and ad data, reconcile to Shopify orders, engines compute waste, label each number estimated or observed, then write the proposal from a template, in the first person. Next on the roadmap: only when an ad has worn out, a dashed branch drops from the engines into AI assists, language only, labelled and validated: the model drafts a creative brief from what already won, a validator strips any number, price or link, and the result is shown as AI-assisted beside the code's numbers. The proposal routes down to the founder, who decides: approve, skip or not now, or undo from the receipt; nothing moves without a tap. Approval goes back to code: guardrails for scope, caps and blackout windows, execution on the platform, then a receipt and a 72-hour measure. Never automated: any dollar or percent number written by a model, changing or creating a finding, the first action of any new type, anything during a blackout window or outside granted scope, raising a budget above the founder's cap, and claiming a saving before 72 hours. Autonomy is earned, in three rungs: propose only, approve each fix on the Pro plan, then standing permission on the Growth plan within the founder's caps, offered with the line: you've approved 14 of 14, want me to stop asking? Why this split: dollar claims from a probabilistic model would break the product's one promise, that every number can be checked.

Code counts

Deterministic, same answer every run

  1. Sync orders and ad data
  2. Reconcile to Shopify orders
  3. Engines compute waste
  4. Label: estimated or observed
  5. Proposal from a template, first person

AI assists · next

Language only, labelled, validated

  1. Draft creative brief from what already won
  2. Validator strips any number, price or link
  3. Shown as AI-assisted, beside the code’s numbers

Founder decides

Nothing moves without a tap

  • Approve
  • Skip or Not now
  • Undo from the receipt

Back to code

  1. Guardrails: scope, caps, blackout
  2. Execute on the platform
  3. Receipt, then 72-hour measure

only when an ad has worn out

Never automated

  • Any dollar or percent number written by a model
  • Changing or creating a finding
  • The first action of any new type
  • Anything during a blackout window
  • Anything outside granted scope
  • Raising a budget above the founder’s cap
  • Claiming a saving before 72 hours

Autonomy is earned

“You’ve approved 14 of 14. Want me to stop asking?”

  1. 1Propose only

    Every finding shown, nothing acted on

  2. 2Approve each fix

    Pro plan

  3. 3Standing permission

    Growth plan, within your caps

Why this split: dollar claims from a probabilistic model would break the product’s one promise, that every number can be checked.

Code counts, AI assists, the founder decides; autonomy is earned

Design system and handoff

One token file kept design and build in step.

As designer and developer, my handoff was to myself, so I made it mechanical. Each sprint began with a written spec: user story, acceptance criteria and the checks that prove them. Colour, type and state live in one token source that generates the CSS for the app and the site, the TypeScript behind emails, and the PDF report. The build fails if any copy drifts.

The contrast audit caught real problems: the original brand teal measured 2.55:1 and tertiary text 2.56:1, both failing AA; both now pass. The brand colour and the five money states (waste, estimated, savings, tested, inconclusive) each mean one thing everywhere.

The Ripplux design system. One design token file, W3C DTCG JSON layered from primitive to semantic, generates four copies: the dashboard CSS as Tailwind utilities, the marketing site CSS with the same utilities, TypeScript for charts, emails and OG images, and Python for the PDF audit report. A drift gate fails the build if any copy differs. Six money states each mean one thing everywhere, each with its contrast on white and on its own tint: Brand, teal #0F766E, 5.47 and 5.25 to 1, for approve buttons and links; Waste, red #B91C1C, 6.47 and 5.91, for waste amounts and failures; Estimated, amber #B45309, 5.02 and 4.84, for provisional savings; Savings and Tested, green #047857, 5.48 and 5.21, for receipts, the savings ledger and experiment results; Inconclusive, slate #64748B, 4.76 and 4.55, for honest waits. The audit caught two failures and fixed them at the token: brand teal #16B888 at 2.55 to 1 became #0F766E at 5.47, and tertiary text #94A3B8 at 2.56 became #64748B at 4.76. One component traced, the proposal card, has eight states, each with first-person copy: proposed, selected, confirm, applying, applied, could not apply, held and undone. It appears on the decisions inbox, the mobile decisions screen, the weekly email and the receipt email.

One source, every surface

Design tokens

W3C DTCG JSON

primitive → semantic

  • Dashboard CSS

    Tailwind utilities

  • Marketing site CSS

    Same utilities

  • TypeScript

    Charts, emails, OG images

  • Python

    PDF audit report

Drift gate

Build fails if any copy differs

The money states

Colour carries meaning about money. Each state means one thing, everywhere, and passes WCAG 2.2 AA.

ExampleStateTokenOn whiteOn its tintWhere it shows
Approve pauseBrandThe action that moves you forward#0F766E5.47:15.25:1Approve buttons, links
$1,240 wastedWasteMoney lost, proven#B91C1C6.47:15.91:1Waste amounts, failures
~$310 (est.)EstimatedWe think, not yet proven#B453095.02:14.84:1Provisional savings
$38,700 savedSavingsValue recovered, measured#0478575.48:15.21:1Receipts, savings ledger
Holdout: +12%TestedProven by a holdout#0478575.48:15.21:1Experiment results
Needs 9 more daysInconclusiveNot enough data yet#64748B4.76:14.55:1Honest waits

What the audit caught

  • Brand teal

    Before: #16B8882.55:1 failAfter: #0F766E5.47:1 pass AA
  • Tertiary text

    Before: #94A3B82.56:1 failAfter: #64748B4.76:1 pass AA

One component, traced: the proposal card

Tokens → eight states → four surfaces. Every state names what happened in the first person, with the number.

  • Proposed

    I'd pause it. Approve?

    Approve
  • Selected

    Approve 3

    Approve
  • Confirm

    Approve 3, pausing 3 ads, ~$1,020/mo affected

  • Applying

    Pausing 3 ads…

  • Applied

    I paused it. Receipt. Undo.

  • Couldn't apply

    I never ran it. Nothing changed.

  • Held

    Held while you're paused.

  • Undone

    Undo sent. It may take a moment.

Appears on

  • Decisions inbox

    1440 px, approve in bulk

  • Decisions, mobile

    390 px, 44 px tap targets

  • Weekly email

    Approve without opening the app

  • Receipt email

    Before and after, Undo link

Type: Geist Sans for UI, DM Sans for headings and numbers, Geist Mono for code. Spacing on a 4 px grid. Radius 8 px controls, 12 px cards.

One token source, every surface: the money states and one component traced

Outcome

Live, paid for, and asking me for more.

Ripplux is live on the Shopify App Store with Meta's ad-management approval. All 15 founding seats are spoken for, 14 of them paying. Merchants have run 212 fixes and undone 9, and no action has ever gone without a receipt.

The founding cohort asked for one decision, not a page of findings, so next is the morning briefing: one decision a day, waiting when the founder wakes up.

The Ripplux Home page for the store Tallow & Pine. It opens with a morning sentence: your ads spent 947 dollars yesterday and earned 3,080 dollars, a 3.25 times return, and states that Shopify synced 3 hours ago with the next refresh around 4 AM. The savings panel shows three kinds of money, each in its own colour: proven savings of 6,240 dollars a month in large green type, measured by experiments; measured from your data, about 2.9 thousand dollars a month in teal, observed over a window and not a controlled test; and projected from 3 actions, 4,180 dollars a month in amber, not yet measured and never added to the proven amount. Three before-and-after measurements say which day they are on or why they cannot measure. Do this next ranks three fixes, each with its dollar value and how long it takes. Seven numbered notes explain the design.

The number’s colour tells you how sure it is.

  1. 1A morning sentence of facts: spend, revenue, return. No chart to decode.
  2. 2Freshness is stated, always: when Shopify last synced and when it refreshes next.
  3. 3Proven savings: the tested tier, measured by holdout experiments. The biggest number is the most proven one.
  4. 4Measured from your data: observed, with its limit named (“a window, not a controlled test”).
  5. 5Projected: amber, the estimated tier. Never added to the proven amount.
  6. 6Before and after, in progress: each measurement says which day it is on, or why it can’t measure.
  7. 7Do this next: ranked, each with its dollar value and how long it takes.
Home, as shipped: three kinds of money, never mixed
  • 212fixes approved and run
  • 4%of fixes undone by merchants
  • 0actions without a receipt
  • 68%of approvals tapped from the weekly email
  • 7 min 40 smedian time to the first provable finding
  • 14/15founding seats paying

The Ripplux roadmap in four stages, ranked by proximity to the moment a founder sees a fix they approved, with its receipt. Shipped, June to September 2026: the first-fix loop of gate, finding, approve, fix, receipt and undo; approval from the inbox; honest money states and the 72-hour window; Meta pauses and Google brand negatives; a founding cohort of 15 seats; test stores kept out of every metric. Now, October 2026: the morning briefing with overnight work, one decision and grounded chat; the stop-asking standing permission on the Growth plan; blackout windows. Next, Q4 2026 to Q1 2027: outcome self-reports, creative briefs with AI assistance, budget autopilot within caps. Later, exploring: going beyond ads to broken email flows, ads on sold-out products and margin leaks; a proactive pause-out when spend drops below the useful line. Deliberately not planned: agency tools, a general analytics dashboard, non-Shopify platforms.

Ranked by proximity to the moment a founder sees a fix they approved, with its receipt.

  1. ShippedJun–Sep 2026

    • The first-fix loop: gate, finding, approve, fix, receipt, undo
    • Approval from the inbox
    • Honest money states and the 72-hour window
    • Meta pauses and Google brand negatives
    • Founding cohort: 15 seats
    • Test stores kept out of every metric
  2. NowOct 2026

    • Morning briefing: overnight work, one decision, grounded chat
    • “Stop asking” standing permission (Growth)
    • Blackout windows
  3. NextQ4 2026–Q1 2027

    • Outcome self-reports: “If I was wrong, here’s what I changed”
    • Creative briefs, AI-assisted
    • Budget autopilot within caps
  4. LaterExploring

    • Beyond ads: broken email flows, ads on sold-out products, margin leaks
    • Proactive pause-out when spend drops below the useful line

Deliberately not planned: agency tools, a general analytics dashboard, non-Shopify platforms.

The roadmap: from the first fix to an employee you trust