07 · Publicar
Chegou a hora de colocar o app no ar. O fluxo é direto: você gera o build (que já é o seu teste de compilação), sobe o código no GitHub e roda fayz deploy — um comando que faz a autenticação, conecta o projeto na plataforma e publica numa URL própria. Ao fim deste passo você tem um link https://<seu-app>.live.fayz.ai que qualquer pessoa abre.
Os comandos fayz abaixo rodam via npx @fayz-ai/cli <comando> (sem instalar nada global); os exemplos usam a forma curta fayz para ficar legível.
Gere o build de produção. Ele é o seu teste de compilação: se o Vite empacota o app sem erro, o código está íntegro para publicar.
npm run build
Saída real:
vite v5.4.21 building for production... ✓ 34 modules transformed. dist/index.html 0.40 kB │ gzip: 0.27 kB dist/assets/index-tn0RQdqM.css 0.00 kB │ gzip: 0.02 kB dist/assets/index-BERJrSU-.js 143.00 kB │ gzip: 46.00 kB ✓ built in 274ms
O resultado é uma pasta dist/ pronta para servir. Em seguida, rode o doctor para validar o manifesto uma última vez:
fayz doctor
⚠ plugins referenced by manifest are resolved by the platform bundle, not public npm packages: dashboard 0 error(s), 1 warning(s)
✓ Você deve ver: ✓ N modules transformed e ✓ built in … no build, e 0 error(s) no doctor. O aviso sobre plugins resolvidos pelo bundle da plataforma é esperado — não é um erro. Se o build falhar, é aqui que você descobre, antes de subir qualquer coisa.
Seu app é o seu repositório. Antes de commitar, adicione a pasta .fayz/ ao .gitignore — ela guarda o vínculo local do deploy (.fayz/project.json) e não deve ir para o repositório. O scaffold ainda não cobre isso, então faça manualmente:
# na raiz do app, garanta que .fayz/ está ignorado echo ".fayz/" >> .gitignore
Agora inicialize o repositório e faça o primeiro commit:
git init git add . git commit -m "feat: meu app Fayz"
Crie o repositório remoto — pela CLI do GitHub ou pelo site — e faça o push:
# com a gh CLI gh repo create minha-loja --private --source=. --push # ou, se você criou o repo pelo site: git remote add origin https://github.com/<voce>/minha-loja.git git push -u origin main
✓ Você deve ver: .fayz/ listado no .gitignore antes do primeiro git add, e o repositório no GitHub com o seu código — sem a pasta .fayz/. Confira no site do GitHub que ela não aparece.
O deploy precisa de um token de acesso. Gere um em Fayz → Configurações → Tokens de acesso — ele vem com o prefixo fayz_. (O acesso de deploy está em rollout para a rede de desenvolvedores convidados.)
fayz login
Cole o token quando pedido. Saída real:
✓ Token salvo em ~/.fayz/credentials.json (permissão 0600). fayz_xxx…xxx O token será validado no primeiro deploy (nenhuma chamada de rede foi feita agora).
O login é local: ele só grava o token com permissão 0600 e o valida mais tarde, no primeiro deploy. Comandos úteis:
fayz login --status # mostra o token mascarado, se já houver um fayz logout # remove o credentials.json
Em CI ou máquinas efêmeras, use a variável de ambiente FAYZ_TOKEN em vez do fayz login — a CLI a lê direto.
✓ Você deve ver: ✓ Token salvo em ~/.fayz/credentials.json. O fayz login --status deve mostrar o token mascarado. Nenhuma chamada de rede acontece no login — a validação fica para o deploy.
Antes de subir de verdade, rode o dry-run. Ele lista exatamente o que seria enviado e qual seria o destino, sem nenhuma chamada de rede:
fayz deploy --dry-run
Saída real:
▸ Arquivos a enviar de minha-loja: app.manifest.json (1087 B) index.html (299 B) … Total: 13 arquivo(s), 7099 B. Destino: novo projeto 'minha-loja' (será criado no primeiro deploy) (dry-run — nenhuma chamada de rede foi feita)
O nome do projeto é derivado do campo name do seu package.json. Confira a lista e o destino antes de prosseguir.
✓ Você deve ver: a lista de arquivos com tamanhos, o Total, o Destino: novo projeto '<nome>' e a linha (dry-run — nenhuma chamada de rede foi feita). Se o destino ou a contagem de arquivos surpreender, resolva antes do deploy real.
Agora suba de verdade:
fayz deploy
A CLI confirma o destino antes de agir (use --yes para pular a confirmação; em shell não interativo ela recusa rápido em vez de agir sozinha). No primeiro deploy ela cria o projeto na plataforma e grava .fayz/project.json com { projectId, name }; nos deploys seguintes ela reusa esse arquivo, mandando para o mesmo projeto. O código sobe em lotes, a plataforma builda no servidor (install + Vite) e devolve a URL final:
🔗 https://minha-loja.live.fayz.ai
Acesso em rollout. O fayz deploy está sendo liberado para a rede de desenvolvedores convidados. Se o deploy retornar um erro de autorização, seu token ainda não tem acesso de CLI liberado — fale com a gente na comunidade. O caminho de host estático coloca o mesmo app no ar enquanto isso.
✓ Você deve ver: a URL https://<seu-app>.live.fayz.ai no fim do deploy, e um .fayz/project.json novo na raiz (ignorado pelo git). Abra a URL — o app deve carregar igual ao npm run preview.
Você entregou?
Publicar não é só o comando passar — é o app funcionar para quem abre o link. Confira:
- A URL abre —
https://<seu-app>.live.fayz.aicarrega sem tela em branco. - O fluxo principal funciona — aquele um caminho essencial do seu produto vai do início ao fim.
- Os dados persistem — o que você cria numa sessão continua lá na próxima (Supabase conectado no passo 05).
Alternativa: host estático. Prefere Vercel, Netlify ou Cloudflare Pages? O mesmo dist/ sobe em qualquer host de arquivos — veja Deploy estático.
E agora?
Do zero ao ar: você gerou o app, entendeu a anatomia, aplicou a marca, ligou plugins, conectou um banco real, escreveu seu próprio plugin e publicou — tudo a partir do manifesto. Os próximos caminhos:
- Explorar o catálogo de plugins e montar o próximo produto.
- Transformar o app numa camada que um agente lê e opera em IA · Seu app como camada de dados.
- Aprofundar plugins próprios em Incubator.
← Anterior: 06 · Seu próprio plugin · Voltar ao início do tutorial