⟦Šķïþ ţö çöñţëñţ · · ·⟧

Localization lab

This is a layout stress test: interface labels are intentionally accented and expanded. Portfolio content stays in English.

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.

⟦Ŕëšüľţ ·⟧

Implemented a shared workspace for production components, responsive prototypes, and AI instructions. The FORGE generation pipeline remained experimental.

The Prototyping Studio I designed and coded. Repository-backed concepts carry review status, categories, ownership, contributors, and update history in a searchable team library.
The Prototyping Studio I designed and coded. Repository-backed concepts carry review status, categories, ownership, contributors, and update history in a searchable team library.⟦Öþëñ ƒüľľ-šïžë ïḿáĝë · · ·⟧
⟦Ÿëáŕ ·⟧
2025–26
⟦Ḿÿ šçöþë · ·⟧
Designed and coded the shared workspace, Prototyping Studio, and Skills browser. Owned color foundations, component-state matrices, and button Code Connect mapping.
⟦Çöľľáƀöŕáţöŕš · ·⟧
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.

A token architecture shared by design and code

Seven named tonal ramps at thirteen stops each. Nothing consumes a raw palette value. Semantic theme roles alias into the ramps, and every role carries an explicit light assignment and an explicit dark one, so a theme swap is a lookup rather than a redesign. Elevation is authored twice for the same reason.

The system needed success, warning, danger, and info roles alongside the Material 3 theme. We gave those roles explicit light and dark assignments in design and code, so individual screens did not have to invent status colors. Extending the base theme also created a maintenance obligation: future Material upgrades would need a reconciliation pass.

About 1,830 variables across nine collections. The split matters more than the count: primitives separated from semantics, semantics separated from component-state matrices, and one collection built purely to serve the codebase rather than the canvas. Component interaction state runs off variable modes instead of hand-built variants. A text input resolves fifteen bound properties across five modes, so the stroke walks from outline to primary to danger by state and the floating label is a boolean, with no duplicated variant holding either.

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.

From component catalog to shared workspace

The original sandbox opened on a single component example. Navigation sat behind a modal drawer, and components appeared as one long list. It exposed the library, but it did not orient a designer around what they were trying to accomplish, provide a place to review concepts, or show an AI assistant how the repository expected work to be structured.

I redesigned and coded the workspace end to end. A persistent rail separates Home, Components, Prototypes, and Skills. The home page starts with three outcomes: build product UI, explore a concept, or work with AI. That information architecture gives each activity a clear boundary while keeping the same design language and repository context visible across all three.

The Prototyping Studio registers source-controlled concepts with status, category, creator, contributors, and update history. Designers and other non-developers can generate a working concept, open it in a responsive preview canvas, resize across breakpoints, review comments, and inspect the files behind the experience. A prototype is no longer a detached mock or an unexplained branch. It is a reviewable team artifact aligned to production MDS components, with a route back to its source.

The Skills browser surfaces repository-specific instructions, required inputs, file locations, and creation steps for designers, developers, and AI assistants. Figma remains an available input when visual authoring is useful. The aim is to reduce repeated setup and translation work by making the same guidance available to everyone using the workspace.

The design system became a place to browse production patterns, test ideas as working software, and see the instructions an AI assistant would follow.

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.

⟦Đëçïšïöñš · ·⟧

  1. ⟦Ţĥë đëçïšïöñ · ·⟧

    Point Code Connect at Flutter ThemeExtension classes instead of building a wrapper widget for every component.

    ⟦Ţĥë ţŕáđëöƒƒ · ·⟧

    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.

    ⟦Ţĥë çöñšëqüëñçë · · ·⟧

    The connected button set uses ordinary Flutter components with MDS theme configuration, avoiding a separate widget layer to keep aligned with framework updates.

  2. ⟦Ţĥë đëçïšïöñ · ·⟧

    Drive component interaction state from Figma variable modes rather than from hand-built variants.

    ⟦Ţĥë ţŕáđëöƒƒ · ·⟧

    Variable modes require more explanation than a variant picker. Designers need to understand how the state matrix resolves before making a local override.

    ⟦Ţĥë çöñšëqüëñçë · · ·⟧

    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.

  3. ⟦Ţĥë đëçïšïöñ · ·⟧

    Turn the component sandbox into a shared workspace with first-class Prototypes and Skills areas.

    ⟦Ţĥë ţŕáđëöƒƒ · ·⟧

    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.

    ⟦Ţĥë çöñšëqüëñçë · · ·⟧

    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.

  4. ⟦Ţĥë đëçïšïöñ · ·⟧

    Insert a JSON enrichment step and treat per-component skill files as source of truth, instead of writing better prompts.

    ⟦Ţĥë ţŕáđëöƒƒ · ·⟧

    Component instructions and enriched data add a maintenance step. Changes to component behavior must stay aligned with the context the generation pipeline consumes.

    ⟦Ţĥë çöñšëqüëñçë · · ·⟧

    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

⟦Áŕţïƒáçţš · ·⟧

⟦Ƀëƒöŕë áñđ áƒţëŕ · · ·⟧

The 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.⟦Ƀëƒöŕë ·⟧⟦Áƒţëŕ ·⟧

⟦Đŕáĝ ţö çöḿþáŕë. Áŕŕöŵ ķëÿš ŵöŕķ ŵĥëñ ţĥë çöñţŕöľ ïš ƒöçüšëđ. · · · · · · · · · ·⟧

⟦Ƀëƒöŕë ·⟧Before the rebuild, the sandbox opened directly on a typography example with no workspace orientation, prototype library, or visible route to AI instructions.

⟦Áƒţëŕ ·⟧The 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.