3 puntos por GN⁺ 2024-06-13 | 1 comentarios | Compartir por WhatsApp
  • Unforget es una app minimalista de notas que permite escribir primero de forma local y continuar con sincronización cifrada, destacando tanto la privacidad como la usabilidad entre dispositivos
  • Al ser una Progressive Web App, puede usarse en navegador, escritorio y móvil, y funciona sin Electron.js
  • Ofrece escritura en Markdown, exportación con un clic en formato JSON, API pública, y opciones de autohospedaje y nube
  • Con el registro gratuito se pueden usar copias de seguridad y sincronización en la nube completamente cifradas, y no requiere correo electrónico ni número de teléfono
  • Permite importar desde Google Keep, Apple Notes y Standard Notes, pero la disponibilidad y el método de instalación varían según el navegador

Notas offline-first y control de datos

  • Unforget es una app minimalista de notas offline-first que ofrece sincronización cifrada de extremo a extremo
  • Formato de la app y entornos de uso

    • Como Progressive Web App, puede usarse en navegador, escritorio y móvil
    • Funciona sin Electron.js y admite instalación opcional con un clic
    • Promueve un diseño centrado en la privacidad y se ofrece como open source bajo licencia MIT
  • Escritura, migración y exportación

    • Admite escritura en Markdown
    • Permite importar desde Google Keep, Apple Notes y Standard Notes
    • Los datos de las notas pueden exportarse con un clic en formato JSON
  • Sincronización y extensión

    • Mediante registro gratuito, las notas pueden respaldarse en la nube en estado completamente cifrado y sincronizarse entre varios dispositivos
    • El registro no requiere correo electrónico ni número de teléfono
    • Ofrece tanto autohospedaje como opciones en la nube
    • La API pública permite crear clientes propios

Métodos de instalación por navegador

  • Unforget puede usarse directamente desde el navegador, y el método de instalación varía según el entorno
  • Soporte de instalación

    • Chrome: usar el ícono de instalación en la barra de URL
    • Edge: usar el ícono de instalación en la barra de URL
    • Android Browser: menú → Add to Home Screen
    • Safari Desktop: Share → Add to Dock
    • Safari iOS: Share → Add to Home Screen
    • Firefox Android: usar el ícono de instalación en la barra de URL
  • Limitaciones de instalación

    • No puede instalarse en Firefox Desktop

1 comentarios

 
GN⁺ 2024-06-13
Opiniones en Hacker News
  • Me da curiosidad la experiencia de haber creado una PWA offline-first
    La idea de usar la web solo como medio de distribución y el navegador como entorno de ejecución es atractiva, pero me preocupan las pequeñas complicaciones del almacenamiento local
    Como los datos no se ven como un archivo tipo ~/.app/app.dat, da la sensación de “si no está a la vista, se olvida”, y también preocupa la posibilidad de que desaparezcan de pronto por una actualización del navegador, además de la complejidad de manejar el versionado de esquemas en el modelo básico de la web
    La portabilidad de los datos al cambiar a una computadora nueva también es un problema; que se pueda desplegar sin servidor con solo una cuenta de GitHub es atractivo, pero la parte de datos todavía parece inestable
    Dejando de lado que no haya algo como SQLite, tampoco me convence mucho la idea de empaquetar SQLite como un bloque de WebAssembly

    • En el stack web definitivamente hay muchas pequeñas complicaciones, pero IndexedDB ha funcionado de forma bastante estable
      Aun así, tiene limitaciones molestas, como no poder especificar orden ascendente/descendente para cada clave al crear índices en un almacén con varias claves
      Si instalaste una PWA agregándola a la pantalla de inicio, el navegador no debería borrar IndexedDB por motivos como una actualización, y en la práctica parece que los navegadores respetan eso
      La experiencia desarrollando PWA en general ha sido mixta y depende mucho del tipo de app. Para una app de notas con respaldo cifrado en la nube y sincronización, una PWA podría ser la mejor opción, pero si se necesita una integración más profunda con la plataforma, como acceso al sistema de archivos, evitaría una PWA
      Otro problema es iOS Safari, que carece de muchas funciones de PWA como sincronización en segundo plano o notificaciones push offline, y parece poco probable que las soporte en el futuro
      Me da curiosidad si estás considerando una PWA para alguna app en particular
    • Quienes crean apps en el navegador deben tener mucho cuidado con que, cuando falta espacio en disco, muchos navegadores pueden descartar parte del almacenamiento de los sitios web
      Ya es un comportamiento molesto de por sí, pero si no hay respaldo del lado del servidor, pasa de ser una simple molestia a algo más serio
      No estoy seguro de si esta advertencia también aplica a localStorage, pero por experiencia sí aplicó a IndexedDB, y también pareció ocurrir en apps Electron
    • Creo que el almacenamiento offline más seguro es usar el sistema de archivos del navegador (https://developer.mozilla.org/en-US/docs/Web/API/File_System...) para dejar los datos fuera del alcance del navegador
      Funciona bastante bien, pero la desventaja es que el usuario tiene que volver a seleccionar el archivo o directorio cada vez que usa la app, y no hay forma de obligar al selector de archivos a empezar en un directorio específico que no sea uno de los “directorios conocidos”
    • En navegadores basados en Chromium ahora es posible guardar los datos como un archivo tipo ~/.app/app.dat
      Referencia: https://developer.chrome.com/docs/capabilities/web-apis/file...
    • Esta app parece usar better-sqlite3[0] y guardar la base de datos en un archivo llamado private/unforget.db[1]
      No tengo experiencia con SQLite, así que no sé si ese archivo es tan volátil como localStorage
      [0] https://www.npmjs.com/package/better-sqlite3
      [1] https://github.com/computing-den/unforget/blob/master/src/se...
  • Se ve bien. Una sugerencia: sería bueno mostrar con más claridad el flujo de creación de notas
    Todavía no queda claro si se trata de documentos Markdown con título organizados en carpetas/jerarquías, de “tarjetas” sin título o con título opcional organizadas con etiquetas, o de un documento Markdown largo al que se le va agregando contenido continuamente
    Cada una de esas opciones se parece a flujos de trabajo de sistemas de notas populares, así que me gustaría entender qué flujo diseñaron y optimizaron
    La pista de que empezaste como usuario de Google Keep ayuda, pero he usado archivos de texto con Homebrew, Simplenote, Obsidian, etc., y también tengo cierta idea de Evernote u OneNote, así que agradecería algunas señales más sobre la forma de uso

    • En realidad no había pensado lo suficiente en que alguien podría venir desde otros sistemas con conceptos distintos. Voy a explicar mejor el workflow en las notas de demo
      Como respuesta rápida: normalmente mantengo notas muy pequeñas, de unas pocas líneas o con casillas de tareas, y tengo una nota por idea. Eso sí, si una idea crece durante varios días, esa nota también puede volverse mucho más grande, y no hay límite de tamaño para las notas
      Como en Markdown estándar, se puede definir el título de la nota con #, y si dejas una línea en blanco después de la primera línea, la primera línea se convierte automáticamente en el título
      No hay un concepto separado de etiquetas, pero puedes escribir #someTag y luego buscar literalmente #someTag. La búsqueda es una búsqueda simple de subcadenas en todas las notas, sin funciones avanzadas como stemming
    1. Cuantas más opciones de apps de notas que se puedan autohospedar haya, mejor
    2. Errata en la página de demo: PriavcyPrivacy
    3. Me da curiosidad por qué en un navegador aparece el error “Your browser does not support service workers. Please use another browser.” Quisiera saber si se puede evitar, o si el uso de service workers es esencial para lo que diferencia a esta app
    • Sin service workers ya no funciona offline, y esa es una de las funciones principales
      Recuerdo que, estando de viaje, a veces intentaba tomar notas en Google Keep y descubría que no funcionaba offline
      Me da curiosidad qué navegador usas
    • Otra errata pequeña: GitHub falvoredGitHub flavored
  • Me pregunto si tienen planes de integrar algo como https://simplemde.com/ cuando las notas se vuelvan más pesadas.
    Para notas con tablas y cosas así, prefiero un editor WYSIWYG más simple en lugar de estar pendiente todo el tiempo de la sintaxis Markdown.

    • Me gustaría incluir un editor WYSIWYG, pero en las pruebas iniciales no encontré uno que funcionara bien en todas las plataformas.
      También voy a intentar eso.
  • Gran trabajo; espero que siga evolucionando.
    Me recordó a Joplin, y me da curiosidad hacia dónde quieren llevar esta app.

    • También probé Joplin y me gustó bastante, pero tenía algunos problemas además de ser una app Electron.
      Por ejemplo, el flujo de trabajo no se sentía lo suficientemente rápido. Debería poder abrir la app, tocar como mucho una vez y empezar a escribir de inmediato, y poder ingresar varios elementos de tareas sin ir a un menú ni presionar otro botón. En escritorio, de todos modos todo debería estar centrado en el teclado.
      En otras palabras, quiero que la UI no estorbe, y creo que muchas apps de notas fallan en eso.
      En cuanto a la dirección, quiero facilitar la migración desde otras apps. Ya existe la importación desde Google Keep, pero debería haber muchas más.
      Como hay una API pública, también estaría bueno que aparecieran clientes o integraciones para Emacs, VS Code y Vim.
      Fuera de eso, actualmente cubre casi todas mis necesidades.
  • Siempre estoy buscando un mejor repositorio de conocimiento estructurado, y normalmente evito las apps Electron o JavaScript de escritorio, pero parece que la mayor parte de la experimentación viene de ahí.
    Si es una app JavaScript, me pregunto si han considerado soporte para diagramas Mermaid. Aunque es pesado, últimamente uso Joplin para tomar notas porque la sintaxis Mermaid cambió las reglas del juego frente al Markdown simple.
    https://mermaid.js.org/

  • Últimamente sentía una frustración similar con las apps de notas para Android, hasta que encontré una bastante buena y quería mencionarla.
    Se llama Zettel Notes[1], es completamente offline, admite varias opciones de sincronización y las notas son simples archivos Markdown guardados en directorios.
    [1] https://play.google.com/store/apps/details?id=org.eu.thedoc....

    • Zettel Notes es recomendable. La integración con Git en SourceHut fue un poco complicada, pero una vez configurada es excelente, y además soporta la mayoría de las funciones de Org que uso.
  • Siempre estoy buscando una app de notas que pueda autoalojarse y que se vea bien tanto en móvil como en escritorio.
    Me pregunto si en algún momento tienen pensado publicar un contenedor Docker.

    • Si facilita la implementación, no estaría mal sacar un contenedor Docker.
  • Excelente. Me gustaría saber más sobre las apps nativas.
    Estoy buscando algo nativo, liviano y rápido, como Apple Notes.

    • No es una app nativa, sino una aplicación web progresiva (PWA).
      La he usado durante mucho tiempo directamente en un iPhone viejo y es liviana y rápida.
      Para instalarla, en Safari hay que ir a Compartir → Agregar a pantalla de inicio.
  • Me pregunto qué usan para la sincronización.
    Estuve mirando varias soluciones CRDT, pero no estaba seguro de cuál usar, y en package.json no encontré ninguna biblioteca específica de CRDT o sincronización.
    Si la sincronización la hacen ustedes mismos, me pregunto cómo manejan los conflictos.

    • No es CRDT; elegí un enfoque mucho más simple.
      if (a.modification_time > b.modification_time) ...
      Eso es todo. Como con otras funciones, originalmente pensaba implementar CRDT, pero me di cuenta de que en la práctica no lo echo de menos.
      Como no es un editor colaborativo donde varios usuarios editan la misma nota, CRDT no es tan útil.
      Creo que en una app de notas personal, CRDT solo se vuelve necesario cuando varios dispositivos están todos offline y editan la misma nota al mismo tiempo.