Key ▾
All time ▾
dreams
symbols
themes
characters
hub
oldest
tell me
right now
finding the threads...
what surfaced
Dream title
Suggested by AI — edit freely or leave as-is
Dream saved to graph
New life context
Edit life context
Foreground What's most alive and present in your waking life right now.
Background Ongoing but not consuming — present, quieter.
Dormant Paused or resolved — no longer active, but still part of your life.
Archived Excluded from analysis, but remains saved if you ever want to bring it forward again.

About dreama

What is it?

Dreama is a personal dream journal that thinks alongside you. Instead of storing entries as text you scroll through and forget, Dreama builds a living knowledge graph from your dreams. It connects recurring symbols, themes, characters, emotions, and settings across time so you can actually see the patterns in your inner life.

The centerpiece is an interactive D3.js graph where every node is something that appeared in your dreams, and every edge is a relationship between them. But the real value is what the graph enables: querying your own unconscious. Ask it "what symbols appear when I'm in a major life transition?" and it answers — highlighted nodes, a direct response, grounded in your actual data. No manual recall required.

The longer you use it, the richer and more revealing it becomes.

Where did it come from?

I'd been using Claude to dream journal for a few months, loving how rich the analysis could be the longer I maintained a chat thread. Of course, eventually I had multiple disjointed chats with collections of various dreams and analysis. I had a collection of deep insights across my dreams over several months, but no way to review them as one entity. I started to have questions like, "is this the fourth navigation-failure dream I've had lately?", "what do I dream about most when I'm stressed out?" The answers were somewhere inside all of my dream journal chats, I just needed a way to connect them all. This is what Dreama was built to solve.

Quick note on the name: I was explaining the schema design to someone and they said, "Dream schema? So, a Dreama?"

In Spring 2026, I was taking a graduate course on digital transformation at the University of St. Thomas, where I'm pursuing an MS in Information Technology. Our assignment was to explore how AI and knowledge graphs work together — AI creating graph structure from unstructured input, AI traversing that structure to answer questions. Dream journaling turned out to be a near-perfect use case. Dream content is compressed, symbolic, non-linear, and relationship-heavy — exactly the kind of domain where structured context dramatically outperforms raw prompting, and where the before/after delta is immediately legible.

Dreama was built entirely using Claude Code, Anthropic's agentic coding tool — schema design, Flask backend, frontend UI, D3.js visualization, all of it. I used Claude chat to help draft many of the prompts for Claude Code, leaning heavily into describing the "What" and the "Why" and leaving the "How" to Claude Code. As a product professional deepening my technical foundation, it was a chance to experience the tool from the inside.

How it works

Entry flow

When you add a dream, you describe it in a conversational interface powered by Claude (claude-sonnet-4-20250514, Anthropic). Claude asks up to two clarifying questions to draw out detail. Once the conversation closes, it extracts structured entities from the full exchange: symbols, themes, characters, settings, emotions, and body sensations. You review everything before a single node is written to the graph.

Life context

Before analyzing your dream, Claude is given a snapshot of what's currently active in your waking life. Life context windows — persistent tags like "grad school" or "duplex renovation" — move between statuses (Foreground, Background, Dormant, Archived) as your circumstances shift. Foreground contexts appear in your dream entry view. Archived contexts are excluded from interpretation entirely. This grounds every extraction in your actual circumstances rather than producing generic pattern-matching.

The graph

Everything persists as a NetworkX knowledge graph, serialized to graph.json. The D3.js visualization renders it as a force-directed layout: node size reflects connection density, node color reflects type. Two edges are auto-calculated — co_occurs_with (increments each time two symbols share a dream) and activates (derived from which themes cluster within a life context window). Everything else is asserted by you or by Claude, with source always tracked.

Natural language query

Ask the graph in plain English from the Knowledge Graph view. The backend serializes pre-aggregated analytics — symbol frequency tables, theme patterns, per-context-window breakdowns — and Claude returns a direct answer plus the IDs of relevant nodes, which highlight in the visualization.

Technical specs

LayerTechnology
BackendPython / Flask
Graph engineNetworkX
Graph storageJSON (data/graph.json)
AI modelClaude API — claude-sonnet-4-20250514 (Anthropic)
FrontendVanilla JavaScript (no build step)
Graph visualizationD3.js force-directed layout
HostingGitHub Pages (static demo)
Sourceleahv-studio/dream-journal-kg
Schema 8 node types · 15 edge types · 2 auto-calculated edges Node types Dream · Symbol · Theme · Character · Setting · Emotion · LifeContextWindow · BodySensation

Key design decisions:

  • Extraction runs once per entry, after the conversation closes — never mid-conversation
  • is_recurring and is_novel are user-asserted only — the system surfaces frequency data but never infers these flags
  • Null is valid everywhere except required fields — a missing value is meaningful data, not an error
  • Emotion confidence is tracked as stated vs. inferred — inferred values are never presented as fact

Status

Started as a class project in spring 2026, demoed in May, and now actively in development. The static GitHub Pages demo runs entirely in-browser — no backend, no API key required. UAT and continued development planned through summer 2026 and beyond.

Built by Leah Vogel using Claude Code · LinkedIn