Skip to content

landing-002 — Share viral — gerar link de referral (attribution-only)

CEO doc (decisão 2026-06-03) substituiu a mecânica de waitlist + subir-na-fila por attribution-only: o casal compartilha um link, o parceiro/amigo entra no whats, o bot registra quem-convidou-quem via cenário 016 refactored. K-factor vira analytics de atribuição, não rank-up mechanic. Sem fila, sem posição, sem “sobe N”.

Este cenário cobre o lado emissor do link:

  1. Geração — casal já com Household (cookie/localStorage mel.householdId setado pelo bot via deep link inicial ou cross-device upgrade — fora do escopo da landing) abre /compartilhar (ou modal disparada pela CTA secundária do landing-001) e recebe um share link único.
  2. Copy / Share — clica em “Copiar link” (clipboard) ou “Compartilhar via apps” (Web Share API quando disponível, fallback pra copy).
  3. Attribution acontece fora desta landing: o parceiro abre o link ?ref=<token> (cenário landing-001 cobre o prefill), clica na CTA → cai no whats com ref-<token> → bot dispara cenário 016 refactored.

O backend é mockado nesses e2e — sem rede real. Endpoint GET /api/referral-issue?householdId=<id> devolve { shareToken: "tok_abc123" } determinístico (impl decide: emissão por chamada ou idempotente por household).

Sem fila. Sem rank-up. Wording de UX evita “sobe N posições”, “fila”, “waitlist”. O texto do toast/feedback fala “link copiado” ou “compartilhe com seu parceiro” — sem promessa de upgrade.

Section titled “Scenario: Casal autenticado abre /compartilhar, vê link e copia pra clipboard”
  • Given o visitante tem localStorage.mel.householdId = "hh-x" (cookie/localStorage local — anonymous-first, ADR 006; bot setou via cross-device upgrade)
  • And o backend mockado resolve GET /api/referral-issue?householdId=hh-x{ shareToken: "tok_abc123" }
  • When o visitante abre /compartilhar (ou modal acionada pela CTA secundária do landing-001)
  • Then o elemento share-link mostra a URL absoluta https://<host>/?ref=tok_abc123 (formato https?://<host>/?ref=<token>)
  • When clica em “Copiar link”
  • Then a clipboard contém a URL absoluta https://<host>/?ref=tok_abc123
  • And o share-toast aparece com feedback visual (texto regex /copiad|link/i, sem menção a “fila” ou “posição”)

Scenario: Web Share API disponível — dispara navigator.share

Section titled “Scenario: Web Share API disponível — dispara navigator.share”
  • Given o visitante já tem localStorage.mel.householdId = "hh-x" e abriu /compartilhar
  • And o browser suporta navigator.share (spec injeta stub via page.evaluate antes do click)
  • When clica em “Compartilhar via apps”
  • Then navigator.share é chamado com { url, text } contendo a URL ?ref=tok_abc123
  • And o spec captura a chamada via window.__shareCalled

(Quando navigator.share não existe, a UX deve cair em copy automaticamente — comportamento testado implicitamente no cenário anterior.)