Semana 23 — Contatos e Lembretes. A Arara agora tem memória.
Contatos com auto-discovery em outbound/inbound/webhook, lifecycle worker hourly, reactivation batch, CSV export, drawer com timeline. Lembretes com import de CSV de agenda. Smart-link campaigns. Trust level unificando quality guards. Onboarding v2 com goals + self-send antes do paywall + loop d1/d3.
Semana de dar memória pra Arara e antecipação pro cliente.
Contatos
Toda mensagem que sai ou entra agora vira ficha viva. Auto-discovery nos 3 paths (send outbound, expander de campanha, inbound do Twilio + webhook genérico). Backfill histórico dos receivers existentes. Lifecycle fields + indexes — status calculado por hourly worker (engajado / silencioso / dormente). Tags column.
Endpoint de stats com breakdown por lifecycle. Reactivation batch endpoint — 1 chamada, vira campanha contra dormentes. CSV export. Mensagens timeline por contato. Filtro por lifecycle. Split list/search pra evitar lower(null) em JPQL.
Frontend: drawer com timeline + inline edit, bulk select bar, dialogs de new/import, adaptive CTA. Filtro lifecycle wired. opt_out/opt_in marca contato no register.
Lembretes
Tela nova no dashboard com import de agenda em CSV. Lembrete sai sozinho na véspera no WhatsApp. Confirma, cancela, libera horário. Isenção do cap free pra templates aprovados de consulta. Copy genérica (não clínica-específica) — serve clínica, salão, advocacia, qualquer agenda.
Smart-link campaigns
Smart-link agora amarra em campaign. Phone tier cap + reconcile do stripe-customer. Fonte única de verdade pra números (pool via org IS NULL + flag orgs). Remove sync de legado + limpa número compartilhado salvo como dedicado.
Trust level
Antes quality guards eram espalhados (moderation, throttle, account status, plan). Unificou via org.trust_level — calcula uma vez, todo guard pergunta a mesma fonte. Menos drift, menos surpresa.
Onboarding v2
Goals na entrada (3 intenções), prova self+2, loop d1/d3 (email volta), recuperação no plano free. Self-send aha antes do paywall nas 3 intenções — quem vê funcionar primeiro converte mais. Gate só por needsInitialOnboarding (quem concluiu não volta). Backfill onboarding_completed_at dos existentes.
Dashboard adaptativo por persona, gate de pro, animações. Card de integração no overview do operador. CTAs do faturamento priorizam assinar plano (MRR), não recarga avulsa.
Polish de release
- Redesign do login com brand-logo + Geist + mascote nos 2 temas
- LP com grid pontilhado, recuperação dinâmica, confiabilidade consolidada
- Termos e privacidade alinhados ao novo tema visual
- Dashboard aponta pra
ararahq.comdireto (new.ararahq.comredireciona) - Crash NonUnique no envio fixado + desliga auto-suspend por taxa de falha
- Auto-recharge só liga após backend confirmar
- Selo Pro+ aparece só quando feature tá bloqueada pro plano
- Recuperação ganhou CTA de conversão, affordance dos gatilhos, microcopy