Skip to content
Alpha The designer is real and runs today. Persistence and publishing are not built yet — read exactly what is missing
Build log

Everything that changed.

Each entry carries the commit it came from, so the claim is checkable rather than decorative. Fixes describe what was wrong — if you already hit the bug, that is the only line that tells you whether it was yours.

Releases
7

Commits that changed the product.

Changes
26

Individual entries across all releases.

Fixes
6

Each one says what was broken.

Latest
2026-09-03

33d03f8

Fix
6
New
18
Change
2
33d03f8

Images carry a source; the sign-in handshake stops stalling

Three unrelated faults, each of which made something look broken rather than report an error.

  • Fix An <img> placed on the canvas was painted with a CSS background-image, so it had no source at all. The browser treated it as a broken image and rendered the alt text — which is why a placed logo displayed as the literal word “Logo”. Images now use src; background-image is right for a div and wrong for an img.
  • Fix The auth settle page could sit spinning forever when the handshake never resolved. It now gives up and says so instead of implying work is still happening.
  • New New brand files: the matched light and on-dark lockup pair, and the satellite mark.
a8d6c0f

The Baselumen library, fonts, links, right-click and image picking

The designer gains most of the things that turn a canvas into a tool you can finish a page in.

  • New The Baselumen component library renders live in a panel and imports into the document. Previews are iframed, because each component ships a stylesheet written for a whole page — rendering that markup inline would leak body and h1 rules into the editor’s own chrome, which looks like a rendering bug and is a scoping mistake.
  • New Imported components stay in flow. A component laid out by its own flex, grid and margins would be destroyed by being assigned absolute coordinates, so imported nodes carry none.
  • New Font choices, written into the document’s stylesheet where they will ship rather than into a separate settings state. Every stack terminates in a generic family — an unterminated stack falls back to Times the moment a webfont fails to load, which is the commonest reason a design “goes serif” for no apparent reason.
  • New A right-click menu for the verbs that change the tree’s shape: wrap, unwrap, duplicate, reorder, lock, hide. It is built from the selection, so it and the inspector can never disagree about what is being acted on.
  • New Pick an already-uploaded image from the inspector instead of re-uploading it.
587cf5f

Environment variables are documented, not committed

No env file is tracked — not .env, not .env.example. The names live in the README, where they cannot sit next to a value.

  • Change Stopped tracking .env.example and documented every variable, including which ones must not be set because the config file is authoritative for them.
935c859

Sign-in gating, preview, and image editing

The app gets an identity boundary and the designer gets a way to see a real page.

  • New Preview opens the document as a genuine page in a new tab. The artboard’s fixed width is dropped and the breakpoint layers are emitted as the media queries they represent — a preview that was 1200px wide on a phone would be the exact opposite of the point.
  • New Clerk gating on the dashboard routes, sharing one account with the rest of the Stacklumen suite rather than standing up a second identity system.
  • New Image editing on the canvas.
18c7ff5

Void elements, style casing, and preset layout

Three faults, all surfaced by the simple act of placing a navbar.

  • Fix The canvas passed children to every tag, including <img>. React does not warn about that — it throws during commit — so one image took the whole canvas down. Void tags now render childless, and a selected one gets its resize handles as a sibling overlay, so an image is not the one element that can be selected and not resized.
  • Fix Style properties are stored kebab-case, because that is what gets serialised and what a person types in the code pane. React’s style prop wants camelCase and silently drops anything else, so background-image never painted. Converted at the boundary rather than stored camelCased: the model’s job is to hold what will be written out.
  • Fix Presets declared display: flex in their stylesheets, which renders correctly in a browser and is wrong in the editor — the canvas asks the model what a parent’s display is, and a rule living in a stylesheet is invisible to the model. Every preset landed as a pile of overlapping boxes. Layout now lives in the node’s own style.
32a2e1a

Flow layout, the keyboard, the blocks panel

Switching to a narrow breakpoint shrank the artboard but left children on their desktop coordinates, so content sprawled outside its section. That is not a bug in the breakpoint code — it is the limit of absolute geometry, which cannot reflow.

  • New Containers resolving to flex or grid lay out their own children, so a preset survives a change of width. Every multi-part preset is now a flex container with media queries for mobile: a navbar that collapses, cards that stack, a split hero that becomes a column.
  • New One declarative keymap drives both the handler and the shortcuts sheet, so a binding cannot exist undocumented and the sheet cannot describe a key that does nothing. Nothing fires while a field has focus — ⌘Z in the code pane has to undo typing.
  • New Copy writes to an in-memory clipboard and to the system clipboard as tagged JSON, preferring whichever is newer, so a section can cross a tab boundary. Pasted trees are re-keyed rather than overwriting the original.
  • New Blocks became a panel rather than a route. A library is consulted mid-build, and sending someone to another page costs them the canvas.
  • Fix Dropdown menus were transparent. The vendored menus paint with bg-popover and --popover was never defined; an undefined custom property is invalid at computed-value time, so the whole declaration was dropped and the surface was never painted. It looked like a z-index bug and was a missing token.
  • Change The designer now blocks editing below 1100px rather than reflowing into a layout where a drag lands on the wrong element.
b28ce7c

First commit — designer, dashboard, marketing site and schema

Comlumen begins as a visual builder for designing and shipping sites, and as part of the Stacklumen suite.

  • New The designer: a visual canvas and a code editor as two views of one reducer, not a primary and a preview.
  • New The section spine — vertical is flow, within a section is free — with a section’s top derived from the heights above it rather than stored.
  • New Breakpoints that cascade downward like max-width queries, storing partial layers so a later base edit still reaches unpinned fields.
  • New Six migrations. Sections are rows with fractional numeric ordering, so a reorder is one write rather than N; their contents are JSONB shaped to match the editor’s model, so there is no translation layer to drift.
  • New Row-level security enabled everywhere. The app runs on the service role, so the policies buy the floor: a leaked anon key reads nothing.

What is next is on the roadmap.

This page is what happened. The other one is what has not, with the gaps named rather than hedged.

Deployed with Astro and Comlumen