A história do Dogwalk — do marketplace de pets ao CI/CD com 1456 testes
🐶 Dogwalk·

A história do Dogwalk — do marketplace de pets ao CI/CD com 1456 testes

📖 5 min de leitura← Voltar para timeline

⚡ O app que não podia quebrar no deploy

Todo projeto tem um momento em que você percebe: não dá mais pra fazer deploy no medo. No Dogwalk esse momento chegou duas vezes — primeiro quando o build quebrou por causa de um npm-cli.js sem permissão de execução, e depois quando 1456 testes passaram a ser a régua pra qualquer mudança.

Mas o Dogwalk não nasceu assim. Nasceu como um marketplace de pets que precisava provar que funcionava.

🧠 Contexto — do zero ao marketplace

O primeiro commit foi em 24 de abril de 2026:

73a610f5 DogWalk/PataPass: clean initial commit

A ideia era simples: conectar donos de pets a walkers (passeadores). O dono agenda um passeio, um walker aceita, e os dois acompanham o passeio em tempo real com GPS. A stack: React 19 + Vite no front, FastAPI + PostgreSQL no back, pagamento via Stripe Connect, e deploy no Cloudflare Pages.

O problema é que “simples” nunca é simples quando envolve GPS em tempo real, geofencing, pagamentos e dois tipos de usuário (tutor e walker).

🔧 A luta — quando o build quebrou no WSL

A saga mais memorável foi o build quebrado no WSL. O which npm no ambiente do Samuel resolvia pro npm do Windows (/mnt/c/Program Files/nodejs/npm) em vez do npm do Hermes node. E o CMD.EXE com caminho UNC quebrava tudo:

Cannot find module 'C:\Windows\scripts\verify-csp.cjs'

A causa raiz: o npm-cli.js do Hermes node estava sem permissão de execução (-rw-------). O fix foi cirúrgico:

chmod +x ~/.hermes/node/lib/node_modules/npm/bin/npm-cli.js

Mas a lição maior veio daí: deploy não pode depender de um ambiente específico. Foi quando o projeto ganhou scripts de deploy manual e CI local — pra quando o GitHub Actions estivesse offline, a plataforma ainda subisse.

Paralelo a isso, veio a visual reformulation: o UniversalHeader role-aware (navegação diferente pra Tutor vs Walker), o DesktopSidebar com Tailwind v4, o refactor do TutorDashboard (464 → 298 linhas) e WalkerDashboard (807 → 409 linhas). Tudo seguindo um DESIGN.md criado com o padrão Open Design — tokens CSS, role themes, e uma galeria de componentes em components.html.

💡 Resolução — 1456 testes como régua

O ponto de virada foi a semana de testes. Cinco componentes gigantes ganharam cobertura real:

Componente Linhas Testes Cobertura
Domain skeletons 614 22 100%
WalkerRequests 633 17 88%
Scheduling 687 5 70%
ActiveWalkInterface 874 10 56%
MetricsDashboard 724 5 44%

E o Scheduling foi otimizado com useCallback/useMemo — 7 handlers memorizados, 5 valores derivados.

O resultado: 1456/1456 testes passando, 93 arquivos, build 100% limpo — e a confiança de que qualquer mudança que quebrasse algo seria pega antes do deploy.

📊 Métricas

Métrica 24/04 (nascimento) 31/07 (hoje)
Commits 1 970
Testes 0 1456 (93 arquivos)
Cobertura top-5 44–100%
Stack ideia React 19 + FastAPI + PG
Deploy Cloudflare Pages CI/CD

🎯 Aprendizados

O Dogwalk ensinou que qualidade não é um feature — é uma decisão de arquitetura. Depois de quebrar o build no WSL por causa de um arquivo sem permissão, o projeto passou a ter: CI local + remoto, scripts de deploy manual, e uma suíte de testes que impede regressão.

E o Open Design provou que design system não é luxo: quando o WalkerDashboard foi refatorado com tokens e componentes documentados, perdeu 48% das linhas sem perder nenhuma feature.

~/lifelog — bash
$cat about.txt
╔══════════════════════════════════════╗
║  Samuel Medeiros                    ║
║  Senior Software Engineer           ║
║  Stack: Python · TypeScript · Rust  ║
║  Projetos: Arachne, Dogwalk,        ║
║            Capivara, TatuEngine      ║
╚══════════════════════════════════════╝
      
$