MDS 2.0 / Prototyping Studio / FORGE
From component library to working prototypes
I designed and coded MDS 2.0's shared workspace, where non-developers generate and review repository-backed prototypes aligned to production components. Agent-readable Skills give coding assistants the same system context, while Figma remains available when it is the right starting point.
Result
Implemented a shared workspace for production components, responsive prototypes, and AI instructions. The FORGE generation pipeline remained experimental.

- Year
- 2025–26
- My scope
- Designed and coded the shared workspace, Prototyping Studio, and Skills browser. Owned color foundations, component-state matrices, and button Code Connect mapping.
- Collaborators
- Three designers on the library, with Flutter engineers on the production system. I implemented the workspace and prototyping features independently.
Three copies of the truth
A design system tends to exist three times: once as a Figma library, once as the code that implements it, and once as documentation describing both. Each copy has a different owner and a different update cadence, so they drift. Add an AI assistant to the workflow and there is a fourth copy, because the model needs an instruction set and somebody writes it by hand.
MDS 2.0 was an attempt to collapse that into one thing. A token architecture in Figma, bound to the Flutter codebase through Code Connect, with component rules written in a form a model could read directly. Not a library plus docs plus prompts. One artifact with several outputs.
I owned the color foundation, the component-state variable matrices, and the Code Connect mapping for the button set. Most of my time went to the seam between those, which is also where all of the arguments were.
A component library, its documentation, and a model's instruction set are one artifact rendered three ways. Most teams maintain three.
Connecting Figma to Flutter
Code Connect maps one Figma button set to five Flutter symbols, including a named constructor. The mapping targets Flutter's ThemeExtension classes rather than bespoke wrapper widgets.
Dev Mode hands an engineer a standard Flutter button snippet. The design-system connection lives in the theme, so it is less obvious at the call site and must be checked in theme configuration. In exchange, engineers can use framework components without maintaining a parallel wrapper layer.
The spec board and the sandbox are deliberately separate objects. The master variant set is locked. Next to it sits a playground of roughly sixty rendered permutations including a disabled state for every style, because the question a developer actually has is not what the spec says, it is what this looks like when it is off.
FORGE: an experimental generation pipeline
FORGE is the pipeline built on top. Three ingest paths converge on one representation: analysis of legacy screens, the proven path from Figma files already built out of MDS components, and an R&D path starting from prompt-generated HTML. All three produce the same enriched JSON. Per-component skill files are what the model reads, and those files are treated as source of truth rather than as prompt scaffolding.
The enrichment step filters tool-specific noise, preserves component identity and structure, and packages the MDS context needed to choose and configure production components. I framed this workflow around shared component instructions so the team could investigate generation quality without rewriting the system context for each attempt.
Which model runs is a controlled variable in the design rather than an implementation detail, so output can be compared across models instead of argued about.
What shipped, and what remained experimental
Code Connect was wired and reporting connected. The artifact I can show is the panel rather than the figma.connect() source file, so that is the limit of the public evidence.
The redesigned workspace, Prototyping Studio, responsive preview canvas, and Skills browser were implemented as working, repository-backed tools. They give designers and developers one place to create and review concepts against the MDS component context used by coding assistants.
FORGE's enrichment path worked at prototype level. End-to-end Flutter generation was not feasible when I last worked on it, output quality had not been benchmarked, and adoption was not instrumented.
The next measurement step would be to track which teams create and review prototypes, how often they return, and where concepts stall. That would connect the implemented workflow to evidence of adoption before making a delivery-speed claim.
◆Decisions
The decision
Point Code Connect at Flutter ThemeExtension classes instead of building a wrapper widget for every component.
The tradeoff
Wrappers would make system use explicit at each call site. Theme extensions require reviewers to inspect the theme configuration to confirm the design-system connection.
The consequence
The connected button set uses ordinary Flutter components with MDS theme configuration, avoiding a separate widget layer to keep aligned with framework updates.
The decision
Drive component interaction state from Figma variable modes rather than from hand-built variants.
The tradeoff
Variable modes require more explanation than a variant picker. Designers need to understand how the state matrix resolves before making a local override.
The consequence
One text input holds fifteen bound properties across five states with nothing duplicated. Changing the error stroke is a single edit that lands everywhere, and the matrix reads to an engineer as a table of resolved values rather than as a pile of variants.
The decision
Turn the component sandbox into a shared workspace with first-class Prototypes and Skills areas.
The tradeoff
The sandbox became a product with repository conventions, metadata, responsive preview behavior, and documentation surfaces to maintain. A simpler component catalog would have required less engineering and fewer ownership decisions.
The consequence
Designers and developers can now move from production patterns to source-controlled concepts and inspect the same instructions available to AI assistants without leaving the workspace. The workflow is implemented, although its effect on delivery speed has not yet been measured.
The decision
Insert a JSON enrichment step and treat per-component skill files as source of truth, instead of writing better prompts.
The tradeoff
Component instructions and enriched data add a maintenance step. Changes to component behavior must stay aligned with the context the generation pipeline consumes.
The consequence
The prototype consumed the same versioned component instructions on every run, replacing ad hoc prompts with shared system guidance. End-to-end output quality remained unbenchmarked, so the evidence is the repeatable context path rather than a productivity claim.
Design systemsProduct designDesign engineeringFigma Code ConnectFlutterAI tooling
◇Artifacts
Before and after
BeforeAfterDrag to compare. Arrow keys work when the control is focused.
BeforeBefore the rebuild, the sandbox opened directly on a typography example with no workspace orientation, prototype library, or visible route to AI instructions.
AfterThe MDS workspace home after I redesigned and coded the sandbox. Outcome-based entry points connect production components, repository-backed prototypes, and agent-readable Skills through one persistent navigation system.
BeforeBefore the rebuild, navigation lived in a modal drawer and presented the component inventory as one long alphabetical list.Open full-size image
AfterA prototype opened in the responsive review canvas. Designers can resize the working experience, inspect its source contents, review comments, and assess breakpoint coverage without separating the preview from its repository context.Open full-size image
AfterThe Skills browser exposes repository-specific instructions, input contracts, file locations, and deterministic creation steps so people and AI assistants work from the same operational guidance.Open full-size image
AfterThe Figma Variables editor with nine collections listed and the TextInput States matrix open: fifteen rows resolving stroke, radius, label, and text roles across five component states.Open full-size image
AfterThe MDS 2.0 library at 24% zoom, showing seven named tonal palettes, the light and dark theme boards that alias into them, and separate elevation effect styles per mode.Open full-size image
AfterFigma's Code Connect panel reporting Connected, mapping one button component set to five Flutter theme-extension symbols including FilledButton.tonal, above the generated Dart preview.Open full-size image
AfterA FigJam board diagramming the FORGE pipeline: three ingest paths converging on one JSON-enriched representation, followed by model selection, planned Flutter output, and a quality benchmark.Open full-size image
