// 004  ·  Product Design

Fior: Verdade da Água

fíor  ·  irlandês  ·  verdadeiro, real, puro

Product Design UX Research Design Systems IoT Saúde Project Management Prototipação com IA

Um app mobile combinado com RYAKKA, um sensor IoT sob medida que lê seis parâmetros da água potável em casa e os condensa em quatro vereditos simples: Excellent, Good, Medium, Bad. Pensado para um contexto irlandês em que os relatórios oficiais são PDFs anuais e a conformidade é reportada em médias, mas a pessoa na torneira ainda não faz ideia do que saiu hoje.

Função Pesquisador & UX Designer
Cronograma Jun 2025 - Pausado
Equipe Solo
Plataforma iOS · Android · IoT

// Problema

497K
Pessoas em abastecimentos de risco
EPA Remedial Action List · 2024
99,8%
Conformidade nacional
EPA · Public Water Supplies

// Resposta

6
Parâmetros do sensor
RYAKKA · TDS · TOC · COD · UV275 · EC · TEMP
4
Estados de veredito
Excellent · Good · Medium · Bad

O que percebi

Na Irlanda, um relatório anual de conformidade da EPA ainda supera o que a pessoa na torneira consegue confirmar hoje. As águas superficiais pioram: apenas 52% das águas superficiais estão em condição ecológica satisfatória, uma queda em relação aos 54% anteriores. O limite de chumbo cai pela metade em 2036 (10 → 5 µg/L), com o maior risco recaindo sobre bebês, crianças e gestantes (EPA, 2025). No papel, a conformidade geral soa tranquilizadora. A chaleira discorda.

O que construí

Fior é um app companheiro do RYAKKA, um sensor doméstico que combina seis leituras com uma Verdict Ladder de quatro estados. A linguagem é calma, não alarmista; toda afirmação tem fonte, não é apenas alegada. O que você pode fazer a seguir, não o que você deveria temer.

O que isso me ensinou

MVP conceitual, não lançado. A pesquisa levou a uma mudança de persona, de foco rural para locatário urbano, visando o go-to-market. O resultado: um design system token-first (294 variáveis em três camadas, na v3.2), 15 telas hi-fi navegáveis, e um ecossistema de três superfícies coordenadas (case study, doc de processo, protótipo hi-fi) compartilhando um único design system.

// 01

A Pesquisa Que Moldou o Fior

Eu me mudei para a Irlanda em 2022. A primeira coisa que minha chaleira me ensinou foi como é o calcário: uma crosta branca na resistência depois de uma semana, não importava quantas vezes eu enxaguasse. A água da torneira era tecnicamente segura; a EPA garantia isso. Mesmo assim, eu não sabia realmente o que havia nela.

Essa lacuna, entre “a água é tecnicamente segura na média nacional” e “eu, hoje, na minha casa, consigo confirmar isso”, virou o brief. A categoria de consumo praticamente não existe na Irlanda: os dados da EPA ficam em relatórios institucionais, não no bolso das pessoas. O Fior fecha essa distância.

// Base de Evidências · EPA 2025
  • 99,8%+ das amostras de água pública irlandesa cumprem os limites bacteriológicos e químicos, mas essa média nacional mascara riscos localizados.
  • ~497 mil pessoas permanecem em abastecimentos “de risco” (EPA Remedial Action List, final de 2024).
  • O limite de chumbo cai pela metade em 2036 (10 → 5 µg/L). O maior risco recai sobre bebês, crianças e gestantes. A EPA classificou o progresso nacional como “lento demais” (Jul 2025).
  • A qualidade das águas superficiais está piorando: apenas 52% das águas superficiais estão em condição ecológica satisfatória, uma queda em relação aos 54% anteriores.

Fontes: EPA · Drinking Water Quality 2024 · EPA · Water Quality Report 2019–2024

Etapa 01
01

Impact Mapping

Raio de Impacto Amplo · Quatro Categorias de Impacto

Comecei aberto, de propósito. O prompt era “quais são os impactos da água não tratada na Irlanda?”, não “que aplicativo devemos construir?”. Mapear o raio de impacto primeiro evita que um projeto colapse numa única feature antes que o problema seja compreendido.

  • Saúde: doenças transmitidas pela água, exposição ao chumbo, saúde pública de longo prazo
  • Qualidade da água potável: lacunas de conformidade, poços privados, pontos cegos de monitoramento
  • Meio ambiente: declínio das águas superficiais, escoamento agrícola, danos estuarinos
  • Economia: custo de saúde, dependência de água engarrafada, risco ao turismo

Cada categoria destravou um ângulo diferente para a próxima rodada de perguntas.

Etapa 02
02

Problem Statement & Guinada de Persona

Statement Mantido · Persona Primária Mudou

Primeira versão do problem statement: “Famílias rurais na Irlanda precisam de uma forma confiável e acessível de obter água limpa e segura, porque água não tratada pode causar problemas de saúde, ambientais e econômicos.”

Esse statement sobreviveu até que as personas foram esboçadas, e então ele mudou de rumo.

// Tensão · Guinada de Persona

A persona primária mais nítida acabou sendo a Concerned Renter, o locatário preocupado (urbano, 25–40, Dublin / Cork / Galway). Donos de poços rurais têm risco objetivo mais alto, mas locatários têm risco engajável mais alto: eles não podem modificar o encanamento, suspeitam de canos de chumbo, já compram jarras filtrantes, e já vivem dentro da categoria de produto quantified-self.

Donos de poços rurais viraram a persona secundária; novos pais, a terciária. O problem statement se manteve. O alvo primário mudou de quem tinha mais risco para quem tinha mais chance de agir.

Etapa 03
03

How Might We: 8 Direções

Divergir · Um Ângulo por Vetor de Impacto

Oito prompts de How-Might-We, um por vetor de impacto. O objetivo aqui não era escolher um vencedor. Era trazer à tona os ângulos para que a rodada de ideação não começasse pré-comprometida.

  • Acesso… tornar o teste de água disponível para qualquer pessoa, em qualquer lugar da Irlanda?
  • Educação… transformar os dados da EPA em algo que as pessoas realmente leiam?
  • Monitoramento… dar às famílias uma forma de checar sua água continuamente?
  • Comunidade… agregar leituras locais em um mapa compartilhado?
  • Alavancagem Tecnológica… usar sensores e celulares para reduzir o piso de custo?
  • Ciclos de Feedback… mostrar mudança ao longo do tempo, não apenas um retrato do momento?
  • Serviço… conectar cada leitura a uma próxima ação (ferver, filtrar, ligar)?
  • Incentivos… recompensar a contribuição para o conjunto de dados da comunidade?
Etapa 04
04

Ideação: Quatro Direções de Produto

Convergir · Filtro por Valor Diário + Moat + Escopo

As HMWs convergiram em quatro produtos plausíveis. Cada um foi avaliado segundo três filtros: valor pessoal diário, defensibilidade, e disciplina de escopo (um designer solo conseguiria prototipar isso de ponta a ponta?).

  • 01 Mapa de fontes de água limpa: jogada de diretório, ciclo pessoal fraco. Rejeitado
  • 02 App de educação: guiado por conteúdo, difícil de sustentar, sem moat. Rejeitado
  • 03 Monitorar + Melhorar: valor pessoal diário, moat de hardware via RYAKKA, escopo contido. ★ Selecionado
  • 04 Hub de tratamento comunitário: produto operacional, bem fora do escopo deste brief. Rejeitado
// Por Que a Direção 03

Valor pessoal todos os dias: você não checa um mapa todo dia, mas bebe água todo santo dia. Um moat de hardware através do RYAKKA, o sensor IoT companheiro que transforma seis parâmetros em um único veredito. E um escopo que um designer solo consegue de fato entregar de ponta a ponta: seis leituras, um veredito, um app. Recorte limpo.

Etapa 05
05

Primeiro Wireframe: A Espinha Dorsal

ASCII de 4 Telas · Ancestral do Hi-Fi de 15 Telas

Antes de qualquer pixel, um esboço ASCII de quatro telas. Home → Test → Result → Suggestions. Essa espinha dorsal ainda está visível no protótipo hi-fi de 15 telas: Home virou Dashboard, Test virou Measuring, Result virou a tela de veredito, Suggestions permaneceu como um hub.

┌────────────────┐   ┌────────────────┐   ┌────────────────┐   ┌────────────────┐
│   HOME         │   │   TEST         │   │   RESULT       │   │  SUGGESTIONS   │
│                │   │                │   │                │   │                │
│  Last test:    │ → │  [ Dip RYAKKA] │ → │   GOOD · 76    │ → │  1. Boil 3 min │
│  08:42 · Good  │   │   measuring…   │   │   TDS · TOC    │   │  2. Filter jug │
│                │   │    ◉ ◉ ◉       │   │   COD · UV275  │   │  3. Log source │
│  [Test again]  │   │                │   │   EC  · TEMP   │   │                │
└────────────────┘   └────────────────┘   └────────────────┘   └────────────────┘
// esboço de 4 telas · ancestral direto do hi-fi de 15 telas ← Role horizontalmente para ver o fluxo completo →

Tudo que veio depois (um sistema de tokens em três camadas, cinco cores de pilar, o componente Verdict Ladder, a migração de Inter para Nunito) foi engrossando a espinha dorsal. A espinha dorsal em si nunca mudou de lugar.

// 02

Uma Fundação Token-First

O design system do Fior vive no Figma e no código: uma biblioteca no Figma construída com variables, components e auto layout, e as camadas de tokens implementadas em código. Três camadas de tokens, uma migração de tipografia no meio do projeto, e um único componente de quatro estados que carrega todo o ponto de vista do produto sobre saúde e honestidade.

294
Variables
27
Telas no Figma
0
Hardcoded Hex

// Biblioteca Figma · v3.2 · out 2026

Princípio 01
01

Arquitetura de Tokens em Três Camadas

Primitives → Semantic → Component

Todo token do sistema pertence a uma de três camadas. Primitivos guardam valores brutos. Tokens semânticos mapeiam significado sobre esses valores (primary, surface, danger). Tokens de componente vinculam a camada semântica a uma parte específica da UI. Troque um primitivo, e as camadas acima se atualizam automaticamente.

01 · Primitive --blue-500 #1A70B4
→
02 · Semantic --accent = --blue-500
→
03 · Component --button-primary-bg = --accent
  • 294 variáveis nas três camadas do Figma (94 primitive · 98 semantic · 102 component), cada uma com scope explícito
  • 4.450+ bindings de variáveis em camadas autorais nas 27 telas do Figma
  • Zero hex hardcoded nos CSS modules do protótipo e nas 27 telas do Figma: todo valor remonta, passando pelo semântico, até o primitivo
Princípio 02
02

Migração de Inter → Nunito

Uma Troca de Primitivo · No Código

No meio do projeto, o tom de marca quebrou a escolha tipográfica. Inter é nítida e neutra: certa para SaaS, errada para um utilitário irlandês calmo que quer soar como um amigo experiente. Os terminais arredondados da Nunito soam mais quentes sem abrir mão da legibilidade.

// Por Que a Arquitetura Valeu a Pena

Com um sistema plano, essa migração teria sido um search-and-replace em cada estilo de texto. Com a arquitetura de três camadas, a mudança no código foi uma única troca de primitivo: --font-family-base passou a apontar de Inter para Nunito, e todo token semântico e de componente se propagou automaticamente.

Dez minutos de trabalho, zero regressões visuais. A arquitetura não era teórica. Ela pagou o custo de ser montada logo na primeira mudança estrutural.

O arquivo do Figma demorou mais a acompanhar: só saiu da Inter em outubro de 2026. Essa história é o capítulo 04.

Princípio 03
03

A Verdict Ladder

Quatro Estados · Um Componente · Um Ponto de Vista

Seis parâmetros do sensor (TDS, TOC, COD, UV275, EC, TEMP) são complicados. Um veredito não é. A Verdict Ladder é o único componente que transforma a leitura em uma manchete sobre a qual qualquer pessoa consegue agir em menos de dois segundos. Quatro estados. Linguagem simples. Nenhuma muralha de números.

Estado 01
Excellent
#1AC863 · Verde
Estado 02
Good
#2B8FD9 · Azul
Estado 03
Medium
#FFB200 · Amarelo
Estado 04
Bad
#F43535 · Vermelho
// Decisão Chave · Veredito Antes do Parâmetro

O dashboard abre com o veredito, não com as leituras. COD, TDS, UV275 são evidência. Ficam um toque mais fundo, para quem quiser vê-las. A maioria não quer. Tom calmo em vez de tom assustador: os quatro estados nunca dizem “inseguro” ou “alerta”. Eles dizem o que você deve fazer a seguir (ferver, filtrar, beber).

// Linguagem Visual

Tokens, Tipografia & Espaçamento

As cinco cores de pilar e seus tons de apoio, a escala tipográfica da Nunito, e a grade de espaçamento base-4: as superfícies em que a arquitetura de três camadas desemboca.

// Cinco Pilares, Neutro & Apoio · Tom de Trabalho
Azul · #2B8FD9
Pilar Monitor · veredito Good · CTAs usam blue-500
Aqua · #1FC8C8
Pilar History · gráficos · destaques
Verde · #1AC863
Pilar Alerts · veredito Excellent · estado de aprovação
Amarelo · #FFB200
Pilar Suggestions · veredito Medium · nudges
Vermelho · #F43535
Pilar Map · veredito Bad · alerta crítico
Céu · #3D95FF
Destaque de apoio · estados informativos
Neutro · #0D1E2E
Texto de corpo · chrome do app · traços de ícone
Escuro · #071525
Superfícies de foco · onboarding · base do dark mode
// Escala Tipográfica · Nunito · 5 Pesos
Display Sua água, medida. 40 / 700
Título 01 Good morning, Ciarán 32 / 700
Título 02 Last tested today · 08:42 24 / 600
Título 03 Seis parâmetros do sensor 20 / 600
Corpo Calma, factual, nunca alarmista. Um amigo experiente que por acaso é engenheiro de água. 16 / 400
Rótulo Last test · 08:42 13 / 500
// Escala de Espaçamento · Base-4
4
8
12
16
20
24
32
40
48
64
// 03

Três Superfícies Coordenadas

O Fior vive em três superfícies ativas: o case study que você está lendo, um doc de processo mobile-first, e um protótipo hi-fi interativo. Elas compartilham a mesma paleta, a mesma Verdict Ladder, a mesma voz calma. Um design system. Três vozes.

CONFIDENCIAL // DOC-ID · RM-2026-H2O
// 004 · CASE
FIOR
Verdade da Água
fíor · irlandês · verdadeiro, real, puro
// CASE STUDY · CONFIDENCIAL
// 01 · Superfície

Case Study

A entrada narrativa: a história dentro da qual você está agora.

Vanilla HTML Estética Death Stranding
// lendo agora · esta superfície
// 4 MODOS Process → Wireframe → Prototype → System
// DOC DE PROCESSO · MOBILE-FIRST
// 02 · Superfície

Doc de Processo

Um único documento mobile-first com quatro modos: Process, Wireframe, Prototype, System. Percorre a trilha de design desde o enquadramento do problema até o sistema embrionário.

Vanilla HTML Zero deps 4 Modos Mobile-first
Abrir Doc de Processo →
// HI-FI · PROTOTYPE
// 03 · Superfície

Protótipo Hi-Fi

Vite + React 18 + TypeScript strict. 15 telas em 6 fases e 3 ramificações. A Verdict Ladder de 4 estados vive aqui, de ponta a ponta. Hash routing, sem build SSR.

React + TS 15 Telas 29 Testes ~84 KB · WCAG AA
Lançar Protótipo →
// 04

Quando Quem Tinha Derivado Era o Figma

Por trás das três superfícies está o arquivo do Figma, onde o Fior começou: 27 telas em sete fluxos de feature. O protótipo hi-fi veio depois, como um caminho navegável de 15 telas. Em outubro de 2026 auditei o arquivo contra o código entregue e o reconstruí em três passos, da v3 à v3.2. Todo número deste capítulo é da v3.2.

Ato 01
01

“O Figma Vence”, Só Que o Figma Tinha Derivado

Paridade no Número · Drift no Valor

A página System do doc de processo dizia com todas as letras: “O Figma é a fonte da verdade. Se este artefato divergir, o Figma vence.” A auditoria mostrou o contrário. Quem estava atrás era o Figma: ainda em Inter, ainda na escala tipográfica antiga. A contagem de variáveis batia com o sistema online até a unidade. Os valores, não.

Os achados que importavam eram os que nenhum screenshot mostra. A borda do input apontava para um token de espaçamento. O token de raio do botão estava ligado a retângulos que não eram botões. E o próprio componente Button tinha sido deletado enquanto telas ainda o usavam.

// Método · Re-bind de Segurança

Antes de mudar qualquer valor, religuei cada camada a um token com o mesmo valor, para que nada na tela pudesse se mexer enquanto a estrutura por baixo mudava. Só então os valores mudaram. Nas 27 telas, zero regressões.

A frase saiu do site. A página System agora publica a regra que o trabalho de fato segue: o código entregue define os valores; o Figma o espelha, exceto onde o código reprova em acessibilidade.

Ato 02
02

Tornar a Frase Verdadeira

67 → 0 Cores Soltas · Dentro de 27 Telas

A documentação também dizia zero hex hardcoded. Dentro das telas, isso ainda não era verdade. Eu podia ter suavizado a frase. Preferi corrigir o arquivo: as 67 cores soltas dentro das telas agora resolvem para variáveis, e os gradientes vivem como paint styles, porque a API de plugins do Figma não liga uma variável a uma parada de gradiente. O census marca zero nas 27 telas.

A estrutura também segue a API do código. O Button virou um set Type × State, porque no código disabled é estado, não tipo. A aba ativa da nav bar virou variante, espelhando activeTabForScreen(), e a entrada da aba Map corrigiu um erro de navegação no caminho.

// Decisão Chave · Acessibilidade Acima de Paridade

Onde paridade e acessibilidade discordavam, a acessibilidade venceu, nos dois sentidos. O botão de sucesso da biblioteca de componentes reprovava AA com 2,2:1, então o código mudou para green-600 (5,6:1). O texto de erro do input no Figma reprovava AA com 3,9:1, então o Figma mudou para o red-600 do código (7,9:1).

A auditoria achou também o botão que todo mundo vê reprovando: branco sobre blue-400 dava 3,48:1. O primary passou para blue-500 (5,22:1), primeiro no código, depois no Figma.

Uma checagem automática confirma: axe-core 4.10, regras WCAG 2.1 A e AA, rodado no hi-fi no ar em 375 px e no desktop, reporta 0 violações nas 15 telas (out 2026). É uma checagem automática, não uma auditoria completa: nenhum leitor de tela entrou no teste.

Ato 03
03

O Figma Aprende as Palavras do Código

262 de 294 Com Nome do Código · 32 Dizem Por Quê

A página Token Reference do Figma é a única ponte para o código para quem não tem assento pago. Ela listava nomes de CSS que não existem no código, como --color-primary e --spacing-1.

Não renomeei o Figma para parecer o código. Renomear produziria o pior tipo de drift: mesmo nome, outro valor. Em vez disso, cada variável aprendeu a palavra do código para ela, mas só onde os valores resolvidos batem. 262 de 294 batem. As outras 32 levam um traço e um motivo.

Código (CSS do hi-fi) Valor Variável do Figma (Fior/Semantic)
--text-primary#0D1E2Ecolor/text-primary
--text-muted#6A849Ecolor/text-secondary
–#8FA5BCcolor/text-tertiary
--text-secondary#354D62color/text-strong
--text-tertiary#4E6680color/text-meta
–#B8C8D8color/text-disabled
--text-on-deep#FFFFFFcolor/text-inverse
Transcrito da página Token Reference do arquivo Figma, v3.2, cores de texto. A palavra secondary aparece em duas linhas diferentes: a color/text-secondary do Figma é a --text-muted do código, enquanto a --text-secondary do código é a color/text-strong do Figma. Renomear teria fundido as duas. Os dois traços são cores de texto que só existem no Figma: o protótipo não tem token semântico de texto nesses valores.

Não há Code Connect: ele exige plano Organization ou Enterprise, e o arquivo está no Pro. Em vez disso, cada component set traz na descrição o arquivo-fonte e as props.

Uma revisão ainda me pegou. Bater o valor é necessário, não suficiente: um par passou no meu script e ainda estava errado, porque o peso compartilhado dos botões batia com o do botão primário e escondia duas variantes mais leves no código. A regra que ficou: o papel vence o valor mais próximo.

// Método · Cinco Revisores Independentes

Antes de qualquer parte disso ir a público, cinco revisores independentes, agentes de IA separados com uma lente cada, leram o material contra o código, o arquivo do Figma e o site. Acharam erros que eu tinha escrito com confiança: um “AAA” que era AA, comparações entre contagens de escopos diferentes, e o site ainda dizendo “Figma wins”. Tudo corrigido antes de este capítulo ser escrito.

Todo número aqui é um census que eu consigo rodar de novo, e toda escrita em massa foi tudo-ou-nada: o script comparava cada par e não gravava nada se um único divergisse.

// 05

O brief não estava no laboratório. Estava na lixeira.

A água pública irlandesa tem 99,8% de conformidade, e as lixeiras de reciclagem de Dublin estão cheias de garrafas de água. Essa lacuna é o verdadeiro brief. As pessoas não estavam fugindo de água insegura; estavam fugindo da ausência de confirmação pessoal. A pesquisa mora menos no que as pessoas dizem estar errado, e mais no pequeno workaround que elas construíram silenciosamente ao redor disso.

A maioria dos apps de saúde abre com a leitura (TDS 128, pH 7,2) e deixa você traduzir isso sozinho. Isso é uma falha de voz disfarçada de transparência. A Verdict Ladder do Fior abre com o estado e guarda os números a um toque de distância. Calma não é um tom; é uma decisão de information architecture.

Tudo isso foi construído solo, 15 telas, 294 variáveis, 29 testes passando, WCAG 2.1 AA: eu mesmo desenhei no Figma e direcionei o sistema (personas, Information Architecture, a voz calma, a verdict ladder como a decisão central), enquanto a IA escrevia o código sob a minha direção.