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
siteConfigescolhe tenant, tema, conteúdo institucional edataUrl.loadCorpus()tenta carregar o JSON público do tenant.- Se o carregamento falhar, a aplicação usa fixtures internas.
- Overrides salvos no navegador são aplicados sobre documentos e amostras.
demo-api.tsentrega listas, detalhes, buscas, análises e exportações para as páginas.TanStack Queryfaz cache por rota, filtros e payloads.
Persistência local
| Chave | Conteúdo |
|---|---|
phpb-demo-projects:{tenant}:v1 | Projetos e coleções associadas. |
phpb-demo-annotations:{tenant}:v1 | Anotações manuais por amostra. |
phpb-demo-ingest:{tenant}:v1 | Metadado da execução demonstrativa de ingestão. |
phpb-corpus-overrides:{tenant}:v1 | Correções locais de amostras e documentos. |
Cálculos demonstrativos
As análises usam funções locais:
| Análise | Saída |
|---|---|
| Frequência | Lemas ou formas com frequência absoluta e relativa. |
| N-gramas | Sequências recorrentes de 2 a 4 tokens. |
| Colocações | Colocados em janela de quatro palavras, PMI e log-likelihood. |
| Diacrônica | Séries por século/metade para termos selecionados. |
| Comparação | Vocabulário distintivo entre dois recortes. |
| Clíticos | Distribuição de próclise, ênclise e mesóclise por documento. |
| Geográfica | Agregaçã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.