The Oven πŸ”₯

A conversational development environment for creating glyphs through dialogue


The Core Idea

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:

Why This Matters

Problem: Glyphs are static

Current workflow:

  1. Use pre-built glyphs from palette
  2. If none fit your need β†’ stuck
  3. Building custom glyphs requires leaving QNTX, writing code, deploying

Solution: Conversational creation

The Oven workflow:

  1. Drop glyph in oven (or start from scratch)
  2. Talk: "show this JSON as a timeline"
  3. See it appear instantly
  4. Iterate: "add hover tooltips", "try blue instead"
  5. Fork variations: "show me both approaches"
  6. Compare, delete failures, keep winners
  7. Pull out the finished glyph

The canvas becomes a workshop where you build tools through conversation.

The Experience

Visual Layout

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  πŸ”₯ 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    β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Interaction Flow

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

Technical Architecture

The Pieces (All Exist!)

βœ… 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

The Oven Plugin

// 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 Structure

// 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 }
    ]
  }
}

Hot Reload Mechanism

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)();
}

Use Cases

1. API Explorer

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

2. Data Visualization

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

3. Custom Dashboard Widget

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

What Makes This Special

1. Visual Iteration

2. Conversational Programming

3. Safe Experimentation

4. Knowledge Capture

5. Accessible Power

Implementation Phases

Phase 0: Proof of Concept (1 week)

Goal: Single editable glyph with hot reload

Success metric: Edit source, see visual update in < 100ms

Phase 1: Conversational Editing (2 weeks)

Goal: Talk to glyphs, see changes

Success metric: "make border red" β†’ glyph updates automatically

Phase 2: Variations (1 week)

Goal: Fork and compare

Success metric: Create 3 variations, compare side-by-side

Phase 3: Extract & Polish (1 week)

Goal: Ship finished glyphs

Success metric: Ship glyph from oven to production canvas

Phase 4: Advanced Features (Future)

Open Questions

UX Design

  1. Active glyph selection - How do you specify which glyph to edit?

  2. Error presentation - How do compilation errors feel?

  3. Fork timing - When do variations happen?

  4. Layout strategy - How do multiple glyphs arrange?

Technical

  1. Compilation - Server-side (Bun) or client-side (esbuild-wasm)?

  2. Execution sandbox - How to safely run user code?

  3. State management - Can glyphs share data?

  4. Persistence - What gets saved?

Success Metrics

Qualitative

Quantitative

The Big Picture

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