Pular para o conteúdo principal

Suporte Offline

O AISCouncil é um Progressive Web App (PWA) que funciona offline após a primeira visita. A aplicação inteira é um único arquivo HTML sem dependências externas, então pode ser completamente cacheado pelo service worker do navegador.

Progressive Web App (PWA)

O app registra um service worker (sw.js) que cacheia todos os assets estáticos no primeiro carregamento. Em visitas subsequentes, o app carrega instantaneamente do cache -- mesmo sem conexão com a internet.

Instalando como App

Chrome / Edge (Desktop):

  1. Visite aiscouncil.net
  2. Clique no ícone de instalação na barra de endereços (ou vá para Menu > "Install AISCouncil")
  3. O app abre em sua própria janela, com sua própria entrada na barra de tarefas

Chrome / Edge (Android):

  1. Visite aiscouncil.net
  2. Toque no menu do navegador (três pontos)
  3. Selecione "Add to Home screen" ou "Install app"

Safari (iOS / macOS):

  1. Visite aiscouncil.net
  2. Toque no botão Share
  3. Selecione "Add to Home Screen"
dica

Quando instalado como PWA, o app roda em modo standalone -- sem chrome do navegador, experiência em tela cheia, e aparece como um app nativo no seu alternador de tarefas.

Estratégia de Cache do Service Worker

O service worker usa uma estratégia stale-while-revalidate:

  1. Primeira visita: Todos os assets pré-cacheados são baixados e armazenados no cache
  2. Visitas subsequentes: A versão cacheada é servida imediatamente (latência de rede zero), enquanto o service worker busca uma versão atualizada em background
  3. Próxima visita após update: A versão atualizada é servida do cache

Isso significa que você sempre obtém tempos de carregamento instantâneos, e atualizações chegam silenciosamente em background.

O Que É Cacheado

O service worker pré-cacheia estes arquivos na instalação:

ArquivoPropósito
/Shell HTML (redireciona para /index.html)
/index.htmlA aplicação completa (~todo JS, CSS e HTML inline)
/icon.svgÍcone vetorial do app
/icon-192.pngÍcone PNG 192x192 (Android home screen)
/icon-512.pngÍcone PNG 512x512 (splash screens, maskable)
/favicon.icoFavicon da aba do navegador
/manifest.webmanifestManifest PWA (nome, ícones, cor do tema)

Adicionalmente, qualquer requisição GET same-origin que o app fizer será cacheada no primeiro fetch e servida do cache em requisições subsequentes (stale-while-revalidate).

O Que NÃO É Cacheado

RecursoPor Quê
Chamadas de API LLMEstas vão diretamente para APIs de provedores (Anthropic, OpenAI, etc.) e requerem conexão com a internet
Atualizações de registroFetches do registro de modelos do GitHub requerem rede, mas o app cai para dados cacheados/empacotados
Recursos cross-originApenas requisições same-origin são cacheadas pelo service worker
Requisições POST/PUT/DELETEApenas requisições GET são cacheadas
Chamadas de proxy de APIRequisições para /v1/* são explicitamente excluídas do cacheamento

Capacidades Offline

Quando offline, você pode:

  • Navegar chats existentes -- todo histórico de chat é armazenado localmente em IndexedDB
  • Gerenciar perfis -- criar, editar e deletar perfis de bot
  • Ver e mudar configurações -- todas as configurações estão em localStorage
  • Exportar dados -- baixar seu arquivo JSON de backup
  • Alternar entre bots -- todas as configs de bot são armazenadas localmente
  • Ler conversas anteriores -- histórico completo de mensagens disponível

Quando offline, você não pode:

  • Enviar novas mensagens -- requer uma chamada de API para o provedor LLM
  • Atualizar o registro de modelos -- requer buscar do GitHub
  • Fazer login -- OAuth requer conectividade de rede
  • Instalar mini-programas -- requer buscar manifest e HTML de entrada
informação

Usuários Ollama com uma instância local ainda podem conversar offline, já que Ollama roda em localhost e não requer acesso à internet.

Versionamento de Cache

O service worker usa um nome de cache versionado:

const CACHE = "ais-v1.0.0";

Quando a string de versão muda (em uma atualização que quebra compatibilidade), o novo service worker:

  1. Cria um novo cache com o novo nome
  2. Pré-cacheia todos os assets no novo cache
  3. Deleta todos os caches antigos na ativação
  4. Reivindica todos os clientes abertos

Isso garante que código cacheado obsoleto é limpo após grandes atualizações.

Atualizando o App

Atualizações acontecem automaticamente:

  1. Quando você visita a página, o navegador verifica se sw.js mudou
  2. Se mudou, o novo service worker é instalado em background
  3. No próximo carregamento de página (ou após todas as abas serem fechadas e reabertas), o novo service worker ativa
  4. A nova versão é agora servida do cache
Forçar Atualização

Para forçar uma atualização imediata: abra DevTools > Application > Service Workers, clique "Update" no service worker registrado, então recarregue a página. Alternativamente, segure Shift e clique no botão de recarregar do navegador para bypassar o cache.

Web App Manifest

O arquivo manifest.webmanifest define como o app aparece quando instalado:

{
"name": "AISCouncil",
"short_name": "AISCouncil",
"description": "Converse com Claude, GPT ou Grok -- sem servidor, sem setup.",
"start_url": "/",
"display": "standalone",
"background_color": "#000000",
"theme_color": "#7c3aed",
"categories": ["productivity", "utilities"],
"icons": [
{ "src": "icon.svg", "sizes": "any", "type": "image/svg+xml" },
{ "src": "icon-192.png", "sizes": "192x192", "type": "image/png" },
{ "src": "icon-512.png", "sizes": "512x512", "type": "image/png" },
{
"src": "icon-512.png",
"sizes": "512x512",
"type": "image/png",
"purpose": "maskable"
}
]
}
CampoValorPropósito
displaystandaloneRoda sem UI do navegador (barra de endereços, abas)
orientationanyFunciona em retrato e paisagem
theme_color#7c3aedAcento roxo para barra de status e barra de título
background_color#000000Fundo da splash screen enquanto o app carrega

Solução de Problemas

O app mostra uma versão antiga:

  • Abra DevTools > Application > Service Workers
  • Clique "Unregister" no service worker antigo
  • Recarregue a página

O app não funciona offline:

  • Certifique-se de que o service worker está registrado (DevTools > Application > Service Workers)
  • Certifique-se de que você visitou a página pelo menos uma vez enquanto online
  • Verifique se o cache existe (DevTools > Application > Cache Storage)
  • Alguns navegadores em modo privado/incognito desabilitam service workers

O prompt de instalação não aparece:

  • A página deve ser servida via HTTPS (ou localhost)
  • O service worker deve estar registrado e ativo
  • O manifest deve ser válido e linkado no <head> do HTML
  • Você deve ter visitado a página pelo menos duas vezes com algum tempo entre visitas (heurística do navegador)