thiagopatzdorf/fabrica-de-sites

A estrutura, não o site

molde + dado → HTML
aceite de cliente → INSERT

Shopify e Nuvemshop não fazem deploy por loja. Uma aplicação serve todas; loja é linha no banco. Aqui é o mesmo contrato: o modelo escreve moldes, não sites. Criar um site é um INSERT (ou um JSON em data/ + node build.mjs), nunca um HTML novo escrito à mão.

1. Dois tempos

Build-timetemplates/*.liquid + data/*.json viram <slug>.html estático na Vercel.

Request-time — FastAPI lê fabrica_de_sites.sites pelo Host, renderiza Jinja. Subdomínio ativo = site no ar.

2. O laço que decide

  1. npm run avaliar — DOM + axe + Lighthouse
  2. npm run mercado — a mesma régua no setor
  3. npm run variar — o gerador é burro; o avaliador escolhe
  4. molde votacao — Elo humano, cego, no banco

3. Como entra no ar

Token da Vercel sai do cofre, nunca da sessão:

bin/publicar-site.sh . fabrica-de-sites

Schema isolado em Postgres próprio (self-hosted na factory-01): fabrica_de_sites.*, sem misturar com public de produção.

Moldes neste checkout

Build-time (Liquid) e request-time (Jinja). A lista vem do disco — se um molde novo aparecer, esta página mostra.

liquid/ecommerce-gridliquid/escala-carrinholiquid/placarliquid/saas-bentoliquid/servico-fullbleedliquid/vendas-calma jinja/avaliacaojinja/galeriajinja/pedirjinja/servico-fullbleedjinja/votacao

Dados (JSON → HTML)

data/aconchego.jsondata/ancora.jsondata/bloco.jsondata/coliseu.jsondata/congregacaonova.jsondata/fitrich.jsondata/genesis-vendas.jsondata/megaultra.jsondata/trekko.jsondata/trilho.json

Sites no banco

slugsubdomíniomoldestatus
academia-e-estudio-de-treino-funcional-e-p1 academia-e-estudio-de-treino-funcional-e-p1 servico-fullbleed draft preview