{"id":"c693f958-9eb7-493e-91a5-59e2bee0a4cd","shortId":"W757eZ","kind":"skill","title":"design-tokens","tagline":"27 Android skills for AI agents (Claude Code, Codex, Cursor). Fixes Supabase auth, Hilt errors, design inconsistency, kapt→ksp, missing UiState states. Reduced my token bills 5×. FitGenZ AI shipped in 18 days.","description":"# Design Tokens\r\n\r\nThe complete Material 3 design system foundation for Android. Every color,\r\nspacing value, elevation, and shape in a production app must come from this\r\nsystem. 22 rules covering all categories globally.\r\n\r\n---\r\n\r\n## CRITICAL — Color System\r\n\r\n### Rule 1: Always Use Semantic Color Roles — Never Hardcode\r\n\r\n```kotlin\r\n// ✅ Every color references MaterialTheme\r\nText(color = MaterialTheme.colorScheme.onSurface)           // primary text\r\nText(color = MaterialTheme.colorScheme.onSurfaceVariant)    // secondary text\r\nBox(Modifier.background(MaterialTheme.colorScheme.surfaceContainerLow))  // card bg\r\nIcon(tint = MaterialTheme.colorScheme.onSurfaceVariant)     // secondary icon\r\n\r\n// ❌ Hardcoded hex — breaks dark mode and dynamic color\r\nText(color = Color(0xFF212121))\r\nBox(Modifier.background(Color.White))\r\n```\r\n\r\n**The 6 color families — each has a surface + on-surface pair:**\r\n- `primary` / `onPrimary` — brand color, key interactive elements\r\n- `secondary` / `onSecondary` — supporting brand color\r\n- `tertiary` / `onTertiary` — accent, contrasting highlight\r\n- `error` / `onError` — errors, destructive actions\r\n- `surface` / `onSurface` — cards, sheets (use `onSurfaceVariant` for secondary text)\r\n- `background` / `onBackground` — page background\r\n\r\n**Container variants** — for filled backgrounds:\r\n`primaryContainer`/`onPrimaryContainer`, `secondaryContainer`/`onSecondaryContainer`\r\n\r\n**Surface containers** — layered depth (lowest→low→default→high→highest)\r\n\r\n**Always pair correctly:** content on `primaryContainer` uses `onPrimaryContainer`, never `onSurface`.\r\n\r\n---\r\n\r\n### Rule 2: Theme Structure — Complete Theme.kt Required\r\n\r\n```kotlin\r\n// ✅ Complete theme with dynamic color + fallback\r\n@Composable\r\nfun AppTheme(\r\n    darkTheme: Boolean = isSystemInDarkTheme(),\r\n    dynamicColor: Boolean = true,\r\n    content: @Composable () -> Unit\r\n) {\r\n    val colorScheme = when {\r\n        dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> {\r\n            val context = LocalContext.current\r\n            if (darkTheme) dynamicDarkColorScheme(context)\r\n            else dynamicLightColorScheme(context)\r\n        }\r\n        darkTheme -> DarkColorScheme   // your brand dark scheme\r\n        else -> LightColorScheme       // your brand light scheme\r\n    }\r\n    MaterialTheme(colorScheme = colorScheme, typography = AppTypography,\r\n        shapes = AppShapes, content = content)\r\n}\r\n\r\n// Theme files: Color.kt · Type.kt · Shape.kt · Theme.kt\r\n// ❌ Defining theme inside a specific screen\r\n// ❌ No dark color scheme defined — only light\r\n// ❌ lightColorScheme() with no arguments — all M3 default purple, no brand\r\n```\r\n\r\n---\r\n\r\n### Rule 3: Dark Mode — Shift Colors, Don't Invert\r\n\r\nDark mode is not `if(dark) Color.White else Color.Black`. Every semantic role\r\nneeds an independently chosen dark variant.\r\n\r\n- Background: `#FAFAFA` → `#1C1B1F` (dark gray, NOT black)\r\n- Primary: dark green `#006C51` → light green `#68DBA8` (shifts to maintain contrast)\r\n- Text: `#212121` → `#E6E1E5` (off-white, not pure white)\r\n- Status bar: light icons when `darkTheme = true`\r\n\r\n```kotlin\r\n// ✅ Status bar adapts to theme\r\nSideEffect {\r\n    WindowCompat.getInsetsController(window, view)\r\n        .isAppearanceLightStatusBars = !darkTheme\r\n}\r\n// ❌ Status bar stays white icons in dark mode\r\n```\r\n\r\n---\r\n\r\n### Rule 4: Dynamic Color — Enable Correctly with Version Check\r\n\r\n```kotlin\r\n// ✅ Android 12+ gets wallpaper color, older gets brand fallback\r\ndynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> {\r\n    if (darkTheme) dynamicDarkColorScheme(context)\r\n    else dynamicLightColorScheme(context)\r\n}\r\n\r\n// Category guidance:\r\n// DISABLE: fintech (HDFC, Paytm), enterprise — brand = trust\r\n// ENABLE:  edtech, healthtech, social — personalization = comfort\r\n// OPTIONAL: ecommerce (depends on brand strength)\r\n// ❌ No version check — crashes on Android < 12\r\n// ❌ No fallback scheme — plain M3 purple on old devices\r\n```\r\n\r\n---\r\n\r\n### Rule 5: Semantic Colors for Status and Finance\r\n\r\n```kotlin\r\n// ✅ Define semantic tokens beyond M3's error role\r\nobject SemanticColors {\r\n    val SuccessLight = Color(0xFF2E7D32)\r\n    val SuccessContainer = Color(0xFFE8F5E9)\r\n    val WarningLight = Color(0xFFE65100)\r\n    val WarningContainer = Color(0xFFFFF3E0)\r\n    val InfoLight = Color(0xFF0277BD)\r\n}\r\n\r\n// Fintech — direction-specific colors (most common mistake):\r\n// ✅ Green = received/credit/gain     Red = sent/debit/loss\r\n// ❌ Green = positive balance  AND  Green for \"available\" (ambiguous)\r\n\r\n// Healthtech — metric-specific colors:\r\n// Heart rate = always red · Sleep = always indigo · Steps = always blue\r\n// ❌ All health metrics same blue — user can't distinguish at a glance\r\n\r\n// Edtech — answer state colors:\r\n// Correct = green · Incorrect = red · Skipped = gray · Streak = orange\r\n// ❌ Correct AND available both green — wrong semantic layer\r\n```\r\n\r\n---\r\n\r\n## CRITICAL — Spacing\r\n\r\n### Rule 6: 4dp Grid — All Spacing from the Scale\r\n\r\n```kotlin\r\n// ✅ Define once, use everywhere\r\nobject Spacing {\r\n    val xs   = 4.dp    // icon internal padding, badge padding\r\n    val sm   = 8.dp    // between icon and label\r\n    val md   = 12.dp   // list item vertical padding\r\n    val lg   = 16.dp   // screen edge, card padding (most common)\r\n    val xl   = 24.dp   // section spacing, dialog padding\r\n    val xxl  = 32.dp   // large section gaps\r\n    val xxxl = 48.dp   // hero padding\r\n}\r\n\r\n// Standard rules:\r\n// Screen horizontal padding: always 16.dp\r\n// Card internal padding: 16.dp\r\n// Between sections: 24.dp\r\n// Between icon and text: 8.dp\r\n// Dialog padding: 24.dp\r\n\r\n// ❌ Arbitrary: 13.dp, 17.dp, 22.dp, 7.dp — not on the grid\r\n// ❌ Different screen edge padding across screens (16 on A, 20 on B)\r\n```\r\n\r\n**Category density guide:**\r\n- Fintech/Enterprise → dense (8-12dp vertical), maximize information\r\n- Healthtech/Proptech → generous (16-24dp), open and calming\r\n- Social feeds → compact (8-12dp between cards)\r\n- Edtech → readable (16-24dp horizontal padding for text)\r\n\r\n---\r\n\r\n## HIGH — Elevation\r\n\r\n### Rule 7: Tonal Elevation — Not Box Shadows\r\n\r\n```kotlin\r\n// ✅ M3 uses color tints for elevation, not drop shadows\r\nSurface(tonalElevation = 3.dp)    // correct M3 elevation\r\nCard(elevation = CardDefaults.cardElevation(defaultElevation = 1.dp))\r\n\r\n// Elevation scale:\r\n// 0dp = background · 1dp = cards · 3dp = hover/nav bar\r\n// 6dp = FAB · 8dp = drawer · 12dp = modal sheets/dialogs\r\n\r\n// Dark mode: higher elevation = lighter surface (automatic with tonalElevation)\r\n\r\n// ❌ shadowElevation = 8.dp everywhere — Material 2 style\r\n// ❌ Modifier.shadow() — bypasses M3 system\r\n// ❌ Same elevation for everything — no depth hierarchy\r\n```\r\n\r\n---\r\n\r\n## HIGH — Shapes\r\n\r\n### Rule 8: Shape Scale — Consistent Personality\r\n\r\n```kotlin\r\n// ✅ Define app shape personality once\r\nval AppShapes = Shapes(\r\n    extraSmall = RoundedCornerShape(4.dp),   // chips, badges\r\n    small      = RoundedCornerShape(8.dp),   // text fields, small buttons\r\n    medium     = RoundedCornerShape(12.dp),  // cards (most common)\r\n    large      = RoundedCornerShape(16.dp),  // bottom sheets, dialogs\r\n    extraLarge = RoundedCornerShape(28.dp),  // large feature cards\r\n)\r\n\r\n// Bottom sheet: top corners only\r\nModalBottomSheet(shape = RoundedCornerShape(topStart = 28.dp, topEnd = 28.dp))\r\n\r\n// ❌ Arbitrary radii: 7dp, 15dp, 22dp — not in scale\r\n// ❌ All components same radius — no shape hierarchy\r\n// ❌ Image corner bleeds past card radius (missing clip)\r\n```\r\n\r\n**Category shape personalities:**\r\n- Fintech → conservative (4-12dp), pill shapes signal unreliability in banking\r\n- Edtech → friendly (16-20dp for course cards), pill for tags\r\n- Healthtech → soft (20-28dp for metric cards), circles for rings\r\n- Enterprise → minimal (4-8dp), professional density\r\n- Social → chat bubbles need asymmetric radius (large on 3 corners, small on sender corner)\r\n\r\n---\r\n\r\n## HIGH — Brand Colors\r\n\r\n### Rule 9: Integrate Brand Without Breaking System\r\n\r\n```kotlin\r\n// ✅ Brand color becomes the M3 primary — let M3 generate the scheme\r\n// Use Material Theme Builder: https://m3.material.io/theme-builder\r\n// Input your brand hex → get all 30 role values generated automatically\r\n\r\n// Brand color contrast check (WCAG AA = 4.5:1 minimum):\r\n// Too light brand (e.g. #58CC02): darken to #3D9B00 for text use\r\n// Use light brand as container, dark text on it\r\n\r\n// ❌ Brand color used for body text (primary is for interactive only)\r\n// ❌ Brand color ignores dark mode variant\r\n// ❌ Same brand shade for both themes — fails contrast in dark mode\r\n// ❌ Brand overrides error color — always keep red for errors\r\n```\r\n\r\n---\r\n\r\n## References\r\n\r\n- `references/color-roles-reference.md` — Full 30-role table, component→color mapping, surface container guide. Read when choosing which role to use for a new component.\r\n- `rules/` — 8 individual rule files with complete examples and anti-patterns for all rules above.","tags":["design","tokens","android","agent","skills","piyushverma0","agent-skills","ai-agent","antigravity","claude-code","codex","cursor"],"capabilities":["skill","source-piyushverma0","skill-design-tokens","topic-agent-skills","topic-ai-agent","topic-android","topic-antigravity","topic-claude-code","topic-codex","topic-cursor","topic-gemini-cli","topic-hilt","topic-jetpack-compose","topic-kotlin","topic-material3"],"categories":["android-agent-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/piyushverma0/android-agent-skills/design-tokens","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add piyushverma0/android-agent-skills","source_repo":"https://github.com/piyushverma0/android-agent-skills","install_from":"skills.sh"}},"qualityScore":"0.454","qualityRationale":"deterministic score 0.45 from registry signals: · indexed on github topic:agent-skills · 8 github stars · SKILL.md body (8,930 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T19:09:09.674Z","embedding":null,"createdAt":"2026-05-18T13:14:49.255Z","updatedAt":"2026-05-18T19:09:09.674Z","lastSeenAt":"2026-05-18T19:09:09.674Z","tsv":"'-12':662,679,852 '-20':863 '-24':670,686 '-28':874 '-8':885 '/theme-builder':931 '006c51':328 '0dp':724 '0xff0277bd':478 '0xff212121':118 '0xff2e7d32':462 '0xffe65100':470 '0xffe8f5e9':466 '0xfffff3e0':474 '1':74,950 '1.dp':721 '12':383,430 '12.dp':581,795 '12dp':735 '13.dp':636 '15dp':826 '16':650,669,685,862 '16.dp':588,619,623,801 '17.dp':637 '18':35 '1c1b1f':320 '1dp':726 '2':198,751 '20':653,873 '212121':337 '22':64 '22.dp':638 '22dp':827 '24.dp':597,626,634 '27':4 '28.dp':807,820,822 '3':42,292,897 '3.dp':713 '30':938,1012 '32.dp':604 '3d9b00':959 '3dp':728 '4':373,851,884 '4.5':949 '4.dp':566,783 '48.dp':610 '4dp':550 '5':30,441 '58cc02':956 '6':123,549 '68dba8':331 '6dp':731 '7':695 '7.dp':639 '7dp':825 '8':661,678,767,1033 '8.dp':574,631,748,788 '8dp':733 '9':907 'aa':948 'accent':148 'across':648 'action':155 'adapt':355 'agent':9 'ai':8,32 'alway':75,187,506,509,512,618,1004 'ambigu':498 'android':5,47,382,429 'answer':527 'anti':1042 'anti-pattern':1041 'app':58,774 'appshap':259,779 'appthem':213 'apptypographi':257 'arbitrari':635,823 'argument':284 'asymmetr':893 'auth':16 'automat':744,942 'avail':497,540 'b':655 'background':165,168,173,318,725 'badg':570,785 'balanc':493 'bank':859 'bar':346,354,365,730 'becom':916 'beyond':452 'bg':101 'bill':29 'black':324 'bleed':840 'blue':513,518 'bodi':976 'boolean':215,218 'bottom':802,811 'box':97,119,699 'brand':136,144,244,250,290,389,410,422,904,909,914,934,943,954,965,972,983,990,1000 'break':109,911 'bubbl':891 'build.version':229,394 'build.version.sdk':227,392 'builder':928 'button':792 'bypass':754 'calm':674 'card':100,158,591,620,682,717,727,796,810,842,867,878 'carddefaults.cardelevation':719 'categori':68,403,656,846 'chat':890 'check':380,426,946 'chip':784 'choos':1023 'chosen':315 'circl':879 'claud':10 'clip':845 'code':11 'codes.s':230,395 'codex':12 'color':49,71,78,84,88,93,114,116,117,124,137,145,209,276,296,375,386,443,461,465,469,473,477,483,503,529,704,905,915,944,973,984,1003,1016 'color.black':308 'color.kt':264 'color.white':121,306 'colorschem':224,254,255 'come':60 'comfort':417 'common':485,594,798 'compact':677 'complet':40,201,205,1038 'compon':832,1015,1031 'compos':211,221 'conserv':850 'consist':770 'contain':169,179,967,1019 'content':190,220,260,261 'context':232,237,240,399,402 'contrast':149,335,945,996 'corner':814,839,898,902 'correct':189,377,530,538,714 'cours':866 'cover':66 'crash':427 'critic':70,546 'cursor':13 'dark':110,245,275,293,300,305,316,321,326,370,738,968,986,998 'darkcolorschem':242 'darken':957 'darkthem':214,235,241,350,363,397 'day':36 'default':184,287 'defaultelev':720 'defin':268,278,449,558,773 'dens':660 'densiti':657,888 'depend':420 'depth':181,762 'design':2,19,37,43 'design-token':1 'destruct':154 'devic':439 'dialog':600,632,804 'differ':644 'direct':481 'direction-specif':480 'disabl':405 'distinguish':522 'dp':663,671,680,687,853,864,875,886 'drawer':734 'drop':709 'dynam':113,208,374 'dynamiccolor':217,226,391 'dynamicdarkcolorschem':236,398 'dynamiclightcolorschem':239,401 'e.g':955 'e6e1e5':338 'ecommerc':419 'edg':590,646 'edtech':413,526,683,860 'element':140 'elev':52,693,697,707,716,718,722,741,758 'els':238,247,307,400 'enabl':376,412 'enterpris':409,882 'error':18,151,153,455,1002,1008 'everi':48,83,309 'everyth':760 'everywher':561,749 'exampl':1039 'extralarg':805 'extrasmal':781 'fab':732 'fafafa':319 'fail':995 'fallback':210,390,432 'famili':125 'featur':809 'feed':676 'field':790 'file':263,1036 'fill':172 'financ':447 'fintech':406,479,849 'fintech/enterprise':659 'fitgenz':31 'fix':14 'foundat':45 'friend':861 'full':1011 'fun':212 'gap':607 'generat':922,941 'generous':668 'get':384,388,936 'glanc':525 'global':69 'gray':322,535 'green':327,330,487,491,495,531,542 'grid':551,643 'guid':658,1020 'guidanc':404 'hardcod':81,107 'hdfc':407 'health':515 'healthtech':414,499,871 'healthtech/proptech':667 'heart':504 'hero':611 'hex':108,935 'hierarchi':763,837 'high':185,692,764,903 'higher':740 'highest':186 'highlight':150 'hilt':17 'horizont':616,688 'hover/nav':729 'icon':102,106,348,368,567,576,628 'ignor':985 'imag':838 'inconsist':20 'incorrect':532 'independ':314 'indigo':510 'individu':1034 'infolight':476 'inform':666 'input':932 'insid':270 'int':228,393 'integr':908 'interact':139,981 'intern':568,621 'invert':299 'isappearancelightstatusbar':362 'issystemindarkthem':216 'item':583 'kapt':21 'keep':1005 'key':138 'kotlin':82,204,352,381,448,557,701,772,913 'ksp':22 'label':578 'larg':605,799,808,895 'layer':180,545 'let':920 'lg':587 'light':251,280,329,347,953,964 'lightcolorschem':248,281 'lighter':742 'list':582 'localcontext.current':233 'low':183 'lowest':182 'm3':286,435,453,702,715,755,918,921 'm3.material.io':930 'm3.material.io/theme-builder':929 'maintain':334 'map':1017 'materi':41,750,926 'materialthem':86,253 'materialtheme.colorscheme.onsurface':89 'materialtheme.colorscheme.onsurfacevariant':94,104 'materialtheme.colorscheme.surfacecontainerlow':99 'maxim':665 'md':580 'medium':793 'metric':501,516,877 'metric-specif':500 'minim':883 'minimum':951 'miss':23,844 'mistak':486 'modal':736 'modalbottomsheet':816 'mode':111,294,301,371,739,987,999 'modifier.background':98,120 'modifier.shadow':753 'must':59 'need':312,892 'never':80,195 'new':1030 'object':457,562 'off-whit':339 'old':438 'older':387 'on-surfac':130 'onbackground':166 'onerror':152 'onprimari':135 'onprimarycontain':175,194 'onsecondari':142 'onsecondarycontain':177 'onsurfac':157,196 'onsurfacevari':161 'ontertiari':147 'open':672 'option':418 'orang':537 'overrid':1001 'pad':569,571,585,592,601,612,617,622,633,647,689 'page':167 'pair':133,188 'past':841 'pattern':1043 'paytm':408 'person':416,771,776,848 'pill':854,868 'plain':434 'posit':492 'primari':90,134,325,919,978 'primarycontain':174,192 'product':57 'profession':887 'pure':343 'purpl':288,436 'radii':824 'radius':834,843,894 'rate':505 'read':1021 'readabl':684 'received/credit/gain':488 'red':489,507,533,1006 'reduc':26 'refer':85,1009 'references/color-roles-reference.md':1010 'requir':203 'ring':881 'role':79,311,456,939,1013,1025 'roundedcornershap':782,787,794,800,806,818 'rule':65,73,197,291,372,440,548,614,694,766,906,1032,1035,1046 'scale':556,723,769,830 'scheme':246,252,277,433,924 'screen':273,589,615,645,649 'secondari':95,105,141,163 'secondarycontain':176 'section':598,606,625 'semant':77,310,442,450,544 'semanticcolor':458 'sender':901 'sent/debit/loss':490 'shade':991 'shadow':700,710 'shadowelev':747 'shape':54,258,765,768,775,780,817,836,847,855 'shape.kt':266 'sheet':159,803,812 'sheets/dialogs':737 'shift':295,332 'ship':33 'sideeffect':358 'signal':856 'skill':6 'skill-design-tokens' 'skip':534 'sleep':508 'sm':573 'small':786,791,899 'social':415,675,889 'soft':872 'source-piyushverma0' 'space':50,547,553,563,599 'specif':272,482,502 'standard':613 'state':25,528 'status':345,353,364,445 'stay':366 'step':511 'streak':536 'strength':423 'structur':200 'style':752 'successcontain':464 'successlight':460 'supabas':15 'support':143 'surfac':129,132,156,178,711,743,1018 'system':44,63,72,756,912 'tabl':1014 'tag':870 'tertiari':146 'text':87,91,92,96,115,164,336,630,691,789,961,969,977 'theme':199,206,262,269,357,927,994 'theme.kt':202,267 'tint':103,705 'token':3,28,38,451 'tonal':696 'tonalelev':712,746 'top':813 'topend':821 'topic-agent-skills' 'topic-ai-agent' 'topic-android' 'topic-antigravity' 'topic-claude-code' 'topic-codex' 'topic-cursor' 'topic-gemini-cli' 'topic-hilt' 'topic-jetpack-compose' 'topic-kotlin' 'topic-material3' 'topstart':819 'true':219,351 'trust':411 'type.kt':265 'typographi':256 'uistat':24 'unit':222 'unreli':857 'use':76,160,193,560,703,925,962,963,974,1027 'user':519 'val':223,231,459,463,467,471,475,564,572,579,586,595,602,608,778 'valu':51,940 'variant':170,317,988 'version':379,425 'vertic':584,664 'view':361 'wallpap':385 'warningcontain':472 'warninglight':468 'wcag':947 'white':341,344,367 'window':360 'windowcompat.getinsetscontroller':359 'without':910 'wrong':543 'xl':596 'xs':565 'xxl':603 'xxxl':609","prices":[{"id":"94980134-d434-4e03-bf36-ff7e18b45f78","listingId":"c693f958-9eb7-493e-91a5-59e2bee0a4cd","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"piyushverma0","category":"android-agent-skills","install_from":"skills.sh"},"createdAt":"2026-05-18T13:14:49.255Z"}],"sources":[{"listingId":"c693f958-9eb7-493e-91a5-59e2bee0a4cd","source":"github","sourceId":"piyushverma0/android-agent-skills/design-tokens","sourceUrl":"https://github.com/piyushverma0/android-agent-skills/tree/main/skills/design-tokens","isPrimary":false,"firstSeenAt":"2026-05-18T13:14:49.255Z","lastSeenAt":"2026-05-18T19:09:09.674Z"}],"details":{"listingId":"c693f958-9eb7-493e-91a5-59e2bee0a4cd","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"piyushverma0","slug":"design-tokens","github":{"repo":"piyushverma0/android-agent-skills","stars":8,"topics":["agent-skills","ai-agent","android","antigravity","claude-code","codex","cursor","gemini-cli","hilt","jetpack-compose","kotlin","material3","open-source","skills","supabase"],"license":"mit","html_url":"https://github.com/piyushverma0/android-agent-skills","pushed_at":"2026-04-27T09:15:31Z","description":"27 Android skills for AI agents (Claude Code, Codex, Cursor). Fixes Supabase auth, Hilt errors, design inconsistency, kapt→ksp, missing UiState states. Reduced my token bills 5×. FitGenZ AI shipped in 18 days.","skill_md_sha":"f58e36921a31bb74c460a022ff5b4d9b2ac99145","skill_md_path":"skills/design-tokens/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/piyushverma0/android-agent-skills/tree/main/skills/design-tokens"},"layout":"multi","source":"github","category":"android-agent-skills","frontmatter":{},"skills_sh_url":"https://skills.sh/piyushverma0/android-agent-skills/design-tokens"},"updatedAt":"2026-05-18T19:09:09.674Z"}}