A conversational development environment for creating glyphs through dialogue
The Oven is a special canvas where you develop glyphs by talking to them. Drop a glyph in, describe changes, watch it update instantly. Create variations, compare side-by-side, iterate rapidly. When you're happy with a result, pull it outβit's done.
The metaphor:
Current workflow:
The Oven workflow:
The canvas becomes a workshop where you build tools through conversation.
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β π₯ THE OVEN [Close] [Γ] β
βββββββββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββ€
β β β
β ββββββββββββ ββββββββββββ β π¬ Chat β
β β π β β π β β ββββββββββββββββββββ β
β β Chart β β Chart β β β
β β v1 β β v2 β β You: make the bars β
β β [Fork] β β [Fork] β β thicker β
β ββββββββββββ ββββββββββββ β β
β β π₯: Applied changes β
β ββββββββββββ β Recompiling... β
β β π β β Done β β
β β Chart β β β
β β v3 β β [Send message] β
β β [Fork] β β β
β ββββββββββββ β ββββββββββββββββββββ β
β β Active: Chart v1 β
β [+ New Glyph] β Source: 42 lines β
β β Last baked: 2s ago β
βββββββββββββββββββββββββββββββββββββ΄βββββββββββββββββββββββββ
1. Enter the Oven
2. Create or Edit
You: "Create a glyph that shows GitHub commits as a timeline"
π₯: [Creates initial glyph]
Shows basic timeline with commit messages
You: "Make the commits clickable"
π₯: [Updates source, recompiles]
Adds click handlers, highlights on hover
You: "Actually, try two versions - one vertical, one horizontal"
π₯: [Forks into two glyphs]
Both appear side-by-side
3. Iterate and Compare
4. Extract the Winner
β Canvas System - Visual workspace for glyphs β Glyph Model - Data structure with x, y, content, data β Bun Runtime - Fast TypeScript compilation (<50ms) β LLM Integration - Chat that understands code β Hot Reload - Watch content changes, re-render
// qntx-plugins/oven/plugin.ts
export default {
name: 'oven',
registerGlyphs() {
return [{
symbol: 'π₯',
title: 'The Oven',
label: 'Open development environment',
content_url: '/api/oven/workspace',
default_width: 1200,
default_height: 800,
}];
},
registerHTTP(mux) {
// Compile TypeScript source to executable
mux.handle('POST', '/bake', async (req, res) => {
const { recipe } = await req.json();
const baked = await Bun.build({
entrypoints: ['<stdin>'],
stdin: { contents: recipe, loader: 'ts' }
});
res.json({
output: baked.outputs[0].text,
errors: baked.logs
});
});
// LLM edits source based on user instruction
mux.handle('POST', '/edit-recipe', async (req, res) => {
const { currentRecipe, instruction, glyphContext } = await req.json();
// Send to LLM with context about what the glyph does
const newRecipe = await llmEditSource({
source: currentRecipe,
prompt: instruction,
context: glyphContext
});
res.json({ recipe: newRecipe });
});
}
};
// Glyph in the oven (editable)
{
id: "glyph-abc",
symbol: "π",
inOven: true, // Marks as editable/hot-reloadable
// The executable source (the "recipe")
content: `
export default function render({ data }) {
return \`
<div class="chart" style="border: 2px solid blue;">
<h3>\${data.title}</h3>
<div class="bars">
\${data.items.map(item => \`
<div class="bar" style="width: \${item.value}%">
\${item.label}: \${item.value}
</div>
\`).join('')}
</div>
</div>
\`;
}
`,
// Runtime data (separate from code)
data: {
title: "Commits by Author",
items: [
{ label: "Alice", value: 45 },
{ label: "Bob", value: 30 }
]
}
}
Client-side execution (fast!):
// web/ts/components/oven/editable-glyph.ts
export function createEditableGlyph(glyph: Glyph) {
const container = document.createElement('div');
// Initial render
const render = compileAndExecute(glyph.content);
container.innerHTML = render({ data: glyph.data });
// Watch for source changes
uiState.subscribe(`glyph.${glyph.id}.content`, (newSource) => {
try {
const updatedRender = compileAndExecute(newSource);
container.innerHTML = updatedRender({ data: glyph.data });
showSuccess("β Baked successfully");
} catch (err) {
showError(err.message);
}
});
return container;
}
function compileAndExecute(source: string): Function {
// Bun pre-compiles on server, or use esbuild-wasm in browser
// For MVP: simple transpile (strip types, eval)
const transpiled = source
.replace(/export default function/, 'return function')
.replace(/: \w+/g, ''); // Remove type annotations
return new Function(transpiled)();
}
You: "Show me this GitHub API response as cards"
π₯: [Creates card layout glyph]
You: "Add avatars and make names bold"
π₯: [Updates styling]
You: "Try a table view too"
π₯: [Forks variation with table layout]
Result: Two glyphs showing same data, different presentations
You: "Visualize these sales numbers as a bar chart"
π₯: [Creates basic bar chart]
You: "Color bars by region - blue for US, green for EU"
π₯: [Adds conditional styling]
You: "Show me a line chart version"
π₯: [Forks into line chart]
You: "And a pie chart"
π₯: [Another fork]
Result: Three different chart types side-by-side, pick best one
You: "Create a status widget showing server health"
π₯: [Creates widget with status indicators]
You: "Make it update every 5 seconds"
π₯: [Adds polling logic]
You: "Add a mini graph of last 10 datapoints"
π₯: [Adds sparkline]
Result: Production-ready widget built through conversation
Goal: Single editable glyph with hot reload
Success metric: Edit source, see visual update in < 100ms
Goal: Talk to glyphs, see changes
Success metric: "make border red" β glyph updates automatically
Goal: Fork and compare
Success metric: Create 3 variations, compare side-by-side
Goal: Ship finished glyphs
Success metric: Ship glyph from oven to production canvas
Active glyph selection - How do you specify which glyph to edit?
Error presentation - How do compilation errors feel?
Fork timing - When do variations happen?
Layout strategy - How do multiple glyphs arrange?
Compilation - Server-side (Bun) or client-side (esbuild-wasm)?
Execution sandbox - How to safely run user code?
State management - Can glyphs share data?
Persistence - What gets saved?
The Oven transforms QNTX from "place components" to "create components through conversation".
It's not about making programming easierβit's about making creation fluid. The canvas isn't just where you arrange glyphs, it's where you build them.
This is QNTX as workshop, not warehouse.
Status: Vision (Not Yet Implemented) Updated: 2026-02-27 Next Step: Phase 0 prototype - single editable glyph with hot reload