Terracraft quickstart
Terracraft is the Tiny registry name for the imported Terracotta Sandbox: a Preact browser application for arranging Minecraft glazed-terracotta blocks. It has a palette, a block grid, four presets, and a tool toolbar. The initial grid is 8 × 8; presets replace it with a 4 × 4 pattern.
The tool is mounted at /t/terracraft/ on tiny.loca.zone. Its interactions are browser-proven on a loopback serving of the built artifact (see Current state); public HTTPS ingress is prepared and awaiting the Gatekeeper seat, so the public address may not resolve until that is applied. No account is intended.
Run locally now
Python 3 and a browser are sufficient to serve the original static source. Run:
python3 -m http.server 55333 --bind 127.0.0.1 --directory /home/loca/dev/tiny/sources/terracraftOpen http://127.0.0.1:55333/ on that machine. The bind is loopback-only; it is not a public deployment command. Stop the server with Ctrl+C. This serves the immutable clone without editing it. The source imports Preact 10.19.2 and HTM 3.1.1 from esm.sh, so this original-source run needs network access to that dependency provider. A loading overlay that never clears can indicate a missing texture; the source has no texture-error recovery handler.
The old README URL http://0rk.de:55333/ is stale: the ground-truth socket observation found no listener there. Do not treat that advertised address as a working service.
Make and export a pattern
Core controls were exercised end-to-end in the c2 headless-Chrome run against the built mount at 390 and 1280 widths: placing via real click, right-click quarter-turn rotation (stored in the grid), R placement rotation, 512 × 512 PNG export, and reload persistence all passed with zero console errors and zero non-local requests. Presets and the fill/pick tools are documented from the source but were not part of that run.
- Choose a texture from the palette. There are 16 glazed-terracotta colors.
- Select the
placetoolbar button and click cells. Dragging while holding the mouse places blocks across cells. - Use the
rotatetoolbar button or R to rotate the selected placement orientation. Right-clicking an occupied cell rotates that placed tile independently. - Select
eraseto remove cells,pickto copy a placed cell’s block and rotation back into the placement tool, orfillto replace a connected region matching both block and rotation. - Try Arrow, Creeper, Spiral, or Check in the preset pane. A preset replaces the current grid with its 4 × 4 pattern; save an export first if the current pattern matters.
- Click the
exporttoolbar button. The implementation downloadsterracotta.png, using 64 pixels per grid cell: 512 × 512 for the default grid and 256 × 256 for a preset. Empty cells remain transparent. X is not implemented as an export shortcut.
The grid is saved in browser localStorage under tc-grid. That stores only the grid, not tool selection or undo history. It is origin-local browser data, not a server account or synchronized backup; a localhost session and the production domain do not share it. PNG export is an image, not an editable project round trip. Use a dedicated browser profile when testing persistence so acceptance steps do not overwrite a user’s pattern.
flowchart LR Palette[Select texture and rotation] --> Place[Place or fill cells] Place --> Grid[Browser grid] Preset[4 by 4 preset] --> Grid Grid --> Storage[Local browser storage] Grid --> Export[Export button] Export --> PNG[terracotta.png]
Controls and limitations
| Action | Inspected control | Important limit |
|---|---|---|
| Place | place toolbar button | No dedicated place shortcut in the handler |
| Erase | E or erase | Drag erases cells |
| Pick | I or pick | Occupied cell only; returns to place |
| Fill | F or fill | Region matching includes rotation |
| Rotate placement | R or rotate | Quarter turns |
| Rotate placed tile | Right mouse button | Not added to undo history |
| Select palette entries | 1–9, then 0 | Shortcuts select only the first ten colors |
| Undo | undo, Ctrl+Z or Meta+Z | First placed snapshot cannot undo to the initial empty grid |
| Redo | redo button | Handler has a Shift+Z branch, but checks lowercase e.key === 'z'; browser shortcut behavior needs proof |
| Export PNG | export button | X is not implemented |
| Clear | clear button | Clear and preset replacement do not push history |
README claims versus inspected source
The README is project context, not an acceptance report. The handler does not implement X export or Ctrl+Y redo. The implementation caps history at 30 snapshots, not the README’s 50. Undo does not cover every transition: right-click rotation, preset replacement, and clear bypass history, and the initial empty state is not recorded. There is no configurable grid-size UI or coordinate-label UI in the inspected source. These limitations are preserved rather than silently fixed during mounting.
Runtime behavior proven in the c2 browser run (host Chrome, loopback serving of dist): placement and rotation, R orientation, 512 × 512 PNG download, reload persistence, mobile and desktop layouts, dock navigation with correct active state, zero console errors, and zero third-party requests thanks to the locally vendored dependencies. Not yet browser-exercised: presets, fill/pick, keyboard behavior beyond R, and the original esm.sh source runtime (the proof ran against the vendored mount, not the frozen clone). A static build alone proves none of this — the recorded run in /home/loca/dev/tiny/evidence/2026-09-28-tiny-5b1edec5-c2/ is the evidence.
Frozen origin and file map
Original source location: dv@0rk.de:/home/dv/dev/terracraft.
Frozen export commit: 243f3e39a06516d4d92324eb00d0e277978c9281.
The original remote directory was left unchanged. A separate export copy was initialized and committed, then transferred into the loca bare anchor /home/loca/dev/tiny-terracraft.git and cloned into /home/loca/dev/tiny/sources/terracraft. Preserve both anchors; do not develop in the imported clone.
| Path relative to the imported source | Role |
|---|---|
index.html | App markup, styles, Preact components, grid state, keyboard handler, persistence, and PNG export |
assets/*_glazed_terracotta.png | Sixteen texture PNGs loaded by relative URL |
README.md | Original run instructions and feature claims; discrepancies listed above |
project.yaml | Original project description |
PIMP.md, PIMP-UI.md, REASONING.md | Historical project and UI reasoning, not proof of current behavior |
Dependencies are Preact 10.19.2, Preact hooks from the same 10.19.2 module family, and HTM 3.1.1. The original module URLs point at esm.sh. The Tiny integration vendors those pinned dependencies locally through an import map in the generated mount, built from the project’s committed lockfile; the frozen clone itself is unchanged.
For source development, clone the bare anchor into a separate working copy, serve it with Python, edit that copy, and reload the browser. The complete commands, registry fields, and publication order are in Adding tools. The application shell and its npm run build output in dist are a separate integration layer, not the original source development loop.