<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Jaywalker</title>
    <description>The latest articles on DEV Community by Jaywalker (@jaywalkernotawhitewalker).</description>
    <link>https://dev.to/jaywalkernotawhitewalker</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3880462%2F20a3143e-442a-4da8-949b-806841a67eaa.png</url>
      <title>DEV Community: Jaywalker</title>
      <link>https://dev.to/jaywalkernotawhitewalker</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jaywalkernotawhitewalker"/>
    <language>en</language>
    <item>
      <title>Stop Your AI Agent from Generating Generic UI — Introducing the Design System Skill</title>
      <dc:creator>Jaywalker</dc:creator>
      <pubDate>Wed, 22 Apr 2026 13:48:30 +0000</pubDate>
      <link>https://dev.to/jaywalkernotawhitewalker/stop-your-ai-agent-from-generating-generic-ui-introducing-the-design-system-skill-2o2n</link>
      <guid>https://dev.to/jaywalkernotawhitewalker/stop-your-ai-agent-from-generating-generic-ui-introducing-the-design-system-skill-2o2n</guid>
      <description>&lt;p&gt;Every AI coding agent has the same problem: left to its own devices, it generates generic UI.&lt;/p&gt;

&lt;p&gt;Blue buttons. White cards. 12px spacing that feels off. A hero section with three identical feature columns. Gradient backgrounds. Center-aligned body text. You've seen it a hundred times.&lt;/p&gt;

&lt;p&gt;The agent isn't broken — it just doesn't know your design system. So it makes things up.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Design System Skill fixes this.&lt;/strong&gt; It's a single &lt;code&gt;skill.md&lt;/code&gt; file that works across all major AI coding agents — Claude Code, Codex, OpenCode, Cursor, Gemini CLI, GitHub Copilot CLI, Aider, Hermes, Trae, and Google Antigravity — and enforces a real design system before any UI code gets written.&lt;/p&gt;

&lt;h2&gt;
  
  
  How it works
&lt;/h2&gt;

&lt;p&gt;On first use in a project, the skill runs a 6-step onboarding flow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Form factor&lt;/strong&gt; — Website / Mobile App / Wearable / Desktop App&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;App type&lt;/strong&gt; — Landing page, SaaS dashboard, social app, productivity tool, etc.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Framework / Platform&lt;/strong&gt; — React/Next.js, Flutter, SwiftUI, Vanilla HTML, etc.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;App identity&lt;/strong&gt; — Name, target user, core action, and three vibe words&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Visual reference&lt;/strong&gt; — URL, logo, screenshot, or "feels like [App X]"&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Color direction&lt;/strong&gt; — Extracted from logo or chosen from AI-generated palette options&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;App type comes before framework — design rules are driven by what the app &lt;em&gt;does&lt;/em&gt;, not how it's built.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The skill then generates:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;design-tokens.json&lt;/code&gt; — canonical token source (colors, type, spacing, motion)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Design.md&lt;/code&gt; — your complete design system&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;tailwind.config.js&lt;/code&gt; — Tailwind CSS token mapping&lt;/li&gt;
&lt;li&gt;Flutter &lt;code&gt;ThemeData&lt;/code&gt; — Dart theme file&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;AGENTS.md&lt;/code&gt; — always-on hook for Claude, Codex, OpenCode, Aider, Trae, Hermes&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;.cursor/rules/design-system.mdc&lt;/code&gt; — Cursor &lt;code&gt;alwaysApply: true&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;.agent/rules/design-system.md&lt;/code&gt; — Google Antigravity always-on rules&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every future session in that project — regardless of which agent you use — automatically loads &lt;code&gt;Design.md&lt;/code&gt; before writing any UI code.&lt;/p&gt;

&lt;h2&gt;
  
  
  What rules does it enforce?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Spacing&lt;/strong&gt; — Every margin, padding, and gap must land on the 8pt grid (8, 16, 24, 32...). No arbitrary pixel values.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tokens-first&lt;/strong&gt; — All values live in &lt;code&gt;design-tokens.json&lt;/code&gt;. No hardcoded values in components.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Atomic hierarchy&lt;/strong&gt; — Atoms → Molecules → Organisms. No skipping levels.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Section isolation&lt;/strong&gt; — Every section uses exactly one of: surface shift, whitespace, divider, border, or color fill. Never two same-surface sections stacked without separation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Visual hierarchy&lt;/strong&gt; — One primary action per view. Text flows through three levels: primary → muted → faint.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Contrast&lt;/strong&gt; — WCAG AA mandatory. Body text 4.5:1 minimum. Large text 3:1 minimum.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Anti-patterns blocked&lt;/strong&gt; — Gradient backgrounds, colored card borders, 3-column identical feature grids, center-aligned body text, arbitrary spacing, generic AI hero copy.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the audit looks like
&lt;/h2&gt;

&lt;p&gt;Ask any agent to &lt;code&gt;audit my UI&lt;/code&gt; or &lt;code&gt;check src/components/Card.tsx&lt;/code&gt; and you get:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;DESIGN AUDIT — Card.tsx
----------------------------------------
PASSES (9)
  Spacing: all values on 8pt grid
  Typography: heading matches Level 2 spec
  Contrast: 7.1:1 on --color-surface

WARNINGS (2)
  line 47: padding: 12px — use 8px or 16px
  line 89: font-size: 15px — use 14px or 16px

VIOLATIONS (2)
  line 23: #e5e5e5 on #f0f0f0 — contrast 1.3:1 (FAIL WCAG AA)
  line 67: margin-top: 37px — not on 8pt grid

AUTO-FIX? [y/n]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Install
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://raw.githubusercontent.com/Jaywalker-not-a-whitewalker/DesignSystem/main/install.sh | bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or clone and run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/Jaywalker-not-a-whitewalker/DesignSystem.git
&lt;span class="nb"&gt;cd &lt;/span&gt;DesignSystem
&lt;span class="nb"&gt;chmod&lt;/span&gt; +x install.sh
./install.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;All global installs are &lt;strong&gt;symlinks&lt;/strong&gt; — update &lt;code&gt;skill.md&lt;/code&gt; once and every agent picks it up automatically.&lt;/p&gt;

&lt;h2&gt;
  
  
  Usage
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;your-project

&lt;span class="c"&gt;# Trigger the onboarding flow&lt;/span&gt;
new project
&lt;span class="c"&gt;# or&lt;/span&gt;
create design system
&lt;span class="c"&gt;# or&lt;/span&gt;
/design
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After &lt;code&gt;Design.md&lt;/code&gt; exists, just build:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;build the homepage
build the dashboard
audit my UI
check src/components/Card.tsx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Why one source of truth matters
&lt;/h2&gt;

&lt;p&gt;The key insight is the symlink architecture. You install the skill once globally, and it symlinks into Claude's skills folder, Codex's skills folder, Gemini CLI's skills folder, and so on. When you update &lt;code&gt;skill.md&lt;/code&gt;, every agent picks up the change automatically.&lt;/p&gt;

&lt;p&gt;And per-project, &lt;code&gt;Design.md&lt;/code&gt; + &lt;code&gt;design-tokens.json&lt;/code&gt; + the hook files get committed to git — so every teammate's agent loads the same design system, regardless of which tool they use.&lt;/p&gt;

&lt;h2&gt;
  
  
  GitHub
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/Jaywalker-not-a-whitewalker/DesignSystem" rel="noopener noreferrer"&gt;https://github.com/Jaywalker-not-a-whitewalker/DesignSystem&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;v2.0 is live. One skill file. All agents in sync.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>designsystem</category>
      <category>flutter</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Flutter Release Pipeline: A Multi-Agent Skill for Claude Code, Codex &amp; beyond — one command to test, version bump, build &amp; ship</title>
      <dc:creator>Jaywalker</dc:creator>
      <pubDate>Wed, 15 Apr 2026 12:15:24 +0000</pubDate>
      <link>https://dev.to/jaywalkernotawhitewalker/i-built-a-flutter-release-pipeline-skill-for-claude-code-one-command-to-test-version-bump-build-11fg</link>
      <guid>https://dev.to/jaywalkernotawhitewalker/i-built-a-flutter-release-pipeline-skill-for-claude-code-one-command-to-test-version-bump-build-11fg</guid>
      <description>&lt;h2&gt;
  
  
  The problem with Flutter releases
&lt;/h2&gt;

&lt;p&gt;Every Flutter release used to cost me 20–30 minutes of repetitive, error-prone steps:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Manually editing &lt;code&gt;pubspec.yaml&lt;/code&gt; to bump the version&lt;/li&gt;
&lt;li&gt;Running tests and hoping I didn't forget&lt;/li&gt;
&lt;li&gt;Copying git logs into a release notes file&lt;/li&gt;
&lt;li&gt;Building the AAB, then the APK&lt;/li&gt;
&lt;li&gt;Writing a commit message, tagging, pushing&lt;/li&gt;
&lt;li&gt;Realizing I forgot to update the CSV log&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After doing this for the tenth time, I decided to automate the whole thing as a &lt;strong&gt;multi-agent skill&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  What is a multi-agent skill?
&lt;/h2&gt;

&lt;p&gt;This skill is a plain markdown instruction file — no SDKs, no plugins, no vendor lock-in.&lt;/p&gt;

&lt;p&gt;It works with &lt;strong&gt;any AI coding agent that can read a markdown skill/instruction file&lt;/strong&gt;, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Claude Code&lt;/strong&gt; (Anthropic) — place in &lt;code&gt;~/.claude/skills/&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OpenAI Codex&lt;/strong&gt; — place in your Codex instructions directory&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Antigravity&lt;/strong&gt; — add as a custom instruction/rule&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Any future agent&lt;/strong&gt; — the format is open and portable&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You install it once, and from then on you just say:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Run the Flutter release pipeline"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;...and your agent handles everything.&lt;/p&gt;




&lt;h2&gt;
  
  
  What the skill does
&lt;/h2&gt;

&lt;p&gt;In a single command, the Flutter Release Pipeline skill:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 0 — Project verification&lt;/strong&gt;&lt;br&gt;
Checks that &lt;code&gt;pubspec.yaml&lt;/code&gt; exists, &lt;code&gt;DOCs/&lt;/code&gt; and &lt;code&gt;DOCs/releases/&lt;/code&gt; directories are in place, and loads saved preferences (build type, branch) from &lt;code&gt;flutter_release_config.json&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1 — Run tests (GATE)&lt;/strong&gt;&lt;br&gt;
Runs &lt;code&gt;flutter test --machine&lt;/code&gt;, parses JSON output, counts passed/failed/skipped, logs results to &lt;code&gt;DOCs/test_log.csv&lt;/code&gt;. If any test fails — the pipeline stops. No exceptions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2 — Version bump&lt;/strong&gt;&lt;br&gt;
Reads the current &lt;code&gt;version: X.Y.Z+BUILD&lt;/code&gt; from &lt;code&gt;pubspec.yaml&lt;/code&gt;, increments patch and build number, writes it back.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3 — Git log extraction&lt;/strong&gt;&lt;br&gt;
Extracts commits since the last tag, categorizes them into Features, Bug Fixes, Improvements, and Other.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4 — Release notes&lt;/strong&gt;&lt;br&gt;
Generates a markdown file at &lt;code&gt;DOCs/releases/release_notes_vX.Y.Z.md&lt;/code&gt; and presents it to you for review before proceeding.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5 — CSV logging&lt;/strong&gt;&lt;br&gt;
Appends the release record to &lt;code&gt;DOCs/releases/releases.csv&lt;/code&gt; — append-only, never overwrites.&lt;/p&gt;

&lt;p&gt;**Step 6 — iOS prep (optional)&lt;br&gt;
Runs &lt;code&gt;flutter clean&lt;/code&gt; + &lt;code&gt;flutter pub get&lt;/code&gt; to prepare for Xcode archive.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 7 — **Android build&lt;/strong&gt;&lt;br&gt;
Builds AAB or APK (or both) based on your saved preference.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 8 — Git operations&lt;/strong&gt;&lt;br&gt;
Stages, commits, tags, and pushes everything to your branch.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 9 — Summary&lt;/strong&gt;&lt;br&gt;
Prints a clean summary box with version, branch, test count, build type, and tag.&lt;/p&gt;


&lt;h2&gt;
  
  
  Safety rules baked in
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No deletions&lt;/strong&gt; — ever&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Append-only CSVs&lt;/strong&gt; — release history is never overwritten&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Case-sensitive paths&lt;/strong&gt; — &lt;code&gt;DOCs/&lt;/code&gt; is always respected&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test gate&lt;/strong&gt; — the pipeline cannot proceed past a test failure&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OS detection&lt;/strong&gt; — uses correct commands on macOS, Linux, and Windows&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  How to install
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Claude Code:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cp &lt;/span&gt;flutter-release-pipeline/CLAUDE.md ~/.claude/skills/flutter-release-pipeline.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;OpenAI Codex:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cp &lt;/span&gt;flutter-release-pipeline/CLAUDE.md ~/codex/instructions/flutter-release-pipeline.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Antigravity:&lt;/strong&gt;&lt;br&gt;
Add the contents of &lt;code&gt;CLAUDE.md&lt;/code&gt; as a custom instruction or &lt;code&gt;.cursorrules&lt;/code&gt; file in your project root.&lt;/p&gt;

&lt;p&gt;Then just say to your agent:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Run the Flutter release pipeline"&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  Works on macOS, Linux, and Windows
&lt;/h2&gt;

&lt;p&gt;The skill detects your OS and uses the correct commands for each platform — including PowerShell-compatible output piping on Windows.&lt;/p&gt;


&lt;h2&gt;
  
  
  Also submitted to the official Anthropic skills repo
&lt;/h2&gt;

&lt;p&gt;PR #931 is open on &lt;code&gt;anthropics/skills&lt;/code&gt; (117k stars). Once merged, Claude Code users can install it directly via:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/plugin &lt;span class="nb"&gt;install &lt;/span&gt;flutter-release-pipeline@anthropic-agent-skills
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  GitHub
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/Jaywalker-not-a-whitewalker/flutter-release-pipeline" rel="noopener noreferrer"&gt;https://github.com/Jaywalker-not-a-whitewalker/flutter-release-pipeline&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Stars, issues, and PRs welcome. What other agents do you use for Flutter development?&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>devops</category>
      <category>opensource</category>
      <category>multiagent</category>
    </item>
  </channel>
</rss>
