←Back
←Back
DADO
M
One Big Wish
All wishes

Step 01 of 05

Your wish

Who it is for, what it marks, and the story behind it. All of it can be edited at any time before contributions close.

Wish name
*
Select an occasion
*

Most chosen

Wish story

Tell your circle why this matters. They'll read it before they contribute.

Tell the story behind this wish
DYour Wish | One Big Wish | DADO
DADO
M
One Big Wish
All wishes

Step 01 of 05

Your wish

Who it is for, what it marks, and the story behind it. All of it can be edited at any time before contributions close.

Wish name
*
Select an occasion
*

Most chosen

Wish story

Tell your circle why this matters. They'll read it before they contribute.

Tell the story behind this wish
DYour Wish | One Big Wish | DADO
DADO
M
One Big Wish
All wishes

Step 01 of 05

Your wish

Who it is for, what it marks, and the story behind it. All of it can be edited at any time before contributions close.

Wish name
*
Select an occasion
*

Most chosen

Wish story

Tell your circle why this matters. They'll read it before they contribute.

Tell the story behind this wish
DYour Wish | One Big Wish | DADO

DADO · One Big Wish · Payments and consent

One Big Wish

One Big Wish

One Big Wish

Someone asks for one wish, and the people around them pledge toward it. Contributors authorize once and are charged days before the gift, which means strangers’ money, months of waiting, and a promise that has to survive both.

Outcome

One of DADO’s three launch products, shipped through a five-step wish wizard and a four-step contribution rail. We redesigned the payment model mid-build so nothing is charged until purchase. Every error, empty, and edge state in the flow has a designed path.

One of DADO’s three launch products, shipped through a five-step wish wizard and a four-step contribution rail. We redesigned the payment model mid-build so nothing is charged until purchase. Every error, empty, and edge state in the flow has a designed path.

Surface

The wish wizard and the contribution rail

Timeline

Jul to Sep 2026

Tools

Figma · FigJam · Claude Code · Stripe · React / TypeScript

5
5

steps in the wish wizard, ending on a funding review

4
4

steps in the contribution rail, amount to confirmation

5
5

states shown here, of 8 in the audited lifecycle

3 days

minimum charge notice, enforced by the database itself

The decision: authorize now, charge at the moment.

The first build charged contributors immediately: DADO held group money for months, and every edge case became a money-in-hand problem. It worked, and it collided with a hard constraint: DADO can’t hold customer money, because holding it means acting as a bank. After that, authorization-first was the only real option, and it protects contributors from paying for a gift that’s never bought.

The rule underneath all of it

The rule underneath all of it

DADO doesn’t refund contributions. So the model had to make refunds unnecessary: the card is only saved at contribution time, every contributor is warned before the batch run, and a missed goal still ends in a gift.

The redesigned model inverts the first build: contributing runs 3DS and saves the card against a Stripe mandate, and the charge waits. It comes as a batch run anchored to the gift’s moment date, 7 to 10 days before it, when the order is placed. Before any card is touched, every contributor gets the promised email. An authorization moves through its life like this:

01
AuthorizedCard saved against a mandate. The wish’s progress bar counts the pledge.
023-day minimum
Notice sentThe promised email goes out and the 3-day clock starts. The database refuses any charge before it runs out.
03
ChargingThe batch run fires 7 to 10 days before the moment, when the order is placed.
04
ChargedMoney moves and the gift is ordered.
05
Declined at 03If the card declines at the batch run, it gets a 48-hour window to be fixed, handled on its own, away from the batch.

The under-funded wish became a simple choice: nobody has been charged yet, so the wisher decides. Either way, every contribution still ends as a gift.

FundedUnder-fundedTwo endings
Nobody has been charged, so the wisher decides.
Goal missed at the deadline
Nobody has been charged, so the wisher decides.
  • Complete it yourself: the wisher pays the gap and the wish completes.
  • Keep what you raised: the raised amount becomes a digital gift card.
  • Do nothing: after two days the gift card is the default.

The contradiction I wouldn’t ship.

The Terms promised every contributor an email at least 3 days before their card is charged. The admin console was specified with a charge-now button. The two couldn’t both be true for long.

The Terms promised

An email at least 3 days before any charge.

vs

The console spec asked for

A charge-now button.

The database enforces the fix, so the console can’t break it.

An authorization can’t enter charging unless its notice went out at least the notice period ago.

The console schedules charge runs and sends notices, with no path to fire a charge directly.

One break-glass path exists for genuine emergencies. It requires two employees and writes a loud audit record.

The edge cases.

Card health is monitored per authorization before every batch, with a grace window sized to fit inside the charge lead time.
After that, a date has been promised and a batch is being assembled.
A wish with a goal above $1,000 needs Stripe Identity verification before it goes live. Stripe handles the documents and keeps them on its side.
Every notification routes to the guardian’s verified email, re-verified before any value is issued.
DADO buys and ships the items. Any surplus or shortfall is settled as a gift card.
Anything that falls outside the model goes to support and is handled by hand, case by case, and the product itself has no refund button.

The two flows and the progress bar.

Making a wish takes five steps. The last one reviews how funding works before the wish goes live.

View the full One Big Wish user flow →

Contributing is a separate four-step rail: Amount, Payment, Add a note, Confirmation. The confirm button reads “Authorize contribution,” because that’s what happens.

Guests contribute too, with the same consent

A wish shared by link accepts guests. A guest gives a name, an email, and a date of birth, verifies the email with a 6-digit code, and authorizes exactly like a member. DADO checks the date of birth against the age rule and discards it. The emailed manage link is the guest’s only credential.

Continue as a guest
01Entry
Continue as a guest
The share page offers sign in, sign up, or guest, and the guest path skips account creation.
Name, email, date of birth
02Details
Name, email, date of birth
Entered on the note step, where a member would only write the note.
A 6-digit code, then authorize
03Verify
A 6-digit code, then authorize
The code proves the email that will carry the charge notice. Then the same authorization as a member.
Continue as a guest
01Entry
Continue as a guest
The share page offers sign in, sign up, or guest, and the guest path skips account creation.
Name, email, date of birth
02Details
Name, email, date of birth
Entered on the note step, where a member would only write the note.
A 6-digit code, then authorize
03Verify
A 6-digit code, then authorize
The code proves the email that will carry the charge notice. Then the same authorization as a member.

The progress bar counts pledges

Under the authorization model, “raised” means promised money. The bar sums live pledges, and the number is deliberately unclamped: it keeps counting past 100%. Try the three states:

$38.00of $766.26
5%
$728.26 still to go, every contribution counts5% pledged
Under goal
Staging · 5% pledged

Figure 2. The wish progress bar at three real states from staging. Over goal, the bar is split at a 100% pin. A privacy variant hides the raised amount and shows only the goal, and the dates in the staging card are test values.

Where things landed.

One Big Wish shipped as one of DADO’s three launch products. The launch drew 4,100 users from 5,000 invitations. Numbers for One Big Wish on its own come next.

What I’m watching:

Contribution completion through the rail

Withdrawal rate around the charge notice

Charge-run success and grace recoveries

The under-funded rate

Reflection

The scariest scenario here is a stranger’s card getting charged months after a click. So when it happens, it arrives announced and itemized, with consent on record. The open question is whether 3 days of notice is enough. I’d want the first charge runs to settle that before the number is treated as fixed.

Project takeaways.

01
Hold the console to the Terms
The 3-day notice is enforced by the database, so the console can only schedule a run.
02
Design the failure states first
The under-funded wish and the declined card each had a designed path before the happy path was polished.
03
Record consent as an event
The exact disclosure shown, its version, the Terms version, and the timestamp, kept for seven years.

Next case study

Requesta, an AI question generator for educators

Read the case study →

Requesta workspace with the Create Question Set form, the next case study

← Back to DADO

Create a free website with Framer, the website builder loved by startups, designers and agencies.