Organizacao

← início

📐 Convenção de Organização — SAP BTP + Joule Lab

Regra de ouro: esta pasta é a fonte de verdade do projeto.
Tudo que for criado para este projeto (documentos, prints, scripts, código) entra aqui.

---

🗂️ Estrutura padrão

SAP_BTP_Joule_Lab/

├── README.md # índice geral + linha do tempo (SEMPRE atualizado)

├── docs/

│ ├── caderno_de_estudos.md # aulas: conceito → comando → lição aprendida

│ ├── joule_comandos.md # como usar a Joule (somente comandos!)

│ ├── ai_lab_app.md # doc do app de exemplo

│ ├── automacao_cdp.md # doc da automação de navegador

│ ├── organizacao.md # ESTE arquivo (a convenção)

│ └── sessoes/ # diário: uma sessão por data

│ └── AAAA-MM-DD_tema.md

├── chats/ # transcrições dos chats (para agentes)

│ └── AAAA-MM-DD_HH-MM_titulo.md

├── prints/

│ ├── destaques/ # prints-chave com nomes descritivos (NN-descricao.png)

│ ├── 01_btp_cockpit_e_booster/

│ ├── 02_build_code_lobby/

│ ├── 03_dev_space_bas/

│ ├── 04_ide_e_storyboard/

│ ├── 05_joule/

│ └── 06_troubleshooting/

├── automacao/

│ ├── cdp.mjs # automação de navegador (CDP)

│ ├── exportar_chat.py # exporta chats do OpenCode → chats/

│ └── gerar_site.py # gera ./site (publicado no Coolify)

├── site/ # site estático gerado (nginx no Coolify)

├── exemplos/ # código (ex.: exemplos/ai-lab = app CAP + IA)

└── logs/ # evidências técnicas (deploys, logins, erros)

---

✍️ Como contribuir (regras)

#Regra
1Prints novos → prints/NN_<fase>/. Se for um assunto novo, criar a próxima fase (07_...). Os mais importantes ganham cópia em prints/destaques/NN-descricao.png.
2Documentos novos → docs/. Se for aprendizado, adicionar como nova aula no caderno_de_estudos.md.
3Cada sessão de trabalho → criar/atualizar docs/sessoes/AAAA-MM-DD_<tema>.md (objetivo, feito, decisões, bloqueios, próximos passos).
4Cada sessão de chat → exportar a conversa para chats/ com python3 automacao/exportar_chat.py (ver regra abaixo).
5Código → exemplos/<nome>/ com README próprio e git inicializado.
6Logs/evidências → logs/ com prefixo numérico e descrição (01-cf-deploy-sucesso.log).
7Deploys/hospedagem → sempre no Coolify (regra abaixo), nunca deixar serviço rodando só em localhost.
8GitHub → ao final de cada sessão, git add -A && git commit && git push para o repositório do projeto (ver abaixo).
9Sempre atualizar o README.md ao final de qualquer trabalho (índice + linha do tempo).
10Nomes: minúsculas, sem acento, hífen (kebab-case); prints com número de ordem.

---

🐙 Regra do GITHUB (versionamento oficial)

Repositório: https://github.com/hugomarquesit/sap-btp-joule-lab (privado)
# autenticação já configurada via gh CLI (keyring)

gh auth status # confere

ciclo normal de publicação (ao final de cada sessão)

cd ~/Rede/vizionai/02_Business_EdTech_AI/SAP_BTP_Joule_Lab

python3 automacao/gerar_site.py # se docs/prints mudaram

git add -A &amp;&amp; git commit -m &quot;docs: &lt;resumo da sessão&gt;&quot; &amp;&amp; git push

🧼 Checklist ANTES de cada push (sanitização obrigatória)

#VerificarComo
1Tokens/chaves (ghp_, github_pat_, nvapi, sk-, Bearer, Coolify)`grep -rnoE 'ghp_[A-Za-z0-9]{10,}github_pat_nvapi-[A-Za-z0-9]{10,}Bearer [A-Za-z0-9]\{12,\}' . --exclude-dir=.git`
2Códigos temporários (device codes, passcodes SSO)O exportador já sanitiza (automacao/exportar_chat.py); conferir com grep -rE '[0-9A-F]{4}-[0-9A-F]{4}' chats/
3Prints❌ NUNCA subir capturas da tela do usuário (desktop, outros apps). ✅ Só prints da área da página, sem a barra de abas do navegador (recortar o topo).
4Dados pessoaisMinimizar e-mails/IPs; manter apenas o necessário para a documentação
5HistóricoSe algo sensível já foi commitado, recriar o repositório (não basta um novo commit!)
💡 O exportar_chat.py aplica a sanitização automaticamente na geração do Markdown.

---

💬 Regra do CHAT (histórico para agentes)

Toda conversa de chat deste projeto deve ser exportada para chats/.
# exporta a sessão mais recente do OpenCode

python3 automacao/exportar_chat.py

ou uma sessão específica

python3 automacao/exportar_chat.py ses_xxxxxxxx

listar sessões

python3 automacao/exportar_chat.py --list

Markdown legível (usuário + assistente + ferramentas em bloco recolhível)

e salva em chats/AAAA-MM-DD_HH-MM_titulo.md.

conversado, decidido e executado — sem depender do histórico local do OpenCode.

---

🚀 Regra do COOLIFY (deploy oficial)

Premissa (pasta 00_Startup_Infrastructure): tudo roda no Coolify v4
(192.168.15.4:8000). Nada de serviço "solto" em localhost.
RegraDetalhe
Projeto isoladoEste projeto tem o seu próprio Project no Coolify: SAP BTP Joule Lab (71bn6ggpai5hcv67vta9nw2j)
Nunca docker compose upContainers manuais ficam "invisíveis" no painel e conflitam portas
Como criarAPI do Coolify (/api/v1/...) com o token do MCP, ou colando o Compose na UI
Domíniohttps://sap-lab.visionai.com.br (Traefik + SSL; DNS wildcard já existe)
Sem expor portasUsar labels/rede coolify; não mapear portas no host
Arquivos do servidorA pasta ~/Rede/vizionai/... desta máquina é /home/hugo/vizionai/... no servidor

Exemplo aplicado (site de docs):

API=http://192.168.15.4:8000/api/v1   # token: ver config do MCP do Coolify

1) projeto

curl -s -X POST &quot;$API/projects&quot; -H &quot;Authorization: Bearer $TOKEN&quot; -H &#x27;Content-Type: application/json&#x27; \

-d &#x27;{&quot;name&quot;:&quot;SAP BTP Joule Lab&quot;,&quot;description&quot;:&quot;Lab SAP BTP + Build Code + Joule&quot;}&#x27;

2) aplicação (imagem nginx)

curl -s -X POST &quot;$API/applications/dockerimage&quot; -H &quot;Authorization: Bearer $TOKEN&quot; -H &#x27;Content-Type: application/json&#x27; \

-d &#x27;{&quot;project_uuid&quot;:&quot;&lt;proj&gt;&quot;,&quot;server_uuid&quot;:&quot;&lt;srv&gt;&quot;,&quot;environment_name&quot;:&quot;production&quot;,

&quot;docker_registry_image_name&quot;:&quot;nginx&quot;,&quot;docker_registry_image_tag&quot;:&quot;alpine&quot;,

&quot;name&quot;:&quot;sap-joule-lab-docs&quot;,&quot;ports_exposes&quot;:&quot;80&quot;}&#x27;

3) domínio + volume + deploy

curl -s -X PATCH &quot;$API/applications/&lt;app&gt;&quot; ... -d &#x27;{&quot;domains&quot;:&quot;https://sap-lab.visionai.com.br&quot;}&#x27;

curl -s -X POST &quot;$API/applications/&lt;app&gt;/storages&quot; ... -d &#x27;{&quot;type&quot;:&quot;file&quot;,&quot;is_directory&quot;:true,

&quot;fs_path&quot;:&quot;/home/hugo/vizionai/.../site&quot;,&quot;mount_path&quot;:&quot;/usr/share/nginx/html&quot;}&#x27;

curl -s -X POST &quot;$API/deploy?uuid=&lt;app&gt;&quot; -H &quot;Authorization: Bearer $TOKEN&quot;

Publicar o site depois de atualizar docs/prints:

python3 automacao/gerar_site.py   # regenera ./site (docs em HTML + galeria)

depois, no Coolify: redeploy da aplicação (ou via API /deploy)

---

📖 Regras de conteúdo

---

🔗 Relacionamento com o resto da VisionAI

e atualizar o INDICE.md do ecossistema.