Open-Source Cold Email & Warmup Platform
Warmbly 是开源的冷邮件平台:温暖您的邮箱、发送活动、并对每条回复进行分流。可在我们的云端运行,也可自行托管整套系统。
AI 翻译
尚未收集仓库信息。
尚未检测到更新。GitHub 发布版本后会显示在这里。
制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 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).