// Grape Elevate — Roadmap / Technical plan screen
// Comprehensive deliverable for handing off to a developer: architecture,
// stack, costs, Meta setup checklist, code skeletons, and timeline.
function Roadmap({ t }) {
return (
<>
Plano técnico para tirar do papel
Tudo que falta entre esse protótipo e um produto que roda de verdade no Instagram + WhatsApp. Pode mandar pra um dev ou estudar pra fazer você mesmo.
Resumo
MVP em ~4 semanas, custo inicial < R$ 100/mês
O protótipo já cobre 100% da UX. O que falta é o backend que conversa com a API do Instagram, um banco de dados pra guardar contatos e fluxos, e a aprovação do app na Meta (passo mais demorado, mas é trabalho de espera, não de código).
🛠️
Stack recomendada
Frontend
Este protótipo (React + HTML) — só trocar dados mockados por fetch('/api/...')
Backend
Node.js (Fastify) ou Python (FastAPI) — leve e rápido pra webhooks
Banco
Postgres no Supabase ou Neon — grátis até 500MB
Hospedagem
Railway, Fly.io ou Render — R$ 0 a R$ 50/mês
Fila
BullMQ + Redis (Upstash grátis) — pra atrasos e retentativas
Auth
Supabase Auth ou Clerk — pronto, com login social
Pagamento
Stripe (cartão internacional) ou Pagar.me (PIX/boleto)
💸
Custos estimados
Fase 1 — Validação (você sozinho)
R$ 0–80/mês
Hospedagem free tier (Railway/Fly)
Supabase free
Domínio: ~R$ 40/ano
WhatsApp Cloud API: 1.000 conversas grátis/mês
Fase 2 — Primeiros 100 clientes
R$ 300–800/mês
Hospedagem paga ($20–50/mês)
Postgres médio
Custo variável de WhatsApp por mensagem
⚠️ Variável: WhatsApp
~R$ 0,03–0,30/conversa
"Conversa" = 24h de troca de mensagens com 1 número
Mensagem iniciada pelo usuário (resposta) costuma ser grátis
📋
Checklist Meta — o caminho oficial
Tudo aqui é grátis, mas leva tempo. Comece já em paralelo ao desenvolvimento.
Adicione os produtos: Instagram Graph API, WhatsApp Business Platform, Webhooks.
Configure URL de webhook apontando pro seu backend (precisa ser HTTPS).
Solicite as permissões: instagram_basic, instagram_manage_messages, instagram_manage_comments, pages_show_list, pages_messaging. ⏱️ Revisão demora 3–14 dias
Grave um vídeo (~3 min) demonstrando o app pra revisão — exigência da Meta.
Saia do "modo desenvolvimento" — quando aprovado, o app vai ao ar pra qualquer usuário.
🧱
Esqueleto do backend
Node + Fastify. Cole isso num repositório novo pra começar.
{`{
"dependencies": {
"fastify": "^4",
"@supabase/supabase-js": "^2",
"axios": "^1",
"bullmq": "^5",
"dotenv": "^16",
"zod": "^3"
}
}`}{`import Fastify from 'fastify';
import { runAutomation } from './engine.js';
const app = Fastify();
const VERIFY_TOKEN = process.env.META_VERIFY_TOKEN;
// 1. Verificação inicial do webhook (Meta envia GET pra confirmar URL)
app.get('/webhook/instagram', async (req, reply) => {
const { 'hub.mode': mode, 'hub.verify_token': token, 'hub.challenge': challenge } = req.query;
if (mode === 'subscribe' && token === VERIFY_TOKEN) return reply.send(challenge);
return reply.code(403).send();
});
// 2. Eventos: comentários, mensagens, story replies...
app.post('/webhook/instagram', async (req, reply) => {
const { entry } = req.body;
for (const e of entry) {
for (const change of e.changes || []) {
// Ex: novo comentário em um post
if (change.field === 'comments') {
const { id, text, from } = change.value;
await runAutomation({ type: 'comment', text, sender: from, commentId: id });
}
}
for (const msg of e.messaging || []) {
// Ex: DM recebida
await runAutomation({ type: 'dm', text: msg.message.text, sender: msg.sender });
}
}
return reply.send('OK');
});
app.listen({ port: process.env.PORT || 3000, host: '0.0.0.0' });`}{`import axios from 'axios';
import { supabase } from './db.js';
// Casa um evento com automações ativas e roda os passos do fluxo.
export async function runAutomation(event) {
const { data: autos } = await supabase
.from('automations')
.select('*')
.eq('status', 'live')
.eq('trigger_type', event.type);
for (const auto of autos || []) {
// Filtro por palavra-chave (case-insensitive)
if (auto.trigger_keyword && !event.text?.toLowerCase().includes(auto.trigger_keyword.toLowerCase())) continue;
for (const step of auto.flow) {
if (step.type === 'wait') await sleep(step.config.mins * 60_000);
if (step.type === 'sendDm') await sendDm(event.sender.id, step.config.text);
if (step.type === 'sendLink') await sendDm(event.sender.id, step.config.cta + ' ' + step.config.url);
if (step.type === 'tag') await tagContact(event.sender.id, step.config.tag);
}
// Conta execução pro analytics
await supabase.rpc('increment_runs', { auto_id: auto.id });
}
}
async function sendDm(userId, text) {
await axios.post(\`https://graph.facebook.com/v18.0/me/messages\`, {
recipient: { id: userId },
message: { text },
}, { params: { access_token: process.env.IG_ACCESS_TOKEN } });
}`}
🗓️
Roadmap de 4 semanas (MVP)
Quer ajuda pra encontrar um dev?
Um freelancer Node + React experiente vai cobrar entre R$ 8k–25k pra implementar o MVP em ~1 mês. Plataformas: Workana, GetNinjas, ou peça indicação em grupos de devs no Telegram.