Ponto de situação

Loja online de aquascaping
com abordagem "primeiro o mais difícil".

Substituir a loja actual do Diogo (mizuke.com em Weasy.io, com limitações graves no backoffice e variantes não agrupadas) por uma stack moderna Medusa + Next.js, com integrações nativas portuguesas (Eupago, Nacex, Moloni) e ligação bidireccional ao site das fichas técnicas (qrcodes.mizuke.com, 237 espécies). Estratégia de-risk first: atacamos os receios maiores e tecnicamente mais desafiantes (migração + Moloni) na Fase 1, validamos com o cliente, e só depois avançamos.

📁 ~/new-mizuke-shop 🌿 master 📅 Início 2026-04-01 👤 Cliente Diogo Leal 📦 github.com/kwana117/new-mizuke-shop 📄 Proposta · 1.770€
Progresso global
38%
Milestones
4/12
4 feitos 1 em curso 7 por fazer
🎯

Estratégia · De-risk first

Comecemos pela parte mais difícil
Os dois pontos que o Diogo mais sublinhou — migração + agrupamento de variantes ("o meu maior receio, tbh") e sync de stocks com Moloni — são também os tecnicamente mais desafiantes. Tratá-los na Fase 1 com gate de validação explícito ("se aprovas, avançamos") tem três efeitos práticos:
01
Tira o medo principal cedo
Cliente vê o catálogo migrado e os stocks a sincronizar nas primeiras 2 semanas.
02
Descobre problemas com margem
Se algo correr mal, ainda há tempo para reverter — incluindo devolver o sinal, como já prometido.
03
Constrói confiança
Validação intermédia desbloqueia adesão para Fase 2 (integrações) e Fase 3 (deploy).

À espera de

5 itens bloqueiam o avanço
💳 Adjudicação formal + 1.ª prestação
Pedido a Diogo Leal · há 2 dias
Cliente disse "quero adjudicar" mas precisa de plano de pagamento mais espalhado. Proposto: 5 prestações iguais de 354€ (5 meses) ou sinal 30% + 4× 310€ (4 meses). Sem isto, Fase 1 não arranca.
🔑 API key Weasy.io
Pedido a Diogo Leal · sai após adjudicação
Bloqueia Fase 1 (importação completa do catálogo). Sem isto, fica-se em scrape (já feito uma vez, mas API REST é fonte limpa).
🔑 Credenciais Moloni (API key)
Pedido a Diogo Leal · sai após adjudicação
Bloqueia Fase 1 (sync stocks). Esta é a credencial mais crítica para o de-risk — é o que permite validar que stocks e faturação funcionam ponta-a-ponta.
🔑 Credenciais Eupago + Nacex
Pedido a Diogo Leal · sai após adjudicação
Bloqueiam só Fase 2, podem ficar para depois. Pedimos cedo para isolar atrasos de 3rd parties.
📞 Confirmação integração QR codes
Pedido a Diogo Leal · há 0 dias
Aguardar resposta para incluir formalmente no escopo (sem custo extra se mapeamento espécie↔produto for 1-para-1).
01 · Milestones por fase

O caminho até dar o projecto como fechado.

✓ Já feito Pre-adjudicação

Demo público com proposta

Storefront dark theme, PT-PT, mobile-first, produtos mock com variantes, deploy Vercel para o cliente ver.

Feito

Proposta comercial enviada

1.770€ (-25% desconto).

Feito

Módulos custom desenhados

Eupago (MB+MBWay), Nacex (peso), Moloni (faturação) — esqueleto pronto.

Feito

Bug de preços corrigido

money.ts agora divide por 100 (mostrava 490€ em vez de 4,90€).

Feito
⏵ Em curso Adjudicação

Adjudicação + sinal

Cliente confirmou intenção (28/04), a negociar plano de pagamento (5× 354€ ou sinal 30% + 4× 310€).

Em curso
F1 · De-risk Atacar primeiro o que mais preocupa o cliente alvo: semana 1-2
⚠ Maior receio do cliente

Importação completa + agrupamento de variantes

126+ produtos da Weasy via API, algoritmo de match por nome base, validação manual com cliente antes de aceitar (KUBUS S/M/L → 1 produto, 3 variantes). Dry-run com export CSV para o cliente revisar.

Por fazer
⚠ Crítico técnico

Sincronização de stocks com Moloni

Moloni como fonte de verdade. Webhook stock.updated → Medusa baixa stock; encomenda Medusa → emite factura no Moloni → stock baixa nos dois lados. Testar race conditions.

Por fazer
⚠ Gate de validação

Validação do backoffice com o cliente

Loom + sessão ao vivo a mostrar inserção de produtos, edição de variantes, bulk actions. Tirar o segundo maior receio antes de continuar para Fase 2.

Por fazer
F2 · Integrações Pagamentos, envios e ligação às fichas técnicas alvo: semana 2-3

Configurar Eupago em produção

Credenciais reais, testes Multibanco e MB Way.

Por fazer

Configurar Nacex em produção

Tabela de portes por peso, credenciais.

Por fazer

Integração com qrcodes.mizuke.com

Botão "Ver ficha técnica" no produto + botão "Comprar online" na espécie (bidireccional via WP REST API, 237 espécies).

Por fazer
F3 · Go-live Deploy e cutover alvo: semana 3-4

Deploy Hetzner CX23

docker-compose.prod.yml, SSL, domínio mizuke.com.

Por fazer

Cutover Weasy → Medusa

DNS switch, redirects 301, monitorização primeiras 48h.

Por fazer
02 · Próximos passos

Onde retomar quando voltar a este projecto.

Imediato

1
Responder ao Diogo (hoje)

Propor plano de pagamento em 5× 354€/mês + confirmar abordagem "começamos pela parte mais difícil" (Fase 1: migração + Moloni). Reforçar promessa de devolução do sinal se Fase 1 não cumprir.

2
Loom de 60-90s do backoffice Medusa

Gravar antes da resposta para reforçar a confiança. Mostrar: criar produto novo, adicionar variantes (Peso S/M/L), upload imagens, gestão de stock inline, bulk price update.

3
Após adjudicação: pedir credenciais por ordem

(1) API Weasy + (2) API Moloni primeiro (bloqueiam Fase 1); Eupago/Nacex depois.

4
F1 · Script de importação Weasy → Medusa

Leitura paginada da API, normalização (regex de tamanhos/pesos), agrupamento por nome base, dry-run com CSV para o cliente validar antes de inserir no Medusa.

5
F1 · Subscriber Moloni

Webhook receiver /webhooks/moloni/stock + cron de fallback a cada 5min; subscriber Medusa order.completed → Moloni documents/invoices/insert. Testar em sandbox antes de produção.

6
F1 · Sessão de validação com o Diogo

Quando catálogo importado + Moloni a sincronizar, marcar 30min com ele para abrir o admin e confirmar. Gate de qualidade: se aprovar, avançamos para F2; se não, ajustamos.

7
F2-F3 · Integrações + deploy

Mapeamento espécie ↔ produto, Eupago/Nacex em produção, deploy Hetzner, cutover. Só depois da Fase 1 estar validada.

Riscos · Bloqueadores

🔴 Alta — Agrupamento de variantes Produtos com nomes ambíguos na Weasy (ex: "Cichlid", "Cichlid Africano", "Cichlid Africano 200g") podem ser agrupados mal. Mitigação: dry-run com CSV para o cliente revisar; algoritmo conservador (preferir não agrupar a agrupar errado).
🔴 Alta — Race conditions Moloni ↔ Medusa Venda online em simultâneo com venda na loja física pode levar a oversell. Mitigação: locks optimistas no Medusa, retry com backoff, alerta se delta > X. Documentar e alinhar com cliente.
🟡 Média — Cashflow do cliente Diogo já disse 2× que "final do mês é apertado". Plano em 5 meses mitiga, mas há risco de empurrar adjudicação para Maio/Junho.
🟡 Média — Mapeamento espécie ↔ produto Match automático por nome científico cobre 80%+; resto precisa revisão manual. Não bloqueia Fase 1.
🟢 Baixa — Credenciais 3rd party Eupago/Nacex podem demorar dias mas só bloqueiam Fase 2. Pedimos cedo, isolamos.
03 · Actividade recente

Últimos commits + stack.

3 weeks ago424ae35 fix: style native popover element for dark theme
3 weeks agof8d08b3 feat: add product variants demo — KUBUS with 3 sizes, Cichlid with 2 weights
3 weeks ago2a9878b fix: add .catch() fallback to all SDK fetches in products + metadata
3 weeks ago71f2cc1 fix: add .catch() to product fetchers so mock data works on Vercel
3 weeks agoa9ebc00 fix: add mock region fallback so product pages work without Medusa
3 weeks ago3b2f6d8 fix: widen region selector + use Mizuke image on login page
3 weeks ago675ef55 fix: remove region guard so mock products render without Medusa backend
3 weeks ago78f0944 feat: add mock products with real Mizuke catalog data

Stack

Medusa.js v2 Next.js 15 Agilo Fashion Starter PostgreSQL 15 Redis 7 Docker Compose Hetzner CX23 Eupago Moloni Nacex

Plataforma actual (mizuke.com): Weasy.io, ~126 produtos, variantes não agrupadas (1 tamanho = 1 produto separado — exactamente o problema que resolvemos na F1). API REST disponível.

QR codes (qrcodes.mizuke.com): WordPress + Bricks Builder com plugin custom especies-loop-and-filters (237 espécies como CPT). REST API pública. Integração: meta especie_slug em cada produto + botões bidireccionais. ~1 dia, sem custo extra.

Conversa relevante (28-30/04): Diogo confirmou que quer adjudicar, gostou da demo mas tem receio do backoffice ("não fique prático") e da migração ("o meu maior receio, tbh"). Cashflow apertado — repartir pagamento em 4-5 meses.