
DECISION LOG · DADO
ROLE
Product Designer
DURATION
July 2026 to present
SCOPE
Design system, core flows, editorial
STACK
React, TypeScript, Tailwind, Supabase, Stripe

CHAPTERS
02
The tension
03
The decision log
04
Evidence
05
The system’s exceptions
06
Adoption
07
What I would change
01 — THE BRIEF
One meaningful thing, funded by the people who care.
DADO is built around a single idea: instead of buying someone a gift on your own, you create a wish for one meaningful thing, and the people who care about that person contribute toward it together. A wish holds the product, the story behind it, a delivery date and a guest list. Once it is funded, DADO buys the item and ships it.
Around that core sit a wishlist and connections layer, and an editorial layer of seasonal chapters and gift guides. The whole product is positioned as a private members’ club rather than a shop — restrained, editorial, and deliberately unlike a checkout.
02 — THE TENSION
Group gifting products usually feel like fundraising tools.
A progress bar, a share button and a running total make generosity look like a campaign. That framing works for charity. It works badly for a birthday.
THE DESIGN TENSION
The mechanics underneath are payments infrastructure, but nothing on the surface is allowed to feel like checkout.
Every decision below is that tension applied to one surface. Most of them cost something real — usually money, sometimes control, once a brand colour.
03 — THE DECISION LOG
Six decisions, and what each one cost.
Each could have gone the other way. Tension, options, the call, and the price of the call — the price is the part usually left out.
D01
Pledging holds the card. Nothing is charged today.
TENSION
The moment a contributor is charged, the exchange becomes a purchase. But a wish that is never funded still has to be paid for somehow.
OPTIONS WEIGHED
·
Charge on pledge, refund if the wish fails
·
Charge only when the wish is fully funded
→
Hold the card; charge a week before the date, with an email three days ahead
DECISION
Hold, not charge. The contributor can withdraw before the reminder and nothing moves. If the wish falls short, they are still charged, and the recipient gets what was raised as a brand gift card.
WHAT IT COST
Every hold expires. Cards change, limits get hit, and some pledges fail at charge time weeks after the gesture was made — with no clean way to ask again.
D02
Guests contribute without an account
TENSION
Most contributors arrive by a link, may never have heard of DADO, and are being asked for money on a first visit.
OPTIONS WEIGHED
·
Require an account — every contributor becomes a user
·
Guest checkout with a one-line sign-up at the end
→
Guest contribution, full stop. Name, amount, note, authorise.
DECISION
Guests contribute without creating an account. Amounts are framed as gestures rather than prices, and the authorisation is written in plain language on the screen where you commit — not in the terms.
WHAT IT COST
A large share of the people who fund wishes never become members, so the network that makes DADO worth returning to grows more slowly than the money does.
D03
Privacy is per item, never a list switch
TENSION
The thing you save for yourself and the thing you want people to buy you are rarely the same — but they live in the same list.
OPTIONS WEIGHED
·
One visibility setting per list
·
Two lists: private and shareable
→
An audience setting on every item, enforced on screen, in the database, and on every shared link
DECISION
Per item, across four audience levels. A private item stays private wherever the list travels, because the rule is enforced in three places rather than one.
WHAT IT COST
Four times the decisions for the person saving, and a real chance a shared list looks empty to the people it was shared with.
D04
A connection is a request, not an add
TENSION
Connections is where returning users live — their people, their dates, their lists. It only works if people trust what is visible to whom.
OPTIONS WEIGHED
·
Add anyone; they can remove themselves
→
A request the other person accepts, and nobody is added to an occasion without saying yes
DECISION
Consent both ways. A wishlist is only ever seen by the people its owner chose. Someone not on DADO can still be added by hand so their dates stay on your calendar — but they see nothing.
WHAT IT COST
Friction at the exact moment the product is trying to grow. Every circle starts empty and stays small until people accept.
D05
Editorial breaks the container
TENSION
The seasonal chapters and gift guides carry the brand more than any other surface, but the product lives inside one centred container.
OPTIONS WEIGHED
·
Keep editorial inside the same container as everything else
→
Full-bleed editorial on its own gutter scale
DECISION
Full-bleed. Browsing is meant to read like a magazine and still end on something you can buy, and a magazine does not sit inside a form’s margins.
WHAT IT COST
Two layout systems to maintain, and a visible seam where editorial hands off to product.
D06
Retire the failing colours — by job, not globally
TENSION
The brand’s soft taupes measured 3.71:1 as text against white, well under the 4.5:1 the standard requires. Darkening them everywhere would have killed the brand.
OPTIONS WEIGHED
·
Darken the whole palette until it passes
·
Leave it; the brand is the brand
→
Split each colour by the job it does. Retire it as text; keep it for borders, icons and large display accents
DECISION
By job. Text uses a deeper taupe that clears the threshold. Borders, focus rings and icons only need 3:1 and stayed. Large display accents kept the original — that treatment is a brand signature and passes at large-text size.
WHAT IT COST
About 750 components had hardcoded the retired values and had to be swept, and two near-misses were left in place and recorded rather than fixed, because both fixes cost more than they saved.
04 — EVIDENCE
The screens those decisions produced.
Every stage of both sides of One Big Wish, the five editorial surfaces, and the system that holds them together. Click a stage to see it, and scroll inside a frame to see the whole page.
EXHIBIT · MAKING A WISH — D01
1
Start
2
Your wish
3
Curate products
4
Where & when
5
Invite & privacy
6
Review & confirm
7
Wish is live

Screen 1 of 7 · Start
My Wishes
Every wish you have asked for, in one place. Each card shows the occasion, how much has been pledged against the goal, the fulfilment date and the days left, with filters for active, fulfilled, closed and draft.
The purpose is a glance-level answer to one question: where does each wish stand? Create One Big Wish opens the wizard.
The five-step creation wizard with a persistent stepper, so you always know how much is left before you commit anything.
EXHIBIT · CONTRIBUTING — D01, D02
1
The wish
2
Amount
3
Payment
4
Add a note
5
Review
6
Thank you

Screen 1 of 6 · The wish
What an invited person opens
The curated items fill the top of the page, with the occasion and who invited you. Below it: how much has been pledged, the last day to give, the day the gift is for, and who has given so far.
The purpose is to make the ask read as an invitation into someone’s story, not a fundraising page.
From opening the wish you were invited to, to the thank-you screen. Amounts framed as gestures; the authorisation in plain language on the screen where you commit.
EXHIBIT · EDITORIAL — D05
1
The Edit
2
The List Edit
3
DADO Presents
4
DADO Editions
5
Calendar

Screen 1 of 5 · The Edit
The magazine front door
A seasonal hero leads, followed by curated collections, Off-Script, Objects of Desire, The Definitive, and the City Guides, Seasons and Atelier chapters, before Trending Now.
Its purpose is browsing that reads like a magazine and still ends on something you can actually buy. It runs full-bleed on its own gutter scale.
The five editorial surfaces, full-bleed on their own gutter scale.
EXHIBIT · THE SYSTEM — D06
1
Colour
2
Type
3
Buttons
4
Cards
Warm
50
#FAF7F2
75
#F7F2EC
100
#F4EFE8
150
#F1E8DE
200
#EEE5DB
250
#E8DDD0
300
#E6DDD1
400
#DDD1C3
450
#C4B9A8
500
#BFAF9B
600
#B3A28C
650
#9A8872
700
#9A8F83
750
#7C6C5B
800
#5E544C
900
#3A312B
950
#2A241F
975
#191512
990
#181411
Gray
grey1
#E7E8E8
grey2
#B4B5B6
grey3
#757575
grey4
#66686A
grey5
#4D4F50
Background
Surface-01
#FDFBF7
Surface-02
#F4EFE8
Surface-03
#080C15
Brand
Primary
#B3A28C
Secondary
#2A241F
Taupe Soft
#C4B9A8
Text
Secondary
#918276
Primary
#080C15
Labels
#757575
Placeholder
#B4B5B6
Inverse
#FFFFFF
Border
Subtle
#DDD1C3
Strong
#918276
Accent
Forest
#2C3E2D
Midnight
#080C15
State
Success bg
#EAF1EA
Success
#2B972B
Error bg
#F6E9E7
Error
#B60218
Disable
#D7D8D9
Disable dk
#7F8183
CTA
Primary
#031A34
Hover
#000205
Secondary
#BFAF9B
Sec hover
#9A8872
FOUNDATION
Colour tokens
A warm-ivory and deep-midnight palette with taupe accents, defined as semantic tokens rather than raw hex, so a component asks for secondary text and never for a colour.
Two typefaces, semantic tokens, zero border radius by default. The system that enforces the restraint rather than encouraging it.
05 — THE SYSTEM’S EXCEPTIONS
A system that only records the ideal state gets abandoned the first time reality disagrees with it.
The positioning is a private members’ club, and that only holds if the restraint is enforced. So the system is a set of hard constraints in one source of truth: two typefaces and never a third, a fixed palette as semantic tokens, zero border radius, no shadows, no gradients, no decorative icons. Hierarchy comes from weight and size, never from adding a colour.
The part I would point to as the real work is not the token list. It is that the system documents its own exceptions — what was bent, when, and why.
Two legacy hex values, left in place
Sweeping them would have cost more visually than the consistency was worth. Recorded, with the reasoning, and left alone.
Two contrast near-misses, not quietly fixed
Both fixes were design-owner calls with real trade-offs. The register names them rather than pretending the palette is clean.
Large display accents keep the original taupe
It fails as body text and passes at large-text size. That treatment is a brand signature, so the rule was scoped rather than applied blindly.
3.71:1
what the retired secondary text measured on white, against 4.5:1
750
components swept off the retired values
2
near-misses recorded rather than quietly fixed
06 — ADOPTION
What shipped, and what is enforced.
DADO is live. The shipped product is roughly 139 page templates and 361 components, all drawn from the one source of truth. The palette rules are enforced by an automated contrast test in the codebase, so the colours cannot drift back to the values that were retired.
139
PAGE TEMPLATES
361
COMPONENTS
2
TYPEFACES
0
BORDER RADIUS
What I do not have is usage data — how many wishes are created, how many guests convert to members, how often a held card fails at charge time. Those are the numbers that would tell you whether D01 and D02 were right, and they belong to the client. This page records the reasoning, not the result.
07 — WHAT I WOULD CHANGE
Two things, in the order I would fix them.
Instrument the held-card failure rate from day one
D01 trades a checkout feel for a real risk: holds expire. Without a number on how often a pledge fails weeks after the gesture, nobody can say whether the reminder timing is right, and the decision cannot be revisited on evidence.
Give guests a reason to stay, without an account wall
D02 is right and it is costly. The network that makes DADO worth returning to grows slowly when most funders never become members. The fix is not a sign-up prompt — it is a reason, after the thank-you screen, to see the recipient open the gift.
The strongest thing about this project is not the interface. It is that the decisions are written down where the people implementing them actually read — the reasoning attached, the exceptions named. Writing down why a rule exists is what makes it survive the next person with a deadline.
Behance
Copyright @2026 Manish Durgude