Siga na ordem, de cima pra baixo. No fim você tem o ambiente pronto pra construir o PostZap — o SaaS de gestão de conteúdo: Kanban, aprovação no Telegram + link do cliente, e publicação automática.
↓ Baixar em PDFO motor que roda tudo.
# Windows
winget install OpenJS.NodeJS.LTS
# Mac
brew install node
node -v responde um número (ex. v20.x)Guarda o histórico do código e sobe pro GitHub.
# Windows
winget install Git.Git
# Mac
brew install git
git --versionO editor onde a gente trabalha (com IA embutida).
# baixe em cursor.com, instale e faça login
O agente que constrói o SaaS com você.
npm install -g @anthropic-ai/claude-code
# digite claude e faça login quando pedir
claude
claude --versionnode -v, git --version e claude --version. Se os três respondem, a base está pronta.Menos código = menos bug, menos custo, mais rápido. É um plugin do Claude Code.
claude) e envie só isto:/plugin marketplace add DietrichGebert/ponytail/plugin install ponytail@ponytail/plugin e veja o ponytail na listaVocê instala dentro do projeto (nas próximas aulas). Guarde os comandos:
npm i -D @playwright/test
npx playwright install
supabase.com → login → New project → nome postzap → guarde a senha do banco → Create. Depois vá em Project Settings → API e copie:
| No Supabase | Vira no .env |
|---|---|
| Project URL | NEXT_PUBLIC_SUPABASE_URL |
| anon public | NEXT_PUBLIC_SUPABASE_ANON_KEY |
| service_role (secreta!) | SUPABASE_SERVICE_ROLE_KEY |
app.upload-post.com → entre com e-mail ou Google → copie a API Key → UPLOAD_POST_API_KEY.
/newbot → escolha um nome → um @username terminando em bot.TELEGRAM_BOT_TOKEN.node -e "console.log(crypto.randomUUID())"
Copie o valor → CRON_SECRET.
Crie um arquivo .env.local na raiz do projeto e preencha com os valores que copiou:
# Supabase
NEXT_PUBLIC_SUPABASE_URL=
NEXT_PUBLIC_SUPABASE_ANON_KEY=
SUPABASE_SERVICE_ROLE_KEY= # secreta (só no servidor)
# Agendador
CRON_SECRET=
# Upload-Post
UPLOAD_POST_API_KEY=
# Telegram
TELEGRAM_BOT_TOKEN=
# Opcionais (mock se vazio): e-mail e WhatsApp
RESEND_API_KEY=
N8N_NOTIFICACAO_WEBHOOK=
.gitignore tem .env*.O arquivo de regras que segura a IA na linha. Crie CLAUDE.md na raiz do projeto e cole:
# CLAUDE.md — Regras do projeto (PostZap)
## Stack fixa (não trocar)
Next.js + React + TypeScript + Tailwind + Supabase (Postgres + Auth + RLS) + Vercel.
## Regras que valem sempre
- Multi-tenant: cada cliente só vê os dados dele (org_id em toda tabela e query, com RLS).
- Segredos só no servidor. NUNCA usar NEXT_PUBLIC_ em chave ou token secreto.
- Nunca imprimir, logar ou commitar segredo. Nunca commitar o .env.
- Pensar antes de codar: o MENOR código que resolve (sem overengineering).
node -v, git --version e claude --version respondem/plugin)CRON_SECRET gerado.env.local montado + .gitignore com .env*CLAUDE.md colado na raiz