What I Built
NexusGraph is an AI-powered knowledge graph explorer that transforms any text into a stunning, interactive force-directed graph visualization.
Paste an article, research paper, meeting notes, or any content — and watch as Gemma 4 extracts entities, discovers relationships, and builds a beautiful animated knowledge graph in real-time.
✨ Key Features
- 🧠 AI-Powered Entity Extraction — Gemma 4 identifies people, organizations, concepts, technologies, events, and places from any text
- 🔗 Relationship Discovery — Automatically maps how entities connect with descriptive relationship labels
- 🎬 Real-Time Streaming — Nodes and edges appear one-by-one via Server-Sent Events, creating a mesmerizing build animation
- 🖱️ Interactive Graph — Click, drag, zoom, and pan. Hover over nodes to highlight connections. Click any node to see its details and relationships
- 🔍 Explore Deeper — Select any node and ask Gemma 4 to expand it with additional sub-entities and connections
- 💬 Ask Gemma 4 — Ask natural language questions about the graph and get contextual AI-powered answers
- 📊 Category Visualization — Nodes are color-coded by type (person, concept, technology, organization, etc.) with glowing effects
- 📥 Export — Download your knowledge graph as a PNG image
- 🌍 Multilingual — Works with text in 35+ languages thanks to Gemma 4's multilingual training
The Stack
- Backend: Node.js + Express
- AI: Gemma 4 31B Dense via OpenRouter
- Visualization: D3.js force-directed graph
- Streaming: Server-Sent Events (SSE)
- Frontend: Vanilla HTML/CSS/JS — zero frameworks, zero bloat
Demo
🔗 Live Demo → https://nexusgraph-production.up.railway.app
Try clicking one of the built-in examples ("AI & Machine Learning", "History of the Internet", or "The Solar System") to see it in action instantly!
How It Looks
The app analyzes the "AI & Machine Learning" example and extracts 21 entities and 22 relationships, building this interactive graph:
Code
How I Used Gemma 4
Why Gemma 4 31B Dense?
I chose the Gemma 4 31B Dense model because knowledge graph extraction requires deep reasoning that smaller models can't match:
- Complex entity extraction — Identifying that "Dartmouth Conference" is an event, "Geoffrey Hinton" is a person, and "Transformer Architecture" is a technology requires nuanced understanding
- Relationship reasoning — Generating specific relationship labels like "pioneered" or "defeated" (not generic "related to") demands strong language comprehension
- Structured JSON output — Reliably producing valid JSON with nested objects and consistent IDs requires instruction-following capability that the 31B model handles excellently
- Long context — The 256K context window handles lengthy articles and papers without truncation
Three Intentional Integration Points
NexusGraph uses Gemma 4 in three distinct, purpose-built ways — not just a chat wrapper:
1. Analyze (/api/analyze) — The core pipeline. Gemma 4 receives carefully engineered prompts that instruct it to:
- Extract 10-25 entities with categories, descriptions, and importance scores (1-10)
- Map relationships with descriptive labels and strength scores
- Output strict JSON schema for programmatic parsing
// Structured prompt engineering for reliable graph extraction
const ANALYZE_PROMPT = `You are an expert knowledge graph builder...
OUTPUT FORMAT — respond with ONLY this JSON:
{
"nodes": [{"id": "snake_case_id", "label": "...", "category": "person|concept|...", "importance": 8}],
"edges": [{"source": "node_id_1", "target": "node_id_2", "label": "relationship verb", "strength": 7}]
}
RULES:
- Extract 10-25 nodes for optimal visualization
- Every node MUST connect to at least one other node
- Use specific relationship labels — never "related to"`;
2. Explore (/api/explore) — When a user clicks "Explore Deeper" on any node, Gemma 4 generates a sub-graph with 5-10 additional entities specifically related to that concept, while being aware of existing nodes to avoid duplicates.
3. Ask (/api/ask) — Context-aware Q&A. Gemma 4 receives both the original text AND the extracted graph structure, enabling it to answer questions like "What's the connection between Geoffrey Hinton and modern LLMs?" with graph-aware reasoning.
The SSE Streaming Architecture
Instead of waiting for the full response and rendering everything at once, I stream the graph to life:
User Input → Gemma 4 (extract JSON) → Parse → SSE Stream nodes one-by-one → SSE Stream edges → Done
Each node arrives as an individual SSE event with a 120ms delay, triggering a D3.js elastic spring animation. The result is a mesmerizing "graph building itself" effect that makes the AI feel alive.
// Stream nodes one by one for animation effect
for (const node of graph.nodes) {
await delay(120);
sseWrite(res, { type: 'node', data: node });
}
This isn't just eye candy — it gives users real-time feedback during the 10-30 second analysis, turning wait time into an engaging experience.
What I Learned
- Gemma 4's instruction-following for structured JSON is remarkably reliable — I rarely needed to retry for parse errors
- The 31B Dense model strikes the perfect balance between quality and speed for this use case
- Prompt engineering matters more than model size — specific examples and strict format rules dramatically improved extraction quality.
United States
NORTH AMERICA
Related News
Amazon Employees Are 'Tokenmaxxing' Due To Pressure To Use AI Tools
20h ago
UCP Variant Data: The #1 Reason Agent Checkouts Fail
6h ago

Décryptage technique : Comment builder un téléchargeur de vidéos Reddit performant (DASH, HLS & WebAssembly)
16h ago
How Braze’s CTO is rethinking engineering for the agentic area
10h ago
Encryption Protocols for Secure AI Systems: A Practical Guide
20h ago