Plano de implementação · Digital Impact Pro

Uma máquina de
cold email, lead a lead.

Cada contacto entra numa sequência, recebe os emails no seu próprio calendário, e o caminho muda no instante em que responde. E o que oferecemos não é um PDF — é um micro-SaaS feito à medida da vertical. Construído numa instância isolada do Dispatch — sem tocar no QI nem no GLSP.

Domínio + Resend prontos Arquitectura decidida Motor por construir
★ · Mapa interativo

O fluxo completo, navegável.

Arrasta o fundo para navegar, scroll para zoom, arrasta os nós. Responder a qualquer um dos 3 emails chama sempre o humano.

abrir em ecrã inteiro ↗
01 · A ideia em 10 segundos

De disparar lotes para cultivar leads.

A mesma plataforma, dois motores opostos. É isto que justifica construir de novo em vez de adicionar uma feature.

Hoje · QI / GLSP

Campaign-centric

A campanha é a unidade. Fan-out de todos os emails de uma vez (batch.send). Sem memória do lead.

Cold · DI Pro

Lead-centric

O lead é a unidade. Avança passo-a-passo no seu calendário (emails.send individual + threaded). Estado próprio.

★ · A oferta & o ativo

Não vendemos o envio. Oferecemos um ativo já feito.

O diferencial não é o cold email — toda a gente faz. É o que ele entrega: em vez de um PDF, um micro-SaaS "reverse lead magnet" feito à medida da vertical, com valor em menos de 60s só a partir do URL do lead.

Reverse lead magneto ativo
Micro-SaaS minúsculo, 1 por vertical, ~1h em Claude Code (Vercel + Supabase).
input · só o URL do lead
output · valor em <60s
é também landing de retargeting: pixel + opt-in
Oferta zero-risco
Outcome + Time + Catch. Tom humilde e humano, nunca "broey".
"Consigo-te X em Y dias.
Se não, não pagas um cêntimo."
a app prova competência — mostra, não diz
Email 1 sem link
O 1.º toque quer open + reply, não conversão.
pede só uma resposta ("queres?")
link da app só depois do reply
reply > click para reputação

Verticais & listas — bases públicas pré-filtradas

Em vez de filtrar Apollo às cegas, partir de registos oficiais (0% lixo) — uma app por vertical serve todos os leads dela.

Clínicas dentárias1.º tiro
Auditoria de Pacientes Perdidos — URL → €/mês perdidos por falhas de captação.
lista · Ordem dos Médicos Dentistas
Imobiliárias
Lead Response Gap — leads perdidas por resposta lenta.
lista · IMPIC + APEMIP
Restauração
Google Review & Visibility Score vs concorrência do raio.
lista · AHRESP + GBP/Maps
Benchmarks de reply rate (não open): <2% lista/deliverability má · 2–5% copy/oferta · 5–10% golden zone · >10% excecional. Meta inicial: chegar à golden zone.
02 · O que o lead recebe

A sequência inicial — gota a gota.

2 a 3 emails curtos, sem link, a oferecer construir algo à medida. O objetivo é um reply — só aí, já no domínio quente, segue o link da app pré-preenchida. Volume artesanal: 10-20/dia no arranque.

Dia 0 Email 1 · a oferta

"Posso construir isto para si?"

assunto ex.: "[empresa] está a aceitar novos pacientes?" — sem link, pede só um "sim"
espera 2 dias
Dia 2 Email 2 · seguimento

Bump curto (ainda sem link)

reply ao thread anterior — mantém Message-ID; reforça o "feito à medida, grátis"
espera 3 dias
Dia 5 Email 3 · última tentativa

Fecho suave

assunto ex.: "Fecho o assunto?" — break-up email
Sem IA na plataforma. Cada email é um template react-email em /emails/*.tsx, versionado no git. Personalização por destinatário no envio.
O link da app (reverse lead magnet) nunca sai no cold. Vai só quando o lead responde — no seguimento manual a partir de joao@digitalimpact.pt, já com os dados do lead pré-preenchidos.
03 · O coração · branching por resposta

A cada passo, a máquina pergunta: e agora?

É isto que distingue cold de newsletter. O caminho do lead bifurca conforme o que ele faz.

O lead respondeu?
on_reply

Humano assume

Pausa a automação + alerta Telegram. O João responde de joao@digitalimpact.pt e envia o link da app pré-preenchida → call. Sem auto-nurture.

on_no_reply

Nurture (opcional)

No fim da sequência sem resposta → entra num re-engajamento de ~7 emails. Intenção a decidir, §09.

on_bounce

Terminado

Hard bounce (webhook) → bounced, nunca mais envia. A prevenção pré-envio é que conta.

on_unsubscribe

Terminado

Opt-out (token HMAC, já existe) → unsubscribed, sai da máquina.

O branching vive na transição do enrollment, não como tipo de passo. O passo só "envia este email"; a máquina decide para onde o lead vai a seguir.
04 · Por dentro · os dois motores

Um envia. O outro escuta.

O worker do cron substitui o processCampaignChunk actual. O pipeline inbound é totalmente novo — é o que activa o handoff humano.

Outbound
worker do cron · corre a cada minuto
cron tickde minuto a minuto
query enrollmentsactive · next_send_at ≤ now · dentro do cap
render templatereact-email personalizado
adapter.sendResend · grava Message-ID p/ thread
agenda próximo passoactualiza next_send_at
Inbound
resposta do lead · novo
Resend InboundMX já aponta lá
webhookrecebe o email cru
match ao leadIn-Reply-To / plus-addressing
pausa enrollmentstatus → replied
alerta TelegramJoão assume manualmente
05 · Reputation firewall

O domínio sacrificável protege o principal.

O cold sai sempre do domínio descartável. Quando a conversa aquece, passa para o inbox de sempre — que nunca envia cold.

digitalimpactpro.pt
● Sacrificável
  • Todo o envio cold sai daqui
  • Bounce/spam inerentemente mais alto
  • Queimar reputação = aceitável by design
  • Conta Resend isolada (coldemails@) ✓
lead responde
handoff manual
joao@digitalimpact.pt
◆ Principal · só quente
  • Inbox de sempre, reputação intacta
  • Só recebe conversas já solicitadas
  • Nunca envia cold — só responde
  • O cliente vê o email "a sério" da DI
06 · Modelo de dados · 5 tabelas novas

Só na DB nova. As tabelas base reaproveitam-se.

sequences
a sequência e as regras de envio
name · status
cap diário · ramp warm-up
janela + tz · jitter
sequence_steps
os passos ordenados
step_order · kind (email/wait)
subject · body_source
delay até ao próximo
sequence_enrollmentscoração
o estado por-lead — a máquina viva
contact_id · sequence_id
current_step · next_send_at
status active/replied/done/bounced
entered_at · exit_reason
sequence_messages
cada email enviado · threading
enrollment_id · step_id
resend_message_id
message_id_header
opened_at · clicked_at
inbound_replies
respostas, ligadas ao lead
enrollment_id (matched)
from_email · in_reply_to
subject · body_text · raw
reaproveita
já existem na base
contacts (como leads)
senders · email_events
unsubscribe HMAC
07 · Roadmap

Seis fases, da instância ao go-live.

Cada fase entrega algo verificável. As fases 0-4 não enviam um único email.

0

Setup da instância

Supabase nova + PM2 dispatch-di + Caddy + .env + migrations base 0001-0006.

depende §09
1

Migrations + tipos

As 5 tabelas novas + RLS + tipos TS. Só na DB nova.

por fazer
2

Motor + worker do cron

Envio gota-a-gota, cap, janela, warm-up ramp. Adapter pattern, emails.send threaded.

por fazer
3

Pipeline inbound

Resend Inbound + matching + pausa + Telegram. Activa o handoff humano.

por fazer
4

UI · builder + dashboard

Construtor de sequências + dashboard de enrollments. Reaproveita o shell actual.

por fazer
5

Warm-up + go-live

Validação pré-envio (sintaxe + MX/DNS), warm-up lento, monitorizar bounce. Arranca a 10-20/dia.

por fazer
08 · Riscos & mitigações

O que pode correr mal — e o plano.

AUP da Resend

Cold é proibido nos ESPs. Consequência súbita: aviso, throttle ou suspensão.

Conta isolada (não arrasta QI/GLSP), lista limpa, warm-up lento, opt-out. Adapter trocável se suspender.

Deliverability fraca

Cenário mais provável. Cold via ESP + domínio novo cai mais em Promoções/Spam.

Transporte agnóstico (adapter). Trocar p/ Zoho/caixa real (re-MX) sem reescrever o motor.

Bounce alto

Listas cold têm muito mais inválidos. Num domínio frio o estrago é rápido (QI deu ~17%).

Validação pré-envio obrigatória (sintaxe + MX/DNS). Excluir não-verificados por defeito.

GDPR / ePrivacy

Cold B2B na UE é zona cinzenta. B2C cold sem consentimento está fora.

Legítimo interesse B2B: identificação + opt-out imediato + registo da fonte. Volume baixo.
09 · A decidir antes da Fase 0

Um já fechado. Faltam dois.

Conta Resend isolada

✓ feito

digitalimpactpro.pt verificado, conta própria coldemails@digitalimpact.pt, região eu-west-1 (Ireland). Separada das contas do QI e GLSP.

Inbox do handoff

Como usas hoje o joao@digitalimpact.pt (webmail cPanel / IMAP / cliente) — para garantir inbox real quando o lead responder.

Intenção do nurture de 7

Re-engajamento automático de quem não respondeu vs sequência manual para warm leads vs qualificação progressiva. Muda conteúdo e cadência.

Fechados estes dois, arranco a Fase 0 + 1 (instância dispatch-di + migrations) — verificável sem enviar um único email.