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

AntesDepois
lib/schematic/lib/edu/schematic/
lib/simulation/lib/edu/simulation/
lib/images/lib/media/images/
lib/assets/images.tslib/media/content-assets.ts
lib/media/{catalog,index,types}.ts + providers/lib/media/generation/
lib/user-display.tslib/auth/user-display.ts
lib/legacy-redirects.tslib/http/legacy-redirects.ts
lib/rate-limit.tslib/http/rate-limit.ts
lib/nav.tslib/nav/index.ts
lib/icons.tslib/site/icons.ts
lib/site-instance.tslib/site/instance.ts
lib/ui-registry.tslib/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.tslib/store/cart/
lib/pricing/lib/store/pricing/
lib/services/personalization-pricing.tslib/store/pricing/personalization.ts
lib/store/{catalog,base-image,product-card-template}.tslib/store/catalog/
lib/store/pricing.tslib/store/pricing/sale-price.ts
lib/store/{customization,stamps,art-*,personalized-products}.tslib/store/customization/