8 points par GN⁺ 2024-11-29 | 1 commentaires | Partager sur WhatsApp
  • Un système de bibliothèque distribué entièrement statique basé sur IPFS, SQLite et GitHub
  • Possibilité d’héberger des instances mises à jour automatiquement sur Netlify et GitHub Pages

Bibliothèque distribuée

  • L’application web TeaTime est complètement séparée de la base de données et des fichiers qu’elle récupère.
  • La base de données utilisée est un dépôt GitHub publié sur GitHub Pages et étiqueté avec le sujet teatime-database.
  • Chaque dépôt inclut un fichier config.json qui pointe vers une base de données SQLite.
  • Avant d’effectuer une recherche, l’utilisateur choisit la base de données à utiliser, puis TeaTime interroge la base SQLite avec sql.js-httpvfs.
  • Chaque ligne de la base de données SQLite correspond à un élément de la bibliothèque, et la colonne de hash du fichier est utilisée pour récupérer l’élément sur IPFS.
  • Comme l’application web est un site statique et que la base de données est composée de fichiers statiques, il est facile de la forker, de la répliquer et de la déployer.
  • L’instance frontend est un dépôt GitHub étiqueté avec le sujet teatime-instance.
  • Les fichiers étant servis via IPFS, cette architecture distribuée améliore la résilience de TeaTime.

Fonctionnalités

  • Recherche par titre, auteur, année ou format
  • Conservation de l’historique de lecture et reprise à la page précédente lors de la réouverture d’un fichier
  • Téléchargement local des fichiers
  • Mise en cache des fichiers dans IndexedDB pour un chargement plus rapide
  • Dépôt de fichiers dans TeaTime pour les rendre
  • Mode sombre et mode plein écran
  • Aucun cookie, aucune connexion
  • Entièrement décentralisé

Développement frontend

  • TeaTime est une application Nuxt.js.
  • Exécution facile en local : clonez le dépôt puis suivez ces étapes
    1. Installer les dépendances : npm install
    2. Lancer le serveur : npm run dev
    3. Aller sur http://localhost:3000
  • Consultez la documentation Nuxt pour plus d’informations

Création de la base de données

  • Il est possible de créer une base de données en forkant un dépôt de base de données fondé sur JSON et en adaptant les fichiers JSON selon vos besoins.
  • GitHub Actions génère le fichier SQLite et le téléverse sur GitHub Pages.
  • Pour créer manuellement une base SQLite compatible avec TeaTime, suivez l’exemple du dépôt de base de données.
  • Chaque base de données SQLite contient une table avec le schéma ci-dessous. Les noms de colonnes peuvent être ajustés dans le fichier 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)  
    );  
    
  • Si le fichier SQLite est trop volumineux, il peut être fragmenté. Il est recommandé de consulter les informations d’optimisation de base de données. L’utilisation de FTS est conseillée.
  • Publiez le dépôt sur GitHub Pages et assignez-lui le sujet teatime-database

Contribution

  • Même sans savoir coder, vous pouvez contribuer en forkant ce dépôt ainsi que vos dépôts de bases de données préférés.
  • Lors du fork d’un dépôt, il est préférable de le faire manuellement pour éviter un lien direct (git clone && git remote add your-origin ... && git push your-origin main).
  • Ajouter une étoile aux dépôts de base de données utiles est aussi une bonne manière de contribuer. Cela détermine l’ordre des bases de données dans l’interface de TeaTime, afin d’aider les autres utilisateurs à trouver plus facilement les meilleures bases.

1 commentaires

 
GN⁺ 2024-11-29
Avis Hacker News
  • Un contributeur d’IPFS propose des moyens d’améliorer la gestion des téléchargements depuis plusieurs passerelles sur IPFS

    • En utilisant @helia/verified-fetch, il est possible d’accepter des CID via une API similaire à Fetch et de gérer le content routing ainsi que la recherche P2P
    • Il est aussi possible de transmettre la passerelle si une connexion directe à celle-ci est possible
  • Le framework P2P Pear pourrait aider à s’éloigner de GitHub pour évoluer vers un véritable système distribué

    • Il s’interroge sur l’intérêt de stocker des fichiers sur IPFS si l’index doit de toute façon se trouver sur GitHub
  • L’utilisation de Helia est envisagée afin de permettre aux utilisateurs de contribuer en tant que nœuds du réseau

    • En cherchant des informations sur Helia, cela lui a rappelé OrbitDB
  • Un problème survient lors de l’accès à certaines ressources, qui sont bloquées à cause de la politique CORS

    • Il est possible de récupérer la ressource en définissant le mode de la requête sur no-cors, ce qui désactive CORS
  • Tout se fait dans le navigateur, sans utilisateurs, cookies ni suivi

    • LocalStorage et IndexedDB sont utilisés pour enregistrer la dernière position de lecture et l’emplacement dans le fichier
    • Cette fonctionnalité lui plaît beaucoup et il exprime sa gratitude
  • La base de données utilisée par TeaTime est un dépôt GitHub publié sur GitHub Pages

    • Cela semble poser un problème de sécurité, car un utilisateur malveillant pourrait utiliser cette balise
  • Comme on ne sait pas ce que contient la base de données, on ne sait pas quoi rechercher

    • Une fonction de navigation est suggérée
  • Une question est posée sur la disponibilité d’une instance de démonstration

  • Quelqu’un se demande s’il serait possible d’intégrer les marque-pages Pocket

    • Il espère pouvoir mettre en cache hors ligne tout ce qu’il veut lire, éviter la dégradation des liens et pouvoir effectuer des requêtes dessus