Erick · product & design engineer

REAL PROJECT · PRODUCT, DESIGN AND CODE · LIVE

Her catalog was a screenshot. It became booking that doesn’t wait for a reply.

the Home on mobile and desktop

Nega Nagô has been braiding in São Paulo for thirteen years. Thirteen categories and more than forty price combinations lived inside an image sent by DM — and every question turned into a back-and-forth conversation. I did the research, the design, the design system and the code. Bookings went from 16 to 40 a month. After launch, availability started coming from the Google Calendar she already uses, and the site went live at neganago.com.

About the numbers.

Product delivered and in operation. The results came from Mayara’s calendar after launch — they are measurements, not projections. Section 07 shows how each one was calculated, with confidence interval and p-value.

CLIENT

Nega Nagô

braider · São Paulo

ROLE

Product design

and design engineer

DELIVERABLES

Research · UI · design system

front-end · publishing

MADE WITH

Claude ⇄ Figma via MCP

HTML, CSS and JS · Playwright

Google Calendar (freeBusy) · PHP

PERIOD

2026 · live

neganago.com

01 · THE PROBLEM

The price list fit in a photo. The decision didn’t.

The client opened the screenshot, couldn’t find the price for the size she wanted, and asked. The list wasn’t wrong — it needed another person to read it.

13

braid categories

40+

size and price combinations

16

bookings per month, on average

1

channel, answered between one client and the next

02 · BEFORE AND AFTER

Six steps with waiting became three without.

The same goal — booking a braid — down both paths. What goes away isn’t a screen: it’s the dead time between the question and the answer.

before · the price-list screenshot in DMs

BEFORE · SIX STEPS

Asks for the price list by DM · gets a screenshot with 40+ prices · can’t find the size she wants · asks · waits for a reply between one appointment and the next · books, or gives up halfway.

Steps 3, 4 and 5 depend on Mayara’s schedule. That’s where interest cools off.

after · the size and price screen

AFTER · THREE STEPS

Picks the style and size, with price and deposit on screen · fills in day, time of day and — for home visits — the address, with the postal code looked up instantly · sends the ready-written message on WhatsApp.

No step waits for a reply, and only the days that are free on her calendar show up. Mayara joins the conversation with everything already decided.

the message the site sends

01

Why text, not a form. Mayara lives on WhatsApp and won’t open a dashboard between one appointment and the next.

02

The vocabulary is hers. The screen calls the hairstyle a crown, not a 'service' or an 'item'.

03

One less back-and-forth. The last line already offers a photo of her hair down, which the braider needs to see to estimate.

03 · CONSTRAINTS

Almost every screen decision came from a business constraint.

None of these choices came from UX intuition. They came from how she charges, where the client already is, and what the pilot could afford.

five business constraints, on the booking screen
constraint → decision · the five constraints on one board

The flow isn’t the ideal design.

It’s the design that fits the way she already works — and every green sticky note above is a decision I wouldn’t make looking only at the screen. The most recent constraint came after launch: availability is controlled by the Google Calendar she already used on her phone. She opens and closes days there, her way, and the site follows — no new dashboard and no new tool to learn.

04 · QUALITATIVE RESEARCH

Four people, two rounds. The first with no color at all.

Usability tests at two moments: first a grayscale draft, just the path; then the full prototype. In grayscale, praise has nowhere to hide.

round 1 · the grayscale draft

Can you get to the end? Does the information show up when the person needs it? Without visual identity, what’s left on screen is the structure — and that’s what is being tested.

round 2 · the full prototype

The delight came here, as expected. The difference is that it sat on top of a flow that had already worked on its own, with no color to carry it.

01

Returning client

Already books and knows the prices by heart. Shows whether the flow gets in the way of someone who already knows the path.

02

Asked, didn’t book

Asked for a price and never came back. Exactly the profile the project exists to win back.

03

Booked once

Knows the service but it didn’t become a habit. Shows what’s missing for the second time to happen on its own.

04

Never booked

Arrives with no reference at all — not for price, not for vocabulary. Reveals what the screen has to explain on its own.

personas · the returning client and the one who had never booked

A closer look at two of the four: the returning client (01) and the one who had never booked (04).

THE MOST REPEATED PRAISE

It wasn’t about looks. It was about knowing how much it would cost.

The total recalculates with every tap: change the size, the add-on, the location — the total and the deposit change with it, on the same screen. The client leaves knowing how much she pays now and how much is left for the day. When she comes to book, none of it is news — and what isn’t news doesn’t become an objection. It’s the first constraint from the previous section closing the loop: the business limitation became the sales pitch.

4/4

reached the end of the booking without me explaining how it works

4/4

chose exactly what they wanted, without hesitating along the way

4/4

called it the best buying experience they had used

2

rounds: grayscale draft and full prototype

05 · SYSTEM AND ENGINEERING

A small system, fully documented — and checked by measurement.

Nine component sets, 36 variants, 29 icons and two breakpoints. A variable name in Figma is a custom property name in CSS.

9

component sets · 36 variants

29

icons drawn, for the catalog and the interface

617 KB

the entire Home, with all thirteen photos loaded

17 → 1.9 MB

the 46 images, after conversion to WebP

the design system · components and variants

I compared the code against Figma by measurement, not by eye.

A Playwright suite opens the prototype at both breakpoints and reads the computed value of every gap, width and height. Four bugs that looked right on screen surfaced this way. Two of them: in the catalog grid, the longest name stretched its own column and squeezed its neighbors — on screen it passed for a difference in photos, but it was the track sized by content; and the address block received the hidden attribute correctly, but the class beat the browser default and it stayed visible — one line fixed three other places that were silently broken.

06 · IMAGE CATALOG

No photos existed. I directed and generated all thirteen.

There was no photo shoot and no stock library. I wrote a visual contract — mannequin, angle, background, light, hue — and changed one line per prompt.

the thirteen catalog photos

Consistency can be measured.

I sampled the four corners of each photo and converted them to hue. The thirteen backgrounds fall between 12.4° and 19.2° — a 6.8° range across thirteen independent generations. It wasn’t luck: the target hue was written in the prompt. The proof by contrast is in the same data — lightness, which I didn’t specify as a number, spread from 35% to 56%. When Mayara does a real photo shoot, each photo replaces one, with the same file names. Nothing in the code changes.

07 · RESULTS

Sixteen bookings a month became forty.

Anyone can reproduce the product numbers by running the suite. The operational ones came from Mayara’s calendar, comparing before and after launch.

16

bookings per month before launch

40

bookings per month after

2.50×

rate ratio · 95% CI 1.37–4.78 · p = 0.0018

3

screens from the catalog to a ready-to-send message

Quantitative analysis: the confidence interval and p-value were calculated from the bookings observed before and after launch, using an exact conditional binomial test. It’s not a model, it’s her calendar.

What I didn’t solve.

The AI images still aren’t labeled on screen: they are reference renders, not Mayara’s portfolio, and it’s written here but needs to be written in the product. Four people find the big problem, not the long tail. With the flow in operation, the next step is contextual research: observing real use instead of scheduled sessions.

08 · MORE

Other projects

Available for work

I design, I write the code, and I tell you what didn’t work.

Thirteen years in design, five of them at Canaltech across design systems, marketing and sales. If you have a surface that needs to ship finished and measured, not just specified, get in touch.

© 2026 Erick Teixeira

oerickteixeira@gmail.com · São Paulo

Erick · product & design engineer

REAL PROJECT · PRODUCT, DESIGN AND CODE · LIVE

Her catalog was a screenshot. It became booking that doesn’t wait for a reply.

the Home on mobile and desktop

Nega Nagô has been braiding in São Paulo for thirteen years. Thirteen categories and more than forty price combinations lived inside an image sent by DM — and every question turned into a back-and-forth conversation. I did the research, the design, the design system and the code. Bookings went from 16 to 40 a month. After launch, availability started coming from the Google Calendar she already uses, and the site went live at neganago.com.

About the numbers.

Product delivered and in operation. The results came from Mayara’s calendar after launch — they are measurements, not projections. Section 07 shows how each one was calculated, with confidence interval and p-value.

CLIENT

Nega Nagô

braider · São Paulo

ROLE

Product design

and design engineer

DELIVERABLES

Research · UI · design system

front-end · publishing

MADE WITH

Claude ⇄ Figma via MCP

HTML, CSS and JS · Playwright

Google Calendar (freeBusy) · PHP

PERIOD

2026 · live

neganago.com

01 · THE PROBLEM

The price list fit in a photo. The decision didn’t.

The client opened the screenshot, couldn’t find the price for the size she wanted, and asked. The list wasn’t wrong — it needed another person to read it.

13

braid categories

40+

size and price combinations

16

bookings per month, on average

1

channel, answered between one client and the next

02 · BEFORE AND AFTER

Six steps with waiting became three without.

The same goal — booking a braid — down both paths. What goes away isn’t a screen: it’s the dead time between the question and the answer.

before · the price-list screenshot in DMs

BEFORE · SIX STEPS

Asks for the price list by DM · gets a screenshot with 40+ prices · can’t find the size she wants · asks · waits for a reply between one appointment and the next · books, or gives up halfway.

Steps 3, 4 and 5 depend on Mayara’s schedule. That’s where interest cools off.

after · the size and price screen

AFTER · THREE STEPS

Picks the style and size, with price and deposit on screen · fills in day, time of day and — for home visits — the address, with the postal code looked up instantly · sends the ready-written message on WhatsApp.

No step waits for a reply, and only the days that are free on her calendar show up. Mayara joins the conversation with everything already decided.

the message the site sends

01

Why text, not a form. Mayara lives on WhatsApp and won’t open a dashboard between one appointment and the next.

02

The vocabulary is hers. The screen calls the hairstyle a crown, not a 'service' or an 'item'.

03

One less back-and-forth. The last line already offers a photo of her hair down, which the braider needs to see to estimate.

03 · CONSTRAINTS

Almost every screen decision came from a business constraint.

None of these choices came from UX intuition. They came from how she charges, where the client already is, and what the pilot could afford.

five business constraints, on the booking screen
constraint → decision · the five constraints on one board

The flow isn’t the ideal design.

It’s the design that fits the way she already works — and every green sticky note above is a decision I wouldn’t make looking only at the screen. The most recent constraint came after launch: availability is controlled by the Google Calendar she already used on her phone. She opens and closes days there, her way, and the site follows — no new dashboard and no new tool to learn.

04 · QUALITATIVE RESEARCH

Four people, two rounds. The first with no color at all.

Usability tests at two moments: first a grayscale draft, just the path; then the full prototype. In grayscale, praise has nowhere to hide.

round 1 · the grayscale draft

Can you get to the end? Does the information show up when the person needs it? Without visual identity, what’s left on screen is the structure — and that’s what is being tested.

round 2 · the full prototype

The delight came here, as expected. The difference is that it sat on top of a flow that had already worked on its own, with no color to carry it.

01

Returning client

Already books and knows the prices by heart. Shows whether the flow gets in the way of someone who already knows the path.

02

Asked, didn’t book

Asked for a price and never came back. Exactly the profile the project exists to win back.

03

Booked once

Knows the service but it didn’t become a habit. Shows what’s missing for the second time to happen on its own.

04

Never booked

Arrives with no reference at all — not for price, not for vocabulary. Reveals what the screen has to explain on its own.

personas · the returning client and the one who had never booked

A closer look at two of the four: the returning client (01) and the one who had never booked (04).

THE MOST REPEATED PRAISE

It wasn’t about looks. It was about knowing how much it would cost.

The total recalculates with every tap: change the size, the add-on, the location — the total and the deposit change with it, on the same screen. The client leaves knowing how much she pays now and how much is left for the day. When she comes to book, none of it is news — and what isn’t news doesn’t become an objection. It’s the first constraint from the previous section closing the loop: the business limitation became the sales pitch.

4/4

reached the end of the booking without me explaining how it works

4/4

chose exactly what they wanted, without hesitating along the way

4/4

called it the best buying experience they had used

2

rounds: grayscale draft and full prototype

05 · SYSTEM AND ENGINEERING

A small system, fully documented — and checked by measurement.

Nine component sets, 36 variants, 29 icons and two breakpoints. A variable name in Figma is a custom property name in CSS.

9

component sets · 36 variants

29

icons drawn, for the catalog and the interface

617 KB

the entire Home, with all thirteen photos loaded

17 → 1.9 MB

the 46 images, after conversion to WebP

the design system · components and variants

I compared the code against Figma by measurement, not by eye.

A Playwright suite opens the prototype at both breakpoints and reads the computed value of every gap, width and height. Four bugs that looked right on screen surfaced this way. Two of them: in the catalog grid, the longest name stretched its own column and squeezed its neighbors — on screen it passed for a difference in photos, but it was the track sized by content; and the address block received the hidden attribute correctly, but the class beat the browser default and it stayed visible — one line fixed three other places that were silently broken.

06 · IMAGE CATALOG

No photos existed. I directed and generated all thirteen.

There was no photo shoot and no stock library. I wrote a visual contract — mannequin, angle, background, light, hue — and changed one line per prompt.

the thirteen catalog photos

Consistency can be measured.

I sampled the four corners of each photo and converted them to hue. The thirteen backgrounds fall between 12.4° and 19.2° — a 6.8° range across thirteen independent generations. It wasn’t luck: the target hue was written in the prompt. The proof by contrast is in the same data — lightness, which I didn’t specify as a number, spread from 35% to 56%. When Mayara does a real photo shoot, each photo replaces one, with the same file names. Nothing in the code changes.

07 · RESULTS

Sixteen bookings a month became forty.

Anyone can reproduce the product numbers by running the suite. The operational ones came from Mayara’s calendar, comparing before and after launch.

16

bookings per month before launch

40

bookings per month after

2.50×

rate ratio · 95% CI 1.37–4.78 · p = 0.0018

3

screens from the catalog to a ready-to-send message

Quantitative analysis: the confidence interval and p-value were calculated from the bookings observed before and after launch, using an exact conditional binomial test. It’s not a model, it’s her calendar.

What I didn’t solve.

The AI images still aren’t labeled on screen: they are reference renders, not Mayara’s portfolio, and it’s written here but needs to be written in the product. Four people find the big problem, not the long tail. With the flow in operation, the next step is contextual research: observing real use instead of scheduled sessions.

08 · MORE

Other projects

Available for work

I design, I write the code, and I tell you what didn’t work.

Thirteen years in design, five of them at Canaltech across design systems, marketing and sales. If you have a surface that needs to ship finished and measured, not just specified, get in touch.

© 2026 Erick Teixeira

oerickteixeira@gmail.com · São Paulo

Email copied