Arquitetura de src/lib — Organização por Domínio
Mapa da nova estrutura de src/lib pós-refactor waves 1 e 2: categorias de domínio, guarda-chuva store/ e o cemitério de shims em extinção.
A pasta src/lib/ foi reorganizada em categorias de domínio — cada pasta agrupa
código por responsabilidade, não por tipo de arquivo. A regra de ouro: a raiz de
lib/ não tem arquivo solto.
Árvore de categorias
src/lib/
├── ai/ # provedores, ferramentas do agente, loop, configuração
├── auth/ # acesso admin, display de usuário
├── db/ # fronteira de dados (composição, continuidade, contratos, devices)
├── edu/ # simuladores educacionais (schematic + simulation, ex-schematic/simulation)
├── http/ # utilitários HTTP: redirects legados, rate-limit
├── media/ # mídia: geração fal (catalog, providers), imagens (bg-removal, dedupe, svg), content-assets
├── music/ # teoria musical: acordes, cifra, instrumentos, intervalos, notas, escalas
├── nav/ # navegação: rotas admin, AI, sidebar, user
├── notify/ # notificações: email, Telegram
├── search/ # busca: Brave, fetch de URL
├── site/ # configuração do site: ícones, instância, registry
├── store/ # domínio da loja (guarda-chuva, veja abaixo)
├── utils/ # utilitários transversais: formatação, validação
├── supabase/ # SHIM em extinção → migrando para lib/db
└── continuity/ # SHIM em extinção → migrando para lib/db
supabase/ e continuity/ — shims em extinção
Ambos existiam como fronteira de dados antes da criação de lib/db. A rodada
db-boundary (wave 1) iniciou a migração: lib/db agora centraliza composição,
contratos, devices e provedores de continuidade. Os shims permanecem como
re-exports para compatibilidade, mas código novo vai direto em lib/db.
assets/ — absorvido por media/
A antiga pasta src/lib/assets/ (content-assets, resolução de imagens co-localizadas
com entradas do Astro Content) foi absorvida por src/lib/media/content-assets.ts.
A pasta assets/ foi removida.
Guarda-chuva store/
A pasta store/ concentra o domínio da loja. As subpastas organizam subsistemas:
src/lib/store/
├── catalog/ # catálogo, imagem base e template de card
├── customization/ # arte AI, estampas, composição, medição e produtos personalizados
├── pricing/ # preço efetivo, custos/lucro, âncoras e personalização
├── payments/ # pagamentos (Pix, providers, confirmação)
├── shipping/ # frete (distância, geolocalização, Melhor Envio, local delivery)
├── delivery/ # prazos de produção e entrega
├── quotes/ # orçamentos (conversão, tipos)
├── fiscal/ # emissão fiscal (NF-e, providers)
├── banking/ # extratos bancários (C6)
├── cart/ # carrinho
└── types.ts # tipos compartilhados do domínio store
Status: a wave 1 consolidou payments/, shipping/, delivery/, quotes/,
fiscal/, banking/ e cart/. A wave 2 concluiu o miolo em catalog/,
pricing/ e customization/; somente types.ts e SPEC.md ficam na raiz.
Movimentação de wave 1
| Antes | Depois |
|---|---|
lib/schematic/ | lib/edu/schematic/ |
lib/simulation/ | lib/edu/simulation/ |
lib/images/ | lib/media/images/ |
lib/assets/images.ts | lib/media/content-assets.ts |
lib/media/{catalog,index,types}.ts + providers/ | lib/media/generation/ |
lib/user-display.ts | lib/auth/user-display.ts |
lib/legacy-redirects.ts | lib/http/legacy-redirects.ts |
lib/rate-limit.ts | lib/http/rate-limit.ts |
lib/nav.ts | lib/nav/index.ts |
lib/icons.ts | lib/site/icons.ts |
lib/site-instance.ts | lib/site/instance.ts |
lib/ui-registry.ts | lib/site/registry.ts |
lib/payments/ | lib/store/payments/ |
lib/shipping/ | lib/store/shipping/ |
lib/delivery/ | lib/store/delivery/ |
lib/quotes/ | lib/store/quotes/ |
lib/fiscal/ | lib/store/fiscal/ |
lib/banking/ | lib/store/banking/ |
lib/cart-sync.ts | lib/store/cart/ |
lib/pricing/ | lib/store/pricing/ |
lib/services/personalization-pricing.ts | lib/store/pricing/personalization.ts |
lib/store/{catalog,base-image,product-card-template}.ts | lib/store/catalog/ |
lib/store/pricing.ts | lib/store/pricing/sale-price.ts |
lib/store/{customization,stamps,art-*,personalized-products}.ts | lib/store/customization/ |