8 puntos por GN⁺ 2024-11-29 | 1 comentarios | Compartir por WhatsApp
  • Un sistema de biblioteca estático y descentralizado completo basado en IPFS, SQLite y GitHub
  • Se pueden alojar instancias con actualización automática en Netlify y GitHub Pages

Biblioteca descentralizada

  • La aplicación web TeaTime está completamente separada de la base de datos y de los archivos que recupera.
  • La base de datos utilizada es un repositorio de GitHub etiquetado con el tema teatime-database, publicado en GitHub Pages.
  • Cada repositorio incluye un archivo config.json que apunta a una base de datos SQLite.
  • Antes de que el usuario realice una búsqueda, debe seleccionar la base de datos que usará, y TeaTime consulta la base de datos SQLite usando sql.js-httpvfs.
  • Cada fila de la base de datos SQLite es un elemento de la biblioteca, y la columna de hash del archivo se usa para recuperar el elemento desde IPFS.
  • Como la aplicación web es un sitio estático y la base de datos está compuesta por archivos estáticos, se puede hacer fork, clonar y desplegar fácilmente.
  • La instancia del frontend es un repositorio de GitHub etiquetado con el tema teatime-instance.
  • Como los archivos se sirven desde IPFS, esta arquitectura distribuida mejora la resiliencia de TeaTime.

Funcionalidades

  • Búsqueda por título, autor, año o formato
  • Mantener el historial de lectura y volver a la página al reabrir archivos
  • Descargar archivos localmente
  • Almacenar archivos en caché en IndexedDB para una carga rápida
  • Soltar archivos en TeaTime para renderizarlos
  • Modo oscuro y modo de pantalla completa
  • Sin cookies, sin inicio de sesión
  • Completamente descentralizado

Desarrollo del frontend

  • TeaTime es una aplicación Nuxt.js.
  • Se puede ejecutar fácilmente en local: clona el repositorio y sigue estos pasos
    1. Instalar dependencias: npm install
    2. Ejecutar el servidor: npm run dev
    3. Ir a http://localhost:3000
  • Consulta la documentación de Nuxt para más información

Creación de la base de datos

  • Se puede crear una base de datos haciendo fork del repositorio de base de datos basado en JSON y ajustando los archivos JSON según sea necesario.
  • GitHub Actions genera el archivo SQLite y lo sube a GitHub Pages.
  • Si quieres crear manualmente una base de datos SQLite que funcione con TeaTime, sigue los ejemplos del repositorio de base de datos.
  • Cada base de datos SQLite incluye una tabla con el siguiente esquema. Los nombres de las columnas se pueden ajustar en el archivo 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 el archivo SQLite es demasiado grande, se puede dividir. Conviene revisar la información de optimización de la base de datos. Se recomienda usar FTS.
  • Publica el repositorio en GitHub Pages y asigna el tema teatime-database al repositorio

Contribución

  • Incluso si no sabes programar, puedes contribuir haciendo fork de este repositorio y de tu repositorio de base de datos favorito.
  • Al hacer fork del repositorio, es mejor hacerlo manualmente para que no quede conectado directamente (git clone && git remote add your-origin ... && git push your-origin main).
  • Otra buena forma de contribuir es dar estrella a repositorios de bases de datos útiles. Esto determina el orden de las bases de datos en la interfaz de usuario de TeaTime, para que otros usuarios puedan encontrar fácilmente las mejores bases de datos.

1 comentarios

 
GN⁺ 2024-11-29
Comentarios en Hacker News
  • Un colaborador de IPFS propone una forma de mejorar cómo IPFS maneja las descargas desde múltiples gateways

    • Con @helia/verified-fetch, se pueden aceptar CIDs mediante una API similar a Fetch y encargarse del enrutamiento de contenido y la búsqueda P2P
    • También se puede pasar un gateway si es posible conectarse directamente a él
  • El framework Pear P2P podría ayudar a alejarse de GitHub y pasar a un sistema verdaderamente distribuido

    • Se cuestiona qué sentido tiene guardar archivos en IPFS si el índice tiene que estar en GitHub
  • Se está considerando usar Helia para permitir que los usuarios contribuyan como nodos de la red

    • Al buscar información sobre Helia, eso hizo pensar en OrbitDB
  • Hay un problema en el que el acceso a ciertos recursos queda bloqueado por la política CORS

    • Se puede obtener el recurso con CORS desactivado configurando el modo de la solicitud en no-cors
  • Todo ocurre en el navegador, y no hay usuarios, cookies ni rastreo

    • Se usa LocalStorage e IndexedDB para guardar la última posición de lectura y la ubicación dentro del archivo
    • Le encanta mucho esta función y expresa su agradecimiento
  • La base de datos usada en TeaTime es un repositorio de GitHub publicado en GitHub Pages

    • Parece que un usuario malicioso podría usar esta etiqueta, lo que podría convertirse en un problema de seguridad
  • Como no se sabe qué hay en la base de datos, no se sabe qué buscar

    • Se sugiere una función de exploración
  • Hay una pregunta sobre si se puede usar una instancia de ejemplo

  • Se preguntan si sería posible integrar los marcadores de Pocket

    • Esperan poder almacenar en caché sin conexión todo lo que quieren leer, evitar la degradación de enlaces y poder consultarlo