Doop
Doop is an open-source multiplayer design canvas and design MCP for Claude Code, Codex, and any AI agent. Design side by side with agents — free in beta.
Programa BIM brasileiro com renderizador próprio, apresentação ao cliente por link e CRM: do primeiro contato ao projeto aprovado. Grátis, com versão PRO.
Translation pending
DesignGitHub @arquionieOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Repository information has not been collected yet.
No updates detected yet. GitHub releases will appear here.
Site do Arquionie: início, baixar, conta por e-mail e Google, versões
Translation pending
Taken from the repository README
Loading the full README.
Read the full README ↗O site do Palheta Arquionie™ em arquionie.com.br: página inicial, BAIXAR, criar conta, entrar (e-mail e senha ou
Google), confirmar o e-mail e trocar a senha por código de 6 dígitos, minha conta, versões, termos e privacidade.
Decisões e proposta: docs/57-DISTRIBUICAO-CONTA-E-ATUALIZACAO.md e docs/DECISOES.md (02/10/2026) no repositório do
Arquionie; telas no mockup aprovado docs/mockups/conta-e-atualizacao.html.
npm install
npm run dev # http://localhost:5173
npm run build # gera dist/
Publicação pela Vercel, ligada ao repositório na organização arquionie do GitHub: framework Vite, comando
npm run build, saída dist. Plano Hobby enquanto se monta; Pro na abertura ao público.
O site usa o modo AMIGÁVEL do sistema de design do Arquionie (ÊDI, 16/10/2026; mockup docs/mockups/site-amigavel no
repositório do programa): claro de fábrica, com Escuro e Automático em Minha conta › Aparência, a letra do aparelho, cápsulas e
cartões. O /gestao também (mockup docs/mockups/gestao-amigavel, aprovado no mesmo dia).
src/tokens/ (tokens.css e tailwind-preset.cjs), que não se editam
aqui. A fonte é design/tokens/tokens.json no repositório do programa:
python ferramentas/tokens/gerar_tokens.py
node ferramentas/tokens/copiar-para-o-site.mjs
(os dois rodam na pasta do repositório do programa).bg-superficie, rounded-toque, h-amg-altura-campo, text-amg-titulo). Se faltar um papel,
ele entra no tokens.json.components/Formulario.jsx (botões nos três níveis, campos, etiquetas), components/Listas.jsx (listas agrupadas) e
components/Cartao.jsx (as telas de conta); as do /gestao, em components/GestaoPecas.jsx.public/apresentacao, o /t/CÓDIGO) também está no amigável (ÊDI, 20/10/2026; mockup
docs/mockups/pagina-do-cliente-amigavel no repositório do programa). Ela fica fora do Vite e leva a sua cópia do tokens.css
(public/apresentacao/tokens.css, posta pelo mesmo copiar-para-o-site.mjs). O tema segue o aparelho do cliente; a cor do escritório
vai nos botões, escurecida só o necessário para o texto branco (numa cor clara, a exata com o texto escuro), e nos alfinetes do tour.
O tour, dentro dela, lê da página as cores, a letra e a cor do escritório (22/10/2026): no computador, as peças soltas, sem a barra.O npm run build faz três passos: o site (vite build), o código que desenha as páginas (vite build --ssr src/prerender.jsx) e
ferramentas/gerar-paginas.mjs, que escreve no dist:
/, /baixar, /para-revit (o Arquionie™ para Revit, antigo Palheta Flow) e /versoes, com o texto já desenhado pelos mesmos componentes e o <head> de
cada uma (título, descrição, canônico, Open Graph e os dados estruturados do schema.org: o programa, a Palheta Arquitetura e as
perguntas frequentes). Os robôs das IAs (GPTBot, ClaudeBot, PerplexityBot) não rodam JavaScript: sem isso, viam a página vazia.
No navegador, o main.jsx só liga os botões no que já veio.app.html — a casca vazia, com noindex, que atende a conta, o Comercial, a gestão e as páginas do cliente.sitemap.xml e llms.txt (o resumo em Markdown para as IAs, com os textos de src/conteudo/inicio.js).O public/robots.txt deixa as páginas públicas abertas a todos os robôs, inclusive os das IAs, e fecha a conta e as páginas do
cliente. Os títulos e as descrições ficam em src/lib/seo.js.
publica: true em PAGINAS (src/lib/seo.js) e o rewrite dela no vercel.json, antes do /(.*). O build
para com um aviso se faltar o rewrite.arquionie.com.br/bio é o link da bio do @arquionie. Um redirect temporário (307) no
vercel.json leva ao cadastro com a volta para o Comercial e a marca da bio. Quando a página /comercial for ao ar, só o destino muda
para /comercial?de=bio; o link do Instagram fica o mesmo.src/conteudo/inicio.js: a tela, o llms.txt e as perguntas dos dados estruturados leem dali.npm run build e npm run preview (ferramentas/servir-pronto.mjs, que segue o vercel.json
como a Vercel; o vite preview entrega a página inicial em toda rota).vercel.json manda o nosniff em tudo e impede que outro site ponha as
páginas num quadro (frame-ancestors 'self'), menos o /t/ e o /tour/, que um escritório pode embutir. A sessão da conta fica no
navegador, na origem do site: o que vem do escritório ou do pacote do tour entra na tela como texto (nunca como HTML), e o
?envio=, o ?pacote= e o ?prova= só aceitam endereços do próprio site ou do tours.arquionie.com.br.dist do Vite). Nada de Next.js, funções, banco, armazenamento ou imagens da
Vercel; o vercel.json só aponta cada rota para o seu arquivo (as páginas prontas e a app.html). Trocar de hospedagem é publicar a mesma pasta
noutro lugar e mudar um registro de DNS.src/config.js só tem o que é público: o endereço do projeto e a chave publicável. A chave secreta do Supabase,
a chave secreta do Google, a do Resend e os tokens nunca entram aqui nem no repositório.arquionie, São Paulo)Configurações feitas no painel, em ordem:
Authentication › URL Configuration — Site URL https://arquionie.com.br; Redirect URLs
http://localhost:5173/** e https://arquionie.com.br/** (a da Vercel entra quando o projeto existir).
Authentication › Sign In / Providers › Email — confirmação do e-mail ligada, senha mínima de 8 caracteres, código de 6 dígitos válido por 3600 segundos. Google ligado com o cliente Web do projeto Arquionie no Google Cloud.
Authentication › Emails › Templates (só depois do SMTP próprio: sem ele o Supabase não deixa editar os modelos, e o
e-mail padrão traz um link em inglês, que o site também aceita) — Confirm signup com supabase/templates/confirmar-cadastro.html (assunto
"Seu código do Arquionie™") e Reset password com supabase/templates/recuperar-senha.html (assunto "Nova senha do
Arquionie™"). Os modelos trazem o código ({{ .Token }}), que o site confirma com verifyOtp.
SQL Editor — rodar supabase/migrations/20261003000000_perfis_e_computadores.sql uma vez (perfis espelhando o
cadastro e computadores conectados, com as regras de acesso).
Depois, supabase/migrations/20261003010000_contador_de_downloads.sql (cada clique em BAIXAR e o total público).
Depois do DNS — SMTP próprio pelo Resend ([email protected]). Até lá, o envio embutido do Supabase só
manda e-mail para quem é membro da organização no Supabase e poucos por hora: serve para testar com o e-mail do
Arquionie, não para os colaboradores.
Licenças e conexão pelo navegador (plano 17 do repositório do plugin, 05/10/2026; o programa e o plugin do Revit):
supabase/migrations/20261005010000_licencas_e_conexao_pelo_navegador.sql. Ela já inclui o
que a 20261005000000_registrar_computador.sql faz, com os computadores separados por produto. Por isso a
20261005000000 nunca roda depois dela: recriaria o índice antigo e misturaria o programa com o plugin.
Pode rodar duas vezes sem estragar nada.node supabase/ferramentas/gerar-chave-da-licenca.mjs.
LICENCA_CHAVE_PRIVADA.supabase/functions/licenca-chave-publica.txt e vai para o programa e o plugin.20261016000000_compra_do_pro.sql do item 11, que ainda não tinha rodado (o Comercial vem depois dela); depois, a
20261017000000_comercial.sql. Conferido: comercial_formulario_abrir('ZZZZ') responde inexistente.Arquionie Comercial (os dois domínios, Managed). A chave secreta foi trocada (Rotate) logo depois de criada, porque
apareceu numa foto da tela; a pública está no src/config.js.PUT. Conferido: a consulta prévia de www.arquionie.com.br recebe GET, HEAD, PUT.TURNSTILE_SEGREDO, COMERCIAL_SAL e COMERCIAL_TAREFA_SEGREDO, pelo CLI com a chave temporária, conferidos pelo resumo
(fddf569a…, 556b2bac… e d953ccb0…); os outros ficaram como estavam.comercial (--no-verify-jwt --use-api). Conferido: a tarefa recusa quem não tem o segredo e roda com ele; um pedido com
o Turnstile falso é recusado.comercial-diaria, 0 6 * * *, pelo SQL Editor (cron.schedule com o net.http_post), ativa ao lado da
enviar-campanhas e da limpar-apresentacoes-vencidas.comercial juntada na main e o git push, com as páginas prontas do SEO (seção "SEO e GEO").A página /comercial, a origem de cada conta e o designer de interiores (branch pagina-comercial; mockup
docs/mockups/pagina-comercial do repositório do programa, aprovado por ÊDI em 19/10/2026; passos 3 e 4 da configuração do anúncio).
Ainda não publicado. Só com o ÊDI, nesta ordem:
SQL Editor: rodar supabase/migrations/20261019010000_origem_da_conta.sql (pode rodar duas vezes) antes do site: o cadastro
passa a mandar designer na atuação, que a regra antiga recusa, e a conta não nasceria.
Teste local: node supabase/testes/origem.test.mjs (21 conferências: a primeira origem fica, a limpeza do que vem do navegador,
o Google no primeiro acesso, o designer e o quadro CONTAS POR ORIGEM do /gestao).
Site: juntar a pagina-comercial e o git push. Conferir https://www.arquionie.com.br/comercial e, no /gestao, o quadro
CONTAS POR ORIGEM.
O que muda: a página /comercial (pronta para o Google), a aba Comercial para todos, o selo "Feito com Arquionie" levando a
/comercial?de=selo, a origem da primeira visita guardada no navegador por 30 dias (src/lib/origem.js) e mandada no cadastro, e a
proposta e o formulário do cliente sempre claros, mesmo com o site no Escuro. Para ver sem conta, no npm run dev:
/gestao?amostra=1 e /p/QX7M2KAB?amostra.
O painel com menu lateral, a proposta passo a passo e a aula do Nie (branch comercial, de 19 e 20/10/2026, junto com o item 13
na branch publicar-comercial). Ainda não publicado. Só com o ÊDI, nesta ordem:
SQL Editor: rodar supabase/migrations/20261019000000_comercial_proposta_passo_a_passo.sql (pode rodar duas vezes; junto com a
do item 13, as duas num texto só). Ela troca os preços de fábrica: honorários de 3% da obra, o texto sobre o escritório e as
condições da proposta. Quem já ajustou os preços fica como está. Conferir: select public.comercial_precos_de_fabrica()->>'honorarios'
responde 3.
Teste local: node supabase/testes/comercial.test.mjs (98 conferências) com todas as migrações.
Site: juntar a publicar-comercial na main e o git push. Conferir (o menu lateral, o
Início e o Programa) e, com uma conta nova, o primeiro acesso do Comercial com VEJA COMO FUNCIONA, a aula do Nie.
O que muda: o painel no jeito de sistema (menu lateral em pílulas que se abre com os nomes, o Início, o Programa, a aparência num botão
próprio); a SUA PROPOSTA passo a passo (a marca com a cor e a logo, os preços, os pacotes, o pagamento, as palavras e a prévia), também
no primeiro acesso; a proposta completa para o cliente; o /comprar pelo WhatsApp; e a aula "Comercial · primeiros passos", narrada pelo
Nie, pública no canal @arquionie. O modo de aula () só existe no .
public/imagens); faltam
imagens com a marca nova de planta, corte, elétrica e IA. As dos carros usam modelos baixados (Sketchfab): para o site
público, trocar por amostras só com peças nossas.https://baixar.arquionie.com.br/estavel/versao.json (com CORS
liberado para arquionie.com.br); sem ele, a página diz que a versão está sendo preparada.LICENCA_CHAVE_PRIVADA, e a privada de 07/10 se perdeu (o Supabase não mostra o valor). Par novo gerado pelo ÊDI
com --substituir; conferido pelo resumo SHA-256 (o da página bate com o da chave gerada). Nenhum programa tinha a
pública antiga, então nada mais muda. Para colar um segredo, só a área de cima da página, nunca o menu de uma linha.conectar e licenca: publicar o index.ts de cada uma com a verificação de JWT desligada,
porque quem chama é o programa, sem conta ainda. Pelo painel (Edge Functions › Deploy a new function › Via
editor) ou pelo CLI: npx supabase functions deploy conectar --project-ref sowazotriildoeaxbhkl --no-verify-jwt,
e o mesmo para licenca.npm i --no-save @electric-sql/pglite e depois
node supabase/testes/funcoes.test.mjs (roda também o teste do banco)./conectar, onde a pessoa autoriza o computador;/gestao › LICENÇAS (/gestao#licencas).
Para conferir sem conta, no npm run dev, abrir com ?amostra na URL. Ex.:
/conectar?codigo=KMTR-4QPX&amostra=limite (também aguardando, vencida, cancelada, inexistente),
/conta?amostra=1#licencas e /gestao?amostra=1#licencas. Fora do servidor de desenvolvimento, o ?amostra não
faz nada.node supabase/testes/no-ar.mjs faz o papel do plugin e
mostra um link. Abrir o link, entrar com a conta e clicar AUTORIZAR. O teste confere a ficha com a chave
pública, renova e sai, e o computador de teste some da conta. Rodado em 07/10/2026 com a conta do ÊDI: tudo
certo.Tours no link (o tour do passeio no celular do cliente; mockup docs/mockups/tour-no-link.html do repositório do
programa, aprovado por ÊDI em 10/10/2026). Só com o ÊDI, uma vez, nesta ordem:
arquionie-tours (separado do arquionie-downloads: a chave da função só alcança os tours). Em
Settings › Public access › Custom Domains, ligar tours.arquionie.com.br (o domínio já está na Cloudflare).[{"AllowedOrigins":["https://www.arquionie.com.br","https://arquionie.com.br"],"AllowedMethods":["GET","HEAD"],"AllowedHeaders":["*"],"MaxAgeSeconds":86400}].arquionie-tours. Guardar o Access
Key ID e o Secret Access Key.R2_CONTA (o Account ID da Cloudflare, o mesmo do ARQUIONIE_R2_CONTA),
R2_CHAVE (o Access Key ID) e R2_SEGREDO (o Secret Access Key).supabase/migrations/20261010000000_tours.sql (pode rodar duas vezes).tours: publicar com a verificação de JWT ligada (quem chama tem conta):
npx supabase functions deploy tours --project-ref sowazotriildoeaxbhkl.node supabase/testes/tours.test.mjs (confere também a assinatura
do R2 pelos exemplos da AWS)./conta?amostra=1#tours no npm run dev) e a página do cliente em /t/CÓDIGO
(public/tour, copiada do repositório do programa por node ferramentas/tour/copiar-para-o-site.mjs).
Durante o lançamento, o tour fica liberado para toda conta (ajustes_tours.livres_no_lancamento); o limite é de 20
publicados por conta (ajustes_tours.limite).
Publicado em 11/10/2026, com o ÊDI, junto com o item 8: o bucket com o domínio (ativo) e o CORS (conferido: libera
www.arquionie.com.br e recusa outra origem), o token do R2 só nesse bucket, os três segredos do R2, a migração no SQL
Editor (conferido: tour_abrir('ZZZZZZ') responde inexistente e a tabela recusa o anon) e a função tours.ENVIAR PARA O CLIENTE (a página do cliente em /t/CÓDIGO: o vídeo, o tour e as imagens, SOLICITAR AJUSTES e APROVAR O
PROJETO; mockup docs/mockups/enviar-para-o-cliente.html e contrato no doc 65 do repositório do programa, aprovados por ÊDI em
11/10/2026). Usa o bucket e os segredos do R2 do item 7. Só com o ÊDI, uma vez, nesta ordem:
supabase/migrations/20261011000000_apresentacoes.sql (depois da dos tours; pode rodar duas vezes).LIMPEZA_SEGREDO (uma senha longa qualquer, só para a tarefa diária) e
RESEND_API_KEY (no Resend, uma chave que só envia, do domínio arquionie.com.br: o aviso por e-mail ao escritório quando o
cliente pede ajustes ou aprova; sem ela, o aviso fica só no programa). Opcional: AVISO_DE (de fábrica,
Arquionie <[email protected]>).npx supabase functions deploy apresentacoes --project-ref sowazotriildoeaxbhkl (com a verificação de JWT ligada: quem
chama é o programa, com a conta) e npx supabase functions deploy cliente --no-verify-jwt --project-ref sowazotriildoeaxbhkl (sem
conta: é a página do cliente). As duas levam junto a pasta supabase/functions/_compartilhado.POST https://sowazotriildoeaxbhkl.supabase.co/functions/v1/cliente, cabeçalho x-limpeza com o LIMPEZA_SEGREDO e corpo
{"acao":"limpar"} (os envios vencidos, um ano depois, saem do R2; a página diz que o material expirou).node supabase/testes/apresentacoes.test.mjs (o banco num Postgres local, o R2
e o Resend de mentira).public/apresentacao/index.html?prova=PASTA, com o envio de prova montado por
node ferramentas/apresentacao/envio-de-prova.mjs do repositório do programa (o abrir.json e os arquivos pela impressão).
O /t/CÓDIGO passa a abrir public/apresentacao (o vercel.json); o código de um tour de antes (item 7) vai para a página do tour.
O tour dentro da página é o public/tour (com a maquete.js), copiado por node ferramentas/tour/copiar-para-o-site.mjs.
Publicado em 11/10/2026, com o ÊDI (roteiro docs/roteiros/publicar-o-enviar-para-o-cliente.md do repositório do programa):20261011000000_apresentacoes.sql, depois da dos tours. Conferido sem gravar nada:
apresentacao_situacao('ZZZZZZ') responde inexistente; as tabelas e a apresentacao_vencidas recusam o anon.LIMPEZA_SEGREDO. A RESEND_API_KEY não foi criada, por decisão do ÊDI (11/10/2026): o suporte@ é o
suporte do software, não um canal entre o escritório e o cliente dele, e as respostas do cliente aparecem no programa, ao
abrir o projeto (etapa 4 do doc 65). Sem a chave, a função cliente não manda e-mail.tours, apresentacoes e cliente (esta com --no-verify-jwt), por npx supabase functions deploy … --use-api (sem Docker) com uma chave de acesso temporária do Supabase: o login do CLI neste computador é o da conta da
Palheta, que não enxerga o projeto arquionie. Conferido: tours e apresentacoes recusam quem não tem conta; cliente
atende sem conta e recusa o limpar sem o segredo.pg_cron e pg_net ligadas; a tarefa limpar-apresentacoes-vencidas, 0 6 * * * (o
relógio do Supabase é UTC: 3h em Brasília), POST na função cliente com o cabeçalho x-limpeza e o corpo
{"acao":"limpar"}. Rodada à mão às 12h12: a função respondeu 200.git push dos 7 commits que esperavam (até 4260ec1). Conferido: https://www.arquionie.com.br/t/ZZZZZZ
diz "Apresentação não encontrada" e a página responde sem X-Frame-Options (o sistema Palheta pode abri-la num iframe).A EQUIPE do escritório, as APRESENTAÇÕES com os ajustes e o plano personalizado (mockups
docs/mockups/equipe-e-apresentacoes e docs/mockups/comentarios-do-cliente e o doc 65, §7, do repositório do programa, aprovados
por ÊDI em 11/10/2026). Ainda não publicado. Só com o ÊDI, uma vez, nesta ordem:
supabase/migrations/20261011010000_equipe_e_plano.sql (depois da 20261011000000_apresentacoes.sql; pode
rodar duas vezes). Ela troca a apresentacao_enviar e a minhas_apresentacoes por versões novas: rodar antes de publicar a
função apresentacoes de novo, e nunca rodar a 20261011000000 depois dela.npx supabase functions deploy apresentacoes --project-ref sowazotriildoeaxbhkl (como no item 8, com a verificação de
JWT ligada): o ENVIAR passa a aceitar o envio em nome do escritório (escritorio) e guarda quem enviou.node supabase/testes/apresentacoes.test.mjs (88 conferências, com a equipe, o feito, o lido de cada pessoa e o
pedido de plano).git push. As telas para conferir sem conta, no npm run dev: /conta?amostra=1 (a conta do responsável, com as
APRESENTAÇÕES e a EQUIPE), /conta?amostra=equipe (a área do escritório de quem é da equipe), /conta?amostra=convite (a
primeira vez), /gestao?amostra=1#pedidos (os PEDIDOS DE PLANO) e /conectar?codigo=KMTR-4QPX&amostra=limite (o quarto
computador, com o SOLICITAR PLANO PERSONALIZADO).
O que muda: MINHA CONTA ganha as abas das áreas (a MINHA ÁREA e cada escritório em que a pessoa está), o convite para confirmar, as
APRESENTAÇÕES no lugar dos TOURS (os tours de antes ficam embaixo, até vencer) e a EQUIPE; a /gestao ganha os PEDIDOS DE PLANO.
O site passa às cores novas do programa (o coral sereno, os campos nos tons dele e a terracota no botão principal; o #E76353
fica só no leão).A LICENÇA ÚNICA e a gestão que vem do Palheta Flow (plano 18 do repositório do plugin, decisões do ÊDI de 14/10/2026). Ainda não publicado. Só com o ÊDI, nesta ordem:
Teste local: node supabase/testes/gestao-flow.test.mjs (49 conferências: licença única, preços, cupons, importação do
Flow, destinatários, campanha com lotes, intervalo, limite do dia, pausa e cancelamento, descadastro, aulas e feedbacks; roda a
migração duas vezes).
SQL Editor (Arquionie): rodar supabase/migrations/20261015000000_licenca_unica_e_gestao_do_flow.sql (depois da
20261005010000; pode rodar duas vezes). A partir daí toda licença vale no programa e no plugin; os computadores continuam
três em cada um.
SQL Editor (escritório), só leitura: supabase/ferramentas/exportar-do-flow.sql gera o arquivo com preços, cupons,
cadastros, descadastros, campanhas, aulas e feedbacks do Flow. Guardar numa pasta particular. A importação entra com a tela
do /gestao (ainda por fazer, depois do mockup).
Telas (mockup aprovado em 15/10/2026): o /gestao ganha PREÇOS E CUPONS (com IMPORTAR DADOS DO FLOW), CAMPANHAS, VERSÕES E
AULAS e FEEDBACKS; o LIBERAR deixa de pedir o produto (licença única). Para conferir sem conta: /gestao?amostra=1#precos
(e #campanhas, #versoes, #feedbacks).
Funções campanhas e feedback (testadas por node supabase/testes/envio.test.mjs, 19 conferências). Só com o ÊDI:
RESEND_CAMPANHAS. Nunca com o nome RESEND_API_KEY: com esse nome a função cliente passaria a mandar e-mail
(decisão do ÊDI de 11/10/2026).npx supabase functions deploy campanhas --project-ref sowazotriildoeaxbhkl --no-verify-jwt --use-api e o mesmo
para feedback, com uma chave de acesso temporária do Supabase na variável SUPABASE_ACCESS_TOKEN do terminal dele.supabase/ferramentas/ligar-envio-das-campanhas.sql sorteia o segredo da tarefa no cofre (ninguém copia) e
agenda a enviar-campanhas a cada 5 minutos.A COMPRA DO PRO (plano 19 do repositório do plugin, docs/migracao-arkiton/19-plano-compra-do-pro.md; mockups aprovados pelo
ÊDI em 15/10/2026). Banco pronto e testado; telas ainda por fazer; nada publicado. Só com o ÊDI, nesta ordem:
Teste local: node supabase/testes/compra.test.mjs (48 conferências: o plano plugin da licença, os preços dos planos, o
formulário sem conta com o cupom só no anual, liberar, renovar, vencer, encerrar e cancelar; roda a migração duas vezes).
SQL Editor (Arquionie): rodar supabase/migrations/20261016000000_compra_do_pro.sql (depois da 20261015000000; pode rodar
duas vezes).
plugin (só o plugin); o pro continua completo. O programa ignora a plugin; o plugin recebe pro
na ficha.precos ganha os quatro valores dos planos: plugin 69 e 39, Arquionie 119 e 79 (o anual por mês).pedidos, com o formulário pedido_criar (sem conta) e as funções do /gestao.Telas, depois do banco: o quadro de preço nas duas páginas, o /comprar com COMPRAR PELO WHATSAPP (grava e leva ao
WhatsApp de vendas 5511991961580 com a mensagem pronta; se gravar falhar, leva assim mesmo) e a aba PEDIDOS em lista. As telas
que mostram o plano da licença (LICENÇAS, MINHA CONTA, /conectar) passam a escrever PLUGIN PRO para o plugin.
O /comprar (feito em 17/10/2026, não publicado): src/pages/Comprar.jsx e src/lib/compra.js. Os botões de compra da
/para-revit abrem /comprar?produto=plugin&periodo=mensal|anual&origem=revit. Link sem o período mostra o quadro do produto (sem
produto: o plugin quando origem=revit, senão o Arquionie). Para conferir sem gravar, no npm run dev:
/comprar?produto=plugin&periodo=anual&cupom=BLACK70&amostra (o pedido P-0008; a mensagem do WhatsApp aparece na tela em vez de
abrir) e &amostra=falha (a gravação que falha, sem o número do pedido).
O COMERCIAL, o CRM grátis (doc 68 e o contrato no doc 72 do repositório do programa; mockup docs/mockups/crm-gratis, aprovado
por ÊDI em 16/10/2026). Publicado em 16/10/2026, com o ÊDI (o resumo no fim deste item). Só com o ÊDI, uma vez, nesta ordem:
Teste local, sem tocar no Supabase nem no R2:
node supabase/testes/comercial.test.mjs (98 conferências: o primeiro acesso, o formulário com cada tipo de resposta, o
quadro e as regras, o orçamento, a proposta pelos três jeitos e o aceite, os ajustes, a equipe, os limites do grátis e do PRO,
o /gestao e a tarefa diária; o banco em UTC como o Supabase; roda a migração duas vezes);node supabase/testes/comercial-funcao.test.mjs (11 conferências da função: o Turnstile, o PDF e a tarefa).As telas sem conta (npm run dev): o painel em /painel/comercial?amostra (o primeiro acesso em ?amostra=novo), o
formulário do cliente em /f/LIMA-CASA?amostra, a proposta em /p/QX7M2KAB?amostra e a aba COMERCIAL do /gestao em
/gestao?amostra=1#comercial (os números do CRM e os formulários denunciados, com os motivos, VER O FORMULÁRIO e PAUSAR ou
RETOMAR com confirmação; a plaquinha da aba conta os denunciados que ainda estão no ar).
SQL Editor (Arquionie): rodar supabase/migrations/20261017000000_comercial.sql (depois da 20261016000000; pode rodar duas
vezes). Ela cria as tabelas e as funções do Comercial. Ninguém lê as tabelas direto. No lançamento, os limites do grátis ficam
desligados (ajustes_comercial.livres_no_lancamento).
Cloudflare › Turnstile › Add widget: nome Arquionie Comercial, domínios arquionie.com.br e www.arquionie.com.br, modo
Managed. A Site Key (pública) vai em TURNSTILE_CHAVE, no src/config.js. A Secret Key vai no passo 6.
R2 › arquionie-tours › Settings › CORS Policy: o PDF da proposta sobe do navegador direto para o R2, então o PUT entra
junto do GET:
[{"AllowedOrigins":["https://www.arquionie.com.br","https://arquionie.com.br"],"AllowedMethods":["GET","HEAD","PUT"],"AllowedHeaders":["*"],"MaxAgeSeconds":86400}].
O PDF fica em comercial/<pedido>/<CÓDIGO>.pdf e abre por tours.arquionie.com.br.
Supabase › Edge Functions › Secrets: TURNSTILE_SEGREDO (a Secret Key do passo 4), COMERCIAL_SAL e
COMERCIAL_TAREFA_SEGREDO (duas senhas longas quaisquer: o sal da impressão do endereço de quem manda o formulário e a senha da
tarefa diária). Os do R2 (R2_CONTA, R2_CHAVE, R2_SEGREDO) já existem desde o item 7.
Função comercial: npx supabase functions deploy comercial --project-ref sowazotriildoeaxbhkl --no-verify-jwt --use-api
(sem a verificação de JWT: o formulário não tem conta; o PDF confere a conta dentro da função). Como no item 8, com uma chave de
acesso temporária do Supabase.
Tarefa diária: comercial-diaria, 0 6 * * * (3h em Brasília), POST
https://sowazotriildoeaxbhkl.supabase.co/functions/v1/comercial com o cabeçalho x-tarefa (o COMERCIAL_TAREFA_SEGREDO) e o
corpo {"acao":"tarefa"}: a regra PARADO (opcional, em Ajustes) e os PDFs dos pedidos excluídos saindo do R2.
Site: juntar a branch comercial na main, com a TURNSTILE_CHAVE preenchida, e o git push. Conferir em https://www.arquionie.com.br/f/ZZZZ
("Formulário não encontrado") e, com uma conta de teste, o primeiro acesso, um pedido pelo formulário e uma proposta pelo modelo.
Publicado em 16/10/2026, com o ÊDI:
https://www.arquionie.com.br/painel?amostra=aulanpm run devOs PROJETOS PROTEGIDOS do escritório (doc 73 do repositório do programa, etapa 1; mockup docs/mockups/projetos-do-escritorio,
aprovado por ÊDI em 20/10/2026; branch projetos-do-escritorio). Ainda não publicado. O servidor guarda o dono e a chave de cada
projeto, nunca o arquivo; o programa grava o .aqi cifrado e pede a chave aqui ao abrir. Só com o ÊDI, nesta ordem, antes de
publicar a versão do programa que traz os projetos protegidos (sem as funções, o programa salva aberto, como antes):
SQL Editor: rodar supabase/migrations/20261020120000_projetos_do_escritorio.sql (pode rodar duas vezes). Conferir:
select public.copia_de_seguranca_situacao() responde sem conta (a função existe e pede a conta).
Teste local: node supabase/testes/projetos.test.mjs (39 conferências) e node supabase/testes/copia-das-chaves.test.mjs (7).
Site: juntar a projetos-do-escritorio na main e o git push. Conferir em MINHA CONTA › EQUIPE os PROJETOS PROTEGIDOS: os
PEDIDOS DE ACESSO e a CÓPIA DE SEGURANÇA DAS CHAVES (baixar com uma senha e guardar o arquivo). Sem conta, no npm run dev:
/conta/equipe?amostra=1.
O que muda: cada projeto salvo com a conta ganha dono (a conta do responsável, no projeto do escritório; a da pessoa, na MINHA ÁREA) e
uma chave que o servidor entrega só ao dono, à equipe ativa e aos convidados; o PEDIR ACESSO de quem abre uma cópia sem acesso chega
aqui; a CÓPIA DE SEGURANÇA DAS CHAVES deixa os projetos abrirem mesmo com o Arquionie fora do ar (a senha não sai do navegador).
O LIMITE POR ENDEREÇO (a checagem de segurança de 22/10/2026; migração 20261022000000_limite_por_endereco.sql). As portas sem
conta contam os pedidos de cada endereço por hora: nos códigos (o /t/, o tour, a situação da apresentação, o formulário e a proposta
do Comercial, o aceite) e no cupom, só os erros (30 por hora; passou, nem o código certo abre daquele endereço); o pedido do PRO
(6), a denúncia de formulário (5) e, nas funções, o feedback do plugin (10), o iniciar do conectar (20) e a resposta do cliente na
página /t/ (30). A trava geral do pedido_criar subiu de 60 para 300 por hora (com 60, um robô parava as vendas). O banco guarda só
a impressão do endereço (SHA-256 com o sal dele; o IPv6 pela rede /64) e apaga as janelas de ontem. Para mudar um limite, sem
publicar nada: update public.ajustes_limites set codigo = 50. Publicado em 22/10/2026, com a chave temporária: a migração, as quatro
funções e o site. Conferido no ar: o banco e as funções contam o endereço verdadeiro (um X-Forwarded-For ou X-Real-IP inventado
não muda nada, e a Cloudflare recusa um CF-Connecting-IP inventado); o 31º erro de código responde limite; as contagens dos
testes foram apagadas. Para publicar de novo, nesta ordem:
Teste local: node supabase/testes/limites.test.mjs (30 conferências) e os das funções (funcoes, envio, apresentacoes).
SQL: rodar a migração (pode rodar duas vezes). Ela troca as funções apresentacao_abrir, apresentacao_situacao,
tour_abrir, comercial_formulario_abrir, comercial_proposta_abrir, comercial_proposta_aceitar, comercial_denunciar,
cupom_conferir e pedido_criar: rodar de novo uma migração antiga que as cria desfaz o limite; depois dela, rodar esta outra vez.
Funções feedback, conectar, cliente e comercial, todas com --no-verify-jwt.
ENTRAR PELO NAVEGADOR e a verificação de pessoa nas telas da conta (mockup docs/mockups/entrar-pelo-navegador do repositório
do programa, aprovado por ÊDI em 22/10/2026; migração 20261023000000_entrar_no_programa.sql). O programa não pede mais a senha:
abre /programa/entrar?porta=…&desafio=…&nome=…, a pessoa entra no site (RotaDaConta leva ao ENTRAR e ao COMPLETAR) e clica
ENTRAR NO PROGRAMA; a função programa dá um código de uso único (2 minutos, gasto na primeira troca, certa ou errada), que volta ao
programa por /programa/PORTA; o programa troca o código e o verificador pela sessão dele (um link mágico gerado e conferido na
função, que ninguém recebe). O ENTRAR, o CRIAR CONTA, o ESQUECI A SENHA e o MANDAR OUTRO CÓDIGO levam o token do Turnstile ao
Supabase (VerificacaoDePessoa.jsx; no npm run dev ele não aparece). A verificação só passa a valer quando for ligada no Supabase
(Authentication › Attack Protection), e só depois que os programas tiverem atualizado: as versões antigas entram com a senha.
Servidor e site publicados em 22/10/2026 (a migração, a função programa e o site). Conferido no ar: o AUTORIZAR sem conta volta
401, um código inventado volta codigo_invalido, o navegador não chama as funções do banco, e o Turnstile aparece no ENTRAR de
www.arquionie.com.br. Falta a ida e volta com uma conta de verdade (com o ÊDI no computador) e a versão do programa.
Teste local: node supabase/testes/programa.test.mjs (16 conferências).
SQL: rodar a migração (pode rodar duas vezes). Função programa com --no-verify-jwt. Site: o git push.
Programa: a versão com ENTRAR PELO NAVEGADOR (ramo entrar-pelo-navegador do repositório do programa).
Ligar a verificação no Supabase, com o segredo do Turnstile, quando 9 de cada 10 computadores conectados estiverem na versão nova (a /gestao mostra a versão de cada um). ÊDI decidiu em 23/10/2026: não ligar por enquanto.
A PROTEÇÃO COMO OPÇÃO e a TROCA DO DONO (doc 73, §8, do repositório do programa; mockup docs/mockups/trocar-o-dono, versão 2,
aprovado por ÊDI em 27/10/2026: "Aprovo as doze recomendações"; branch troca-do-dono; migração
20261027000000_protecao_como_opcao_e_troca_do_dono.sql). Publicado em 27/10/2026: a migração rodada por ÊDI (conferida de fora: as
funções novas existem e recusam quem chama sem conta) e o site (91f24c8; no ar, as telas novas no código da página). O projeto nasce aberto no programa e a proteção se
liga quando o escritório quiser; em MINHA CONTA › Equipe e licenças › Projetos protegidos: a chave Proteger os projetos novos da sua
equipe (desligada de fábrica), os pedidos do escritório (quem é da equipe pede que o dono passe o projeto da MINHA ÁREA; com o
convite da equipe esperando, o botão é ENTRAR NA EQUIPE E PASSAR), os seus projetos protegidos com PASSAR AO ESCRITÓRIO (para quem
está numa equipe), chegaram ao escritório e passados ao escritório. A troca guarda o identificador e a chave (todas as cópias do
arquivo continuam abrindo), leva os convidados, os pedidos de acesso e a página do cliente (o mesmo link) e fica no registro, com a
proteção ligada e a tirada. Só com o ÊDI, nesta ordem, antes de publicar a versão do programa que traz o Proteger e o Passar ao
escritório (sem as funções, o programa novo protege e abre como antes, mas o Passar e o Pedir ao escritório respondem que não deu).
No mesmo ramo, pelo pedido de ÊDI ("não faz sentido esses cards ficarem mais estreitos do que os outros"): os cartões e os formulários
da conta e o cartão aberto da gestão na largura da página, como as listas (a cópia de segurança, o padrão do escritório, o e-mail da
equipe, a senha, as novidades, os dados, o convite e a equipe do escritório); os cartões sozinhos no meio da tela (entrar, comprar, a
proposta) ficam como estão.
Teste local: node supabase/testes/troca-do-dono.test.mjs (66 conferências) e os de antes (projetos 39, copia-das-chaves 7).
SQL Editor: rodar a migração (pode rodar duas vezes). Ela troca as funções projeto_chave, projeto_registrar e
copia_de_seguranca_situacao: rodar de novo a 20261020120000_projetos_do_escritorio.sql desfaz a troca do dono; depois dela,
rodar esta outra vez. Conferir: select public.meus_projetos_protegidos() responde sem conta.
Site: juntar a troca-do-dono na main e o git push. Conferir em MINHA CONTA › Equipe e licenças › Projetos protegidos; sem
conta, no npm run dev: /conta/equipe?amostra=1.
O menu lateral como o do Sistema Palheta (ÊDI, 27/10/2026: "esse painel lateral que ele expande desse jeito, eu acho que é melhor
a gente fazer igual o do sistema palheta"; branch menu-lateral-como-o-sistema). Publicado em 27/10/2026 (91f24c8). A barra das telas de quem
entrou não se abre mais por cima da página: fica com os ícones, e o nome do item sai de dentro dela, ao passar o mouse ou chegar pelo
teclado (SalienciaDoMenu.jsx, a mesma do Sistema Palheta; .amg-saliencia no index.css, pelos tokens). O celular não muda. Para
publicar: juntar a menu-lateral-como-o-sistema na main e o git push; conferir no npm run dev em /conta/equipe?amostra=1.