Open-Source Cold Email & Warmup Platform
Warmbly 是開源的冷郵件平台:溫暖您的收件箱、發送活動、並對每個回覆進行分流。可在我們的雲端運行或自行託管整個系統。
AI 翻譯
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 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).