Skip to content
scsiwyg
sign insign up
get startedmcpcommunityapiplaygroundswaggersign insign up
โ† WorksonaยทNotella: From Handwritten Pages to a Queryable Knowledge Graph17 Apr 2026David Olsson
โ† Worksona

Notella: From Handwritten Pages to a Queryable Knowledge Graph

#worksona#portfolio#knowledge-graph#ai-pipeline#note-taking#vision-ai

David OlssonDavid Olsson

We built Notella to solve a problem that grows with every filled notebook: handwritten notes are unsearchable, their connections are invisible, and the only way to use them is to read them again. Notella treats the camera as the input device. You photograph a notebook page. An 8-stage AI pipeline transcribes it, extracts structure, and adds the result to a local knowledge graph. You can then chat with your notes, run any of 19 analysis modes, or generate reports across sessions.

The application is a Next.js 16 / React 19 app deployed on Vercel, with all user data stored in browser IndexedDB. Nothing is written to a first-party server. AI calls go from Vercel route handlers to OpenAI or Anthropic directly. Users bring their own API keys (BYOK), with encrypted local storage and an audit log of every model call made on their behalf.


Why a graph over flat notes

A flat note store โ€” whether a folder of text files or a traditional note app โ€” answers one kind of query well: "find this page." It answers longitudinal questions poorly: "how has my thinking on this project evolved?" or "which people appear across all of my field notes from last quarter?"

A knowledge graph answers the second kind. Every entity extracted from every page โ€” people, projects, themes, ideas, dates โ€” becomes a node. Every co-occurrence, dependency, or mention becomes a typed edge. Nodes carry mentionCount, firstSeenAt, lastSeenAt, and aliases so the graph can reason about frequency, recency, and name variants for the same entity.

The graph is also the context layer for the chat interface. When you ask a question, the context assembler queries the graph for relevant nodes and injects their linked pages and summaries into the prompt. You are not searching raw text; you are querying a structured model of your own knowledge.


How the pipeline works end to end

The 8-stage pipeline runs asynchronously via a Web Worker backed by a job queue persisted in IndexedDB. An app reload or tab close does not discard queued work.

Stage 1 โ€” Classify. A vision model returns a structured classification: handwritten_text, mixed_text_diagram, diagram, table, checklist, or whiteboard. This determines how later stages handle the content.

Stage 2 โ€” Transcribe. The model extracts a raw and cleaned transcript, an inferred date, and a top-right page number. The prompt instructs the model to preserve uncertainty rather than fabricate completions.

Stages 3โ€“5 โ€” Analyse, extract actions, interpret diagrams. Structured Zod schemas constrain the output at each stage, making results machine-readable and independently retryable. The analysis stage produces eight sections: projects, themes, ideas, people, relationships, action items, open questions, and a summary.

Stage 6 โ€” Extract metadata. Title, tags, date, and candidate entities are extracted as structured JSON.

Stage 7 โ€” Update the knowledge graph. New entities are merged into existing nodes via heuristic entity resolution. New relationships are added as typed edges.

Stage 8 โ€” Tag. Automated categorisation completes the record.

typescript
// Job state machine (simplified)
type JobStatus =
  | "queued"
  | "preparing"
  | "streaming"
  | "postprocessing"
  | "complete"
  | "error"
  | "cancelled";

interface Job {
  id: string;
  type: "transcribe-page" | "analyze-page" | "update-kg" | "generate-report";
  status: JobStatus;
  retryCount: number;
  relatedRefType: string;
  relatedRefId: string;
}

Where it applies

Notella is designed for knowledge workers whose primary capture medium is paper: researchers maintaining field note corpora, writers tracking ideas across sessions, strategists building personal intelligence bases from meeting notes. The 19-mode analysis system โ€” covering literal itemisation, semantic theme extraction, first-principles reasoning, and full intelligence reports โ€” provides multiple lenses on the same content without re-prompting.

BYOK support and full JSON/Markdown/ZIP export mean the user's corpus is always portable and never locked into the application. The knowledge graph scales to 100K+ entities, making it viable for years of accumulated captures.

Share
๐• Post