TeaTime - sistema de biblioteca descentralizada impulsado por SQLite, IPFS y GitHub
(github.com/bjesus)- 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.jsonque 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
- Instalar dependencias:
npm install - Ejecutar el servidor:
npm run dev - Ir a
http://localhost:3000
- Instalar dependencias:
- 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-databaseal 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
Comentarios en Hacker News
Un colaborador de IPFS propone una forma de mejorar cómo IPFS maneja las descargas desde múltiples gateways
@helia/verified-fetch, se pueden aceptar CIDs mediante una API similar a Fetch y encargarse del enrutamiento de contenido y la búsqueda P2PEl framework Pear P2P podría ayudar a alejarse de GitHub y pasar a un sistema verdaderamente distribuido
Se está considerando usar Helia para permitir que los usuarios contribuyan como nodos de la red
Hay un problema en el que el acceso a ciertos recursos queda bloqueado por la política CORS
no-corsTodo ocurre en el navegador, y no hay usuarios, cookies ni rastreo
La base de datos usada en TeaTime es un repositorio de GitHub publicado en GitHub Pages
Como no se sabe qué hay en la base de datos, no se sabe qué buscar
Hay una pregunta sobre si se puede usar una instancia de ejemplo
Se preguntan si sería posible integrar los marcadores de Pocket