← Volver al Blog

Monté un grafo de conocimiento personal en Neo4j y cancelé Notion — 3 meses, 300 notas, cero mensualidad

Cancelé Notion en abril de 2026 después de cinco años pagando la suscripción Personal Pro. No fue una decisión ideológica: pagué diez dólares al mes durante todo ese tiempo sin cuestionarlo. Diez dólares al mes son 120 dólares al año, que en muchas partes de LatAm equivalen a tres o cuatro días de sueldo de un desarrollador junior. Cinco años son 600 dólares. Y yo seguía sin usar la mitad de lo que Notion ofrecía.

Lo que sí necesitaba era encontrar las conexiones entre lo que leo, escribo y pienso. Notion me daba tablas y bases de datos relacionales. Lo que quería era un grafo.

Este texto es la continuación práctica del post anterior donde conté cómo armé una base de conocimiento personal con 300 fuentes en 3 meses. Aquel se centraba en el pipeline de captura, es decir, cómo llegar a las 300 notas. Este se centra en la estructura: qué hacer con ellas una vez que están dentro de un grafo.

Por qué la tabla no era suficiente

Notion es excelente para lo que promete: bases de datos con vistas múltiples, plantillas repetibles, colaboración con el equipo. Pero mi problema no era estructurar filas. Era encontrar relaciones que había olvidado.

Un ejemplo concreto de febrero de 2026. Estaba escribiendo un texto sobre agentes de IA y necesitaba recuperar una anotación específica sobre un paper de commonsense reasoning que había leído seis meses antes. En Notion tenía tres bases de datos donde podía estar: “Papers leídos”, “Notas de lectura” y “Ideas en proceso”. Busqué en las tres. La nota no aparecía. La había clasificado como “arquitectura de sistemas” en la tercera base, porque en el momento de leer el paper me interesaba desde ese ángulo. Encontrar la conexión “commonsense reasoning → arquitectura de sistemas” en una tabla plana requiere que yo, seis meses después, recuerde bajo qué etiqueta archivé la nota.

Ese es un problema estructural de Notion como categoría, no de Notion como producto. Cualquier sistema basado en filas y etiquetas obliga a decidir por adelantado cuál es la etiqueta correcta. En un grafo, la decisión es distinta: creas la arista entre “commonsense reasoning” y “arquitectura de sistemas” cuando la ves, y aparece cada vez que consultas cualquiera de los dos nodos.

El esquema mínimo que funciona

Empecé con cuatro tipos de nodos. Es la parte donde más se equivocan quienes vienen de Notion: quieren replicar sus 15 bases de datos como 15 tipos de nodos. Yo probé eso el primer fin de semana y fue insostenible. La conclusión después de tres meses:

  • Note — la unidad atómica. Una idea, una observación, un fragmento. Título, contenido, fecha
  • Topic — un concepto o tema. “GraphRAG”, “senso comum emocional”, “context engineering”
  • Source — de dónde vino. Un libro, un paper, una URL, una conversación
  • Person — autor, colega, entrevistado

Con solo cuatro tipos de nodos y tres relaciones principales (MENTIONS, CITES, AUTHORED_BY), el grafo cubre el 95% de mis casos. El otro 5% son excepciones que resuelvo con propiedades en los nodos, sin agregar tipos nuevos.

El error de sobre-estructurar es común entre quienes vienen de bases relacionales. En un grafo, la estructura emerge de las conexiones entre nodos. Menos tipos, más aristas.

Cómo se levanta esto en LatAm sin gastar más

Neo4j Community Edition es gratis y open source (bajo GPLv3). Se ejecuta en cualquier computadora con Docker. La instalación completa es un archivo docker-compose.yml:

services:
  neo4j:
    image: neo4j:5-community
    ports:
      - "7474:7474"
      - "7687:7687"
    environment:
      - NEO4J_AUTH=neo4j/tu-contraseña
      - NEO4J_PLUGINS=["apoc"]
    volumes:
      - ./data:/data
      - ./logs:/logs

docker compose up -d y ya tienes Neo4j activo en localhost:7474. En una computadora modesta (yo lo tengo en un mini PC con 8GB de RAM) responde en menos de 100ms para grafos de miles de nodos. Los 300 nodos que tengo yo cargan queries en decenas de milisegundos.

Si prefieres no auto-hospedar, Neo4j AuraDB tiene un tier gratuito que aguanta un grafo personal sin problema. Pero yo prefiero tener los datos en mi propia máquina; esa es la ventaja principal sobre Notion.

Las tres bases de datos de Notion que se convirtieron en aristas

Este es el ejercicio mental que hice para migrar. En vez de portar cada base de datos como tabla, me pregunté: ¿qué relaciones estaba yo simulando con esta tabla?

Base de datos “Papers leídos” → aristas CITES entre Notes y Sources. Antes, cada paper era una fila con columnas (título, autor, fecha, notas mías). Ahora, cada paper es un nodo Source con propiedades, y mis observaciones son nodos Note conectados vía CITES. Ganancia: puedo consultar “todos los papers que menciono al hablar de GraphRAG” con una sola query, en vez de filtrar por etiqueta.

Base de datos “Personas de mi red” → nodos Person con múltiples aristas AUTHORED_BY y MENTIONED_IN. Antes, cada persona era una fila con “temas de conversación” como texto libre. Ahora, cada persona conecta con los Topic que ha aportado a mi pensamiento y con las Note donde la cito. Es la diferencia entre un directorio y un mapa de influencia.

Base de datos “Ideas en proceso” → nodos Note con propiedad estado. Aquí no gané mucho estructuralmente, porque muchas ideas son islas hasta que maduran. Pero el grafo me deja ver cuáles están conectadas con otras y cuáles llevan meses aisladas. Las islas suelen ser señal de que la idea no encaja en cómo pienso el resto de mi trabajo.

Las tres queries que uso todos los días

La curva de aprendizaje de Cypher es más suave de lo que asusta desde afuera. Son tres queries las que ejecuto casi a diario. Las dejo aquí porque son útiles para quien empieza:

1. “Todo lo que sé sobre este tema”, mi reemplazo mental del buscador de Notion:

MATCH (t:Topic {name: "commonsense reasoning"})<-[:MENTIONS]-(n:Note)
OPTIONAL MATCH (n)-[:CITES]->(s:Source)
RETURN n.title, n.content, collect(s.title) as fuentes
ORDER BY n.date DESC

2. “Qué temas conecto con este autor”. No había forma clara de hacer esto en Notion:

MATCH (p:Person {name: "Sönke Ahrens"})<-[:AUTHORED_BY]-(s:Source)
MATCH (s)<-[:CITES]-(n:Note)-[:MENTIONS]->(t:Topic)
RETURN t.name, count(n) as veces
ORDER BY veces DESC

3. “Qué notas están aisladas”, la más valiosa. Las notas sin relaciones son candidatas a archivar o a repensar:

MATCH (n:Note)
WHERE NOT (n)-[]-()
RETURN n.title, n.date
ORDER BY n.date ASC

En mis 300 notas, esta última query me devolvió 47 huérfanas la primera vez que la corrí. La mitad las archivé sin culpa. La otra mitad me forzó a hacer las conexiones que nunca me había sentado a pensar.

Lo que Bloom y Neo4j Browser hacen y no hacen

Neo4j Browser (viene incluido en Community Edition) sirve para ejecutar queries y visualizar resultados como grafo. Es la interfaz que uso todos los días para agregar nodos, ver conexiones, y depurar el esquema.

Neo4j Bloom es la herramienta de visualización más pulida. Permite recorrer el grafo sin escribir Cypher, con una interfaz de búsqueda tipo “muéstrame todos los papers de 2024 sobre X”. Bloom no está incluido en Community, pero AuraDB Free lo trae. Yo lo uso una vez al mes para vistas panorámicas del grafo entero, y para el trabajo diario me quedo en Browser.

Un consejo práctico: no te obsesiones con la visualización. El valor del grafo está en las queries. Yo pasé la primera semana intentando “hacer que el grafo se viera lindo” antes de darme cuenta de que estaba procrastinando el trabajo real, que es hacer preguntas útiles.

Los tres meses en números

Mediciones reales de mi grafo al día de hoy:

  • Notas totales: 312 (creadas en unos 90 días, promedio de 3.5 por día)
  • Topics: 47
  • Sources: 89
  • Persons: 34
  • Aristas totales: 1,247 (promedio de 4 aristas por nota)
  • Tiempo promedio por query Cypher: 12ms en mi mini PC
  • Tamaño de la base: 18 MB en disco

Notion tenía más contenido (llevaba 5 años), pero mucho de eso eran duplicados y bases de datos abandonadas. La migración me forzó a decidir qué valía la pena mantener. De aproximadamente 800 páginas en Notion, importé 187. Las otras 613 eran mensajes de status a mí mismo, listas de tareas viejas y meetings de trabajos anteriores.

Lo que Zettelkasten y Sönke Ahrens acertaron

Los principios del método Zettelkasten, que el sociólogo alemán Niklas Luhmann practicaba con fichas físicas y que Sönke Ahrens sistematizó en su libro How to Take Smart Notes, mapean casi uno a uno con la estructura de un grafo:

  1. Atomicidad — una nota, un concepto (nodo Note)
  2. Conectividad — cada nota se conecta con otras (aristas)
  3. Autonomía — cada nota tiene sentido por sí sola (contenido en el nodo)
  4. Crecimiento — la red crece orgánicamente (el grafo evoluciona sin re-diseñar)

La diferencia entre un Zettelkasten en Obsidian y uno en Neo4j es que en Obsidian las conexiones son enlaces textuales entre archivos, y en Neo4j son aristas tipadas y consultables. Obsidian es más rápido para empezar. Neo4j te da queries analíticas que Obsidian no puede darte.

Yo empecé en Obsidian por casi un año antes de pasar a Neo4j. Si estás empezando y no quieres levantar Docker, Obsidian es un buen paso intermedio. Pero llega un punto donde quieres preguntarle cosas al grafo además de mirarlo.

Cuándo el grafo no es la respuesta

Antes de que canceles Notion mañana, una advertencia honesta: el grafo pierde contra la tabla en tres casos claros.

  • Colaboración con equipo no técnico. Neo4j no tiene una interfaz que tu compañera de marketing pueda usar sin explicaciones. Si tu PKM tiene que ser compartido con gente que no escribe Cypher, quédate en Notion.
  • Estructuras muy repetitivas. Si lo que tienes son 1,000 tareas con los mismos 6 campos y los mismos 3 estados, una tabla es más eficiente. Un grafo brilla cuando las relaciones son irregulares y variadas.
  • Necesitas apps móviles pulidas. Notion tiene una app para celular decente. Neo4j en el celular es tolerable en el mejor caso. Yo uso una app de captura rápida (Drafts en iOS) que envía las notas por webhook a un endpoint que las inserta en Neo4j, pero no es una experiencia móvil nativa.

Si tu uso cae en cualquiera de estos tres casos, el grafo no te va a servir. Si tu problema es “no encuentro las conexiones entre lo que ya sé”, el grafo es exactamente la herramienta.

Lo que no esperaba

Lo más útil del cambio no fue el ahorro (aunque 120 dólares al año no está mal). Fue el efecto secundario de mantener el grafo: me obliga a pensar en relaciones cuando capturo información. En Notion, capturar era rellenar campos. En Neo4j, capturar es preguntarme “¿con qué se conecta esto?”. Esa fricción mínima cambia la calidad de las notas.

Y sí, cancelar Notion me hizo perder algunas cosas: las plantillas bonitas, los embeds de Loom, el modo de bases de datos vinculadas. Pero descubrí que las extraño mucho menos de lo que pensaba. Cinco años de dependencia se disipan en tres meses cuando la herramienta nueva resuelve el problema que la vieja nunca terminó de resolver.


ken imoto · WebRTC & Voice AI engineer · kenimoto.dev