LIVE STATUS · 2026-04-16 · derivado do Council Session 2026-04

Sonique Sprint Status

Cinco sprints + PR #11 do Zacky entregues. Já temos dados reais na conta do @realzackyman — este é o briefing do que foi para produção, o que podes testar já, e o que está bloqueado por keys.

Estado das features

✅ Live
Works & Marketplace
90%
CRUD, upload, preview, compra
✅ Live
Projectos & Colaboração
90%
Feedback timestamped · versões · replies
✅ Live
Contratos & Legal
85%
Builder + lookup legal automático
⚡ Parcial
Pagamentos
70%
eupago integrado · Easypay→eupago em falta
⏱️ Keys pendentes
Emails & Notifs
60%
Resend coded · sem API key em prod
⏱️ Keys pendentes
Analytics & SEO
65%
PostHog coded · robots/sitemap/OG live · sem keys
Core loop
🎹 Producer cria work 📤 Publica no marketplace 🛒 Cliente compra via eupago 💸 Payout split 90/10 🎧 Projecto colaborativo com feedback 🔁 v2/v3

Sprints entregues

✅ Done Sprint 1 Foundations mudas — Resend, PostHog, E2E
Entregue
  • 4 templates Resend (welcome, contrato assinado, pagamento recebido, project share)
  • 5 eventos core PostHog (signup, work_create, work_publish, purchase, project_create)
  • Playwright E2E: webhook Easypay completo (5 testes)
Council push
🎯 Nova 🏗️ Atlas 🚀 Flux 🎨 Pixel
lib/email/ · lib/analytics/server.ts · components/providers/AnalyticsProvider.tsx
✅ Done Sprint 2 Cockpit + Onboarding
Entregue
  • ProducerCockpit — dashboard ressuscitado de menu para cockpit
  • OnboardingChecklist 4-step (dismissível)
  • Nav unificada desktop↔mobile
Council push
🎨 Pixel 🎯 Nova
components/dashboard/ProducerCockpit · OnboardingChecklist
✅ Done Sprint 3 Pivô Stripe → eupago + polish
Entregue
  • eupago split payouts — fees PT mais baixas, IBAN PT-first
  • Onboarding payouts: IBAN → pending_approval → admin cola externKey → active
  • Platform fee 10% default
  • EmptyStateRich em 4 páginas + mobile metric row fix
Council push
🎯 Nova 🏗️ Atlas 🎨 Pixel
lib/eupago/ · components/dashboard/PayoutsOnboarding
✅ Done Sprint 4 Timestamped feedback + Admin payouts + SEO
Entregue
  • Migração work_comments com range + resolved
  • WaveformComments resolve/reopen
  • TimestampedFeedback panel nos project views
  • Admin /dashboard/admin/payouts para aprovar produtores
  • SEO pass: robots dinâmico, sitemap, OG metadata, noindex scoped
Council push
🎵 Rhythm 🎨 Pixel 🚀 Flux
commits: 6a6fe88 · 7a9fe48 · eebff55 · b7ce56e · a8a84f1 · 5161e0f
✅ Merged PR #11 · Zacky Nav restructure + Artist creation + Dashboard fix
Entregue
  • Nav: "Works" → Tracks (desktop + mobile)
  • Nav: "Projects" consolidado em Artists (producer), matchPaths cobre ambos
  • CreateArtistSheet inline first-project: name + cover + dominant color → redirect para /projects/:id
  • Dashboard fix: .in(['active']).not('status','in','(completed,archived)')
  • Share page: require-account overlay em vez de hard redirect
  • MIME types expandidos (x-wav, x-flac, aiff)
  • MiniPlayer escondido em sandbox mode · deliveryFiles gated em allowDownload
Resolução de conflitos
  • Mantido Sales tab (Sprint 4) que a PR perdia
  • Mantido ProducerCockpit + OnboardingChecklist (Sprint 2)
  • Adoptado só o fix do status filter — works-count filter e notifications query deixados de fora
  • Cleanup de 309 cache files graphify-out/ acidentalmente merged
  • .claude/settings.json do Zacky não foi para main (auto-commit hook era fonte do lixo)
✅ Just shipped Sprint 5 Perfis públicos + Metadata + Range + Versões
Opção B · Growth 🚀
Perfis públicos de produtor
  • JSON-LD Person + MusicGroup com works como MusicRecording
  • OG image dinâmica 1200×630 (gradient + nome + bio + work count)
  • Header polish: gradient bg, avatar 144px, "PRODUCER" kicker
  • Canonical URL + og:type=profile + twitter summary_large_image
Opção A · Metadata 🎵
ISRC + Sample Rate + Technical Specs
  • Migration works.isrc + unique index upper-case
  • WorkForm: ISRC input + sample rate select (44.1/48/88.2/96/192 kHz)
  • Componente TechnicalSpecs em producer + marketplace
  • ISRC canonical CC-XXX-YY-NNNNN
Opção A · Range + Replies 💬
Feedback escopado
  • Range UI: shift+click no waveform define range end
  • Display start → end em popover + panel
  • Replies threaded: parent_comment_id + indent + border
Opção A · Versões 🔁
Versionamento de tracks
  • WorkVersions server component lista chain (root + siblings por parent_work_id)
  • Highlight current + link para cada versão
  • createWorkVersion duplica work com version+1 e redirect para edit
⚠️ Compare side-by-side (waveform diff) adiado
Ops 🛠️
Cleanup + deploy
  • Council artefactos removidos
  • Docs colaboração movidos para /docs
  • Deploy Hetzner via pm2 reload · 200 OK
  • Smoke-check SEO em produção OK

🎧 Conta real — dados populados

Producer
ζΔCЋЦ MΛИ · @realzackyman
zackyman@trinityrecords.pt · verificado · desde Fev 2026
6
Works totais
2
Projectos
2
Artistas
1
Contrato
Works por status
  • 3 · draft
  • 2 · awaiting_payment
  • 1 · in_production
  • Artistas: Joya (5 works) · braidedmarch (1 work)
Projectos
  • Joya — Reflexo
    active · EP · artist ✓
  • With U
    inactive · cover ✓ · artist ✓
0 comentários timestamped ainda
0 works no marketplace
0 payouts configurados
BPM / Key / ISRC / Sample rate vazios
Todas as versões em v1 (sem chain)
Cockpit + project list têm dados reais

🧪 Dogfood — o que já podes testar

Login como zackyman@trinityrecords.pt. Destes, alguns validam features passivamente (vês se renderiza com dados reais), outros precisam de tu criares conteúdo para validar o flow.

✓ Validar renderização (já tem dados)
  • Producer Cockpit
    Devem aparecer 6 works, 2 projectos, 2 artistas, 1 contrato. KPIs não devem estar a zero.
  • Projects list (Sprint 5 fix)
    Devem aparecer ambos os projectos (active + inactive) — o fix do status filter entrou no PR #11.
  • Artists list + drill-down
    Joya (com 5 works) + braidedmarch (com 1). Click → /dashboard/producer/artists/:id.
  • Perfil público
    sonique.pt/producers/realzackyman — JSON-LD Person+MusicGroup, OG image, canonical URL
  • Nav restructure (PR #11)
    Desktop & mobile: Works → Tracks, Projects → Artists (producer). Sales tab mantido.
⚡ Criar conteúdo para validar flow
  • Timestamped comments
    Abrir "Joya — Reflexo", escolher um track, deixar comentário ancorado a um timestamp. Depois resolver / reabrir.
  • Range comment
    shift+click no waveform após ter um comentário para definir range end.
  • Reply threaded
    No painel TimestampedFeedback: botão reply → thread nested com indent.
  • Versionamento (v2)
    Numa work existente (ex: "Joya - DNB"), botão New Version → duplica com version+1 e redirect para edit.
  • Technical Specs display
    Editar uma work, preencher BPM, Key, ISRC (formato CC-XXX-YY-NNNNN), Sample Rate. Guardar e ver o painel TechnicalSpecs no detail.
  • Artist creation flow (PR #11)
    Criar novo artista → CreateArtistSheet pede logo primeiro projecto com cover e dominant color → redirect para /projects/:id.
  • Payout onboarding
    Submeter IBAN PT → cria pedido pending_approval → só aí o admin tem algo para aprovar.

🔒 Bloqueados — precisam de keys

Crítico

Configurar eupago em produção

Hetzner — /var/www/sonique_v2/.env.local

  • EUPAGO_API_KEY
  • EUPAGO_WEBHOOK_SECRET
  • EUPAGO_PLATFORM_EXTERN_KEY
  • EUPAGO_MODE · sandbox | production
Prod é self-hosted Hetzner via PM2 sonique-v2. Não é Vercel.
Crítico

Migrar Easypay → eupago

app/api/payments/create/route.ts ainda importa createPayment de @/lib/easypay para marketplace purchases.

  • Project-payments já usa eupago ✓
  • Marketplace purchases ainda no Easypay ✗
  • Bloqueado sem EUPAGO_API_KEY para testar
Importante

Resend — notificações email

Desbloqueia emails de feedback comment + reply.

  • RESEND_API_KEY
  • RESEND_FROM_EMAIL
Importante

PostHog — analytics

Eventos já estão coded, falta flush para a plataforma EU.

  • NEXT_PUBLIC_POSTHOG_KEY
  • NEXT_PUBLIC_POSTHOG_HOST · https://eu.i.posthog.com
Adiado · sprint-size

Compare UI side-by-side (waveform diff)

Não bloqueia produção. Faz sentido depois de ter utilizadores reais a pedir comparar versões. Rhythm tem isto como "nice to have" — não killer.

🎯 Próximo

  1. 1
    Conseguir keys eupago
    Sandbox primeiro para desbloquear smoke-test, depois produção. Sem isto, o refactor Easypay→eupago fica parado.
  2. 2
    Dogfood em browser
    Seed 2-3 works reais no demo producer para validar feedback timestamped, versionamento e perfil público.
  3. 3
    Resend + PostHog em prod
    Keys. 2 minutos de config. Desbloqueia visibilidade total do produto.
  4. 4
    Refactor Easypay → eupago em marketplace
    Depois de eupago sandbox validar. Não é grande refactor — só trocar import + endpoint.