Roadmap

Evolving

What's shipped, what's being built, and what's still an open question.

CardGoblin is a living project. This page says where it actually is — expect it to change.

Shipped#

The editor and the language. Code, live SVG preview, and a schema-driven spreadsheet, wired together with a ~300 ms live compile. Enums, sheets, templates, shapes, Repeat, the full expression engine, and per-card error isolation — the whole pipeline from script to rendered deck.

PDF export. Page size, margins, spacing, cut lines, crop marks, and duplex-mirrored backs, rendered at 300 DPI. See PDF export.

Autosave. Your project — code and rows — survives a reload in your browser; New / Open Project returns to the project chooser. See Autosave.

Autocomplete. The code editor suggests what fits where your cursor is — column names, property names, enum cases, color names, icon codes. See The editor.

Custom card sizes. width_mm: + height_mm: on a Card, beyond the built-in presets.

Icon styles. All ten Dicier faces (flat/block/round × dark/light/heavy, plus pixel) via style: — see Icons.

The Image element. Your own artwork on a card, from a URL — with fit: control and PDF embedding. See Images.

Uploaded assets. An Assets drawer for images local to your machine — upload, rename, delete, and reference them with asset:<name> in any src:, no hosting required. Bundled into project files so art travels with the project. See Uploaded assets.

Project files. Export the project as a file and import it back — backup, moving between browsers, and keeping more than one project. See Project files.

Template composition and parameters. Templates can declare typed param inputs and call other Templates in source order, including inside If, Else, and Repeat. Arguments are explicit, so nested layouts stay reusable without hidden caller state. See Templates & shapes.

Text wrapping. The TextBox element: multi-line text that wraps in the compiler itself, so the preview and the PDF always agree — with hard breaks (\n and newlines in cells), alignment, and clip/shrink overflow control. See Text & TextBox.

Fonts. Nine bundled faces on Text and TextBox — Geist (the default) plus eight more from Cormorant Garamond and Courier Prime — via font:, with wrapping measured against each font's own letterforms. See Text & TextBox.

QR codes. The Qr element: scannable codes generated straight from sheet data, with error-correction levels and a scan-safe quiet zone — the idiom for giving every card in a deck its own code on the back. See QR codes.

Inline icons. {HEARTS} and {asset:skull} markers draw Dicier glyphs and uploaded art right inside Text and TextBox text — including markers that arrive from cell data — each in a one-em slot that wraps like a word. See Inline icons.

Reusable resolved text. {alias:name} expands a top-level Text-valued let name: once before inline icon, asset, and color markers are parsed — also when the alias marker comes from cell data. A cell such as Deal 2 {alias:damage_icon}. can insert one shared, tinted swords asset. See Text aliases.

Additive color styling. Image color: multiply-tints artwork (white is the unchanged default), while nested {color:red}…{/color} scopes recolor words, Dicier glyphs, and inline asset art without changing TextBox wrapping. See Images and Scoped colors.

Further out#

  • Sharing by link — a read-only view of a deck anyone can open. The security, hosting cost, expiry, and deletion model still need design before this is a promise.
  • Uploaded fontsfont: currently picks from a small bundled set (see Text & TextBox); bringing your OWN font file, the way uploaded assets already work for images, is a separate, later piece.
  • Rich text in boxes — inline icons and scoped colors shipped (see Text & TextBox); bold and italic runs are the remaining piece, still a later design round.
  • A browsable icon picker — search and preview the 888 Dicier codes visually instead of typing them from memory.

Open questions#

Things that are genuinely undecided, not just unbuilt:

  • Auto-layout containers (Row, Stack) as sugar over Repeat — worth the language surface, or is index math enough?
  • Inline face templates — anonymous Template bodies directly beneath Front: or Back:; named Template composition is already shipped.
  • Print fidelity — bleed, safe zones, and what "print-ready" should mean for a professional run rather than a home printer.

Following along#

The design document — including every decision made so far and why — lives in the repository at docs/DESIGN.md. If you want to build on CardGoblin, docs/development.md is the developer guide.