Deploy estático
O app gerado é um projeto Vite. Publicar é o fluxo estático de sempre: você gera a pasta dist/ e a serve em qualquer host de arquivos estáticos — sem servidor, sem lock-in.
Gere o build
npm run build
Saída típica:
vite v5.4.21 building for production... ✓ 34 modules transformed. dist/index.html 0.40 kB │ gzip: 0.27 kB dist/assets/index-...css 0.00 kB │ gzip: 0.02 kB dist/assets/index-...js 143.00 kB │ gzip: 46.00 kB ✓ built in 274ms
O resultado é uma pasta dist/ com um index.html e os assets em dist/assets/. Para conferir localmente antes de subir:
npm run preview
A regra que todo host precisa: rewrite para o index.html
O app é uma SPA (single-page app): todas as rotas são servidas pelo index.html e o roteamento acontece no navegador. Por isso todo host precisa de uma regra de rewrite mandando qualquer caminho para o index.html — senão um refresh em /crm dá 404.
Vercel — crie um vercel.json na raiz:
{ "rewrites": [{ "source": "/(.*)", "destination": "/index.html" }] }
Build command: npm run build · Output directory: dist.
Netlify — crie um public/_redirects:
/* /index.html 200
Build command: npm run build · Publish directory: dist.
Cloudflare Pages — mesmo _redirects do Netlify:
/* /index.html 200
Build command: npm run build · Output directory: dist.
As variáveis de ambiente
No painel do host, defina as variáveis públicas — as mesmas do seu .env.local:
VITE_SUPABASE_URL=https://SEU-REF.supabase.co VITE_SUPABASE_ANON_KEY=sua-anon-key
O SUPABASE_PAT não vai para o host. Ele serve só para o fayz db apply, que você roda da sua máquina. No host ficam apenas os valores VITE_ (públicos, embarcados no navegador). Nunca coloque o PAT numa variável de build de deploy.
Aponte o projeto para o repositório, configure build + output conforme o host acima, defina as variáveis e faça o deploy. O mesmo dist/ roda idêntico em qualquer um dos três.
Próximo: o deploy gerenciado que está chegando em Deploy Fayz.