Apply the Meshtastic design standards on Android - brand colors, Material 3 tokens, MeshtasticIcons and accessibility - with the upstream `meshtastic/design` standards as the source of truth. Use this whenever you choose a color, icon, spacing value or contrast level, and before claiming a screen matches the design.
92%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
Low
Low-risk findings worth noting
Android-specific guidance for applying the Meshtastic design standards. All visual rules, color palettes, accessibility requirements, and cross-platform conventions live upstream.
Source of truth:
meshtastic/design/standards/That index names the current version; open it from there for the full spec (colors, M3 mapping, accessibility, units/locale, agent checklist). Don't fetchmeshtastic_design_standards_latest.mdover HTTP — it is a symlink, and GitHub returns its target's filename, 35 bytes, with HTTP 200. If this skill diverges from upstream, upstream wins.
Before implementing any UI:
meshtastic/design/standards/audits/settings-validation-matrix.md has field-by-field validation rules for every config/module settingThe upstream standards define M3 role mappings (Section 8). In this codebase:
core/ui/ — the AppTheme composable (core/ui/src/commonMain/kotlin/org/meshtastic/core/ui/theme/Theme.kt)MaterialTheme.colorScheme.primary, .surface, etc.) — never raw hex valuesMODE_DYNAMIC, and MainActivity passes AppTheme(dynamicColor = theme == MODE_DYNAMIC). The default theme follows the system with the brand scheme. The Android dynamicColorScheme() actual is gated by SDK ≥ S; desktop and iOS return null.The M3 roles map to palette steps, not to the two brand colors directly (Color.kt, upstream Section 8):
| Standard Name | Hex | Compose Usage |
|---|---|---|
| Primary (Neutral 800) | #2C2D3C | onSurface / onBackground in light mode, not colorScheme.primary |
| Accent (Green 500) | #67EA94 | colorScheme.primary in dark mode; light primary is Green 700 #2D8F52. Never text on a light background |
| Green 600 | #3FB86D | Success text on light backgrounds |
| Error 500 | #E05252 | Brand error for non-text indicators; colorScheme.error is Error 600 #BA1A1A light and Error 300 #FFB4AB dark |
| Link | #5C6BC0 / #9BA8E0 | Blue 600 light, Blue 400 dark, for clickable text |
Raw palette defined in
core/ui/src/commonMain/kotlin/org/meshtastic/core/ui/theme/CustomColors.kt(e.g.N800,G500,G600,G700,E500,B400); the scheme values are inColor.kt. Reference the M3 token, not the rawCustomColorsentry, in UI code.
MeshtasticIcons (from core/ui/icon/), not material.icons.IconsMaterialTheme.typographyonSurface for text color, never node identity colorsic_launcher — adaptive (androidApp/src/main/res/mipmap-anydpi/ic_launcher.xml) with foreground/background layers. The Play-Store listing asset is androidApp/src/main/ic_launcher2-playstore.png.ic_launcher resource name.When implementing or modifying settings screens, consult the upstream validation spec:
settings-validation-android.md
It documents every field's:
meshtastic/Meshtastic-Android
1bedc5d
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.