Pular para o conteúdo principal

Arquitetura

O PHPB Hub é uma SPA React/Vite com TanStack Router. A versão documentada funciona sem backend HTTP: src/lib/api.ts reexporta a API demonstrativa de src/lib/demo-api.ts, que carrega JSONs públicos, aplica overrides locais e calcula consultas no navegador.

Componentes principais

flowchart LR
U["Usuário"] --> S["Shell React"]
S --> R["TanStack Router"]
S --> Q["TanStack Query"]
Q --> A["src/lib/api.ts"]
A --> D["demo-api.ts"]
D --> C["corpus-loader.ts"]
C --> J["JSON público do tenant"]
C --> F["Fallback src/mocks/data.ts"]
D --> L["localStorage"]
D --> X["Exportações"]

Fluxo de dados

  1. siteConfig escolhe tenant, tema, conteúdo institucional e dataUrl.
  2. loadCorpus() tenta carregar o JSON público do tenant.
  3. Se o carregamento falhar, a aplicação usa fixtures internas.
  4. Overrides salvos no navegador são aplicados sobre documentos e amostras.
  5. demo-api.ts entrega listas, detalhes, buscas, análises e exportações para as páginas.
  6. TanStack Query faz cache por rota, filtros e payloads.

Persistência local

ChaveConteúdo
phpb-demo-projects:{tenant}:v1Projetos e coleções associadas.
phpb-demo-annotations:{tenant}:v1Anotações manuais por amostra.
phpb-demo-ingest:{tenant}:v1Metadado da execução demonstrativa de ingestão.
phpb-corpus-overrides:{tenant}:v1Correções locais de amostras e documentos.

Cálculos demonstrativos

As análises usam funções locais:

AnáliseSaída
FrequênciaLemas ou formas com frequência absoluta e relativa.
N-gramasSequências recorrentes de 2 a 4 tokens.
ColocaçõesColocados em janela de quatro palavras, PMI e log-likelihood.
DiacrônicaSéries por século/metade para termos selecionados.
ComparaçãoVocabulário distintivo entre dois recortes.
ClíticosDistribuição de próclise, ênclise e mesóclise por documento.
GeográficaAgregação por UF ou município, conforme tenant.

Build e segurança

npm run build:hub
npm run build:sc

Os builds executam security:predeploy, que verifica o pacote público para impedir a publicação de artefatos sensíveis conhecidos. O diretório publicado deve ser apenas dist/.

Ponto de troca para API real

Quando houver backend, a substituição deve ocorrer em src/lib/api.ts ou em adaptadores chamados por ele. As páginas já consomem uma interface de alto nível, o que permite preservar boa parte da UI durante a migração.