Light
Home
East Blue Design System
Component Assessment Guide
Unified guide for evaluating DS health and native mobile readiness for SwiftUI and Jetpack Compose. Use as first-message context when starting a new assessment session.
Dependencies
01 — AI
Claude
Recommended: Claude Sonnet (latest). Paste this document as first-message context.
02 — Integration
Figma MCP Server
Direct file access. Minimum viewer access. Setup guide
03 — Source
Sticker Sheets v2
04 — Build
Node.js
Run node assessment-src/build.js. No npm packages needed.

Never paste your Figma Personal Access Token into the chat. Authenticate via the MCP server setup.

DS Health — The 4 Traits

Each component is scored on 4 traits. These measure whether the component belongs in the design system and how well it's built.

TraitWhat to Check
ReusableWorks across multiple contexts and flows — not tied to one screen or feature.
Self-containedCarries its own styles, states, and logic without external dependencies.
ConsistentPredictable behavior. Naming, property types, and state coverage align with the DS.
ComposableNests inside other components and fits the existing hierarchy.
Trait Ratings

Each trait gets one of four ratings. These describe how well the trait is met, not the component's overall health.

RatingWhen to Use
PassFully met. No issues — ready for native handoff.
PartialMostly met with minor gaps. Functional but has specific limitations (e.g. missing icon slots, but text variants work).
WarnSignificant concerns that limit reuse or block handoff (e.g. naming issues, raster assets, hardcoded values).
FailBroken. Blocks DS inclusion or native implementation entirely (e.g. flattened icons, no separable layers).
DS Verdicts

The overall DS Health outcome derived from all 4 trait ratings combined.

VerdictMeaning
KeepAll 4 traits pass. Ship as-is.
FixBelongs in DS but has specific issues. Mostly pass/partial with a few warn.
RestructureNeeds significant property or architectural changes. Multiple warn/fail.
ConsolidateMerge into another component.
Product LayerToo feature-specific for core DS.
RemoveRedundant, deprecated, or not a DS concern.
Native Mobile Readiness — 7 Criteria

Can engineers implement it in SwiftUI and Jetpack Compose? The overall status is set by the worst-scoring criterion.

IDCriterionWhat to Check
C1Layer Structure & NamingLayers should use semantic names like leading-icon or content — not Figma defaults like Frame 42 or Group 7. Logical hierarchy, no unnecessary nesting.
C2Variant & Property NamingVariants and properties should follow clear, consistent conventions. Booleans as true/false (not yes/no), enum values lowercase and hyphenated.
C3Token CoverageAll color, spacing, typography, and radius values should be bound to design tokens — not hardcoded. Token coverage determines how easily engineers can map to a native token system.
C4Native MappabilityThe component should map cleanly to a standard native primitive (e.g. DisclosureGroup, Button, List) with no web-only patterns.
C5Interaction State CoverageAll expected interactive states should be defined as variants — default, pressed, focused, disabled, and error. Missing states force engineers to invent visual behavior.
C6Asset & Icon QualityIcons should be vector components (not raster or PNG embeds) and colored using tokens so tinting works natively on both platforms.
C7Code Connect LinkabilityThe component should be a proper Figma component set with property names clean enough to map 1:1 to native parameters via Code Connect.
Native Status Levels

The overall native readiness of a component based on all 7 criteria.

StatusMeaning
ReadyLinkable as-is. Clean structure, maps well to native.
Needs RefinementMinor issues to resolve before linking.
Requires ReworkNeeds redesign before native translation.
Not ApplicableWeb-only or removed — skip native assessment.
FixResolved via Figma. Residual items may remain.
Combined Status
DS HealthNative StatusMeaning
KeepReadyShip it.
Keep / FixNeeds RefinementMinor fixes, assign to DS team.
Fix / RestructureRequires ReworkSignificant work before handoff.
Product LayerN/AMove to product library.
Remove / ConsolidateN/ASkip native assessment.
Report Architecture

The report is a modular, build-assembled static site on GitHub Pages.

Repository Structure
east-blue-design-system/
├── index.html                     ← Built output (do not edit)
├── styles.css                     ← Built output (minified)
└── assessment-src/
    ├── shell.html                 ← Shared layout, sidebar, JS
    ├── styles.css                 ← Source CSS (unminified)
    ├── build.js                   ← Build script
    └── components/
        ├── accordion.html         ← One file per component
        └── ...
Build Process

The build script reads shell.html as the scaffold, extracts 4 tagged blocks from each component file, injects them into the shell, minifies HTML + CSS, and writes to the repo root.

node assessment-src/build.js
GCash-Specific Patterns

Confirmed recurring patterns across the GCash DS. Use as a checklist during every assessment.

Naming & Properties (C2)
Boolean properties as strings — Should be true/false, not yes/no.
Space-separated variant names — Incompatible with Swift/Kotlin enums. Use hyphenated or camelCase.
Version numbers in namestransaction_v1, Type=Version 2 indicate cleanup debt.
Ambiguous sizessize=default is unclear. Use named values (small, medium, large).
Overloaded property keys — A single type encoding style and layout should be split.
State values encoding styleState=Pill mixes concerns. Separate layout from interaction state.
Structure (C1, C4)
Generic layer namesFrame 42, Group 7, Placeholder should be semantic.
Non-component primitives — Boolean ops, flattened shapes, or bare groups where component sets are expected.
Feature variants as separate components[Component] - with [Feature] should be a boolean property.
Baked-in content — Hardcoded content instead of composable slots.
Tokens (C3)
Hardcoded opacity — Use semantic opacity tokens, not raw values on layers.
Generic shadows — Shared Depth/D0 instead of component-specific tokens.
Raw pixel identifiers — Size 64 instead of named tokens like large.
Assets (C6)
Raster icons — Semantic icons as <img> from Figma CDN instead of vector instances. Hard C6 blocker.
States (C5)
Missing disabled — All interactive components need this.
Missing indeterminate — Checkboxes and radio groups.
Missing selected / active — Chips, toggles, tabs.
Incomplete state matrix — Every sub-type should cover all relevant states.
Figma Modes vs Component Properties (C2, C7)

Figma Modes are invisible in developer handoff. When a component uses Variable Collection Modes (e.g. Button's Appearance: Default / Destructive / White / Subtle), developers inspecting via Dev Mode or MCP see only the resolved CSS variable values — not the Mode itself.

A developer inspecting a Destructive Button sees background: var(--main/button/primary/destructive/enabled/bg), but does not see that the Button has 4 appearances, that "Appearance" is a Mode not a property, or how to switch between them in their native API.

Why this matters — Code Connect requires Mode → API parameter translation that must be written manually. A developer missing this context would only implement one appearance and not realize others exist.
Use Mode when — Appearance swap is global (dark theme, brand skin); variable reuse matters more than variant explosion; developers configure appearance at theme level.
Use Property when — Appearance is a per-instance choice (destructive, emphasis level); each appearance needs its own instance visible; developers configure appearance inline per call site.
Recommendation — For component-level appearance variants (destructive, outline, text, subtle), prefer component properties over Modes. Makes the variant matrix explicit in Figma, visible in dev handoff, and directly mappable to native API parameters without manual translation.
If Mode must stay — Document the Mode → API mapping explicitly in the component's Code tab, including every Mode value and its SwiftUI modifier / Compose parameter. Without this doc, the appearance layer is silently lost in handoff.
Known Good Patterns

Semantic color tokensmain/{component}/color/{state}/{role} is consistent.

Chevron icons — Confirmed vector component instances.

Spacing tokensspace/space-* consistently applied.

Custom fonts — Proxima Soft and BarkAda require native bundle verification. Flag once per session.

Discovered During Assessment
CriterionPatternFirst Found In
C2Boolean variant properties using yes/no strings instead of true/falseAccordion
C1Root container frames left as Figma default "Frame"Accordion
C1Leading icon instances named "Placeholder" instead of semantic nameAccordion
C4Expanded content panel added in v4 with content-body frameAccordion
Assessment Workflow

For each Figma node URL received, follow these steps.

Step 1
Get Metadata
Count variants, read property names/values, spot C2 issues, understand layer hierarchy.
get_metadata(fileKey, nodeId)
Step 2
Get Screenshot
Visual confirmation. Identify missing states by what's absent.
get_screenshot(fileKey, nodeId)
Step 3
Get Design Context
Layer naming (C1), token usage (C3), raster icons (C6), layout structure (C4).
get_design_context(fileKey, nodeId,
  disableCodeConnect=true,
  clientFrameworks="SwiftUI, Jetpack Compose",
  clientLanguages="Swift, Kotlin")
Step 4
Get Token Definitions
Confirm token coverage (C3), extract hex values for the report.
get_variable_defs(fileKey, nodeId)
Step 5 — Optional
Spot-check Nodes
Verify if an element is a vector instance or raster.
get_metadata(fileKey, specificNodeId)
Step 6
Write Assessment
Score all 4 traits and 7 criteria. Assign verdicts. Output as markdown summary for review.
Step 7
Produce HTML File
Create assessment-src/components/[name].html with all 4 tagged blocks.
Step 8
Build and Verify
Open in browser. Verify sidebar, summary, and content. Commit and push.
node assessment-src/build.js
Output Format

Two deliverables per component: markdown summary (for review) and HTML file (for the report).

Markdown Summary

Use for in-session review before producing the HTML file.

## [Component Name] `nodeId`

**DS Health:** [Keep / Fix / Restructure / Consolidate / Product Layer / Remove]
**Native Status:** [Ready / Needs Refinement / Requires Rework / Not Applicable]

### DS Health
| Trait | Rating | Notes |
| Reusable | Pass/Warn/Fail | [note] |
...

### Native Readiness
| ID | Criterion | Status | Notes |
| C1-C7 | [name] | Pass/Flag/Fail | [note] |

### Action Items
| # | Criterion | Action | Status |
HTML Component File

File naming: lowercase, hyphenated — accordion.html, bottom-sheet.html

Template reference: Use the Accordion component file as a working reference for the full HTML structure including nav, summary card, tabbed assessment/changelog layout, trait cards, resolved lists, and action items.

Key conventions:

Resolved issues — Use resolved-list class instead of individual infobox blocks.
Action items — Show only open items. Omit completed rows.
Section headings — No A./B./C. prefixes. Use plain sub-headings.
Inline styles — Avoid. Use CSS classes instead.
Copy — Keep concise and direct. Apple-style minimalism.
Interaction states — Omit N/A rows. Add a table-footnote if needed.
Assessment Progress
Current Assessments
ComponentNodeDS VerdictNative StatusStatusNotes
Accordion 16870:9288 Fix Needs Refinement Re-assessing Open: C7
Open Issues
ComponentCriterionActionStatus
AccordionC7Create native component files and register Code Connect mappings via the Figma Code Connect CLI.Open
Ownership
RoleOwner
DS debloat audit methodologyDS team lead
Native readiness methodologyDesign engineering lead
HTML report & build scriptDS team / design engineering
Component HTML filesProduced per-session
Figma file accessFigma admin
Token namingDesign system owner
Mobile Documentation Criteria — 9-Point Assessment

Use this checklist to evaluate every component's documentation before presenting. Score each criterion as Pass, Partial, or Fail. Target: 9/9.

Must-Haves (1–5)
#CriterionPassPartialFail
1Live preview / playgroundInteractive preview with all property controls that update visuallyPreview exists but missing controls for some propertiesNo interactive preview or static screenshot only
2Native install / importSPM URL + Gradle dependency + import statements. "Planned API" badge if unpublishedOnly one platform shownNo install or import instructions
3SwiftUI & Compose snippetsAll styles have SwiftUI + Compose snippets with Copy button. Component API pattern — not container codeSome styles have snippets, others show placeholdersAll blocks show // Loading... or container code
4Props / API tableProminent table mapping every Figma property → SwiftUI + Compose equivalentTable exists but buried or incompleteNo mapping table
5Variants & states (with code)Every style section in Style tab has SwiftUI/Compose component API snippetCode tab has snippets but Style tab still shows placeholder textNo code paired with visual variants
Good-to-Haves (6–9)
#CriterionPassPartialFail
6Native platform notesAccessibility table with iOS + Android columns (touch targets, focus rings, icon-only labels, destructive role, loading state)Some notes but not structured or single-platform onlyNo platform-specific guidance
7Design token connectionEach style/appearance shows token name + hex value + state. Per-mode color specs documentedToken names visible but hex breakdowns or per-mode specs missingOnly hex values with no token names
8Changelog / version historySemantic versioning, entries tied to C1–C7, status badges, Figma node IDsHistory exists but no criterion linkingNo changelog
9Figma ↔ code mappingProperty mapping table matches current architecture, suggested file paths shown, Code Connect readiness table presentMapping exists but references outdated architectureNo Code Connect mapping
Scoring Scale
ScoreRating
9/9Excellent — exceeds all top DS benchmarks
7–8/9Strong — on par with Google Material 3
5–6/9Acceptable — gaps need addressing
3–4/9Weak — significant documentation gaps
0–2/9Not ready — fundamental sections missing
Stale Content Check

After any component restructure (variant count change, property renaming, architecture change), verify ALL of these reflect the current architecture:

  • Verdict summary (variant count, property names)
  • Interactive playground controls (match current properties)
  • Style tab per-style code snippets (match current API)
  • Code tab property mapping table (match current Figma properties)
  • Code tab usage snippets (match current API)
  • Criteria Scorecard notes (match current variant count and property names)
  • Code Connect property mapping (match current architecture)
  • Variants Inventory table (match current variant count and schema)
  • Behavior table (match current states and properties)
Workflow
  1. After completing or updating any component documentation, run through all 9 criteria
  2. Score each as Pass / Partial / Fail
  3. Run the Stale Content Check if the component was restructured
  4. Fix any Partial or Fail items before presenting
  5. Report the final score (e.g. "Button: 9/9")