TeaTime - sistema de biblioteca descentralizado movido por SQLite, IPFS e GitHub
(github.com/bjesus)- 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.jsonque 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
- Instale as dependências:
npm install - Inicie o servidor:
npm run dev - Vá para
http://localhost:3000
- Instale as dependências:
- 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-databaseao 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
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
@helia/verified-fetch, é possível aceitar CIDs por meio de uma API semelhante ao Fetch e lidar com roteamento de conteúdo e descoberta P2PO framework P2P Pear pode ajudar a sair do GitHub e migrar para um sistema realmente distribuído
Estão considerando usar o Helia para permitir que usuários contribuam como nós da rede
Há um problema em que o acesso a determinados recursos é bloqueado por causa da política de CORS
no-cors, deixando o CORS desativadoTudo acontece no navegador, sem usuários, cookies ou rastreamento
LocalStorageeIndexedDBpara salvar a última posição de leitura e a posição dentro do arquivoO banco de dados usado no TeaTime é um repositório do GitHub publicado no GitHub Pages
Como não se sabe o que há no banco de dados, não dá para saber o que pesquisar
Há uma pergunta sobre a disponibilidade de uma instância de exemplo
Perguntam se seria possível integrar os favoritos do Pocket