free design checklist in bio.
free design checklist in bio.
1. hero
2. section title
3. body
4. caption
repeat it until the page feels obvious.
readable beats loud.
1. hero
2. section title
3. body
4. caption
repeat it until the page feels obvious.
readable beats loud.
eyebrow → heading → body → CTA button
repetition is what makes a page feel designed.
eyebrow → heading → body → CTA button
repetition is what makes a page feel designed.
size it for comfort. keep lines short. use contrast that doesn't fade into the background.
size it for comfort. keep lines short. use contrast that doesn't fade into the background.
size and weight create the hierarchy. bold is just emphasis within a level.
size and weight create the hierarchy. bold is just emphasis within a level.
when the biggest thing on the page is clear, everything else can relax.
when the biggest thing on the page is clear, everything else can relax.
1. hero
2. section title
3. body
4. caption
1. hero
2. section title
3. body
4. caption
one component. maybe 80 lines. users stop wondering if they broke something. the app just tells them.
one component. maybe 80 lines. users stop wondering if they broke something. the app just tells them.
- toasts (fleeting, missable)
- inline validation (only near the field)
- server errors (logged not surfaced)
vibe coders pick whichever is easiest. all of them hide failure.
- toasts (fleeting, missable)
- inline validation (only near the field)
- server errors (logged not surfaced)
vibe coders pick whichever is easiest. all of them hide failure.
entropy wins through accumulation not incompetence.
entropy wins through accumulation not incompetence.
three products, one principle: design with purpose.
save this before you ship.
three products, one principle: design with purpose.
save this before you ship.
stripe errors tell you what broke, why, and how to fix it. debugging as design.
stripe errors tell you what broke, why, and how to fix it. debugging as design.
button → solves clarity
empty state → solves first action
shortcut → solves speed
if you can't write it, it's decoration.
button → solves clarity
empty state → solves first action
shortcut → solves speed
if you can't write it, it's decoration.
add one line of context above the form, one privacy or support note near the button, and error copy that says what broke and how to fix it.
working form -> trustworthy product moment.
add one line of context above the form, one privacy or support note near the button, and error copy that says what broke and how to fix it.
working form -> trustworthy product moment.
1. expectation: what happens after submit?
2. effort: how many fields feel required?
3. reassurance: is data, payment, or privacy explained?
4. recovery: do errors tell users how to fix them?
if one is missing, the form feels unfinished.
1. expectation: what happens after submit?
2. effort: how many fields feel required?
3. reassurance: is data, payment, or privacy explained?
4. recovery: do errors tell users how to fix them?
if one is missing, the form feels unfinished.
free UI audit checklist in bio.
free UI audit checklist in bio.
Notion teaches via empty states
Linear saves time via shortcut-first
Stripe debugs via error copy
each solves a real problem. better experiences start with empathy.
Notion teaches via empty states
Linear saves time via shortcut-first
Stripe debugs via error copy
each solves a real problem. better experiences start with empathy.
start with clarity. focus, not flair. solve, don't sprinkle.
start with clarity. focus, not flair. solve, don't sprinkle.
debugging as design. treat errors like helpful conversations. clarity builds trust.
debugging as design. treat errors like helpful conversations. clarity builds trust.
instead: get to any task in 2 keystrokes. saves hours a year.
good design removes friction, not features.
instead: get to any task in 2 keystrokes. saves hours a year.
good design removes friction, not features.