8 pontos por GN⁺ 2024-11-29 | 1 comentários | Compartilhar no WhatsApp
  • Sistema de biblioteca distribuído totalmente estático baseado em IPFS, SQLite e GitHub
  • É possível hospedar instâncias com atualização automática no Netlify e no GitHub Pages

Biblioteca distribuída

  • A aplicação web TeaTime é completamente separada do banco de dados e dos arquivos que busca.
  • O banco de dados usado é um repositório no GitHub com a tag de tópico teatime-database, publicado no GitHub Pages.
  • Cada repositório inclui um arquivo config.json que aponta para um banco de dados SQLite.
  • Antes de fazer uma busca, o usuário escolhe qual banco de dados usar, e o TeaTime consulta o banco SQLite usando sql.js-httpvfs.
  • Cada linha do banco de dados SQLite é um item da biblioteca, e a coluna de hash do arquivo é usada para buscar o item no IPFS.
  • Como a aplicação web é um site estático e o banco de dados é composto por arquivos estáticos, é fácil fazer fork, clonar e implantar.
  • A instância de frontend é um repositório no GitHub com a tag de tópico teatime-instance.
  • Como os arquivos são servidos pelo IPFS, essa arquitetura distribuída aumenta a resiliência do TeaTime.

Funcionalidades

  • Busca por título, autor, ano ou formato
  • Manter histórico de leitura e voltar para a página ao reabrir o arquivo
  • Baixar arquivos localmente
  • Cache de arquivos no IndexedDB para carregamento rápido
  • Arrastar arquivos para o TeaTime para renderização
  • Modo escuro e modo de tela cheia
  • Sem cookies, sem login
  • Totalmente descentralizado

Desenvolvimento do frontend

  • O TeaTime é uma aplicação Nuxt.js.
  • É fácil rodar localmente: clone o repositório e siga estas etapas
    1. Instale as dependências: npm install
    2. Inicie o servidor: npm run dev
    3. Vá para http://localhost:3000
  • Consulte a documentação do Nuxt para mais informações

Criação do banco de dados

  • É possível criar um banco de dados fazendo fork do repositório de banco de dados baseado em JSON e ajustando os arquivos JSON conforme a necessidade.
  • O GitHub Actions gera o arquivo SQLite e faz upload para o GitHub Pages.
  • Para criar manualmente um banco de dados SQLite que funcione com o TeaTime, siga o exemplo do repositório de banco de dados.
  • Cada banco de dados SQLite inclui uma tabela com o esquema abaixo. Os nomes das colunas podem ser ajustados no arquivo config.json.
    CREATE TABLE "books" (  
      "id" INTEGER,  
      "title" TEXT,  
      "author" TEXT,  
      "year" INTEGER,  
      "lang" TEXT,  
      "size" INTEGER,  
      "ext" TEXT,  
      "ipfs_cid" TEXT,  
      PRIMARY KEY("id" AUTOINCREMENT)  
    );  
    
  • Se o arquivo SQLite ficar grande demais, ele pode ser dividido. Consulte informações sobre otimização de banco de dados. Recomenda-se usar FTS.
  • Publique o repositório no GitHub Pages e atribua o tópico teatime-database ao repositório

Contribuição

  • Mesmo sem saber programar, é possível contribuir fazendo fork deste repositório e dos seus repositórios de banco de dados favoritos.
  • Ao fazer fork do repositório, é melhor fazê-lo manualmente para evitar vinculação direta (git clone && git remote add your-origin ... && git push your-origin main).
  • Dar estrela a repositórios de banco de dados úteis também é uma boa forma de contribuir. Isso determina a ordem dos bancos de dados na interface do TeaTime, ajudando outros usuários a encontrar facilmente os melhores bancos de dados.

1 comentários

 
GN⁺ 2024-11-29
Comentários no Hacker News
  • Um colaborador do IPFS sugere uma forma de melhorar como o IPFS lida com downloads a partir de vários gateways

    • Ao usar @helia/verified-fetch, é possível aceitar CIDs por meio de uma API semelhante ao Fetch e lidar com roteamento de conteúdo e descoberta P2P
    • Se for possível se conectar diretamente ao gateway, também é possível informar o gateway
  • O framework P2P Pear pode ajudar a sair do GitHub e migrar para um sistema realmente distribuído

    • Levanta a dúvida sobre qual é o sentido de armazenar arquivos no IPFS se o índice ainda precisa estar no GitHub
  • Estão considerando usar o Helia para permitir que usuários contribuam como nós da rede

    • Ao procurar informações sobre o Helia, isso fez lembrar o OrbitDB
  • Há um problema em que o acesso a determinados recursos é bloqueado por causa da política de CORS

    • É possível buscar o recurso com o modo da requisição definido como no-cors, deixando o CORS desativado
  • Tudo acontece no navegador, sem usuários, cookies ou rastreamento

    • Usa LocalStorage e IndexedDB para salvar a última posição de leitura e a posição dentro do arquivo
    • Gostaram muito desse recurso e expressaram agradecimento
  • O banco de dados usado no TeaTime é um repositório do GitHub publicado no GitHub Pages

    • Isso pode representar um problema de segurança, já que parece possível que um usuário malicioso use essa tag
  • Como não se sabe o que há no banco de dados, não dá para saber o que pesquisar

    • Sugerem uma funcionalidade de navegação
  • Há uma pergunta sobre a disponibilidade de uma instância de exemplo

  • Perguntam se seria possível integrar os favoritos do Pocket

    • Esperam poder armazenar em cache offline tudo o que querem ler, evitar link rot e fazer consultas nele