layout: page title: Páginas Públicas — Infraestrutura Open Pages
Páginas Públicas (Open Pages)
Documentação da infraestrutura de publicação de páginas públicas do Hub Grupo CSV.
Escopo desta página
Open Pages publica páginas HTML e assets; não publica documentos da Central de Documentos. Links públicos documentais nativos já integram o control plane csv-documents, com produção verificada em 24/08/2026: criação explícita por slug, versão fixada, ativação/inativação e entrega mediada, mantendo o R2 privado. Eles não dependem da ativação do Panta v2. Consulte Central de Documentos.
Para compartilhar um arquivo, siga o manual da Central — Links públicos. Para entender a pesquisa, consulte o manual do Panta v2: indexar um documento não o torna público.
A validação produtiva da busca Panta v2 pela Central/Extensio em 16/09/2026 não muda o contrato de compartilhamento. Esta versão do Hub habilita a busca nas Centrais, mas links públicos e Open Pages continuam sendo capacidades distintas e independentes dela. A sessão humana da nova busca no navegador permanece não aferida.
Visão Geral
O Hub Grupo CSV possui uma infraestrutura independente para publicação rápida de páginas HTML acessíveis externamente, sem necessidade de autenticação. Esta infraestrutura é chamada de Open Pages e opera no subdomínio open.grupocsv.com.
Objetivo: Permitir o compartilhamento de relatórios, dashboards, propostas e datasets com parceiros externos (hospitais, operadoras, clientes) de forma rápida, segura e com controle de acesso (toggle ativo/inativo instantâneo).
Arquitetura (open.grupocsv.com):
- Hospedagem: Cloudflare R2 (Bucket
csv-open-pages) - Estado (Toggle): Cloudflare KV (Namespace
csv-open-pages) - Roteamento e API: Cloudflare Worker (
csv-open-pages) - Auth Gate: Cloudflare Worker (
csv-open-auth) + KV (csv-open-auth) - Domínio:
open.grupocsv.com - Repositório:
grupocsv/csv-open-pages(privado, contém o código do Worker e do painel admin)
Arquitetura (hub.unimedgv.com):
- Hospedagem: Cloudflare R2 (Bucket
hub-unimedgv) - Estado: Cloudflare KV (Namespace
hub-unimedgv-kv) - Roteamento: Cloudflare Worker (
hub-unimedgv) - Domínio:
hub.unimedgv.com - Repositório:
grupocsv/hub-unimedgv(privado)
Como Funciona
1. Painel de Controle
O gerenciamento das páginas é feito através de um painel administrativo isolado, acessível em https://open.grupocsv.com/_admin/.
Funcionalidades:
- Autenticação por senha fixa (configurada como secret no Worker).
- Upload de arquivos HTML e assets (arrastar e soltar).
- Definição de slug (identificador na URL), título e descrição.
- Listagem de páginas publicadas com status atual.
- Toggle instantâneo (Ativar/Desativar) via Cloudflare KV.
- Cópia rápida do link público.
2. Roteamento e Bloqueio (Worker)
O Worker csv-open-pages intercepta todas as requisições para open.grupocsv.com/*.
Fluxo de acesso público:
- Usuário acessa
https://open.grupocsv.com/{slug}/. - O Worker consulta o status da página no Cloudflare KV (
page:{slug}). - Se o status for
active, o Worker busca o arquivo correspondente no bucket R2 e o serve ao usuário. - Se o status for
inactiveou a página não existir, o Worker retorna uma página de erro 404 padronizada.
Vantagem: O bloqueio é real e ocorre na borda (edge). Uma página desativada não pode ser acessada, mesmo que os arquivos continuem armazenados no R2.
3. Publicação Programática (Tools MCP do Extensio)
Além dos painéis, o servidor MCP do Extensio expõe duas tools para operar as Open Pages de forma programática (por agentes de IA ou automações):
open_page_publish— Publica ou atualiza uma Open Page emopen.grupocsv.com. Parâmetros:slugehtml_content(obrigatórios),titleedescription(metadados). Faz o upload do HTML para o R2, atualiza os metadados no KV e verifica a gravação.open_page_list— Lista as Open Pages ativas com seus metadados (slug, título, URL, status).
4. Legado (Diretório /p/ no Hub)
Anteriormente, as páginas públicas eram armazenadas no diretório /p/ do repositório principal do Hub e servidas via GitHub Pages. Este modelo foi descontinuado em favor da arquitetura independente (Open Pages) para permitir toggles instantâneos sem necessidade de novos deploys.
Páginas legadas (como o tea-dataset) foram migradas para o R2. O diretório /p/ no repositório grupocsv/hub pode ser mantido temporariamente para fins de histórico ou redirecionamento (301), mas novas publicações devem ser feitas exclusivamente via Open Pages — por qualquer das três vias da seção anterior: aba Links Públicos do /admin/, painel open.grupocsv.com/_admin/ ou tools MCP do Extensio.
Padrão HTML de Páginas Públicas
Toda página publicada no Open Pages deve ser autocontida (HTML, CSS inline ou em arquivos relativos, JS) e seguir as diretrizes visuais do Grupo CSV.
Meta tags OpenGraph
Recomenda-se a inclusão de meta tags para melhorar a apresentação ao compartilhar links no WhatsApp, LinkedIn, etc.
<meta property="og:title" content="{Título} | {Portal}">
<meta property="og:description" content="{Descrição curta}">
<meta property="og:type" content="website">
<meta property="og:locale" content="pt_BR">
<meta property="og:url" content="https://open.grupocsv.com/{slug}/">
<meta property="og:site_name" content="{Portal} | Grupo CSV">Autenticação
Páginas públicas NÃO devem incluir scripts de autenticação interna do Hub (como /scripts/hub-auth.js). Elas são, por definição, abertas a qualquer pessoa com o link, desde que o status no painel esteja como "Ativo".
Auth Gate (Portão de Autenticação)
As Open Pages suportam uma camada de proteção dinâmica chamada Auth Gate:
- Se o metadado no KV indicar
"auth_gate": true, o Worker injeta dinamicamente um modal de login no HTML servido. - A validação das credenciais é delegada para o Worker
csv-open-auth. - Isso permite que uma página hospedada no R2 seja pública por padrão, mas receba uma camada de proteção instantânea sem precisar recompilar o HTML.
- A ativação/desativação do Auth Gate é feita via API:
POST /api/set-auth-gatecom{ "slug": "...", "auth_gate": true/false }.
Sincronização de Menus dos Portais
Os menus dos portais Unimed, Unihealth, ICDS e 2iM são gerados automaticamente a cada push — não há lista manual de ferramentas nos índices.
Geração (CI)
- O workflow de deploy (
.github/workflows/deploy.yml, step "Generate portal tools.json") executascripts/generate-portal-tools.pya cada push namain. - Para cada portal, o script escaneia os arquivos
.htmlda pasta do portal (excluindoindex.html), extrai o<title>(removendo sufixos como| Unimed GVe| Grupo CSV) e obtém as datas de criação e última modificação viagit log. - Páginas com
<meta name="hub-menu" content="hidden">no<head>são excluídas do menu. - Entradas manuais vêm de
{portal}/extras.json— links para Open Pages, páginas legadas/p/ou URLs externas. Cada item usatitleehref(opcionalmentecreated/lastModified) e entra no resultado com"external": true. Exemplo:icds/extras.jsonaponta para/p/tea-dataset/e parahttps://rd-icds.axcare.app. - O resultado é gravado em
{portal}/tools.json(camposportal,generatedAt,totalTools,tools), ordenado do mais recente para o mais antigo.
Consumo (runtime)
- Os índices VitePress de Unimed, Unihealth e ICDS, além do índice estático da 2iM (
2im/index.html), fazemfetchde/{portal}/tools.jsone renderizam os cards dinamicamente. - A home (
docs/index.md) também busca otools.jsonde cada portal para montar as listas de ferramentas; itens comexternal: trueusam ohrefdiretamente, os demais recebem o prefixo do portal.
Implicação para páginas públicas: para que uma Open Page (ou página legada /p/) apareça no menu de um portal, adicione a entrada em {portal}/extras.json — ela passa a constar do tools.json no push seguinte.
Por que Axia, Medvalor e Thera ficam fora do gerador: são portais de empresas do grupo com índices curados manualmente (cards de serviço estáticos em docs/{axia,medvalor,thera}/index.md), sem menu dinâmico de ferramentas — não consomem tools.json. Incluí-los no PORTALS do gerador criaria artefatos que nada lê. Se algum deles ganhar menu dinâmico no futuro, basta adicioná-lo ao PORTALS em scripts/generate-portal-tools.py e trocar o índice para o padrão de fetch dos portais de parceiros.
Histórico
| Data | Descrição |
|---|---|
| 2026-02-15 | Primeira página pública legada: /p/tea-dataset/ no GitHub Pages |
| 2026-03-06 | Infraestrutura legada formalizada: registry.json, admin tab |
| 2026-03-18 | Migração para Open Pages: Nova arquitetura independente com Cloudflare Worker, R2 e KV no domínio open.grupocsv.com. Painel admin próprio e toggle instantâneo. |
| 2026-05-30 | Hub Unimed GV: Infraestrutura paralela exclusiva para a Unimed GV em hub.unimedgv.com (Worker + KV + R2 próprios). |
| 2026-06-11 | Auth Gate: Worker csv-open-auth implementado para proteger Open Pages com login dinâmico sem recompilar HTML. |
Arquivos e Repositórios Relacionados
| Item | Tipo | Descrição |
|---|---|---|
grupocsv/csv-open-pages | Repositório | Código-fonte do Worker e do painel admin (open.grupocsv.com) |
grupocsv/hub-unimedgv | Repositório | Código-fonte do Worker e infraestrutura (hub.unimedgv.com) |
csv-open-pages | CF Worker | Roteamento, API, Auth Gate e bloqueio na borda |
csv-open-auth | CF Worker | Validação de credenciais do Auth Gate |
hub-unimedgv | CF Worker | Roteamento e injeção de <head> para Unimed GV |
csv-open-pages | CF R2 | Bucket de armazenamento dos arquivos HTML/assets |
hub-unimedgv | CF R2 | Bucket de armazenamento dos arquivos HTML da Unimed GV |
csv-open-pages | CF KV | Armazenamento do estado (ativo/inativo, auth_gate) e metadados |
csv-open-auth | CF KV | Senhas e sessões do Auth Gate |
hub-unimedgv-kv | CF KV | Estado e metadados das páginas da Unimed GV |
/docs/_infra/public-pages.md | Docs | Este documento |

