---
title: "Pixel Pizza"
url: "https://aigamehub.app/en/games/telar-demo-874c33"
source: "https://github.com/deeptelar/telar-demo"
source_type: "github"
play_url: "https://deeptelar.github.io/telar-demo/"
platform: "both"
login_required: false
pricing: "free"
origin: "original"
ai_tools: []
game_languages: ["en"]
author: "deeptelar"
author_handle: "deeptelar"
category: "Casual"
categories: ["casual", "puzzle", "simulation"]
tags: ["ai-agents", "browser", "educational", "kotlin", "open-source", "wasm"]
added: "2026-10-22T02:47:12.182Z"
updated: "2026-10-22T02:47:20.299Z"
locale: "en"
content_locale: "en"
---

# Pixel Pizza

Pixel Pizza is a small browser game about AI agent workflows: you run a pizza shop help desk while a Telar graph processes tickets node by node across eight staged levels, plus a bonus kitchen puzzle.

## Description

Pixel Pizza is a playable game built on the Telar tutorial. You play the help desk of a pizza shop: customers write in, a Telar graph writes back, and you watch the ticket cross the board node by node. Eight stages each introduce one new idea, from a simple two-node line to conditional edges, loops, parallel nodes, save points, model-with-tools loops, retries and a full desk with four kinds of ticket. A bonus K"Kitchen rush" puzzle stage adds a shift-based sorting challenge. The board, ticket panel and run log are drawn live from stream() events; the run log shows what each step wrote into the ticket and which branch a conditional edge picked. Pressing a board tile reveals the code behind it, taken directly from the game's own source files. A "Show JSON + saves" header opens the ticket data as JSON with changed lines marked, plus the checkpoints read by history(), and each checkpoint can be inspected. One Compose Multiplatform codebase runs it in the browser (Kotlin/Wasm), on desktop (JVM) and on Android. No account and no API key are needed.

## Original post

Pixel Pizza: a small game about AI agent workflows in Kotlin. Eight stages, each a Telar graph that runs in your browser. Compose Multiplatform for Wasm, desktop and Android. No API key needed.

Topics: agentic-workflow, ai-agents, claude, compose-multiplatform, demo, game, human-in-the-loop, kmp, kotlin, kotlin-multiplatform, kotlin-wasm, llm, telar, tutorial, webassembly

# Pixel Pizza A small game about graphs. You run the help desk of a pizza shop: customers write in, a [Telar](https://github.com/deeptelar/telar) graph writes back, and you watch the ticket cross the board node by node. **[Play it in your browser](https://deeptelar.github.io/telar-demo/)** ![Stage 8: the kitchen and the driver run at the same time](docs/stage.png) It is the [Telar tutorial](https://github.com/deeptelar/telar/tree/main/docs/tutorial) made playable. Eight stages, one new move each, the same Pixel Pizza help desk growing from two nodes to a full agent workflow. One Compose Multiplatform codebase runs it in the browser (Kotlin/Wasm), on the desktop (JVM) and on Android. No account and no API key needed. ## Stages | # | Stage | The move | |---|---|---| | 1 | A line | Two nodes in a row: `node`, `then`, `invoke` | | 2 | Choices | `conditionalEdge` picks one of three paths | | 3 | Loops | An edge that goes back until the reply passes a check | | 4 | Two at once | Fan-out to nodes with a `work` and an `update`, which run at the same time, and a node that runs once for each dish of the order | | 5 | Save points | `interruptBefore` stops the run for you; `resume` continues it, also after a reload; `effect` pays the refund once when `pay` runs twice | | 6 | The agent | A model that calls tools, as a loop of two nodes | | 7 | Game over | A node with a `retry` tries again by itself, then fails; `resume` retries from the last save | | 8 | The full desk | All of it on one board: four kinds of ticket, four ways through | Each stage is the level of the tutorial with the same number: stage 3 is level 3. Watching a run with `stream()`, the second half of level 4, is not only in stage 4. It is the game: the board, the ticket panel and the run log are drawn from the events of `stream()` as they arrive. Under each step, the run log lists what the step wrote into the ticket (`topic = "delivery"`, `facts += "..."`), and after a conditional edge it says which node the edge picked. In the stages that ask a model, the log shows the answer word by word while the model writes it. Press a tile on the board to see the code behind it: the node, its arrows and the functions it calls. The text is cut out of the game's own source files when the app is built, so it is always the code that runs. **Show JSON + saves**, in the header of the ticket, opens what Telar keeps of the run: the ticket as the JSON of its data class, with the lines the last step changed marked, and the checkpoints that `history()` reads from the checkpointer, the latest first. Both change while the run moves across the board. Press a checkpoint to see the ticket it saved. The game remembers the switch. | | | |---|---| | ![A run waiting at a save point](docs/save-point.png) | ![A failed node, with a retry from the last save](docs/game-over.png) | ## Bonus stage: Kitchen rush ![The board with two sorters, in the middle of a shift](docs/kitchen.png) A puzzle. A pizzeria works through a shift, and
