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
Sprints entregues
▶ ✅ Done Sprint 1 Foundations mudas — Resend, PostHog, E2E commit 0010d53
- 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)
▶ ✅ Done Sprint 2 Cockpit + Onboarding commit 2623f88
- ProducerCockpit — dashboard ressuscitado de menu para cockpit
- OnboardingChecklist 4-step (dismissível)
- Nav unificada desktop↔mobile
▶ ✅ Done Sprint 3 Pivô Stripe → eupago + polish commits 363ada5 · 4502c02
- 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
▶ ✅ Done Sprint 4 Timestamped feedback + Admin payouts + SEO 6a6fe88 → 5161e0f
- 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
▶ ✅ Merged PR #11 · Zacky Nav restructure + Artist creation + Dashboard fix ed33c6c
- 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
- 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 38fd85f → e5eff5a
- 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
- 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
- Range UI: shift+click no waveform define range end
- Display start → end em popover + panel
- Replies threaded: parent_comment_id + indent + border
- 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
- 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
- 3 · draft
- 2 · awaiting_payment
- 1 · in_production
- Artistas: Joya (5 works) · braidedmarch (1 work)
-
Joya — Reflexoactive · EP · artist ✓
-
With Uinactive · cover ✓ · artist ✓
🧪 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.
-
☐
Producer CockpitDevem 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-downJoya (com 5 works) + braidedmarch (com 1). Click → /dashboard/producer/artists/:id.
-
☐
Perfil públicosonique.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.
-
☐
Timestamped commentsAbrir "Joya — Reflexo", escolher um track, deixar comentário ancorado a um timestamp. Depois resolver / reabrir.
-
☐
Range commentshift+click no waveform após ter um comentário para definir range end.
-
☐
Reply threadedNo 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 displayEditar 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 onboardingSubmeter IBAN PT → cria pedido pending_approval → só aí o admin tem algo para aprovar.
🔒 Bloqueados — precisam de keys
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
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
Resend — notificações email
Desbloqueia emails de feedback comment + reply.
- RESEND_API_KEY
- RESEND_FROM_EMAIL
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
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
Conseguir keys eupagoSandbox primeiro para desbloquear smoke-test, depois produção. Sem isto, o refactor Easypay→eupago fica parado.
-
2
Dogfood em browserSeed 2-3 works reais no demo producer para validar feedback timestamped, versionamento e perfil público.
-
3
Resend + PostHog em prodKeys. 2 minutos de config. Desbloqueia visibilidade total do produto.
-
4
Refactor Easypay → eupago em marketplaceDepois de eupago sandbox validar. Não é grande refactor — só trocar import + endpoint.