Open-Source Cold Email & Warmup Platform
Warmbly is the open-source platform for cold email: warm your mailboxes, send campaigns, and triage every reply. Run it on our cloud or self-host the whole thing.
Quem comentar a palavra no teu post recebe o link na DM, sozinho, numa fila que respeita o limite do Instagram. Teste 7 dias grátis.
Translation pending
MarketingTypeScript · CSSGitHub @maxwel7639-pixelOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗SaaS da MX Digital: o cliente conecta o Instagram dele, escolhe um post (ou qualquer post), define a palavra-chave e a mensagem com link, e quem comentar a palavra recebe o link na DM, numa fila que respeita o limite do Instagram.
"Gatlo AI" é nome provisório. Pra trocar, muda
PRODUTO.nomeemlib/config.ts: telas, títulos e páginas legais leem daí.
Fases e o que falta: docs/PLANO.md.
npm install
npm run dev
Abre http://localhost:3000 e:
.gatilho-demo/).Nada nesse modo fala com a Meta. Pra começar do zero, apaga a pasta .gatilho-demo/.
| Variáveis preenchidas | Banco e login | |
|---|---|---|
nenhuma (npm run dev) | arquivo local .gatilho-demo/banco.json | fictício |
| Supabase | Supabase | fictício (até ter o app da Meta) |
Supabase + INSTAGRAM_APP_ID/SECRET | Supabase | de verdade |
qualquer uma + GATILHO_DEMO=1 | (como acima) | fictício |
Em produção (npm run build && npm start) sem Supabase, o app só sobe com GATILHO_DEMO=1; sem isso,
avisa que falta configurar (uma variável apagada por engano não vira "cadastro que some").
| Comando | O quê |
|---|---|
npm run dev | servidor de desenvolvimento (http://localhost:3000) |
npm run build | build de produção |
npm run lint | ESLint |
npm run tipos | tsc --noEmit |
Stack: Next.js 16.4 (App Router, proxy.ts), React 19, Tailwind 4, @supabase/ssr. Fonte Figtree,
identidade MX (azul #1E50F0, texto #7FA6FF, fundo #07090C), tema escuro.
app/
page.tsx início (o que faz, o que NÃO faz, a fila, preço)
(conta)/ entrar, cadastro, recuperar-senha, nova-senha
painel/ visão geral, posts, automacoes (nova, [id], [id]/editar), conta
termos, privacidade, exclusao-de-dados
l/[codigo]/route.ts link curto da DM: conta o clique e redireciona
api/instagram/conectar início do login do Instagram (state em cookie)
api/instagram/callback volta do login: troca code → token curto → token longo (cifrado)
api/instagram/desautorizar aviso da Meta: removeu o app
api/instagram/exclusao aviso da Meta: pedido de exclusão de dados
api/cron/renovar-tokens cron diário da Vercel (vercel.json)
auth/confirmar links de e-mail do Supabase
demo/ miniaturas e foto em SVG do modo demonstração
lib/
config.ts NOME do produto e endereço do site
env.ts qual modo está ligado
regras.ts lê a tabela `regras` (preço, teste, freios da fila)
dados/ repositório: Supabase e banco local, mesmo contrato
instagram/ API da Meta, perfil fictício, avisos da Meta
auth/ sessão e ações de login/cadastro/senha
palavras.ts palavra-chave sem acento/maiúscula (a mesma regra vai pro robô)
cripto.ts cifra AES-256-GCM do token (formato compatível com WebCrypto)
taxa.ts trava de taxa (no banco)
supabase/migrations/0001_esquema.sql
docs/PLANO.md
tokens_instagram sem nenhuma permissão pra
anon/authenticated, cifrado no servidor com GATILHO_CHAVE_TOKENS, lido só com a service role.using (true). O usuário só escreve em automacoes (coluna
por coluna) e no próprio nome. Status de assinatura, código do link e dono da linha, ninguém edita.execute padrão do Supabase das funções novas. A conferência está no fim do arquivo SQL.regras), lidas pelo banco e pelo servidor; o navegador
nunca manda preço nem prazo.frame-ancestors 'none', HSTS, nosniff,
referrer e permissions policy. Sem otimizador de imagem do Next.state aleatório em cookie httpOnly, amarrado ao usuário logado.npm audit acusa 5 falhas "altas" só no ESLint (braces dentro do eslint-config-next), ferramenta
de desenvolvimento: não vai pro site.supabase/migrations/0001 a 0008, em ordem, no SQL
Editor (ou supabase db push). Rodar as consultas de conferência do fim de cada arquivo.NEXT_PUBLIC_SUPABASE_URL, NEXT_PUBLIC_SUPABASE_ANON_KEY e SUPABASE_SERVICE_ROLE_KEY.NEXT_PUBLIC_SITE_URL.{{ .SiteURL }}/auth/confirmar?token_hash={{ .TokenHash }}&type=signup{{ .SiteURL }}/auth/confirmar?token_hash={{ .TokenHash }}&type=recoveryPasso a passo do app da Meta (redirect URI, URLs de desautorização e exclusão, testadores, revisão):
seção "O que o MAXWEL precisa fazer" do docs/PLANO.md. Depois, preencher
INSTAGRAM_APP_ID, INSTAGRAM_APP_SECRET, GATILHO_CHAVE_TOKENS e NEXT_PUBLIC_SITE_URL (a Meta só
aceita redirect em https, então o teste real é no endereço publicado).