Bom dia, Lucas.
Hora de mais um dia de treino.
Meta: 2 horas por dia, divididas em 2 sessões de 1h. Cada sessão tem 4 blocos de 15 minutos. Comece pela Sessão 1.
Treino de fala e memória
4 blocos de 15 minutos. Faça na ordem. Não pule nenhum.
2. Escreva 5 frases usando palavras diferentes. Não precisa ser perfeito — tente.
3. Escreva uma frase se apresentando em inglês. Exemplo: "My name is Lucas. I am a developer from Brazil. I want to work at Salesforge."
4. Repita em voz alta tudo que você escreveu. Fale devagar, palavra por palavra.
Treino de gramática e escrita
4 blocos de 15 minutos. Faça depois da Sessão 1, com pelo menos 2h de intervalo.
2. Escreva 1 frase que você quer usar amanhã.
3. Fale em voz alta: "I studied English today. Tomorrow I will study again." (repita 5 vezes)
✅ Marque as duas sessões como concluídas no Início.
→ "H" — aspirado sempre: have, here, how
→ "R" — sem rolar: revenue, reach, rate
→ Consoante final — não corta: product, report
→ "V" — vibra os lábios: very, value, version
→ Outreach: OWT-reech
→ Pipeline: PIE-lain
→ Churn: CHURN
→ Sequence: SEE-kwens
- Suits — inglês corporativo
- Silicon Valley — vocab de startup
- The Office (EUA) — reuniões e trabalho
- WeCrashed — sales, pitch, fundadores
- 30 Minutes to President's Club
- Sales Hacker Podcast
- My First Million
- English Learning for Curious Minds
- Ed Sheeran — pronúncia clara
- Taylor Swift — inglês conversacional
- John Mayer — americano relaxado
- Coldplay — boa pra treinar ouvido
- Blog da Salesforge — salesforge.ai/blog
- Sales Hacker newsletter
- LinkedIn do time da Salesforge
- Vagas em inglês no site deles
Fora do app = input passivo (volume, imersão, exposição).
Meta: 60 min no app + 60 min fora = 2h totais por dia.
Terminal & Linux
O terminal é o volante de tudo que você vai aprender. Sem ele, você não faz SSH, não lê logs, não instala nada num servidor. Aprenda como se aprende a dirigir: praticando.
mkdir nome-da-pasta e a pasta aparece.2. Digite pwd e aperte Enter — mostra em qual pasta você está
3. Digite ls e aperte Enter — lista os arquivos da pasta atual
4. Digite whoami e aperte Enter — mostra seu nome de usuário
cd .. # volta uma pasta acima
cd ~ # vai pra pasta Home (sua pasta principal)
ls -la # lista TUDO, incluindo arquivos ocultos
pwd # mostra onde você está agora
2. Digite cd Desktop → você está no Desktop
3. Digite ls → veja os arquivos do seu Desktop pelo terminal
4. Digite cd .. → voltou pra pasta anterior
5. Tente chegar na pasta de Documentos só com cd
touch arquivo.txt # cria um arquivo vazio
cp arquivo.txt copia.txt # copia um arquivo
mv arquivo.txt nova-pasta/ # move ou renomeia
rm arquivo.txt # deleta (CUIDADO — sem lixeira!)
cat arquivo.txt # mostra o conteúdo de um arquivo
2. Dentro dela, crie um arquivo teste.txt
3. Use cat teste.txt pra ver o conteúdo (vazio)
4. Use echo "Meu primeiro arquivo" > teste.txt
5. Use cat teste.txt de novo — agora tem conteúdo
kill 1234 # mata o processo com ID 1234
top # monitor em tempo real (q pra sair)
sudo comando # executa como administrador
chmod +x script.sh # dá permissão de execução pra um arquivo
2. Aperte q pra sair
3. Digite ps aux | grep node — filtra só processos Node.js
4. Entenda: o símbolo | (pipe) conecta a saída de um comando na entrada do próximo
tail -100 arquivo.log # últimas 100 linhas
grep "ERROR" arquivo.log # filtra só as linhas com ERROR
grep -n "erro" arquivo.log # mostra o número da linha também
Error: Cannot find module './config'
Isso significa: o código está tentando importar um arquivo chamado 'config' que não existe nessa pasta. Solução: verificar se o arquivo existe com ls -la e ver se o caminho está certo.
Treino: abra o Console do Mac (Aplicativos → Utilitários → Console) e observe os logs do sistema.
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
brew install node # instala Node.js
brew install git # instala Git
brew list # lista o que está instalado
2. Depois instale o Node.js: brew install node
3. Verifique: node --version — deve aparecer a versão
4. Verifique: npm --version — gerenciador de pacotes do Node
Parabéns — você acabou de instalar seu primeiro programa pelo terminal.
Seção "Command Line" do freeCodeCamp — freecodecamp.org
Pratique 15 min por dia no terminal antes de qualquer outra coisa.
Ler código JavaScript
Você não vai escrever código do zero. Vai ler o que o Claude gera e entender o que está acontecendo. É a diferença entre ser usuário e ser engenheiro.
const userId = "abc123", leia como: "crie uma caixa chamada userId e coloque 'abc123' dentro."const nome = "Lucas" # não muda nunca
let contador = 0 # pode mudar
var antigo = true # modo antigo, evite
// Tipos de valor:
const texto = "olá" # string (texto)
const numero = 42 # number
const ativo = true # boolean (verdadeiro/falso)
const lista = [1, 2, 3] # array (lista)
const obj = {nome: "Lucas"} # objeto (conjunto de dados)
const clienteId = req.body.id;
const nome = req.body.nome;
const ativo = true;
const dados = { clienteId, nome, ativo };Resposta esperada: pega o ID e nome que vieram na requisição, define que está ativo, e junta tudo num objeto chamado dados.
async function, significa que essa função vai esperar por algo antes de continuar — normalmente uma chamada de API ou banco de dados.function saudacao(nome) {
return "Olá, " + nome;
}
// Função assíncrona (a mais comum em sistemas):
async function buscarCliente(id) {
const cliente = await db.query(id);
return cliente;
}
Significa: você usou
await dentro de uma função que não foi declarada como async. A correção é adicionar async antes de function. Você conseguiria dizer isso pro Claude agora sem precisar copiar o erro inteiro.{
"type": "message",
"phone": "5548999998888",
"body": "Quero marcar consulta",
"fromMe": false,
"isGroup": false
}
// Para acessar o número de telefone:
const telefone = dados.phone; # "5548999998888"
const mensagem = dados.body; # "Quero marcar consulta"
TypeError: Cannot read properties of undefined (reading 'id')
at processWebhook (webhook.js:47:23)
at async handler (index.js:12:5)
// Tradução:
# Tipo: TypeError (problema de tipo/valor)
# O que: tentou ler '.id' de algo que é undefined
# Onde: linha 47 do arquivo webhook.js, coluna 23
console.log("Dados:", dados) # mostra o valor de 'dados'
console.log("Tipo:", typeof dados) # mostra o tipo (string, object, etc)
console.error("Erro:", error.message) # loga um erro
1. Peça pro Claude adicionar console.log() antes de cada linha importante
2. Rode o código e veja o que aparece no terminal
3. A linha onde o log para de aparecer é onde o problema está
4. Diga pro Claude exatamente onde parou e o que o último log mostrou
SSH & VPS
SSH é como você entra num servidor remoto pelo terminal. VPS é o servidor que fica rodando 24/7 na nuvem. Juntos, permitem que você hospede qualquer sistema sem depender de plataformas como Cloudflare.
Hetzner — hetzner.com — €3-6/mês. Mais barato, muito bom.
Contabo — contabo.com — barato e com suporte em PT.
Plano inicial: 1 CPU, 1-2GB RAM, 25GB SSD. Suficiente pra rodar o OpenClaw e vários sistemas dos seus clientes.
ssh root@123.456.789.0
# Se tiver uma chave SSH:
ssh -i ~/.ssh/minha-chave root@123.456.789.0
# Copiar arquivo do seu Mac pro servidor:
scp arquivo.txt root@123.456.789.0:/home/
# Sair do servidor:
exit
2. Anote o IP e a senha root que eles mandam por email
3. No terminal do seu Mac: ssh root@SEU-IP
4. Digite a senha quando pedir
5. Você está dentro do servidor — parabéns
6. Atualize tudo: apt update && apt upgrade -y
7. Instale o Node: curl -fsSL https://deb.nodesource.com/setup_lts.x | bash - && apt install -y nodejs
pm2 start app.js # inicia o programa
pm2 start app.js --name meu-sistema # com nome
pm2 list # lista o que está rodando
pm2 logs # lê os logs em tempo real
pm2 restart meu-sistema # reinicia
pm2 stop meu-sistema # para
pm2 startup # faz o PM2 iniciar com o servidor
nano .env
# Conteúdo do .env:
SUPABASE_KEY=sua-chave-aqui
CLAUDE_API_KEY=sk-ant-...
ZAPI_TOKEN=seu-token
PORT=3000
# No código, acessar com:
process.env.SUPABASE_KEY
process.env.CLAUDE_API_KEY
APIs & Webhooks
Você já usa APIs e webhooks hoje — só não sabe o que está acontecendo por baixo. Entender isso te permite diagnosticar qualquer problema de integração sem depender de ninguém.
POST https://api.z-api.io/instances/SEU-ID/token/TOKEN/send-text
# Cabeçalhos (headers) — identificação:
Content-Type: application/json
Client-Token: SEU-TOKEN
# Corpo (body) — o que você está pedindo:
{
"phone": "5548999998888",
"message": "Olá! Sua consulta foi confirmada."
}
200 — funcionou
400 — você enviou dados errados (problema no seu código)
401 — autenticação falhou (token errado ou expirado)
404 — endpoint não existe (URL errada)
429 — muitas requisições (rate limit atingido)
500 — erro no servidor da API (problema deles, não seu)
Próxima vez que uma integração falhar, antes de perguntar pro Claude, veja qual código de status voltou.
app.post('/webhook', async (req, res) => {
const mensagem = req.body; # dados que chegaram
console.log("Chegou:", mensagem); # ver o que veio
res.json({ status: 'ok' }); # confirmar recebimento
});
2. Rode: ngrok http 3000
3. Copie a URL pública que aparece (ex: https://abc123.ngrok.io)
4. Configure essa URL no Z-API como destino do webhook
5. Mande uma mensagem no WhatsApp e veja o payload chegar no terminal
Authorization: Bearer sk-ant-api03-...
# API Key como parâmetro:
https://api.exemplo.com/dados?api_key=SUA-CHAVE
# Token de sessão (após login):
Authorization: Bearer eyJhbGc...(JWT token)
# Como fica no código:
headers: {
'Authorization': 'Bearer ' + process.env.API_KEY,
'Content-Type': 'application/json'
}
OpenClaw
OpenClaw é o framework de agente de IA mais poderoso disponível hoje. Ele conecta Claude, GPT ou Gemini ao seu computador, email, calendário e WhatsApp — e executa tarefas de forma autônoma.
npm install -g openclaw@latest
# 2. Iniciar o setup:
openclaw onboard
# 3. O setup vai perguntar:
# - Qual modelo de IA usar (Claude, GPT, Gemini)
# - Sua API key do modelo escolhido
# - Qual app de chat usar (Telegram é mais fácil)
# 4. Abrir a interface web:
# http://localhost:18789
# 5. Verificar status:
openclaw gateway status
2. Instale o OpenClaw: npm install -g openclaw@latest
3. Rode: openclaw onboard --install-daemon
4. Quando pedir API key, use sua chave do Claude (começa com sk-ant-)
5. Quando pedir canal de chat, escolha Telegram — crie um bot em @BotFather
6. Abra http://localhost:18789 no navegador — interface do OpenClaw
7. Mande "hello" pro seu bot no Telegram
8. Se responder, funcionou
Sistema Gabriel Serrano: Monitora pagamentos vencidos → manda lembrete automático → relatório financeiro toda segunda no WhatsApp do Gabriel.
Clivia estúdio: Confirmação automática de agendamento → lembrete 24h antes → se cancelar, libera o horário e avisa a agenda.
Você como freelancer: Todo dia de manhã recebe no Telegram: "Você tem 3 tarefas abertas. Gabriel tem pagamento vencendo amanhã. Neto pediu alteração." Sem abrir nada.
Documentação: docs.openclaw.ai
GitHub (código): github.com/openclaw/openclaw
Comunidade: Discord do OpenClaw (link no site)
Skills (extensões): ClawHub — catálogo de skills prontas
Regra 2: Revise toda skill antes de instalar — skills maliciosas existem no ClawHub.
Regra 3: Use variáveis de ambiente pra API keys. Nunca coloque chaves no código ou na interface do OpenClaw sem checar onde são armazenadas.
Pipeline & Vendas
As métricas que definem se o motor de vendas está funcionando. Um GTM Engineer monitora essas todo dia — e sabe o que fazer quando qualquer uma sai do benchmark.
Métricas de Outbound
Específicas de cold email e prospecção ativa. É aqui que a Salesforge vive. Dominar essas métricas é dominar o core do negócio.
Receita & Retenção
As métricas que aparecem em reuniões de liderança e definem a saúde real do negócio. Todo AI Solutions Engineer em SaaS precisa dominar essas.
Aquisição & CAC
Quanto custa trazer e manter cada cliente. A relação entre CAC e LTV é a métrica mais importante de sustentabilidade de qualquer SaaS.
Produto & Ativação
Métricas que mostram se o cliente está usando o produto de verdade. São os primeiros sinais de churn — antes de ele sair, aparecem aqui.
GTM como Sistema
As métricas que separam quem opera de quem estrategiza. Um GTM Engineer de verdade pensa em todo o sistema, não só em partes isoladas.