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.
FixAn <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.
FixThe 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.
NewNew 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.
NewThe 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.
NewImported 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.
NewFont 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.
NewA 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.
NewPick 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.
ChangeStopped 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.
NewPreview 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.
NewClerk gating on the dashboard routes, sharing one account with the rest of the Stacklumen suite rather than standing up a second identity system.
NewImage editing on the canvas.
18c7ff5
Void elements, style casing, and preset layout
Three faults, all surfaced by the simple act of placing a navbar.
FixThe 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.
FixStyle 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.
FixPresets 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.
NewContainers 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.
NewOne 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.
NewCopy 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.
NewBlocks became a panel rather than a route. A library is consulted mid-build, and sending someone to another page costs them the canvas.
FixDropdown 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.
ChangeThe 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.
NewThe designer: a visual canvas and a code editor as two views of one reducer, not a primary and a preview.
NewThe section spine — vertical is flow, within a section is free — with a section’s top derived from the heights above it rather than stored.
NewBreakpoints that cascade downward like max-width queries, storing partial layers so a later base edit still reaches unpinned fields.
NewSix 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.
NewRow-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.