feat(skills): add atlas-design skill for visually appealing Mendix apps - #18
Merged
Conversation
A user-facing skill (synced to Mendix projects via `mxcli init`) that makes a
generated app reach "designed product" quality, the way artifact-design does for
HTML and dataviz does for charts. It's the taste + workflow layer on top of
theme-styling (SCSS mechanics), create-page (widget syntax), fragments
(composition), and migrate-design-prototype (design handoff).
Grounded in the STANDARD Atlas design system every project already ships —
Atlas_Core classes + the 39 out-of-the-box Atlas_Web_Content building blocks —
rather than a bespoke per-app library, so it works in any project. Built on the
building-blocks READ capability (SHOW/DESCRIBE BUILDING BLOCK), and validated
against a real Atlas project (the inventory + the Card structure in the worked
example are real DESCRIBE output).
Covers: the Atlas-first thesis and "reach down the stack first"; the 4-layer
architecture (Atlas → brand tokens → identity SCSS → mandatory runtime verify);
the discover → inspect → mirror workflow over out-of-the-box blocks; the Atlas
class + typed-designproperties vocabulary; a Layer-1 brand-token scaffold and an
optional dark-mode widget-override scaffold (inline SCSS); the transparent-Plotly
chart theme; the run --local --watch --screenshot verify loop ("mx check is not
enough"); and the full gotchas catalog.
Honest about the current capability boundary: discovery works today, but
instantiation (USE BUILDING BLOCK) does not yet exist, so the skill teaches
mirroring a block's shape with classes + design properties + fragments, treating
the Atlas block as the canonical target — migrating to native instantiation when
USE BUILDING BLOCK lands.
Single self-contained file (the sync/embed only handles top-level skills/*.md).
Implements the atlas-design proposal (docs/11-proposals/PROPOSAL_atlas_design_system.md).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JXnEgoc2NQP1Y2TWMCMXC4
…rimary path Now that USE BUILDING BLOCK v1 exists, the skill leads with the one-line instantiation instead of the hand-mirror workaround: - Workflow renamed discover → inspect → USE (was → mirror). Step 3 is now `use building block Mod.Name [as prefix_]` (deep-copy), step 4 configures the copied widgets with `alter page`. Mirroring is reframed as the explicit fallback (hand-tuning, or the modelsdk engine before its building-block support lands). - Capability table: Instantiate → ✅ v1 (deep-copy; configure afterwards; legacy engine today). Capability note updated to "discovery AND instantiation both work". - Validation checklist updated to prefer `use building block` + `alter page`. All `use building block` / `alter page` examples are bare page-body lines, which the skill-MDL checker auto-skips (first keyword not in its create/alter/drop entity|page checkable set) — verified with a binary built WITHOUT the grammar, so this PR's CI is green even before the USE BUILDING BLOCK feature (#19) merges. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JXnEgoc2NQP1Y2TWMCMXC4
ako
pushed a commit
that referenced
this pull request
Jul 28, 2026
Ledger findings #17–19: a `set $x = <expr>` value re-serialized from the AST silently corrupted the stored Mendix expression — `mxcli check` passed, `mx check` gave only a generic CE0117: - #17 a division's right operand lost its `$` (`$a / $b` → `$a/b`) - #18 a decimal literal lost its fraction (`2.0` → `2`), breaking Decimal - #19 a small decimal became scientific notation (`0.000001` → `1e-06`) shouldPreserveExpressionSource now keeps the raw source whenever the expression contains a `/` or a decimal literal (a `.` adjacent to a digit), mirroring the existing XPath-where handling — so the exact text survives instead of a lossy AST round-trip. (MDL division is `div`; `/` is the member-access separator, which is what caused the `$`-loss mis-parse — preserving source is the robust fix either way.) Test: TestShouldPreserveExpressionSource_DivisionAndDecimals; repro mdl-examples/bug-tests/ledger-17-19-expression-serialization.mdl. Symptom table updated. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JXnEgoc2NQP1Y2TWMCMXC4
ako
pushed a commit
that referenced
this pull request
Jul 28, 2026
…ecimals Corrects the earlier ledger #17-19 fix, which over-broadly preserved raw expression source whenever it saw a '/'. In MDL '/' is the member-access separator (`$obj/Attr`), not division (that is `div`), so preserving on '/' source-froze every association-navigation path and regressed TestAssociationNavParsing. - shouldPreserveExpressionSource: drop the '/' trigger; keep the decimal-literal trigger (findings #18/#19 — `2.0`->`2`, `0.000001`->`1e-06` are genuine AST-serializer losses that raw-source preservation fixes). - New MDL045: walk the microflow expression tree for a BinaryExpr with operator '/' (`$Dec / 2`, `(...) / $x`) and reject with an actionable "use div" message, instead of silently writing an invalid expression that fails the build (CE0117). The bare `$a / $b` form degrades to a member path and is caught by `check --references`. Tests: TestShouldPreserveExpressionSource_Decimals (renamed), TestValidateMicroflow_SlashDivision. Repros: ledger-17-19 (passes) + ledger-17-slash-division.fail.mdl (MDL045). Skill + symptom-table updated. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JXnEgoc2NQP1Y2TWMCMXC4
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds the
atlas-designuser skill — the taste + workflow layer that makes an mxcli-generated Mendix app reach "designed product" quality by default. Implementsdocs/11-proposals/PROPOSAL_atlas_design_system.md. Synced to Mendix projects viamxcli init.Grounded in the standard Atlas system (not a bespoke library)
Per the direction to base it on what every project already ships, the skill is built on
Atlas_Coreclasses + the 39 out-of-the-boxAtlas_Web_Contentbuilding blocks — so it's universal. It's built on the Building-Blocks READ capability (SHOW/DESCRIBE BUILDING BLOCK,CATALOG.building_blocks) and was validated against a real Atlas project: the block inventory and theCardstructure in the worked example are actualDESCRIBEoutput (container (DesignProperties: ['Card style': on])+ acard-titleclass).What it covers
designpropertiesvocabulary.run --local --watch --screenshotverify loop ("mx checkis not enough").Honest about the capability boundary
Discovery works today; instantiation (
USE BUILDING BLOCK) does not yet exist. So the skill teaches mirroring a block's shape with classes + design properties + fragments, treating the Atlas block as the canonical target — and notes those recipes migrate to native instantiation whenUSE BUILDING BLOCKlands.Structure & validation
.claude/skills/mendix/atlas-design.md, 728 lines). Themxcli initsync +//go:embedonly handle top-levelskills/*.md, so a multi-file subdirectory would never reach user projects — hence one complete file (also better for an LLM skill).make sync-skills+make buildembed it cleanly; the embed dir is gitignored (regenerated), so only the source is committed.mxcli check.theme-styling.md,create-page.md,fragments.md,migrate-design-prototype.md.Bonus: Building-Blocks READ validated on a real project
Authoring this exercised
show building blocks/describe building blockagainst a real Atlas app — 40 blocks enumerated with full metadata, real widget trees rendered. That's the real-project confirmation flagged as the open validation step for the Building-Blocks feature (#16).🤖 Generated with Claude Code
https://claude.ai/code/session_01JXnEgoc2NQP1Y2TWMCMXC4
Generated by Claude Code