The Clockchain uses a 3-tier content layer system to progressively enrich nodes with detail. Each layer builds on the previous one, allowing for efficient storage and incremental content generation.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/timepoint-ai/timepoint-clockchain/llms.txt
Use this file to discover all available pages before exploring further.
Layer Definitions
| Layer | Content | Storage Location | Use Case |
|---|---|---|---|
| 0 | URL path + event name only | nodes table (id, name) | Skeletal graph structure, expansion targets |
| 1 | Layer 0 + metadata | nodes table (tags, figures, one_liner) | Browseable events, search results |
| 2 | Layer 1 + full Flash scene | flash_timepoint_id field | Complete synthetic time travel experience |
Layers are cumulative—Layer 2 includes all content from Layers 0 and 1, plus the full Flash scene reference.
Layer 0: Skeletal Structure
The minimal viable node—just a canonical URL and event name:Characteristics
- Minimal data: Only spatiotemporal coordinates and a name
- Not publicly browseable:
visibility = 'private'by default - Expansion targets: Layer 0 nodes are prioritized by the Expander worker
- Auto-linked: Even at Layer 0, nodes receive automatic edges (contemporaneous, same_location, thematic)
Layer 0 nodes are typically generated by the Expander worker or bulk import processes before full content is available.
Layer 1: Metadata Enrichment
Adds human-readable context without full scene rendering:New Fields in Layer 1
| Field | Type | Description | Example |
|---|---|---|---|
one_liner | String | Brief description (1-2 sentences) | "Roman senators assassinate Julius Caesar..." |
tags | Array | Thematic categories | ["ancient-rome", "political-assassination"] |
figures | Array | Key people involved | ["Julius Caesar", "Brutus", "Cassius"] |
Database Schema
Layer 2: Full Flash Scene
Links to a complete Flash scene with dialog, entity states, and narrative:Flash Integration Fields
| Field | Type | Description |
|---|---|---|
flash_timepoint_id | String | Primary reference to Flash scene |
flash_slug | String | Human-readable Flash scene identifier |
flash_share_url | String | Public URL for the rendered scene |
Database Schema
Layer 2 nodes provide the complete “Synthetic Time Travel” experience—immersive dialog, entity states, source grounding, and confidence scores.
Querying by Layer
Thelayer field enables filtering nodes by completeness:
Get All Layer 0 Nodes (Expansion Candidates)
Get Browseable Content (Layer 1+)
Get Full Scenes (Layer 2 Only)
Layer Progression Workflow
Nodes typically advance through layers in sequence:Example: Expander-Generated Node
-
Expander creates Layer 0 node:
-
Enrichment (manual or automated) adds metadata → Layer 1:
-
Flash rendering generates full scene → Layer 2:
Random Public Moments
The/api/v1/random endpoint returns only Layer 1+ nodes:
This ensures users only see moments with sufficient metadata for a meaningful browsing experience.
Layer Statistics
The/api/v1/stats endpoint provides layer distribution:
Example Response
Best Practices
When to use each layer
When to use each layer
- Layer 0: Use for rapid graph expansion—generate many skeletal nodes first, enrich later
- Layer 1: Required for public visibility—always add metadata before publishing
- Layer 2: Reserve for high-value moments that justify the cost of full Flash rendering
Layer advancement strategies
Layer advancement strategies
- Batch enrichment: Generate Layer 0 nodes in bulk, then enrich high-priority nodes to Layer 1
- On-demand rendering: Only advance to Layer 2 when a user requests a specific moment
- Frontier-first: Prioritize Layer 0 → Layer 1 for frontier nodes (low degree) to maximize graph connectivity
Source Code References
- Layer validation:
app/core/graph.py:26 - Layer-based queries:
app/core/graph.py:271-283(random),app/api/moments.py(browse) - Layer statistics:
app/core/graph.py:347-368