cleoanka

an interactive page · local-first notes

Notes that never leave

Links become a graph as you type and search catches meaning. All of it in this page, inside your browser; nothing goes to a server.

canvas & code, no dependencies · aura-app on GitHub


1

Links become a graph

The second-brain idea is simple: do not bury notes one by one in folders, link them. The moment you write [[another note]] inside a note, an edge appears between two ideas, and over time your notes become a map of what you think. aura-app does this on macOS, on plain Markdown files.

FIG. 1 — Pick a note on the left or click a node in the graph, and edit it on the right. Type [[Name]] and the link shows up in the graph instantly; link to a note that does not exist yet and a hollow node appears. Notes are stored only in this browser’s local storage.

Nothing you type on this page goes to a server: open the network tab in your browser’s developer tools and write a note, and you will not see a single request. That is exactly the promise of local-first software: the data lives on your device, and the cloud only joins in if you want it to.

2

Searching for the topic, not the word

Classic search wants an exact match. Semantic search turns every note into a vector and returns the vectors closest to the query. The figure below does the simplest, explainable version of this inside your browser: every note is a vector weighted by how distinctive its words are (TF-IDF). Because of Turkish suffixes, words are cut to their first five letters by a crude stemmer. aura-app does the same job with real embedding models and a vector index running on the device.

FIG. 2 — Type something. Left: notes ranked by similarity. Right: every note’s vector squashed to two dimensions (PCA); the gold dot is the query itself. Change the notes in Fig. 1 and this updates too.
[[wikilink]]
An edge between notes; over time, a map of thought.
local-first
Data lives on the device; the cloud is an optional layer.
vectors
Semantic search: note vectors closest to the query; TF-IDF here, local embeddings in the app.