@oriro/orirocli 0.1.11 → 0.1.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ATTRIBUTION.md +53 -53
- package/LICENSE +21 -21
- package/README.md +2 -7
- package/dist/cli.js +402 -40
- package/package.json +64 -64
- package/skills/1password/SKILL.md +118 -118
- package/skills/1password/references/cli-examples.md +29 -29
- package/skills/1password/references/get-started.md +21 -21
- package/skills/21stdev/SKILL.md +64 -64
- package/skills/algorithmic-art/LICENSE +21 -21
- package/skills/algorithmic-art/SKILL.md +446 -446
- package/skills/algorithmic-art/templates/generator_template.js +223 -223
- package/skills/algorithmic-art/templates/viewer.html +598 -598
- package/skills/apple-notes/SKILL.md +81 -81
- package/skills/apple-reminders/SKILL.md +122 -122
- package/skills/bear-notes/SKILL.md +111 -111
- package/skills/blogwatcher/SKILL.md +73 -73
- package/skills/blucli/SKILL.md +51 -51
- package/skills/brand-guidelines/LICENSE +21 -21
- package/skills/brand-guidelines/SKILL.md +76 -76
- package/skills/business/biz-analysis/LICENSE +21 -21
- package/skills/business/biz-analysis/SKILL.md +103 -103
- package/skills/business/biz-corporate-strategy/LICENSE +21 -21
- package/skills/business/biz-corporate-strategy/SKILL.md +76 -76
- package/skills/business/biz-customer-success/LICENSE +21 -21
- package/skills/business/biz-customer-success/SKILL.md +55 -55
- package/skills/business/biz-entrepreneurship/LICENSE +21 -21
- package/skills/business/biz-entrepreneurship/SKILL.md +72 -72
- package/skills/business/biz-hr/LICENSE +21 -21
- package/skills/business/biz-hr/SKILL.md +67 -67
- package/skills/business/biz-international/LICENSE +21 -21
- package/skills/business/biz-international/SKILL.md +51 -51
- package/skills/business/biz-leadership/LICENSE +21 -21
- package/skills/business/biz-leadership/SKILL.md +106 -106
- package/skills/business/biz-marketing-strategy/LICENSE +21 -21
- package/skills/business/biz-marketing-strategy/SKILL.md +119 -119
- package/skills/business/biz-negotiation/LICENSE +21 -21
- package/skills/business/biz-negotiation/SKILL.md +152 -152
- package/skills/business/biz-operations/LICENSE +21 -21
- package/skills/business/biz-operations/SKILL.md +74 -74
- package/skills/business/biz-project/LICENSE +21 -21
- package/skills/business/biz-project/SKILL.md +203 -203
- package/skills/business/biz-risk/LICENSE +21 -21
- package/skills/business/biz-risk/SKILL.md +85 -85
- package/skills/business/biz-sales/LICENSE +21 -21
- package/skills/business/biz-sales/SKILL.md +92 -92
- package/skills/business/biz-startup-ops/LICENSE +21 -21
- package/skills/business/biz-startup-ops/SKILL.md +70 -70
- package/skills/business/biz-strategy/LICENSE +21 -21
- package/skills/business/biz-strategy/SKILL.md +233 -233
- package/skills/business/biz-supply-chain-advanced/LICENSE +21 -21
- package/skills/business/biz-supply-chain-advanced/SKILL.md +68 -68
- package/skills/business/fin-chartered-exams/LICENSE +21 -21
- package/skills/business/fin-chartered-exams/SKILL.md +69 -69
- package/skills/camsnap/SKILL.md +49 -49
- package/skills/canvas/SKILL.md +82 -82
- package/skills/canvas-design/LICENSE +21 -21
- package/skills/canvas-design/SKILL.md +140 -140
- package/skills/canvas-design/canvas-fonts/ArsenalSC-OFL.txt +93 -93
- package/skills/canvas-design/canvas-fonts/BigShoulders-OFL.txt +93 -93
- package/skills/canvas-design/canvas-fonts/Boldonse-OFL.txt +93 -93
- package/skills/canvas-design/canvas-fonts/BricolageGrotesque-OFL.txt +93 -93
- package/skills/canvas-design/canvas-fonts/CrimsonPro-OFL.txt +93 -93
- package/skills/canvas-design/canvas-fonts/DMMono-OFL.txt +93 -93
- package/skills/canvas-design/canvas-fonts/EricaOne-OFL.txt +94 -94
- package/skills/canvas-design/canvas-fonts/GeistMono-OFL.txt +93 -93
- package/skills/canvas-design/canvas-fonts/Gloock-OFL.txt +93 -93
- package/skills/canvas-design/canvas-fonts/IBMPlexMono-OFL.txt +93 -93
- package/skills/canvas-design/canvas-fonts/InstrumentSans-OFL.txt +93 -93
- package/skills/canvas-design/canvas-fonts/JetBrainsMono-OFL.txt +93 -93
- package/skills/canvas-design/canvas-fonts/Jura-OFL.txt +93 -93
- package/skills/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt +93 -93
- package/skills/canvas-design/canvas-fonts/Lora-OFL.txt +93 -93
- package/skills/canvas-design/canvas-fonts/NationalPark-OFL.txt +93 -93
- package/skills/canvas-design/canvas-fonts/Outfit-OFL.txt +93 -93
- package/skills/canvas-design/canvas-fonts/PixelifySans-OFL.txt +93 -93
- package/skills/canvas-design/canvas-fonts/RedHatMono-OFL.txt +93 -93
- package/skills/canvas-design/canvas-fonts/Silkscreen-OFL.txt +93 -93
- package/skills/canvas-design/canvas-fonts/SmoochSans-OFL.txt +93 -93
- package/skills/canvas-design/canvas-fonts/Tektur-OFL.txt +93 -93
- package/skills/canvas-design/canvas-fonts/WorkSans-OFL.txt +93 -93
- package/skills/canvas-design/canvas-fonts/YoungSerif-OFL.txt +93 -93
- package/skills/coding-agent/SKILL.md +146 -146
- package/skills/communication/comm-business-writing/LICENSE +21 -21
- package/skills/communication/comm-business-writing/SKILL.md +67 -67
- package/skills/communication/comm-cross-cultural/LICENSE +21 -21
- package/skills/communication/comm-cross-cultural/SKILL.md +88 -88
- package/skills/communication/comm-journalism/LICENSE +21 -21
- package/skills/communication/comm-journalism/SKILL.md +81 -81
- package/skills/communication/comm-linguistics/LICENSE +21 -21
- package/skills/communication/comm-linguistics/SKILL.md +82 -82
- package/skills/communication/comm-negotiation/LICENSE +21 -21
- package/skills/communication/comm-negotiation/SKILL.md +120 -120
- package/skills/communication/comm-presentations/LICENSE +21 -21
- package/skills/communication/comm-presentations/SKILL.md +93 -93
- package/skills/communication/comm-public-speaking/LICENSE +21 -21
- package/skills/communication/comm-public-speaking/SKILL.md +68 -68
- package/skills/communication/comm-writing/LICENSE +21 -21
- package/skills/communication/comm-writing/SKILL.md +69 -69
- package/skills/craft/ai-engineering/LICENSE +21 -21
- package/skills/craft/ai-engineering/SKILL.md +828 -828
- package/skills/craft/app-builder-guide/LICENSE +21 -21
- package/skills/craft/app-builder-guide/SKILL.md +332 -332
- package/skills/craft/become-an-ai-engineer-26/CONTRIBUTING.md +46 -46
- package/skills/craft/become-an-ai-engineer-26/LICENSE +21 -21
- package/skills/craft/become-an-ai-engineer-26/README.md +270 -270
- package/skills/craft/become-an-ai-engineer-26/SKILL.md +667 -667
- package/skills/craft/become-an-ai-engineer-26/community/BUILDS.md +13 -13
- package/skills/craft/become-an-ai-engineer-26/community/DISCUSSIONS.md +8 -8
- package/skills/craft/become-an-ai-engineer-26/phases/phase-0-mental-models/README.md +14 -14
- package/skills/craft/become-an-ai-engineer-26/phases/phase-0-mental-models/project/TEMPLATE.md +33 -33
- package/skills/craft/become-an-ai-engineer-26/phases/phase-1-first-agent/README.md +25 -25
- package/skills/craft/become-an-ai-engineer-26/phases/phase-1-first-agent/code/raw_loop.py +126 -126
- package/skills/craft/become-an-ai-engineer-26/phases/phase-2-architecture/README.md +17 -17
- package/skills/craft/become-an-ai-engineer-26/phases/phase-3-harness/README.md +17 -17
- package/skills/craft/become-an-ai-engineer-26/phases/phase-4-evals/README.md +21 -21
- package/skills/craft/become-an-ai-engineer-26/phases/phase-4-evals/code/.github/workflows/eval.yml +40 -40
- package/skills/craft/become-an-ai-engineer-26/phases/phase-5-production/README.md +16 -16
- package/skills/craft/become-an-ai-engineer-26/projects/1-mobile-app-slm/README.md +11 -11
- package/skills/craft/become-an-ai-engineer-26/projects/2-self-improving-coder/README.md +11 -11
- package/skills/craft/become-an-ai-engineer-26/projects/3-video-editor-agent/README.md +11 -11
- package/skills/craft/become-an-ai-engineer-26/projects/4-personal-life-os/README.md +12 -12
- package/skills/craft/become-an-ai-engineer-26/projects/5-enterprise-workflow/README.md +12 -12
- package/skills/craft/become-an-ai-engineer-26/references/benchmark-numbers.md +41 -41
- package/skills/craft/become-an-ai-engineer-26/references/mhc-stable-training.md +73 -73
- package/skills/craft/become-an-ai-engineer-26/references/stack-decisions.md +37 -37
- package/skills/craft/become-an-ai-engineer-26/references/yarn-context-extension.md +123 -123
- package/skills/craft/codex-result-handling/LICENSE +21 -21
- package/skills/craft/codex-result-handling/SKILL.md +26 -26
- package/skills/craft/debug-and-build-methodology/LICENSE +21 -21
- package/skills/craft/debug-and-build-methodology/SKILL.md +432 -432
- package/skills/craft/design/LICENSE +21 -21
- package/skills/craft/design/SKILL.md +274 -274
- package/skills/craft/dev/LICENSE +21 -21
- package/skills/craft/dev/SKILL.md +12 -12
- package/skills/craft/dev/release.md +85 -85
- package/skills/craft/dev/roll.md +50 -50
- package/skills/craft/doc-coauthoring/LICENSE +21 -21
- package/skills/craft/doc-coauthoring/SKILL.md +397 -397
- package/skills/craft/focus/LICENSE +21 -21
- package/skills/craft/focus/SKILL.md +432 -432
- package/skills/craft/focus/UPSTREAM_README.md +233 -233
- package/skills/craft/gh/LICENSE +21 -21
- package/skills/craft/gh/SKILL.md +84 -84
- package/skills/craft/gh-skill/LICENSE +21 -21
- package/skills/craft/gh-skill/SKILL.md +121 -121
- package/skills/craft/godmode/LICENSE +21 -21
- package/skills/craft/godmode/SKILL.md +87 -87
- package/skills/craft/godmode/references/android-launch.md +680 -680
- package/skills/craft/godmode/references/data-gcp.md +1038 -1038
- package/skills/craft/godmode/references/expo-eas.md +816 -816
- package/skills/craft/godmode/references/ios-launch.md +734 -734
- package/skills/craft/google-ai-latest/LICENSE +21 -21
- package/skills/craft/google-ai-latest/SKILL.md +682 -682
- package/skills/craft/gpt-5-4-prompting/LICENSE +21 -21
- package/skills/craft/gpt-5-4-prompting/SKILL.md +63 -63
- package/skills/craft/gpt-5-4-prompting/references/codex-prompt-antipatterns.md +101 -101
- package/skills/craft/gpt-5-4-prompting/references/codex-prompt-recipes.md +150 -150
- package/skills/craft/gpt-5-4-prompting/references/prompt-blocks.md +172 -172
- package/skills/craft/grill-me/LICENSE +21 -21
- package/skills/craft/grill-me/SKILL.md +13 -13
- package/skills/craft/idea-to-deploy/LICENSE +21 -21
- package/skills/craft/idea-to-deploy/SKILL.md +292 -292
- package/skills/craft/idea-to-deploy/references/auth-playbook.md +195 -195
- package/skills/craft/idea-to-deploy/references/gcp-deployment.md +268 -268
- package/skills/craft/idea-to-deploy/references/stack-selection.md +117 -117
- package/skills/craft/image-generation-engineer/LICENSE +21 -21
- package/skills/craft/image-generation-engineer/SKILL.md +183 -183
- package/skills/craft/image-generation-engineer/references/architectures.md +260 -260
- package/skills/craft/image-generation-engineer/references/foundations.md +107 -107
- package/skills/craft/image-generation-engineer/references/inference-and-serving.md +253 -253
- package/skills/craft/image-generation-engineer/references/training.md +149 -149
- package/skills/craft/marketing/LICENSE +21 -21
- package/skills/craft/marketing/SKILL.md +1954 -1954
- package/skills/craft/master-architect/LICENSE +21 -21
- package/skills/craft/master-architect/SKILL.md +361 -361
- package/skills/craft/master-architect/references/ai-ml.md +317 -317
- package/skills/craft/master-architect/references/architecture.md +268 -268
- package/skills/craft/master-architect/references/auth-playbook.md +195 -195
- package/skills/craft/master-architect/references/cloud.md +323 -323
- package/skills/craft/master-architect/references/cyber.md +839 -839
- package/skills/craft/master-architect/references/data-eng.md +366 -366
- package/skills/craft/master-architect/references/devops.md +550 -550
- package/skills/craft/master-architect/references/gcp-deployment.md +268 -268
- package/skills/craft/master-architect/references/languages.md +748 -748
- package/skills/craft/master-architect/references/legacy.md +240 -240
- package/skills/craft/master-architect/references/mobile.md +447 -447
- package/skills/craft/master-architect/references/patterns.md +451 -451
- package/skills/craft/master-architect/references/saas-patterns.md +379 -379
- package/skills/craft/master-architect/references/sdlc.md +349 -349
- package/skills/craft/master-architect/references/stack-selection.md +117 -117
- package/skills/craft/oriro-ui-2026/LICENSE +21 -21
- package/skills/craft/oriro-ui-2026/SKILL.md +329 -329
- package/skills/craft/playwright-cli/LICENSE +21 -21
- package/skills/craft/playwright-cli/SKILL.md +393 -393
- package/skills/craft/playwright-cli/references/element-attributes.md +23 -23
- package/skills/craft/playwright-cli/references/playwright-tests.md +39 -39
- package/skills/craft/playwright-cli/references/request-mocking.md +87 -87
- package/skills/craft/playwright-cli/references/running-code.md +240 -240
- package/skills/craft/playwright-cli/references/session-management.md +226 -226
- package/skills/craft/playwright-cli/references/spec-driven-testing.md +312 -312
- package/skills/craft/playwright-cli/references/storage-state.md +275 -275
- package/skills/craft/playwright-cli/references/test-generation.md +134 -134
- package/skills/craft/playwright-cli/references/tracing.md +142 -142
- package/skills/craft/playwright-cli/references/video-recording.md +150 -150
- package/skills/craft/remotion-best-practices/LICENSE +21 -21
- package/skills/craft/remotion-best-practices/SKILL.md +345 -345
- package/skills/craft/remotion-best-practices/rules/3d.md +86 -86
- package/skills/craft/remotion-best-practices/rules/assets/charts-bar-chart.tsx +165 -165
- package/skills/craft/remotion-best-practices/rules/assets/text-animations-typewriter.tsx +89 -89
- package/skills/craft/remotion-best-practices/rules/assets/text-animations-word-highlight.tsx +101 -101
- package/skills/craft/remotion-best-practices/rules/audio-visualization.md +195 -195
- package/skills/craft/remotion-best-practices/rules/audio.md +167 -167
- package/skills/craft/remotion-best-practices/rules/calculate-metadata.md +118 -118
- package/skills/craft/remotion-best-practices/rules/compositions.md +132 -132
- package/skills/craft/remotion-best-practices/rules/display-captions.md +176 -176
- package/skills/craft/remotion-best-practices/rules/ffmpeg.md +34 -34
- package/skills/craft/remotion-best-practices/rules/get-audio-duration.md +58 -58
- package/skills/craft/remotion-best-practices/rules/get-video-dimensions.md +68 -68
- package/skills/craft/remotion-best-practices/rules/get-video-duration.md +60 -60
- package/skills/craft/remotion-best-practices/rules/gifs.md +135 -135
- package/skills/craft/remotion-best-practices/rules/google-fonts.md +72 -72
- package/skills/craft/remotion-best-practices/rules/html-in-canvas.md +122 -122
- package/skills/craft/remotion-best-practices/rules/images.md +67 -67
- package/skills/craft/remotion-best-practices/rules/import-srt-captions.md +69 -69
- package/skills/craft/remotion-best-practices/rules/light-leaks.md +73 -73
- package/skills/craft/remotion-best-practices/rules/local-fonts.md +65 -65
- package/skills/craft/remotion-best-practices/rules/lottie.md +67 -67
- package/skills/craft/remotion-best-practices/rules/maplibre.md +441 -441
- package/skills/craft/remotion-best-practices/rules/measuring-dom-nodes.md +34 -34
- package/skills/craft/remotion-best-practices/rules/measuring-text.md +140 -140
- package/skills/craft/remotion-best-practices/rules/parameters.md +109 -109
- package/skills/craft/remotion-best-practices/rules/sequencing.md +144 -144
- package/skills/craft/remotion-best-practices/rules/sfx.md +30 -30
- package/skills/craft/remotion-best-practices/rules/silence-detection.md +73 -73
- package/skills/craft/remotion-best-practices/rules/subtitles.md +36 -36
- package/skills/craft/remotion-best-practices/rules/tailwind.md +11 -11
- package/skills/craft/remotion-best-practices/rules/text-animations.md +20 -20
- package/skills/craft/remotion-best-practices/rules/timing.md +130 -130
- package/skills/craft/remotion-best-practices/rules/transcribe-captions.md +70 -70
- package/skills/craft/remotion-best-practices/rules/transitions.md +193 -193
- package/skills/craft/remotion-best-practices/rules/transparent-videos.md +102 -102
- package/skills/craft/remotion-best-practices/rules/trimming.md +51 -51
- package/skills/craft/remotion-best-practices/rules/videos.md +169 -169
- package/skills/craft/remotion-best-practices/rules/voiceover.md +94 -94
- package/skills/craft/supabase-postgres-best-practices/CHANGELOG.md +25 -25
- package/skills/craft/supabase-postgres-best-practices/LICENSE +21 -21
- package/skills/craft/supabase-postgres-best-practices/SKILL.md +69 -69
- package/skills/craft/supabase-postgres-best-practices/references/_contributing.md +166 -166
- package/skills/craft/supabase-postgres-best-practices/references/_sections.md +47 -47
- package/skills/craft/supabase-postgres-best-practices/references/_template.md +34 -34
- package/skills/craft/supabase-postgres-best-practices/references/advanced-full-text-search.md +55 -55
- package/skills/craft/supabase-postgres-best-practices/references/advanced-jsonb-indexing.md +49 -49
- package/skills/craft/supabase-postgres-best-practices/references/conn-idle-timeout.md +46 -46
- package/skills/craft/supabase-postgres-best-practices/references/conn-limits.md +44 -44
- package/skills/craft/supabase-postgres-best-practices/references/conn-pooling.md +41 -41
- package/skills/craft/supabase-postgres-best-practices/references/conn-prepared-statements.md +46 -46
- package/skills/craft/supabase-postgres-best-practices/references/data-batch-inserts.md +54 -54
- package/skills/craft/supabase-postgres-best-practices/references/data-n-plus-one.md +53 -53
- package/skills/craft/supabase-postgres-best-practices/references/data-pagination.md +50 -50
- package/skills/craft/supabase-postgres-best-practices/references/data-upsert.md +50 -50
- package/skills/craft/supabase-postgres-best-practices/references/lock-advisory.md +56 -56
- package/skills/craft/supabase-postgres-best-practices/references/lock-deadlock-prevention.md +68 -68
- package/skills/craft/supabase-postgres-best-practices/references/lock-short-transactions.md +50 -50
- package/skills/craft/supabase-postgres-best-practices/references/lock-skip-locked.md +54 -54
- package/skills/craft/supabase-postgres-best-practices/references/monitor-explain-analyze.md +45 -45
- package/skills/craft/supabase-postgres-best-practices/references/monitor-pg-stat-statements.md +55 -55
- package/skills/craft/supabase-postgres-best-practices/references/monitor-vacuum-analyze.md +55 -55
- package/skills/craft/supabase-postgres-best-practices/references/query-composite-indexes.md +44 -44
- package/skills/craft/supabase-postgres-best-practices/references/query-covering-indexes.md +40 -40
- package/skills/craft/supabase-postgres-best-practices/references/query-index-types.md +48 -48
- package/skills/craft/supabase-postgres-best-practices/references/query-missing-indexes.md +43 -43
- package/skills/craft/supabase-postgres-best-practices/references/query-partial-indexes.md +45 -45
- package/skills/craft/supabase-postgres-best-practices/references/schema-constraints.md +80 -80
- package/skills/craft/supabase-postgres-best-practices/references/schema-data-types.md +46 -46
- package/skills/craft/supabase-postgres-best-practices/references/schema-foreign-key-indexes.md +59 -59
- package/skills/craft/supabase-postgres-best-practices/references/schema-lowercase-identifiers.md +55 -55
- package/skills/craft/supabase-postgres-best-practices/references/schema-partitioning.md +55 -55
- package/skills/craft/supabase-postgres-best-practices/references/schema-primary-keys.md +61 -61
- package/skills/craft/supabase-postgres-best-practices/references/security-privileges.md +54 -54
- package/skills/craft/supabase-postgres-best-practices/references/security-rls-basics.md +50 -50
- package/skills/craft/supabase-postgres-best-practices/references/security-rls-performance.md +63 -63
- package/skills/craft/uipm-banner-design/LICENSE +21 -21
- package/skills/craft/uipm-banner-design/SKILL.md +201 -201
- package/skills/craft/uipm-banner-design/references/banner-sizes-and-styles.md +129 -129
- package/skills/craft/uipm-brand/LICENSE +21 -21
- package/skills/craft/uipm-brand/SKILL.md +104 -104
- package/skills/craft/uipm-brand/references/approval-checklist.md +184 -184
- package/skills/craft/uipm-brand/references/asset-organization.md +167 -167
- package/skills/craft/uipm-brand/references/brand-guideline-template.md +161 -161
- package/skills/craft/uipm-brand/references/color-palette-management.md +203 -203
- package/skills/craft/uipm-brand/references/consistency-checklist.md +105 -105
- package/skills/craft/uipm-brand/references/logo-usage-rules.md +204 -204
- package/skills/craft/uipm-brand/references/messaging-framework.md +91 -91
- package/skills/craft/uipm-brand/references/typography-specifications.md +265 -265
- package/skills/craft/uipm-brand/references/update.md +128 -128
- package/skills/craft/uipm-brand/references/visual-identity.md +109 -109
- package/skills/craft/uipm-brand/references/voice-framework.md +99 -99
- package/skills/craft/uipm-brand/scripts/extract-colors.cjs +333 -333
- package/skills/craft/uipm-brand/scripts/inject-brand-context.cjs +324 -324
- package/skills/craft/uipm-brand/scripts/sync-brand-to-tokens.cjs +269 -269
- package/skills/craft/uipm-brand/scripts/validate-asset.cjs +361 -361
- package/skills/craft/uipm-brand/templates/brand-guidelines-starter.md +280 -280
- package/skills/craft/uipm-design/LICENSE +21 -21
- package/skills/craft/uipm-design/SKILL.md +305 -305
- package/skills/craft/uipm-design/data/cip/deliverables.csv +50 -50
- package/skills/craft/uipm-design/data/cip/industries.csv +20 -20
- package/skills/craft/uipm-design/data/cip/mockup-contexts.csv +20 -20
- package/skills/craft/uipm-design/data/cip/styles.csv +20 -20
- package/skills/craft/uipm-design/data/icon/styles.csv +16 -16
- package/skills/craft/uipm-design/data/logo/colors.csv +56 -56
- package/skills/craft/uipm-design/data/logo/industries.csv +56 -56
- package/skills/craft/uipm-design/data/logo/styles.csv +56 -56
- package/skills/craft/uipm-design/references/banner-sizes-and-styles.md +129 -129
- package/skills/craft/uipm-design/references/cip-deliverable-guide.md +111 -111
- package/skills/craft/uipm-design/references/cip-design.md +121 -121
- package/skills/craft/uipm-design/references/cip-prompt-engineering.md +94 -94
- package/skills/craft/uipm-design/references/cip-style-guide.md +76 -76
- package/skills/craft/uipm-design/references/design-routing.md +226 -226
- package/skills/craft/uipm-design/references/icon-design.md +122 -122
- package/skills/craft/uipm-design/references/logo-color-psychology.md +113 -113
- package/skills/craft/uipm-design/references/logo-design.md +92 -92
- package/skills/craft/uipm-design/references/logo-prompt-engineering.md +176 -176
- package/skills/craft/uipm-design/references/logo-style-guide.md +129 -129
- package/skills/craft/uipm-design/references/slides-copywriting-formulas.md +92 -92
- package/skills/craft/uipm-design/references/slides-create.md +5 -5
- package/skills/craft/uipm-design/references/slides-html-template.md +374 -374
- package/skills/craft/uipm-design/references/slides-layout-patterns.md +155 -155
- package/skills/craft/uipm-design/references/slides-strategies.md +97 -97
- package/skills/craft/uipm-design/references/slides.md +42 -42
- package/skills/craft/uipm-design/references/social-photos-design.md +353 -353
- package/skills/craft/uipm-design/scripts/cip/core.py +215 -215
- package/skills/craft/uipm-design/scripts/cip/generate.py +484 -484
- package/skills/craft/uipm-design/scripts/cip/render-html.py +424 -424
- package/skills/craft/uipm-design/scripts/cip/search.py +127 -127
- package/skills/craft/uipm-design/scripts/icon/generate.py +487 -487
- package/skills/craft/uipm-design/scripts/logo/core.py +175 -175
- package/skills/craft/uipm-design/scripts/logo/generate.py +362 -362
- package/skills/craft/uipm-design/scripts/logo/search.py +114 -114
- package/skills/craft/uipm-design-system/LICENSE +21 -21
- package/skills/craft/uipm-design-system/SKILL.md +255 -255
- package/skills/craft/uipm-design-system/data/slide-backgrounds.csv +11 -11
- package/skills/craft/uipm-design-system/data/slide-charts.csv +26 -26
- package/skills/craft/uipm-design-system/data/slide-color-logic.csv +14 -14
- package/skills/craft/uipm-design-system/data/slide-copy.csv +26 -26
- package/skills/craft/uipm-design-system/data/slide-layout-logic.csv +16 -16
- package/skills/craft/uipm-design-system/data/slide-layouts.csv +26 -26
- package/skills/craft/uipm-design-system/data/slide-strategies.csv +16 -16
- package/skills/craft/uipm-design-system/data/slide-typography.csv +15 -15
- package/skills/craft/uipm-design-system/references/component-specs.md +236 -236
- package/skills/craft/uipm-design-system/references/component-tokens.md +214 -214
- package/skills/craft/uipm-design-system/references/primitive-tokens.md +199 -199
- package/skills/craft/uipm-design-system/references/semantic-tokens.md +215 -215
- package/skills/craft/uipm-design-system/references/states-and-variants.md +243 -243
- package/skills/craft/uipm-design-system/references/tailwind-integration.md +257 -257
- package/skills/craft/uipm-design-system/references/token-architecture.md +226 -226
- package/skills/craft/uipm-design-system/scripts/embed-tokens.cjs +97 -97
- package/skills/craft/uipm-design-system/scripts/fetch-background.py +317 -317
- package/skills/craft/uipm-design-system/scripts/generate-slide.py +753 -753
- package/skills/craft/uipm-design-system/scripts/generate-tokens.cjs +213 -213
- package/skills/craft/uipm-design-system/scripts/html-token-validator.py +327 -327
- package/skills/craft/uipm-design-system/scripts/search-slides.py +218 -218
- package/skills/craft/uipm-design-system/scripts/slide-token-validator.py +35 -35
- package/skills/craft/uipm-design-system/scripts/slide_search_core.py +453 -453
- package/skills/craft/uipm-design-system/scripts/validate-tokens.cjs +254 -254
- package/skills/craft/uipm-design-system/templates/design-tokens-starter.json +143 -143
- package/skills/craft/uipm-slides/LICENSE +21 -21
- package/skills/craft/uipm-slides/SKILL.md +45 -45
- package/skills/craft/uipm-slides/references/copywriting-formulas.md +92 -92
- package/skills/craft/uipm-slides/references/create.md +5 -5
- package/skills/craft/uipm-slides/references/html-template.md +374 -374
- package/skills/craft/uipm-slides/references/layout-patterns.md +155 -155
- package/skills/craft/uipm-slides/references/slide-strategies.md +97 -97
- package/skills/craft/uipm-ui-ux-pro-max/LICENSE +21 -21
- package/skills/craft/uipm-ui-ux-pro-max/SKILL.md +678 -678
- package/skills/craft/uipm-ui-ux-pro-max/data/_sync_all.py +414 -414
- package/skills/craft/uipm-ui-ux-pro-max/data/app-interface.csv +30 -30
- package/skills/craft/uipm-ui-ux-pro-max/data/charts.csv +26 -26
- package/skills/craft/uipm-ui-ux-pro-max/data/colors.csv +161 -161
- package/skills/craft/uipm-ui-ux-pro-max/data/design.csv +1775 -1775
- package/skills/craft/uipm-ui-ux-pro-max/data/draft.csv +1778 -1778
- package/skills/craft/uipm-ui-ux-pro-max/data/google-fonts.csv +1924 -1924
- package/skills/craft/uipm-ui-ux-pro-max/data/icons.csv +105 -105
- package/skills/craft/uipm-ui-ux-pro-max/data/landing.csv +35 -35
- package/skills/craft/uipm-ui-ux-pro-max/data/products.csv +162 -162
- package/skills/craft/uipm-ui-ux-pro-max/data/react-performance.csv +45 -45
- package/skills/craft/uipm-ui-ux-pro-max/data/stacks/angular.csv +51 -51
- package/skills/craft/uipm-ui-ux-pro-max/data/stacks/astro.csv +54 -54
- package/skills/craft/uipm-ui-ux-pro-max/data/stacks/flutter.csv +53 -53
- package/skills/craft/uipm-ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -56
- package/skills/craft/uipm-ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -53
- package/skills/craft/uipm-ui-ux-pro-max/data/stacks/laravel.csv +51 -51
- package/skills/craft/uipm-ui-ux-pro-max/data/stacks/nextjs.csv +53 -53
- package/skills/craft/uipm-ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -51
- package/skills/craft/uipm-ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -59
- package/skills/craft/uipm-ui-ux-pro-max/data/stacks/react-native.csv +52 -52
- package/skills/craft/uipm-ui-ux-pro-max/data/stacks/react.csv +54 -54
- package/skills/craft/uipm-ui-ux-pro-max/data/stacks/shadcn.csv +61 -61
- package/skills/craft/uipm-ui-ux-pro-max/data/stacks/svelte.csv +54 -54
- package/skills/craft/uipm-ui-ux-pro-max/data/stacks/swiftui.csv +51 -51
- package/skills/craft/uipm-ui-ux-pro-max/data/stacks/threejs.csv +54 -54
- package/skills/craft/uipm-ui-ux-pro-max/data/stacks/vue.csv +50 -50
- package/skills/craft/uipm-ui-ux-pro-max/data/styles.csv +85 -85
- package/skills/craft/uipm-ui-ux-pro-max/data/typography.csv +74 -74
- package/skills/craft/uipm-ui-ux-pro-max/data/ui-reasoning.csv +162 -162
- package/skills/craft/uipm-ui-ux-pro-max/data/ux-guidelines.csv +99 -99
- package/skills/craft/uipm-ui-ux-pro-max/scripts/core.py +262 -262
- package/skills/craft/uipm-ui-ux-pro-max/scripts/design_system.py +1148 -1148
- package/skills/craft/uipm-ui-ux-pro-max/scripts/search.py +114 -114
- package/skills/craft/uipm-ui-ux-pro-max/templates/base/quick-reference.md +297 -297
- package/skills/craft/uipm-ui-ux-pro-max/templates/base/skill-content.md +375 -375
- package/skills/craft/uipm-ui-ux-pro-max/templates/platforms/agent.json +21 -21
- package/skills/craft/uipm-ui-ux-pro-max/templates/platforms/augment.json +18 -18
- package/skills/craft/uipm-ui-ux-pro-max/templates/platforms/claude.json +21 -21
- package/skills/craft/uipm-ui-ux-pro-max/templates/platforms/codebuddy.json +21 -21
- package/skills/craft/uipm-ui-ux-pro-max/templates/platforms/codex.json +21 -21
- package/skills/craft/uipm-ui-ux-pro-max/templates/platforms/continue.json +21 -21
- package/skills/craft/uipm-ui-ux-pro-max/templates/platforms/copilot.json +21 -21
- package/skills/craft/uipm-ui-ux-pro-max/templates/platforms/cursor.json +21 -21
- package/skills/craft/uipm-ui-ux-pro-max/templates/platforms/droid.json +21 -21
- package/skills/craft/uipm-ui-ux-pro-max/templates/platforms/gemini.json +21 -21
- package/skills/craft/uipm-ui-ux-pro-max/templates/platforms/kilocode.json +21 -21
- package/skills/craft/uipm-ui-ux-pro-max/templates/platforms/kiro.json +21 -21
- package/skills/craft/uipm-ui-ux-pro-max/templates/platforms/opencode.json +21 -21
- package/skills/craft/uipm-ui-ux-pro-max/templates/platforms/qoder.json +21 -21
- package/skills/craft/uipm-ui-ux-pro-max/templates/platforms/roocode.json +21 -21
- package/skills/craft/uipm-ui-ux-pro-max/templates/platforms/trae.json +21 -21
- package/skills/craft/uipm-ui-ux-pro-max/templates/platforms/warp.json +18 -18
- package/skills/craft/uipm-ui-ux-pro-max/templates/platforms/windsurf.json +21 -21
- package/skills/craft/vercel-optimize/AGENTS.md +48 -48
- package/skills/craft/vercel-optimize/CONTRIBUTING.md +41 -41
- package/skills/craft/vercel-optimize/LICENSE +21 -21
- package/skills/craft/vercel-optimize/README.md +91 -91
- package/skills/craft/vercel-optimize/SKILL.md +325 -325
- package/skills/craft/vercel-optimize/lib/auth-route.mjs +23 -23
- package/skills/craft/vercel-optimize/lib/budget-summary.mjs +208 -208
- package/skills/craft/vercel-optimize/lib/citations.mjs +147 -147
- package/skills/craft/vercel-optimize/lib/cost-coverage.mjs +162 -162
- package/skills/craft/vercel-optimize/lib/dedup-recs.mjs +340 -340
- package/skills/craft/vercel-optimize/lib/deep-dive.mjs +371 -371
- package/skills/craft/vercel-optimize/lib/display-labels.mjs +219 -219
- package/skills/craft/vercel-optimize/lib/extract-claims.mjs +640 -640
- package/skills/craft/vercel-optimize/lib/framework-support.mjs +69 -69
- package/skills/craft/vercel-optimize/lib/gates/build-minutes-fanout.mjs +73 -73
- package/skills/craft/vercel-optimize/lib/gates/cold-start.mjs +72 -72
- package/skills/craft/vercel-optimize/lib/gates/contract.mjs +82 -82
- package/skills/craft/vercel-optimize/lib/gates/cwv-poor.mjs +95 -95
- package/skills/craft/vercel-optimize/lib/gates/external-api-slow.mjs +60 -60
- package/skills/craft/vercel-optimize/lib/gates/hard-gates.mjs +70 -70
- package/skills/craft/vercel-optimize/lib/gates/index.mjs +45 -45
- package/skills/craft/vercel-optimize/lib/gates/isr-overrevalidation.mjs +62 -62
- package/skills/craft/vercel-optimize/lib/gates/middleware-heavy.mjs +53 -53
- package/skills/craft/vercel-optimize/lib/gates/observability-events-attribution.mjs +58 -58
- package/skills/craft/vercel-optimize/lib/gates/platform-bot-protection.mjs +123 -123
- package/skills/craft/vercel-optimize/lib/gates/platform-fluid-compute.mjs +94 -94
- package/skills/craft/vercel-optimize/lib/gates/region-misconfig.mjs +71 -71
- package/skills/craft/vercel-optimize/lib/gates/route-errors.mjs +95 -95
- package/skills/craft/vercel-optimize/lib/gates/scanner-driven.mjs +150 -150
- package/skills/craft/vercel-optimize/lib/gates/select-candidates.mjs +137 -137
- package/skills/craft/vercel-optimize/lib/gates/slow-route.mjs +97 -97
- package/skills/craft/vercel-optimize/lib/gates/types.d.ts +38 -38
- package/skills/craft/vercel-optimize/lib/gates/uncached-route.mjs +103 -103
- package/skills/craft/vercel-optimize/lib/gates/usage-spike-triage.mjs +122 -122
- package/skills/craft/vercel-optimize/lib/grade-recommendation.mjs +170 -170
- package/skills/craft/vercel-optimize/lib/impact-label.mjs +128 -128
- package/skills/craft/vercel-optimize/lib/impact-magnitude.mjs +66 -66
- package/skills/craft/vercel-optimize/lib/investigation-brief.mjs +751 -751
- package/skills/craft/vercel-optimize/lib/observation-safety.mjs +217 -217
- package/skills/craft/vercel-optimize/lib/project-facts.mjs +101 -101
- package/skills/craft/vercel-optimize/lib/queries.mjs +333 -333
- package/skills/craft/vercel-optimize/lib/reconcile-candidates.mjs +388 -388
- package/skills/craft/vercel-optimize/lib/render-report.mjs +1065 -1065
- package/skills/craft/vercel-optimize/lib/repo-root.mjs +97 -97
- package/skills/craft/vercel-optimize/lib/route-normalize.mjs +224 -224
- package/skills/craft/vercel-optimize/lib/sanitizers/bot-protection-certainty.mjs +56 -56
- package/skills/craft/vercel-optimize/lib/sanitizers/cache-tag-invalidation-certainty.mjs +33 -33
- package/skills/craft/vercel-optimize/lib/sanitizers/count-correct.mjs +53 -53
- package/skills/craft/vercel-optimize/lib/sanitizers/function-duration-invocations.mjs +32 -32
- package/skills/craft/vercel-optimize/lib/sanitizers/index.mjs +87 -87
- package/skills/craft/vercel-optimize/lib/sanitizers/middleware-conflict.mjs +37 -37
- package/skills/craft/vercel-optimize/lib/sanitizers/missing-citation.mjs +16 -16
- package/skills/craft/vercel-optimize/lib/sanitizers/pre-release.mjs +75 -75
- package/skills/craft/vercel-optimize/lib/sanitizers/rate-limit.mjs +73 -73
- package/skills/craft/vercel-optimize/lib/sanitizers/rendering-mode-mislabel.mjs +42 -42
- package/skills/craft/vercel-optimize/lib/sanitizers/undeclared-dep.mjs +110 -110
- package/skills/craft/vercel-optimize/lib/sanitizers/vercel-directive-strip.mjs +37 -37
- package/skills/craft/vercel-optimize/lib/sanitizers/window-units.mjs +26 -26
- package/skills/craft/vercel-optimize/lib/scanners/cache-components-suspense-dedupe.mjs +114 -114
- package/skills/craft/vercel-optimize/lib/scanners/edge-heavy-import.mjs +102 -102
- package/skills/craft/vercel-optimize/lib/scanners/force-dynamic.mjs +39 -39
- package/skills/craft/vercel-optimize/lib/scanners/headers-in-page.mjs +43 -43
- package/skills/craft/vercel-optimize/lib/scanners/index.mjs +35 -35
- package/skills/craft/vercel-optimize/lib/scanners/large-static-asset.mjs +93 -93
- package/skills/craft/vercel-optimize/lib/scanners/max-age-without-s-maxage.mjs +47 -47
- package/skills/craft/vercel-optimize/lib/scanners/middleware-broad-matcher.mjs +53 -53
- package/skills/craft/vercel-optimize/lib/scanners/missing-cache-headers.mjs +97 -97
- package/skills/craft/vercel-optimize/lib/scanners/prisma-include-tree.mjs +39 -39
- package/skills/craft/vercel-optimize/lib/scanners/region-pin-in-config.mjs +89 -89
- package/skills/craft/vercel-optimize/lib/scanners/source-maps-production.mjs +33 -33
- package/skills/craft/vercel-optimize/lib/scanners/sveltekit-prerender-missing.mjs +47 -47
- package/skills/craft/vercel-optimize/lib/scanners/turbo-force-bypass.mjs +136 -136
- package/skills/craft/vercel-optimize/lib/scanners/unoptimized-image.mjs +127 -127
- package/skills/craft/vercel-optimize/lib/scanners/use-cache-date-stamp.mjs +112 -112
- package/skills/craft/vercel-optimize/lib/support-topics.mjs +365 -365
- package/skills/craft/vercel-optimize/lib/throttle.mjs +280 -280
- package/skills/craft/vercel-optimize/lib/util.mjs +17 -17
- package/skills/craft/vercel-optimize/lib/vercel.mjs +855 -855
- package/skills/craft/vercel-optimize/lib/verify-claim.mjs +1843 -1843
- package/skills/craft/vercel-optimize/lib/workspace-resolver.mjs +552 -552
- package/skills/craft/vercel-optimize/metadata.json +14 -14
- package/skills/craft/vercel-optimize/references/candidates.md +176 -176
- package/skills/craft/vercel-optimize/references/data-collection.md +224 -224
- package/skills/craft/vercel-optimize/references/docs-library.json +683 -683
- package/skills/craft/vercel-optimize/references/doctrine.md +108 -108
- package/skills/craft/vercel-optimize/references/observability-plus.md +109 -109
- package/skills/craft/vercel-optimize/references/playbooks/README.md +57 -57
- package/skills/craft/vercel-optimize/references/playbooks/ai-application.md +32 -32
- package/skills/craft/vercel-optimize/references/playbooks/api-service.md +30 -30
- package/skills/craft/vercel-optimize/references/playbooks/content-site.md +30 -30
- package/skills/craft/vercel-optimize/references/playbooks/ecommerce.md +30 -30
- package/skills/craft/vercel-optimize/references/playbooks/marketing.md +30 -30
- package/skills/craft/vercel-optimize/references/playbooks/saas.md +31 -31
- package/skills/craft/vercel-optimize/references/playbooks/sveltekit.md +75 -75
- package/skills/craft/vercel-optimize/references/recommendations.md +214 -214
- package/skills/craft/vercel-optimize/references/scanner-patterns.md +266 -266
- package/skills/craft/vercel-optimize/references/scoring.md +208 -208
- package/skills/craft/vercel-optimize/references/support-topics/README.md +50 -50
- package/skills/craft/vercel-optimize/references/support-topics/astro-edge-middleware-scope.md +30 -30
- package/skills/craft/vercel-optimize/references/support-topics/astro-output-mode-and-isr.md +31 -31
- package/skills/craft/vercel-optimize/references/support-topics/auth-preserving-parallelization.md +30 -30
- package/skills/craft/vercel-optimize/references/support-topics/bot-protection-product-guardrails.md +32 -32
- package/skills/craft/vercel-optimize/references/support-topics/build-minutes-monorepo-fanout.md +32 -32
- package/skills/craft/vercel-optimize/references/support-topics/cache-components-static-shell-boundaries.md +31 -31
- package/skills/craft/vercel-optimize/references/support-topics/cache-components-suspense-dedupe-pitfall.md +32 -32
- package/skills/craft/vercel-optimize/references/support-topics/cdn-cache-auth-safety.md +31 -31
- package/skills/craft/vercel-optimize/references/support-topics/cold-start-initialization-bundle.md +31 -31
- package/skills/craft/vercel-optimize/references/support-topics/core-web-vitals-client-bottlenecks.md +33 -33
- package/skills/craft/vercel-optimize/references/support-topics/database-egress-pooling-region.md +32 -32
- package/skills/craft/vercel-optimize/references/support-topics/dynamic-rendering-traps.md +31 -31
- package/skills/craft/vercel-optimize/references/support-topics/external-api-critical-path-platform.md +31 -31
- package/skills/craft/vercel-optimize/references/support-topics/external-api-critical-path.md +31 -31
- package/skills/craft/vercel-optimize/references/support-topics/fast-data-transfer-payloads.md +26 -26
- package/skills/craft/vercel-optimize/references/support-topics/fluid-compute-caveats.md +26 -26
- package/skills/craft/vercel-optimize/references/support-topics/function-duration-io-and-after.md +31 -31
- package/skills/craft/vercel-optimize/references/support-topics/function-invocation-reduction.md +31 -31
- package/skills/craft/vercel-optimize/references/support-topics/function-region-misconfiguration-ttfb.md +31 -31
- package/skills/craft/vercel-optimize/references/support-topics/image-optimization-cost-control.md +31 -31
- package/skills/craft/vercel-optimize/references/support-topics/isr-revalidation-static-generation.md +31 -31
- package/skills/craft/vercel-optimize/references/support-topics/middleware-proxy-edge-cost.md +30 -30
- package/skills/craft/vercel-optimize/references/support-topics/next-fetch-revalidate-floor.md +30 -30
- package/skills/craft/vercel-optimize/references/support-topics/next-font-cls-self-hosting.md +31 -31
- package/skills/craft/vercel-optimize/references/support-topics/next-heavy-ui-lazy-load-boundaries.md +28 -28
- package/skills/craft/vercel-optimize/references/support-topics/next-image-lcp-preload-sizes.md +31 -31
- package/skills/craft/vercel-optimize/references/support-topics/next-route-handler-get-cache-defaults.md +30 -30
- package/skills/craft/vercel-optimize/references/support-topics/next-script-third-party-strategy.md +31 -31
- package/skills/craft/vercel-optimize/references/support-topics/nextjs-version-cache-semantics.md +31 -31
- package/skills/craft/vercel-optimize/references/support-topics/not-found-catchall-request-waste.md +33 -33
- package/skills/craft/vercel-optimize/references/support-topics/nuxt-route-rules-cache-isr.md +31 -31
- package/skills/craft/vercel-optimize/references/support-topics/observability-events-cost-attribution.md +27 -27
- package/skills/craft/vercel-optimize/references/support-topics/post-response-work-waituntil.md +26 -26
- package/skills/craft/vercel-optimize/references/support-topics/route-error-durable-offload.md +33 -33
- package/skills/craft/vercel-optimize/references/support-topics/route-error-runtime-limits.md +31 -31
- package/skills/craft/vercel-optimize/references/support-topics/runtime-cache-reusable-data.md +30 -30
- package/skills/craft/vercel-optimize/references/support-topics/sveltekit-isr-prerender-safety.md +31 -31
- package/skills/craft/vercel-optimize/references/support-topics/sveltekit-split-cold-start-tradeoff.md +30 -30
- package/skills/craft/vercel-optimize/references/support-topics/usage-spike-triage.md +31 -31
- package/skills/craft/vercel-optimize/references/support-topics/use-cache-date-stamp-isr-write-amplifier.md +31 -31
- package/skills/craft/vercel-optimize/references/support-topics/use-cache-remote-shared-origin-data.md +30 -30
- package/skills/craft/vercel-optimize/references/support-topics/workflow-resumable-stream-routes.md +32 -32
- package/skills/craft/vercel-optimize/references/verification.md +102 -102
- package/skills/craft/vercel-optimize/references/voice.md +76 -76
- package/skills/craft/vercel-optimize/scripts/budget-summary.mjs +58 -58
- package/skills/craft/vercel-optimize/scripts/build-docs.mjs +76 -76
- package/skills/craft/vercel-optimize/scripts/check-citations.mjs +91 -91
- package/skills/craft/vercel-optimize/scripts/check-docs-fresh.mjs +100 -100
- package/skills/craft/vercel-optimize/scripts/collect-signals.mjs +638 -638
- package/skills/craft/vercel-optimize/scripts/collect-sub-agent-outputs.mjs +306 -306
- package/skills/craft/vercel-optimize/scripts/deep-dive.mjs +358 -358
- package/skills/craft/vercel-optimize/scripts/gate-investigations.mjs +178 -178
- package/skills/craft/vercel-optimize/scripts/merge-signals.mjs +203 -203
- package/skills/craft/vercel-optimize/scripts/prepare-investigation-brief.mjs +249 -249
- package/skills/craft/vercel-optimize/scripts/reconcile-candidates.mjs +69 -69
- package/skills/craft/vercel-optimize/scripts/render-report.mjs +462 -462
- package/skills/craft/vercel-optimize/scripts/scan-codebase.mjs +361 -361
- package/skills/craft/vercel-optimize/scripts/verify-and-regen.mjs +379 -379
- package/skills/craft/vercel-optimize/scripts/verify-finding.mjs +21 -21
- package/skills/craft/web-design-guidelines/LICENSE +21 -21
- package/skills/craft/web-design-guidelines/SKILL.md +43 -43
- package/skills/craft/zero-to-live/LICENSE +21 -21
- package/skills/craft/zero-to-live/SKILL.md +422 -422
- package/skills/creative/creative-3d-modeling/LICENSE +21 -21
- package/skills/creative/creative-3d-modeling/SKILL.md +70 -70
- package/skills/creative/creative-architecture/LICENSE +21 -21
- package/skills/creative/creative-architecture/SKILL.md +94 -94
- package/skills/creative/creative-design-principles/LICENSE +21 -21
- package/skills/creative/creative-design-principles/SKILL.md +95 -95
- package/skills/creative/creative-fashion-advanced/LICENSE +21 -21
- package/skills/creative/creative-fashion-advanced/SKILL.md +68 -68
- package/skills/creative/creative-fashion-design/LICENSE +21 -21
- package/skills/creative/creative-fashion-design/SKILL.md +66 -66
- package/skills/creative/creative-game-design/LICENSE +21 -21
- package/skills/creative/creative-game-design/SKILL.md +77 -77
- package/skills/creative/creative-industrial-design/LICENSE +21 -21
- package/skills/creative/creative-industrial-design/SKILL.md +57 -57
- package/skills/creative/creative-interior-design/LICENSE +21 -21
- package/skills/creative/creative-interior-design/SKILL.md +59 -59
- package/skills/creative/creative-music-theory/LICENSE +21 -21
- package/skills/creative/creative-music-theory/SKILL.md +98 -98
- package/skills/creative/creative-photography/LICENSE +21 -21
- package/skills/creative/creative-photography/SKILL.md +87 -87
- package/skills/creative/creative-textile-science/LICENSE +21 -21
- package/skills/creative/creative-textile-science/SKILL.md +67 -67
- package/skills/creative/creative-ux/LICENSE +21 -21
- package/skills/creative/creative-ux/SKILL.md +81 -81
- package/skills/creative/creative-video/LICENSE +21 -21
- package/skills/creative/creative-video/SKILL.md +84 -84
- package/skills/creative/creative-writing-craft/LICENSE +21 -21
- package/skills/creative/creative-writing-craft/SKILL.md +91 -91
- package/skills/diagram-maker/SKILL.md +56 -56
- package/skills/diagram-maker/references/excalidraw-patterns.md +85 -85
- package/skills/diagram-maker/references/svg-template.md +112 -112
- package/skills/discord/SKILL.md +140 -140
- package/skills/education/edu-adult-learning/LICENSE +21 -21
- package/skills/education/edu-adult-learning/SKILL.md +81 -81
- package/skills/education/edu-africa-multilingual/LICENSE +21 -21
- package/skills/education/edu-africa-multilingual/SKILL.md +55 -55
- package/skills/education/edu-arabic/LICENSE +21 -21
- package/skills/education/edu-arabic/SKILL.md +60 -60
- package/skills/education/edu-australia-nz/LICENSE +21 -21
- package/skills/education/edu-australia-nz/SKILL.md +48 -48
- package/skills/education/edu-china-mandarin/LICENSE +21 -21
- package/skills/education/edu-china-mandarin/SKILL.md +58 -58
- package/skills/education/edu-critical-thinking/LICENSE +21 -21
- package/skills/education/edu-critical-thinking/SKILL.md +86 -86
- package/skills/education/edu-curriculum/LICENSE +21 -21
- package/skills/education/edu-curriculum/SKILL.md +87 -87
- package/skills/education/edu-ed-tech/LICENSE +21 -21
- package/skills/education/edu-ed-tech/SKILL.md +73 -73
- package/skills/education/edu-france/LICENSE +21 -21
- package/skills/education/edu-france/SKILL.md +42 -42
- package/skills/education/edu-germany/LICENSE +21 -21
- package/skills/education/edu-germany/SKILL.md +46 -46
- package/skills/education/edu-india-competitive/LICENSE +21 -21
- package/skills/education/edu-india-competitive/SKILL.md +159 -159
- package/skills/education/edu-india-east/LICENSE +21 -21
- package/skills/education/edu-india-east/SKILL.md +60 -60
- package/skills/education/edu-india-hindi/LICENSE +21 -21
- package/skills/education/edu-india-hindi/SKILL.md +107 -107
- package/skills/education/edu-india-south/LICENSE +21 -21
- package/skills/education/edu-india-south/SKILL.md +64 -64
- package/skills/education/edu-india-west/LICENSE +21 -21
- package/skills/education/edu-india-west/SKILL.md +68 -68
- package/skills/education/edu-indonesia-malay/LICENSE +21 -21
- package/skills/education/edu-indonesia-malay/SKILL.md +57 -57
- package/skills/education/edu-international-ib/LICENSE +21 -21
- package/skills/education/edu-international-ib/SKILL.md +61 -61
- package/skills/education/edu-japan/LICENSE +21 -21
- package/skills/education/edu-japan/SKILL.md +48 -48
- package/skills/education/edu-korea/LICENSE +21 -21
- package/skills/education/edu-korea/SKILL.md +48 -48
- package/skills/education/edu-learning-science/LICENSE +21 -21
- package/skills/education/edu-learning-science/SKILL.md +76 -76
- package/skills/education/edu-portuguese-brazil/LICENSE +21 -21
- package/skills/education/edu-portuguese-brazil/SKILL.md +51 -51
- package/skills/education/edu-russia/LICENSE +21 -21
- package/skills/education/edu-russia/SKILL.md +50 -50
- package/skills/education/edu-spain-latam/LICENSE +21 -21
- package/skills/education/edu-spain-latam/SKILL.md +55 -55
- package/skills/education/edu-special/LICENSE +21 -21
- package/skills/education/edu-special/SKILL.md +76 -76
- package/skills/education/edu-thailand/LICENSE +21 -21
- package/skills/education/edu-thailand/SKILL.md +55 -55
- package/skills/education/edu-turkey/LICENSE +21 -21
- package/skills/education/edu-turkey/SKILL.md +58 -58
- package/skills/education/edu-uk-gcse-alevel/LICENSE +21 -21
- package/skills/education/edu-uk-gcse-alevel/SKILL.md +51 -51
- package/skills/education/edu-usa-graduate/LICENSE +21 -21
- package/skills/education/edu-usa-graduate/SKILL.md +57 -57
- package/skills/education/edu-usa-sat-act/LICENSE +21 -21
- package/skills/education/edu-usa-sat-act/SKILL.md +55 -55
- package/skills/education/edu-vietnam/LICENSE +21 -21
- package/skills/education/edu-vietnam/SKILL.md +53 -53
- package/skills/eightctl/SKILL.md +54 -54
- package/skills/engineering/eng-aerospace/LICENSE +21 -21
- package/skills/engineering/eng-aerospace/SKILL.md +117 -117
- package/skills/engineering/eng-chemical/LICENSE +21 -21
- package/skills/engineering/eng-chemical/SKILL.md +63 -63
- package/skills/engineering/eng-civil/LICENSE +21 -21
- package/skills/engineering/eng-civil/SKILL.md +223 -223
- package/skills/engineering/eng-control-systems/LICENSE +21 -21
- package/skills/engineering/eng-control-systems/SKILL.md +158 -158
- package/skills/engineering/eng-cryogenics/LICENSE +21 -21
- package/skills/engineering/eng-cryogenics/SKILL.md +151 -151
- package/skills/engineering/eng-electrical/LICENSE +21 -21
- package/skills/engineering/eng-electrical/SKILL.md +70 -70
- package/skills/engineering/eng-electronics-embedded/LICENSE +21 -21
- package/skills/engineering/eng-electronics-embedded/SKILL.md +89 -89
- package/skills/engineering/eng-environmental/LICENSE +21 -21
- package/skills/engineering/eng-environmental/SKILL.md +66 -66
- package/skills/engineering/eng-manufacturing/LICENSE +21 -21
- package/skills/engineering/eng-manufacturing/SKILL.md +78 -78
- package/skills/engineering/eng-mechanical/LICENSE +21 -21
- package/skills/engineering/eng-mechanical/SKILL.md +66 -66
- package/skills/engineering/eng-project/LICENSE +21 -21
- package/skills/engineering/eng-project/SKILL.md +72 -72
- package/skills/engineering/eng-propulsion/LICENSE +21 -21
- package/skills/engineering/eng-propulsion/SKILL.md +133 -133
- package/skills/engineering/eng-robotics/LICENSE +21 -21
- package/skills/engineering/eng-robotics/SKILL.md +92 -92
- package/skills/engineering/eng-systems/LICENSE +21 -21
- package/skills/engineering/eng-systems/SKILL.md +81 -81
- package/skills/environment/env-biodiversity/LICENSE +21 -21
- package/skills/environment/env-biodiversity/SKILL.md +66 -66
- package/skills/environment/env-circular-economy/LICENSE +21 -21
- package/skills/environment/env-circular-economy/SKILL.md +71 -71
- package/skills/environment/env-climate-action/LICENSE +21 -21
- package/skills/environment/env-climate-action/SKILL.md +55 -55
- package/skills/environment/env-energy/LICENSE +21 -21
- package/skills/environment/env-energy/SKILL.md +83 -83
- package/skills/environment/env-sustainability-biz/LICENSE +21 -21
- package/skills/environment/env-sustainability-biz/SKILL.md +65 -65
- package/skills/environment/env-water/LICENSE +21 -21
- package/skills/environment/env-water/SKILL.md +67 -67
- package/skills/finance/finance-accounting/LICENSE +21 -21
- package/skills/finance/finance-accounting/SKILL.md +239 -239
- package/skills/finance/finance-banking/LICENSE +21 -21
- package/skills/finance/finance-banking/SKILL.md +54 -54
- package/skills/finance/finance-corporate/LICENSE +21 -21
- package/skills/finance/finance-corporate/SKILL.md +105 -105
- package/skills/finance/finance-crypto/LICENSE +21 -21
- package/skills/finance/finance-crypto/SKILL.md +94 -94
- package/skills/finance/finance-debt-management/LICENSE +21 -21
- package/skills/finance/finance-debt-management/SKILL.md +87 -87
- package/skills/finance/finance-insurance/LICENSE +21 -21
- package/skills/finance/finance-insurance/SKILL.md +91 -91
- package/skills/finance/finance-investing/LICENSE +21 -21
- package/skills/finance/finance-investing/SKILL.md +269 -269
- package/skills/finance/finance-options-derivatives/LICENSE +21 -21
- package/skills/finance/finance-options-derivatives/SKILL.md +68 -68
- package/skills/finance/finance-personal/LICENSE +21 -21
- package/skills/finance/finance-personal/SKILL.md +268 -268
- package/skills/finance/finance-real-estate/LICENSE +21 -21
- package/skills/finance/finance-real-estate/SKILL.md +110 -110
- package/skills/finance/finance-startup/LICENSE +21 -21
- package/skills/finance/finance-startup/SKILL.md +253 -253
- package/skills/finance/finance-tax-planning/LICENSE +21 -21
- package/skills/finance/finance-tax-planning/SKILL.md +89 -89
- package/skills/finance/finance-trading/LICENSE +21 -21
- package/skills/finance/finance-trading/SKILL.md +112 -112
- package/skills/gemini/SKILL.md +51 -51
- package/skills/gh-issues/SKILL.md +216 -216
- package/skills/gifgrep/SKILL.md +89 -89
- package/skills/github/SKILL.md +87 -87
- package/skills/gog/SKILL.md +120 -120
- package/skills/goplaces/SKILL.md +56 -56
- package/skills/health/health-aging/LICENSE +21 -21
- package/skills/health/health-aging/SKILL.md +82 -82
- package/skills/health/health-chronic/LICENSE +21 -21
- package/skills/health/health-chronic/SKILL.md +202 -202
- package/skills/health/health-dental/LICENSE +21 -21
- package/skills/health/health-dental/SKILL.md +41 -41
- package/skills/health/health-eye-care/LICENSE +21 -21
- package/skills/health/health-eye-care/SKILL.md +56 -56
- package/skills/health/health-first-aid/LICENSE +21 -21
- package/skills/health/health-first-aid/SKILL.md +201 -201
- package/skills/health/health-fitness/LICENSE +21 -21
- package/skills/health/health-fitness/SKILL.md +111 -111
- package/skills/health/health-general/LICENSE +21 -21
- package/skills/health/health-general/SKILL.md +277 -277
- package/skills/health/health-mens/LICENSE +21 -21
- package/skills/health/health-mens/SKILL.md +53 -53
- package/skills/health/health-mental/LICENSE +21 -21
- package/skills/health/health-mental/SKILL.md +221 -221
- package/skills/health/health-naturopathy-ayurveda/LICENSE +21 -21
- package/skills/health/health-naturopathy-ayurveda/SKILL.md +60 -60
- package/skills/health/health-nutrition/LICENSE +21 -21
- package/skills/health/health-nutrition/SKILL.md +262 -262
- package/skills/health/health-pediatric/LICENSE +21 -21
- package/skills/health/health-pediatric/SKILL.md +94 -94
- package/skills/health/health-pharmacology/LICENSE +21 -21
- package/skills/health/health-pharmacology/SKILL.md +87 -87
- package/skills/health/health-pregnancy/LICENSE +21 -21
- package/skills/health/health-pregnancy/SKILL.md +71 -71
- package/skills/health/health-skin/LICENSE +21 -21
- package/skills/health/health-skin/SKILL.md +71 -71
- package/skills/health/health-sleep/LICENSE +21 -21
- package/skills/health/health-sleep/SKILL.md +81 -81
- package/skills/health/health-womens/LICENSE +21 -21
- package/skills/health/health-womens/SKILL.md +72 -72
- package/skills/health/health-yoga-wellness/LICENSE +21 -21
- package/skills/health/health-yoga-wellness/SKILL.md +58 -58
- package/skills/healthcare-systems/health-sys-global/LICENSE +21 -21
- package/skills/healthcare-systems/health-sys-global/SKILL.md +69 -69
- package/skills/healthcare-systems/health-sys-management/LICENSE +21 -21
- package/skills/healthcare-systems/health-sys-management/SKILL.md +71 -71
- package/skills/healthcare-systems/health-sys-navigation/LICENSE +21 -21
- package/skills/healthcare-systems/health-sys-navigation/SKILL.md +60 -60
- package/skills/healthcare-systems/health-sys-public/LICENSE +21 -21
- package/skills/healthcare-systems/health-sys-public/SKILL.md +71 -71
- package/skills/healthcheck/SKILL.md +109 -109
- package/skills/himalaya/SKILL.md +84 -84
- package/skills/himalaya/references/configuration.md +184 -184
- package/skills/himalaya/references/message-composition.md +199 -199
- package/skills/humanities/humanities-history-world/LICENSE +21 -21
- package/skills/humanities/humanities-history-world/SKILL.md +59 -59
- package/skills/humanities/humanities-indian-classical/LICENSE +21 -21
- package/skills/humanities/humanities-indian-classical/SKILL.md +104 -104
- package/skills/humanities/humanities-philosophy/LICENSE +21 -21
- package/skills/humanities/humanities-philosophy/SKILL.md +105 -105
- package/skills/humanities/humanities-world-religions/LICENSE +21 -21
- package/skills/humanities/humanities-world-religions/SKILL.md +67 -67
- package/skills/impeccable/SKILL.md +185 -185
- package/skills/imsg/SKILL.md +126 -126
- package/skills/industry/industry-construction/LICENSE +21 -21
- package/skills/industry/industry-construction/SKILL.md +81 -81
- package/skills/industry/industry-education-sector/LICENSE +21 -21
- package/skills/industry/industry-education-sector/SKILL.md +49 -49
- package/skills/industry/industry-fashion/LICENSE +21 -21
- package/skills/industry/industry-fashion/SKILL.md +82 -82
- package/skills/industry/industry-food/LICENSE +21 -21
- package/skills/industry/industry-food/SKILL.md +79 -79
- package/skills/industry/industry-government/LICENSE +21 -21
- package/skills/industry/industry-government/SKILL.md +80 -80
- package/skills/industry/industry-hospitality/LICENSE +21 -21
- package/skills/industry/industry-hospitality/SKILL.md +73 -73
- package/skills/industry/industry-insurance-sector/LICENSE +21 -21
- package/skills/industry/industry-insurance-sector/SKILL.md +57 -57
- package/skills/industry/industry-logistics/LICENSE +21 -21
- package/skills/industry/industry-logistics/SKILL.md +80 -80
- package/skills/industry/industry-media/LICENSE +21 -21
- package/skills/industry/industry-media/SKILL.md +66 -66
- package/skills/industry/industry-nonprofit/LICENSE +21 -21
- package/skills/industry/industry-nonprofit/SKILL.md +77 -77
- package/skills/industry/industry-pharma/LICENSE +21 -21
- package/skills/industry/industry-pharma/SKILL.md +69 -69
- package/skills/industry/industry-real-estate/LICENSE +21 -21
- package/skills/industry/industry-real-estate/SKILL.md +61 -61
- package/skills/industry/industry-sports/LICENSE +21 -21
- package/skills/industry/industry-sports/SKILL.md +71 -71
- package/skills/industry/industry-tech-startup/LICENSE +21 -21
- package/skills/industry/industry-tech-startup/SKILL.md +82 -82
- package/skills/internal-comms/LICENSE +21 -21
- package/skills/internal-comms/SKILL.md +38 -38
- package/skills/internal-comms/examples/3p-updates.md +49 -49
- package/skills/internal-comms/examples/company-newsletter.md +76 -76
- package/skills/internal-comms/examples/faq-answers.md +35 -35
- package/skills/internal-comms/examples/general-comms.md +19 -19
- package/skills/legal/legal-business/LICENSE +21 -21
- package/skills/legal/legal-business/SKILL.md +227 -227
- package/skills/legal/legal-consumer/LICENSE +21 -21
- package/skills/legal/legal-consumer/SKILL.md +155 -155
- package/skills/legal/legal-contracts/LICENSE +21 -21
- package/skills/legal/legal-contracts/SKILL.md +268 -268
- package/skills/legal/legal-corporate-governance/LICENSE +21 -21
- package/skills/legal/legal-corporate-governance/SKILL.md +53 -53
- package/skills/legal/legal-employment/LICENSE +21 -21
- package/skills/legal/legal-employment/SKILL.md +291 -291
- package/skills/legal/legal-immigration/LICENSE +21 -21
- package/skills/legal/legal-immigration/SKILL.md +146 -146
- package/skills/legal/legal-international/LICENSE +21 -21
- package/skills/legal/legal-international/SKILL.md +51 -51
- package/skills/legal/legal-ip/LICENSE +21 -21
- package/skills/legal/legal-ip/SKILL.md +264 -264
- package/skills/legal/legal-privacy/LICENSE +21 -21
- package/skills/legal/legal-privacy/SKILL.md +161 -161
- package/skills/legal/legal-real-estate/LICENSE +21 -21
- package/skills/legal/legal-real-estate/SKILL.md +142 -142
- package/skills/legal/legal-startup/LICENSE +21 -21
- package/skills/legal/legal-startup/SKILL.md +182 -182
- package/skills/legal/legal-tax/LICENSE +21 -21
- package/skills/legal/legal-tax/SKILL.md +156 -156
- package/skills/mcp-builder/LICENSE +21 -21
- package/skills/mcp-builder/SKILL.md +257 -257
- package/skills/mcp-builder/reference/evaluation.md +630 -630
- package/skills/mcp-builder/reference/mcp_best_practices.md +269 -269
- package/skills/mcp-builder/reference/node_mcp_server.md +980 -980
- package/skills/mcp-builder/reference/python_mcp_server.md +737 -737
- package/skills/mcp-builder/scripts/connections.py +151 -151
- package/skills/mcp-builder/scripts/evaluation.py +373 -373
- package/skills/mcp-builder/scripts/example_evaluation.xml +22 -22
- package/skills/mcp-builder/scripts/requirements.txt +2 -2
- package/skills/mcporter/SKILL.md +65 -65
- package/skills/meme-maker/SKILL.md +46 -46
- package/skills/meme-maker/references/templates.json +358 -358
- package/skills/meme-maker/scripts/meme.mjs +398 -398
- package/skills/mental-health/mental-health-cbt/LICENSE +21 -21
- package/skills/mental-health/mental-health-cbt/SKILL.md +254 -254
- package/skills/mental-health/psych-addiction/LICENSE +21 -21
- package/skills/mental-health/psych-addiction/SKILL.md +79 -79
- package/skills/mental-health/psych-behavioral-econ/LICENSE +21 -21
- package/skills/mental-health/psych-behavioral-econ/SKILL.md +84 -84
- package/skills/mental-health/psych-child/LICENSE +21 -21
- package/skills/mental-health/psych-child/SKILL.md +84 -84
- package/skills/mental-health/psych-grief/LICENSE +21 -21
- package/skills/mental-health/psych-grief/SKILL.md +85 -85
- package/skills/mental-health/psych-mindfulness/LICENSE +21 -21
- package/skills/mental-health/psych-mindfulness/SKILL.md +71 -71
- package/skills/mental-health/psych-org/LICENSE +21 -21
- package/skills/mental-health/psych-org/SKILL.md +115 -115
- package/skills/mental-health/psych-positive/LICENSE +21 -21
- package/skills/mental-health/psych-positive/SKILL.md +86 -86
- package/skills/mental-health/psych-relationships/LICENSE +21 -21
- package/skills/mental-health/psych-relationships/SKILL.md +100 -100
- package/skills/mental-health/psych-trauma/LICENSE +21 -21
- package/skills/mental-health/psych-trauma/SKILL.md +109 -109
- package/skills/model-usage/SKILL.md +75 -75
- package/skills/model-usage/references/codexbar-cli.md +33 -33
- package/skills/model-usage/scripts/model_usage.py +319 -319
- package/skills/model-usage/scripts/test_model_usage.py +40 -40
- package/skills/nano-pdf/SKILL.md +42 -42
- package/skills/node-connect/SKILL.md +147 -147
- package/skills/node-inspect-debugger/SKILL.md +88 -88
- package/skills/notion/SKILL.md +154 -154
- package/skills/obsidian/SKILL.md +123 -123
- package/skills/openai-whisper/SKILL.md +42 -42
- package/skills/openai-whisper-api/SKILL.md +75 -75
- package/skills/openai-whisper-api/scripts/transcribe.sh +154 -154
- package/skills/openhue/SKILL.md +116 -116
- package/skills/oracle/SKILL.md +130 -130
- package/skills/ordercli/SKILL.md +82 -82
- package/skills/peekaboo/SKILL.md +217 -217
- package/skills/pyproject.toml +10 -10
- package/skills/python-debugpy/SKILL.md +76 -76
- package/skills/sag/SKILL.md +91 -91
- package/skills/science/sci-astronomy/LICENSE +21 -21
- package/skills/science/sci-astronomy/SKILL.md +80 -80
- package/skills/science/sci-biology/LICENSE +21 -21
- package/skills/science/sci-biology/SKILL.md +74 -74
- package/skills/science/sci-chemistry/LICENSE +21 -21
- package/skills/science/sci-chemistry/SKILL.md +89 -89
- package/skills/science/sci-climate/LICENSE +21 -21
- package/skills/science/sci-climate/SKILL.md +72 -72
- package/skills/science/sci-data-analysis/LICENSE +21 -21
- package/skills/science/sci-data-analysis/SKILL.md +87 -87
- package/skills/science/sci-environmental-science/LICENSE +21 -21
- package/skills/science/sci-environmental-science/SKILL.md +69 -69
- package/skills/science/sci-geology/LICENSE +21 -21
- package/skills/science/sci-geology/SKILL.md +56 -56
- package/skills/science/sci-method/LICENSE +21 -21
- package/skills/science/sci-method/SKILL.md +77 -77
- package/skills/science/sci-neuroscience/LICENSE +21 -21
- package/skills/science/sci-neuroscience/SKILL.md +79 -79
- package/skills/science/sci-physics/LICENSE +21 -21
- package/skills/science/sci-physics/SKILL.md +78 -78
- package/skills/science/sci-research-methods/LICENSE +21 -21
- package/skills/science/sci-research-methods/SKILL.md +83 -83
- package/skills/science/sci-statistics/LICENSE +21 -21
- package/skills/science/sci-statistics/SKILL.md +249 -249
- package/skills/session-logs/SKILL.md +155 -155
- package/skills/sherpa-onnx-tts/SKILL.md +113 -113
- package/skills/skill-creator/SKILL.md +81 -81
- package/skills/skill-creator/license.txt +202 -202
- package/skills/skill-creator/scripts/init_skill.py +378 -378
- package/skills/skill-creator/scripts/package_skill.py +144 -144
- package/skills/skill-creator/scripts/quick_validate.py +169 -169
- package/skills/skill-creator/scripts/test_init_skill.py +51 -51
- package/skills/skill-creator/scripts/test_package_skill.py +199 -199
- package/skills/skill-creator/scripts/test_quick_validate.py +116 -116
- package/skills/slack/SKILL.md +82 -82
- package/skills/slack-gif-creator/LICENSE +21 -21
- package/skills/slack-gif-creator/SKILL.md +293 -293
- package/skills/slack-gif-creator/requirements.txt +3 -3
- package/skills/social-sciences/social-anthropology/LICENSE +21 -21
- package/skills/social-sciences/social-anthropology/SKILL.md +62 -62
- package/skills/social-sciences/social-economics/LICENSE +21 -21
- package/skills/social-sciences/social-economics/SKILL.md +88 -88
- package/skills/social-sciences/social-geography/LICENSE +21 -21
- package/skills/social-sciences/social-geography/SKILL.md +61 -61
- package/skills/social-sciences/social-international-dev/LICENSE +21 -21
- package/skills/social-sciences/social-international-dev/SKILL.md +76 -76
- package/skills/social-sciences/social-political-science/LICENSE +21 -21
- package/skills/social-sciences/social-political-science/SKILL.md +70 -70
- package/skills/social-sciences/social-public-policy/LICENSE +21 -21
- package/skills/social-sciences/social-public-policy/SKILL.md +73 -73
- package/skills/social-sciences/social-sociology/LICENSE +21 -21
- package/skills/social-sciences/social-sociology/SKILL.md +78 -78
- package/skills/songsee/SKILL.md +53 -53
- package/skills/sonoscli/SKILL.md +69 -69
- package/skills/spike/SKILL.md +55 -55
- package/skills/spotify-player/SKILL.md +68 -68
- package/skills/summarize/SKILL.md +90 -90
- package/skills/taskflow/SKILL.md +153 -153
- package/skills/taskflow/examples/inbox-triage.lobster +33 -33
- package/skills/taskflow/examples/pr-intake.lobster +32 -32
- package/skills/taskflow-inbox-triage/SKILL.md +123 -123
- package/skills/technical/ai-ethics/LICENSE +21 -21
- package/skills/technical/ai-ethics/SKILL.md +92 -92
- package/skills/technical/ai-product-builder/LICENSE +21 -21
- package/skills/technical/ai-product-builder/SKILL.md +180 -180
- package/skills/technical/analytics-setup/LICENSE +21 -21
- package/skills/technical/analytics-setup/SKILL.md +125 -125
- package/skills/technical/api-builder/LICENSE +21 -21
- package/skills/technical/api-builder/SKILL.md +202 -202
- package/skills/technical/architecture-decisions/LICENSE +21 -21
- package/skills/technical/architecture-decisions/SKILL.md +120 -120
- package/skills/technical/auth-security/LICENSE +21 -21
- package/skills/technical/auth-security/SKILL.md +209 -209
- package/skills/technical/blockchain-web3/LICENSE +21 -21
- package/skills/technical/blockchain-web3/SKILL.md +84 -84
- package/skills/technical/cloud-architecture/LICENSE +21 -21
- package/skills/technical/cloud-architecture/SKILL.md +85 -85
- package/skills/technical/content-platform/LICENSE +21 -21
- package/skills/technical/content-platform/SKILL.md +134 -134
- package/skills/technical/cybersecurity-advanced/LICENSE +21 -21
- package/skills/technical/cybersecurity-advanced/SKILL.md +99 -99
- package/skills/technical/data-engineering/LICENSE +21 -21
- package/skills/technical/data-engineering/SKILL.md +117 -117
- package/skills/technical/database-design/LICENSE +21 -21
- package/skills/technical/database-design/SKILL.md +185 -185
- package/skills/technical/devops-cicd/LICENSE +21 -21
- package/skills/technical/devops-cicd/SKILL.md +181 -181
- package/skills/technical/ecommerce-builder/LICENSE +21 -21
- package/skills/technical/ecommerce-builder/SKILL.md +123 -123
- package/skills/technical/email-marketing/LICENSE +21 -21
- package/skills/technical/email-marketing/SKILL.md +128 -128
- package/skills/technical/fintech-builder/LICENSE +21 -21
- package/skills/technical/fintech-builder/SKILL.md +141 -141
- package/skills/technical/full-stack-web/LICENSE +21 -21
- package/skills/technical/full-stack-web/SKILL.md +173 -173
- package/skills/technical/gdpr-basics/LICENSE +21 -21
- package/skills/technical/gdpr-basics/SKILL.md +145 -145
- package/skills/technical/launch-playbook/LICENSE +21 -21
- package/skills/technical/launch-playbook/SKILL.md +95 -95
- package/skills/technical/marketing-copy/LICENSE +21 -21
- package/skills/technical/marketing-copy/SKILL.md +126 -126
- package/skills/technical/marketplace-builder/LICENSE +21 -21
- package/skills/technical/marketplace-builder/SKILL.md +105 -105
- package/skills/technical/mobile-pwa/LICENSE +21 -21
- package/skills/technical/mobile-pwa/SKILL.md +191 -191
- package/skills/technical/no-code-tools/LICENSE +21 -21
- package/skills/technical/no-code-tools/SKILL.md +80 -80
- package/skills/technical/open-source/LICENSE +21 -21
- package/skills/technical/open-source/SKILL.md +71 -71
- package/skills/technical/performance-optimization/LICENSE +21 -21
- package/skills/technical/performance-optimization/SKILL.md +155 -155
- package/skills/technical/pricing-design/LICENSE +21 -21
- package/skills/technical/pricing-design/SKILL.md +87 -87
- package/skills/technical/product-management/LICENSE +21 -21
- package/skills/technical/product-management/SKILL.md +94 -94
- package/skills/technical/saas-builder/LICENSE +21 -21
- package/skills/technical/saas-builder/SKILL.md +138 -138
- package/skills/technical/scope-estimation/LICENSE +21 -21
- package/skills/technical/scope-estimation/SKILL.md +99 -99
- package/skills/technical/secrets-management/LICENSE +21 -21
- package/skills/technical/secrets-management/SKILL.md +135 -135
- package/skills/technical/seo-technical/LICENSE +21 -21
- package/skills/technical/seo-technical/SKILL.md +136 -136
- package/skills/technical/technical-writing/LICENSE +21 -21
- package/skills/technical/technical-writing/SKILL.md +149 -149
- package/skills/technical/ux-research-tools/LICENSE +21 -21
- package/skills/technical/ux-research-tools/SKILL.md +54 -54
- package/skills/theme-factory/LICENSE +21 -21
- package/skills/theme-factory/SKILL.md +65 -65
- package/skills/theme-factory/themes/arctic-frost.md +19 -19
- package/skills/theme-factory/themes/botanical-garden.md +19 -19
- package/skills/theme-factory/themes/desert-rose.md +19 -19
- package/skills/theme-factory/themes/forest-canopy.md +19 -19
- package/skills/theme-factory/themes/golden-hour.md +19 -19
- package/skills/theme-factory/themes/midnight-galaxy.md +19 -19
- package/skills/theme-factory/themes/modern-minimalist.md +19 -19
- package/skills/theme-factory/themes/ocean-depths.md +19 -19
- package/skills/theme-factory/themes/sunset-boulevard.md +19 -19
- package/skills/theme-factory/themes/tech-innovation.md +19 -19
- package/skills/things-mac/SKILL.md +90 -90
- package/skills/tmux/SKILL.md +95 -95
- package/skills/tmux/scripts/find-sessions.sh +112 -112
- package/skills/tmux/scripts/wait-for-text.sh +83 -83
- package/skills/trades/trades-agriculture/LICENSE +21 -21
- package/skills/trades/trades-agriculture/SKILL.md +80 -80
- package/skills/trades/trades-automotive/LICENSE +21 -21
- package/skills/trades/trades-automotive/SKILL.md +84 -84
- package/skills/trades/trades-carpentry/LICENSE +21 -21
- package/skills/trades/trades-carpentry/SKILL.md +71 -71
- package/skills/trades/trades-cooking-pro/LICENSE +21 -21
- package/skills/trades/trades-cooking-pro/SKILL.md +90 -90
- package/skills/trades/trades-electrical/LICENSE +21 -21
- package/skills/trades/trades-electrical/SKILL.md +146 -146
- package/skills/trades/trades-hvac/LICENSE +21 -21
- package/skills/trades/trades-hvac/SKILL.md +80 -80
- package/skills/trades/trades-landscaping/LICENSE +21 -21
- package/skills/trades/trades-landscaping/SKILL.md +60 -60
- package/skills/trades/trades-metalworking/LICENSE +21 -21
- package/skills/trades/trades-metalworking/SKILL.md +64 -64
- package/skills/trades/trades-painting/LICENSE +21 -21
- package/skills/trades/trades-painting/SKILL.md +70 -70
- package/skills/trades/trades-plumbing/LICENSE +21 -21
- package/skills/trades/trades-plumbing/SKILL.md +160 -160
- package/skills/trades/trades-welding/LICENSE +21 -21
- package/skills/trades/trades-welding/SKILL.md +82 -82
- package/skills/trello/SKILL.md +112 -112
- package/skills/uipm-ui-styling/SKILL.md +328 -328
- package/skills/video-frames/SKILL.md +50 -50
- package/skills/video-frames/scripts/frame.sh +81 -81
- package/skills/voice-call/SKILL.md +49 -49
- package/skills/wacli/SKILL.md +76 -76
- package/skills/weather/SKILL.md +91 -91
- package/skills/web-artifacts-builder/LICENSE +21 -21
- package/skills/web-artifacts-builder/SKILL.md +82 -82
- package/skills/web-artifacts-builder/scripts/bundle-artifact.sh +53 -53
- package/skills/web-artifacts-builder/scripts/init-artifact.sh +322 -322
- package/skills/xurl/SKILL.md +124 -124
- package/skills/graphify/SKILL.md +0 -619
- package/skills/graphify/__init__.py +0 -28
- package/skills/graphify/__main__.py +0 -4582
- package/skills/graphify/affected.py +0 -154
- package/skills/graphify/always_on/agents-md.md +0 -12
- package/skills/graphify/always_on/antigravity-rules.md +0 -14
- package/skills/graphify/always_on/claude-md.md +0 -9
- package/skills/graphify/always_on/gemini-md.md +0 -9
- package/skills/graphify/always_on/kiro-steering.md +0 -5
- package/skills/graphify/always_on/vscode-instructions.md +0 -17
- package/skills/graphify/analyze.py +0 -724
- package/skills/graphify/benchmark.py +0 -155
- package/skills/graphify/build.py +0 -487
- package/skills/graphify/cache.py +0 -417
- package/skills/graphify/callflow_html.py +0 -2020
- package/skills/graphify/cluster.py +0 -272
- package/skills/graphify/command-kilo.md +0 -15
- package/skills/graphify/dedup.py +0 -429
- package/skills/graphify/detect.py +0 -1379
- package/skills/graphify/diagnostics.py +0 -390
- package/skills/graphify/export.py +0 -1408
- package/skills/graphify/extract.py +0 -11570
- package/skills/graphify/global_graph.py +0 -159
- package/skills/graphify/google_workspace.py +0 -223
- package/skills/graphify/hooks.py +0 -457
- package/skills/graphify/ingest.py +0 -331
- package/skills/graphify/llm.py +0 -1896
- package/skills/graphify/manifest.py +0 -4
- package/skills/graphify/mcp_ingest.py +0 -392
- package/skills/graphify/multigraph_compat.py +0 -212
- package/skills/graphify/pg_introspect.py +0 -142
- package/skills/graphify/prs.py +0 -748
- package/skills/graphify/querylog.py +0 -70
- package/skills/graphify/report.py +0 -218
- package/skills/graphify/scip_ingest.py +0 -363
- package/skills/graphify/security.py +0 -336
- package/skills/graphify/semantic_cleanup.py +0 -319
- package/skills/graphify/serve.py +0 -1309
- package/skills/graphify/skill-aider.md +0 -1246
- package/skills/graphify/skill-amp.md +0 -613
- package/skills/graphify/skill-claw.md +0 -616
- package/skills/graphify/skill-codex.md +0 -613
- package/skills/graphify/skill-copilot.md +0 -616
- package/skills/graphify/skill-devin.md +0 -1372
- package/skills/graphify/skill-droid.md +0 -613
- package/skills/graphify/skill-kilo.md +0 -625
- package/skills/graphify/skill-kiro.md +0 -615
- package/skills/graphify/skill-opencode.md +0 -608
- package/skills/graphify/skill-pi.md +0 -615
- package/skills/graphify/skill-trae.md +0 -614
- package/skills/graphify/skill-vscode.md +0 -612
- package/skills/graphify/skill-windows.md +0 -651
- package/skills/graphify/skills/amp/references/add-watch.md +0 -56
- package/skills/graphify/skills/amp/references/exports.md +0 -71
- package/skills/graphify/skills/amp/references/extraction-spec.md +0 -68
- package/skills/graphify/skills/amp/references/github-and-merge.md +0 -46
- package/skills/graphify/skills/amp/references/hooks.md +0 -33
- package/skills/graphify/skills/amp/references/query.md +0 -249
- package/skills/graphify/skills/amp/references/transcribe.md +0 -48
- package/skills/graphify/skills/amp/references/update.md +0 -179
- package/skills/graphify/skills/claude/references/add-watch.md +0 -56
- package/skills/graphify/skills/claude/references/exports.md +0 -71
- package/skills/graphify/skills/claude/references/extraction-spec.md +0 -68
- package/skills/graphify/skills/claude/references/github-and-merge.md +0 -46
- package/skills/graphify/skills/claude/references/hooks.md +0 -33
- package/skills/graphify/skills/claude/references/query.md +0 -103
- package/skills/graphify/skills/claude/references/transcribe.md +0 -48
- package/skills/graphify/skills/claude/references/update.md +0 -179
- package/skills/graphify/skills/claw/references/add-watch.md +0 -56
- package/skills/graphify/skills/claw/references/exports.md +0 -71
- package/skills/graphify/skills/claw/references/extraction-spec.md +0 -29
- package/skills/graphify/skills/claw/references/github-and-merge.md +0 -46
- package/skills/graphify/skills/claw/references/hooks.md +0 -33
- package/skills/graphify/skills/claw/references/query.md +0 -249
- package/skills/graphify/skills/claw/references/transcribe.md +0 -48
- package/skills/graphify/skills/claw/references/update.md +0 -179
- package/skills/graphify/skills/codex/references/add-watch.md +0 -56
- package/skills/graphify/skills/codex/references/exports.md +0 -71
- package/skills/graphify/skills/codex/references/extraction-spec.md +0 -29
- package/skills/graphify/skills/codex/references/github-and-merge.md +0 -46
- package/skills/graphify/skills/codex/references/hooks.md +0 -33
- package/skills/graphify/skills/codex/references/query.md +0 -249
- package/skills/graphify/skills/codex/references/transcribe.md +0 -48
- package/skills/graphify/skills/codex/references/update.md +0 -179
- package/skills/graphify/skills/copilot/references/add-watch.md +0 -56
- package/skills/graphify/skills/copilot/references/exports.md +0 -71
- package/skills/graphify/skills/copilot/references/extraction-spec.md +0 -68
- package/skills/graphify/skills/copilot/references/github-and-merge.md +0 -46
- package/skills/graphify/skills/copilot/references/hooks.md +0 -33
- package/skills/graphify/skills/copilot/references/query.md +0 -249
- package/skills/graphify/skills/copilot/references/transcribe.md +0 -48
- package/skills/graphify/skills/copilot/references/update.md +0 -179
- package/skills/graphify/skills/droid/references/add-watch.md +0 -56
- package/skills/graphify/skills/droid/references/exports.md +0 -71
- package/skills/graphify/skills/droid/references/extraction-spec.md +0 -68
- package/skills/graphify/skills/droid/references/github-and-merge.md +0 -46
- package/skills/graphify/skills/droid/references/hooks.md +0 -33
- package/skills/graphify/skills/droid/references/query.md +0 -249
- package/skills/graphify/skills/droid/references/transcribe.md +0 -48
- package/skills/graphify/skills/droid/references/update.md +0 -179
- package/skills/graphify/skills/kilo/references/add-watch.md +0 -56
- package/skills/graphify/skills/kilo/references/exports.md +0 -71
- package/skills/graphify/skills/kilo/references/extraction-spec.md +0 -68
- package/skills/graphify/skills/kilo/references/github-and-merge.md +0 -46
- package/skills/graphify/skills/kilo/references/hooks.md +0 -33
- package/skills/graphify/skills/kilo/references/query.md +0 -249
- package/skills/graphify/skills/kilo/references/transcribe.md +0 -48
- package/skills/graphify/skills/kilo/references/update.md +0 -179
- package/skills/graphify/skills/kiro/references/add-watch.md +0 -56
- package/skills/graphify/skills/kiro/references/exports.md +0 -71
- package/skills/graphify/skills/kiro/references/extraction-spec.md +0 -29
- package/skills/graphify/skills/kiro/references/github-and-merge.md +0 -46
- package/skills/graphify/skills/kiro/references/hooks.md +0 -33
- package/skills/graphify/skills/kiro/references/query.md +0 -249
- package/skills/graphify/skills/kiro/references/transcribe.md +0 -48
- package/skills/graphify/skills/kiro/references/update.md +0 -179
- package/skills/graphify/skills/opencode/references/add-watch.md +0 -56
- package/skills/graphify/skills/opencode/references/exports.md +0 -71
- package/skills/graphify/skills/opencode/references/extraction-spec.md +0 -68
- package/skills/graphify/skills/opencode/references/github-and-merge.md +0 -46
- package/skills/graphify/skills/opencode/references/hooks.md +0 -33
- package/skills/graphify/skills/opencode/references/query.md +0 -249
- package/skills/graphify/skills/opencode/references/transcribe.md +0 -48
- package/skills/graphify/skills/opencode/references/update.md +0 -179
- package/skills/graphify/skills/pi/references/add-watch.md +0 -56
- package/skills/graphify/skills/pi/references/exports.md +0 -71
- package/skills/graphify/skills/pi/references/extraction-spec.md +0 -29
- package/skills/graphify/skills/pi/references/github-and-merge.md +0 -46
- package/skills/graphify/skills/pi/references/hooks.md +0 -33
- package/skills/graphify/skills/pi/references/query.md +0 -249
- package/skills/graphify/skills/pi/references/transcribe.md +0 -48
- package/skills/graphify/skills/pi/references/update.md +0 -179
- package/skills/graphify/skills/trae/references/add-watch.md +0 -56
- package/skills/graphify/skills/trae/references/exports.md +0 -71
- package/skills/graphify/skills/trae/references/extraction-spec.md +0 -68
- package/skills/graphify/skills/trae/references/github-and-merge.md +0 -46
- package/skills/graphify/skills/trae/references/hooks.md +0 -35
- package/skills/graphify/skills/trae/references/query.md +0 -249
- package/skills/graphify/skills/trae/references/transcribe.md +0 -48
- package/skills/graphify/skills/trae/references/update.md +0 -179
- package/skills/graphify/skills/vscode/references/add-watch.md +0 -56
- package/skills/graphify/skills/vscode/references/exports.md +0 -71
- package/skills/graphify/skills/vscode/references/extraction-spec.md +0 -68
- package/skills/graphify/skills/vscode/references/github-and-merge.md +0 -46
- package/skills/graphify/skills/vscode/references/hooks.md +0 -33
- package/skills/graphify/skills/vscode/references/query.md +0 -249
- package/skills/graphify/skills/vscode/references/transcribe.md +0 -48
- package/skills/graphify/skills/vscode/references/update.md +0 -179
- package/skills/graphify/skills/windows/references/add-watch.md +0 -56
- package/skills/graphify/skills/windows/references/exports.md +0 -71
- package/skills/graphify/skills/windows/references/extraction-spec.md +0 -68
- package/skills/graphify/skills/windows/references/github-and-merge.md +0 -46
- package/skills/graphify/skills/windows/references/hooks.md +0 -33
- package/skills/graphify/skills/windows/references/query.md +0 -249
- package/skills/graphify/skills/windows/references/transcribe.md +0 -48
- package/skills/graphify/skills/windows/references/update.md +0 -179
- package/skills/graphify/symbol_resolution.py +0 -538
- package/skills/graphify/transcribe.py +0 -184
- package/skills/graphify/tree_html.py +0 -582
- package/skills/graphify/validate.py +0 -72
- package/skills/graphify/watch.py +0 -898
- package/skills/graphify/wiki.py +0 -282
|
@@ -1,816 +1,816 @@
|
|
|
1
|
-
# Expo / EAS Expert Reference — SDK 54 Build to Launch
|
|
2
|
-
|
|
3
|
-
## Table of Contents
|
|
4
|
-
|
|
5
|
-
1. [Expo SDK 54 Overview](#1-expo-sdk-54-overview)
|
|
6
|
-
2. [EAS Build Configuration (eas.json)](#2-eas-build-configuration-easjson)
|
|
7
|
-
3. [app.json Complete Reference](#3-appjson-complete-reference)
|
|
8
|
-
4. [EAS Build — Profiles & Triggers](#4-eas-build--profiles--triggers)
|
|
9
|
-
5. [EAS Submit — App Store & Play Store](#5-eas-submit--app-store--play-store)
|
|
10
|
-
6. [EAS Update (OTA)](#6-eas-update-ota)
|
|
11
|
-
7. [Config Plugins](#7-config-plugins)
|
|
12
|
-
8. [Native Modules & expo-modules](#8-native-modules--expo-modules)
|
|
13
|
-
9. [Secrets Management in EAS](#9-secrets-management-in-eas)
|
|
14
|
-
10. [Common EAS Build Errors & Fixes](#10-common-eas-build-errors--fixes)
|
|
15
|
-
11. [Common EAS Submit Errors & Fixes](#11-common-eas-submit-errors--fixes)
|
|
16
|
-
12. [Dependency Compatibility Matrix](#12-dependency-compatibility-matrix)
|
|
17
|
-
13. [Development Workflow](#13-development-workflow)
|
|
18
|
-
14. [<project> Specific Fixes](#14-<project>-specific-fixes)
|
|
19
|
-
|
|
20
|
-
---
|
|
21
|
-
|
|
22
|
-
## 1. Expo SDK 54 Overview
|
|
23
|
-
|
|
24
|
-
**SDK 54 highlights (released Feb 2026):**
|
|
25
|
-
|
|
26
|
-
- React Native 0.76
|
|
27
|
-
- Hermes engine default (cannot opt out)
|
|
28
|
-
- New Architecture (Fabric + JSI) opt-in stable
|
|
29
|
-
- `expo-router` v4 (file-based routing)
|
|
30
|
-
- `expo-sqlite` v15 with full synchronous and async APIs
|
|
31
|
-
- `expo-camera` v15 with new Vision Camera API
|
|
32
|
-
- `expo-notifications` v0.29 — improved background handling
|
|
33
|
-
- `expo-dev-client` v4 — stable
|
|
34
|
-
- Dropped support for Android API < 23
|
|
35
|
-
|
|
36
|
-
**Breaking changes from SDK 53→54:**
|
|
37
|
-
|
|
38
|
-
- `expo-av` fully replaced by `expo-video` and `expo-audio`
|
|
39
|
-
- `expo-modules-core` requires minimum iOS 16
|
|
40
|
-
- `SplashScreen.preventAutoHideAsync()` → must call `SplashScreen.setOptions()` first
|
|
41
|
-
- `expo-font` async loading API changed
|
|
42
|
-
|
|
43
|
-
**Hermes engine:** Enabled by default in SDK 48+.
|
|
44
|
-
Benefits: faster startup (~2x), lower memory, better GC.
|
|
45
|
-
`console.log` in production now works in LogBox; remove before release.
|
|
46
|
-
|
|
47
|
-
**New Architecture (Fabric):**
|
|
48
|
-
Opt-in in SDK 54 — stable but not all third-party libraries support it.
|
|
49
|
-
Enable in app.json: `"newArchEnabled": true` (Android) — test thoroughly before enabling.
|
|
50
|
-
For <project>: keep disabled until all native dependencies confirmed compatible.
|
|
51
|
-
|
|
52
|
-
---
|
|
53
|
-
|
|
54
|
-
## 2. EAS Build Configuration (eas.json)
|
|
55
|
-
|
|
56
|
-
**<project> eas.json (complete production-ready config):**
|
|
57
|
-
|
|
58
|
-
```json
|
|
59
|
-
{
|
|
60
|
-
"cli": {
|
|
61
|
-
"version": ">= 12.0.0",
|
|
62
|
-
"appVersionSource": "remote"
|
|
63
|
-
},
|
|
64
|
-
"build": {
|
|
65
|
-
"development": {
|
|
66
|
-
"developmentClient": true,
|
|
67
|
-
"distribution": "internal",
|
|
68
|
-
"ios": {
|
|
69
|
-
"simulator": false,
|
|
70
|
-
"resourceClass": "m-medium"
|
|
71
|
-
},
|
|
72
|
-
"android": {
|
|
73
|
-
"buildType": "apk",
|
|
74
|
-
"gradleCommand": ":app:assembleDebug"
|
|
75
|
-
},
|
|
76
|
-
"env": {
|
|
77
|
-
"APP_ENV": "development"
|
|
78
|
-
}
|
|
79
|
-
},
|
|
80
|
-
"preview": {
|
|
81
|
-
"distribution": "internal",
|
|
82
|
-
"ios": {
|
|
83
|
-
"simulator": false,
|
|
84
|
-
"resourceClass": "m-medium"
|
|
85
|
-
},
|
|
86
|
-
"android": {
|
|
87
|
-
"buildType": "apk"
|
|
88
|
-
},
|
|
89
|
-
"env": {
|
|
90
|
-
"APP_ENV": "staging"
|
|
91
|
-
}
|
|
92
|
-
},
|
|
93
|
-
"production": {
|
|
94
|
-
"autoIncrement": true,
|
|
95
|
-
"ios": {
|
|
96
|
-
"resourceClass": "m-medium",
|
|
97
|
-
"image": "latest"
|
|
98
|
-
},
|
|
99
|
-
"android": {
|
|
100
|
-
"buildType": "app-bundle"
|
|
101
|
-
},
|
|
102
|
-
"env": {
|
|
103
|
-
"APP_ENV": "production"
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
},
|
|
107
|
-
"submit": {
|
|
108
|
-
"production": {
|
|
109
|
-
"ios": {
|
|
110
|
-
"appleId": "<email>",
|
|
111
|
-
"ascAppId": "6762309517",
|
|
112
|
-
"appleTeamId": "LZT4U6348K"
|
|
113
|
-
},
|
|
114
|
-
"android": {
|
|
115
|
-
"serviceAccountKeyPath": "./google-play-service-account.json",
|
|
116
|
-
"track": "internal"
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
**`appVersionSource: "remote"`** — versionCode and buildNumber are managed by EAS servers, auto-incrementing. Recommended for production.
|
|
124
|
-
|
|
125
|
-
**`autoIncrement: true`** — auto-increments versionCode/buildNumber on each production build. Use with `appVersionSource: remote`.
|
|
126
|
-
|
|
127
|
-
**Resource classes:**
|
|
128
|
-
|
|
129
|
-
- `m-medium`: 4 vCPU, 8GB RAM — default, sufficient for <project>
|
|
130
|
-
- `m-large`: 8 vCPU, 16GB RAM — for very large apps or slow builds
|
|
131
|
-
- iOS builds require macOS workers (m-medium = Apple Silicon M1)
|
|
132
|
-
|
|
133
|
-
---
|
|
134
|
-
|
|
135
|
-
## 3. app.json Complete Reference
|
|
136
|
-
|
|
137
|
-
**<project> app.json (production-ready):**
|
|
138
|
-
|
|
139
|
-
```json
|
|
140
|
-
{
|
|
141
|
-
"expo": {
|
|
142
|
-
"name": "<project> Shield",
|
|
143
|
-
"slug": "<project>-shield",
|
|
144
|
-
"version": "2.3.0",
|
|
145
|
-
"orientation": "portrait",
|
|
146
|
-
"icon": "./assets/icon.png",
|
|
147
|
-
"userInterfaceStyle": "light",
|
|
148
|
-
"scheme": "<project>",
|
|
149
|
-
"splash": {
|
|
150
|
-
"image": "./assets/splash.png",
|
|
151
|
-
"resizeMode": "contain",
|
|
152
|
-
"backgroundColor": "#0A1C48"
|
|
153
|
-
},
|
|
154
|
-
"assetBundlePatterns": ["**/*"],
|
|
155
|
-
"ios": {
|
|
156
|
-
"supportsTablet": false,
|
|
157
|
-
"bundleIdentifier": "com.<project>.shield",
|
|
158
|
-
"buildNumber": "15",
|
|
159
|
-
"googleServicesFile": "./GoogleService-Info.plist",
|
|
160
|
-
"usesAppleSignIn": true,
|
|
161
|
-
"infoPlist": {
|
|
162
|
-
"ITSAppUsesNonExemptEncryption": false,
|
|
163
|
-
"UIBackgroundModes": ["fetch", "processing", "remote-notification"],
|
|
164
|
-
"BGTaskSchedulerPermittedIdentifiers": ["com.<project>.shield.refresh"],
|
|
165
|
-
"NSCameraUsageDescription": "Used to scan QR codes for UPI payments",
|
|
166
|
-
"NSFaceIDUsageDescription": "Used to authenticate your identity securely",
|
|
167
|
-
"NSContactsUsageDescription": "Used to quickly find contacts for payments"
|
|
168
|
-
}
|
|
169
|
-
},
|
|
170
|
-
"android": {
|
|
171
|
-
"package": "com.<project>.shield",
|
|
172
|
-
"versionCode": 14,
|
|
173
|
-
"googleServicesFile": "./google-services.json",
|
|
174
|
-
"permissions": [
|
|
175
|
-
"CAMERA",
|
|
176
|
-
"VIBRATE",
|
|
177
|
-
"RECEIVE_BOOT_COMPLETED",
|
|
178
|
-
"USE_BIOMETRIC",
|
|
179
|
-
"USE_FINGERPRINT"
|
|
180
|
-
],
|
|
181
|
-
"adaptiveIcon": {
|
|
182
|
-
"foregroundImage": "./assets/adaptive-icon.png",
|
|
183
|
-
"backgroundColor": "#0A1C48"
|
|
184
|
-
}
|
|
185
|
-
},
|
|
186
|
-
"web": {
|
|
187
|
-
"favicon": "./assets/favicon.png"
|
|
188
|
-
},
|
|
189
|
-
"plugins": [
|
|
190
|
-
[
|
|
191
|
-
"expo-camera",
|
|
192
|
-
{ "cameraPermission": "Allow <project> to access your camera to scan QR codes." }
|
|
193
|
-
],
|
|
194
|
-
["expo-local-authentication"],
|
|
195
|
-
[
|
|
196
|
-
"expo-notifications",
|
|
197
|
-
{
|
|
198
|
-
"icon": "./assets/notification-icon.png",
|
|
199
|
-
"color": "#3B82F6",
|
|
200
|
-
"sounds": ["./assets/notification.wav"],
|
|
201
|
-
"androidCollapsedTitle": "<project> Alert",
|
|
202
|
-
"iosDisplayInForeground": true
|
|
203
|
-
}
|
|
204
|
-
],
|
|
205
|
-
[
|
|
206
|
-
"@react-native-google-signin/google-signin",
|
|
207
|
-
{
|
|
208
|
-
"iosUrlScheme": "com.googleusercontent.apps.929418470411-REPLACE_WITH_REVERSED_CLIENT_ID"
|
|
209
|
-
}
|
|
210
|
-
],
|
|
211
|
-
"expo-apple-authentication"
|
|
212
|
-
],
|
|
213
|
-
"extra": {
|
|
214
|
-
"eas": {
|
|
215
|
-
"projectId": "EXPO_PROJECT_ID"
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
```
|
|
221
|
-
|
|
222
|
-
**Key fields:**
|
|
223
|
-
|
|
224
|
-
- `scheme`: URL scheme for deep links (`<project>://`)
|
|
225
|
-
- `userInterfaceStyle`: "light" | "dark" | "automatic"
|
|
226
|
-
- `supportsTablet`: false for phone-only app
|
|
227
|
-
- `ITSAppUsesNonExemptEncryption: false` — avoids US export compliance questionnaire if no custom crypto
|
|
228
|
-
- `buildNumber` is a **string** (iOS), `versionCode` is a **number** (Android)
|
|
229
|
-
|
|
230
|
-
---
|
|
231
|
-
|
|
232
|
-
## 4. EAS Build — Profiles & Triggers
|
|
233
|
-
|
|
234
|
-
**Build commands:**
|
|
235
|
-
|
|
236
|
-
```bash
|
|
237
|
-
# Production iOS (App Store submission)
|
|
238
|
-
eas build --platform ios --profile production
|
|
239
|
-
|
|
240
|
-
# Production Android (AAB for Play Store)
|
|
241
|
-
eas build --platform android --profile production
|
|
242
|
-
|
|
243
|
-
# Both platforms simultaneously
|
|
244
|
-
eas build --platform all --profile production
|
|
245
|
-
|
|
246
|
-
# Preview APK (internal testing without Play Store)
|
|
247
|
-
eas build --platform android --profile preview
|
|
248
|
-
|
|
249
|
-
# Development build with expo-dev-client
|
|
250
|
-
eas build --platform ios --profile development
|
|
251
|
-
eas build --platform android --profile development
|
|
252
|
-
|
|
253
|
-
# Check build status
|
|
254
|
-
eas build:list
|
|
255
|
-
|
|
256
|
-
# Cancel a build
|
|
257
|
-
eas build:cancel BUILD_ID
|
|
258
|
-
```
|
|
259
|
-
|
|
260
|
-
**Build queues:**
|
|
261
|
-
|
|
262
|
-
- Free tier: serial queue, potentially long wait
|
|
263
|
-
- Priority builds: available on paid plans (EAS $19/mo Starter or higher)
|
|
264
|
-
- Typical build time: iOS 10-20 min, Android 8-15 min
|
|
265
|
-
|
|
266
|
-
**Build artifacts:**
|
|
267
|
-
|
|
268
|
-
- iOS production: `.ipa` file → directly submittable to App Store Connect
|
|
269
|
-
- Android production: `.aab` file → directly submittable to Play Console
|
|
270
|
-
- Android preview: `.apk` file → install directly on device
|
|
271
|
-
|
|
272
|
-
**Artifact URLs:** Available in EAS Dashboard and printed in CLI output.
|
|
273
|
-
<project> versionCode 14 AAB: `https://expo.dev/artifacts/eas/4wJ3M2VNwNco4YYjrQQNkL.aab`
|
|
274
|
-
<project> build 15 IPA: `https://expo.dev/artifacts/eas/3K9FQFpKJRxJyxybuH9a9Z.ipa`
|
|
275
|
-
|
|
276
|
-
**Build logs:**
|
|
277
|
-
|
|
278
|
-
```bash
|
|
279
|
-
eas build:view BUILD_ID
|
|
280
|
-
# or open in browser:
|
|
281
|
-
# https://expo.dev/accounts/<project>/projects/<project>-shield/builds/BUILD_ID
|
|
282
|
-
```
|
|
283
|
-
|
|
284
|
-
---
|
|
285
|
-
|
|
286
|
-
## 5. EAS Submit — App Store & Play Store
|
|
287
|
-
|
|
288
|
-
**iOS submission:**
|
|
289
|
-
|
|
290
|
-
```bash
|
|
291
|
-
# Submit latest build
|
|
292
|
-
eas submit --platform ios --latest
|
|
293
|
-
|
|
294
|
-
# Submit specific build
|
|
295
|
-
eas submit --platform ios --id BUILD_ID
|
|
296
|
-
|
|
297
|
-
# Submit local IPA
|
|
298
|
-
eas submit --platform ios --path ./app.ipa
|
|
299
|
-
```
|
|
300
|
-
|
|
301
|
-
**EAS Submit requires ASC API Key (not Apple ID + password):**
|
|
302
|
-
|
|
303
|
-
1. App Store Connect → Users and Access → Integrations → App Store Connect API
|
|
304
|
-
2. Generate key with App Manager role
|
|
305
|
-
3. Download .p8 file (one-time download!)
|
|
306
|
-
4. Run: `eas credentials` → iOS → App Store Connect API Key → Add new
|
|
307
|
-
|
|
308
|
-
**iOS submission flow:**
|
|
309
|
-
|
|
310
|
-
1. EAS validates IPA against App Store requirements
|
|
311
|
-
2. Uploads to App Store Connect using ASC API
|
|
312
|
-
3. Build appears in TestFlight section (takes 5-30 min to process)
|
|
313
|
-
4. Select build for external TestFlight testing or App Store release
|
|
314
|
-
|
|
315
|
-
**Android submission:**
|
|
316
|
-
|
|
317
|
-
```bash
|
|
318
|
-
# Submit latest AAB
|
|
319
|
-
eas submit --platform android --latest
|
|
320
|
-
|
|
321
|
-
# Submit to specific track
|
|
322
|
-
eas submit --platform android --latest --android-package com.<project>.shield
|
|
323
|
-
```
|
|
324
|
-
|
|
325
|
-
**Android requires Google Play service account:**
|
|
326
|
-
|
|
327
|
-
1. Play Console → Setup → API access → Link to Google Cloud project
|
|
328
|
-
2. Google Cloud Console → Create service account
|
|
329
|
-
3. Grant roles: Release Manager + Storage Admin
|
|
330
|
-
4. Download service account JSON key
|
|
331
|
-
5. Add to `eas.json`: `"serviceAccountKeyPath": "./google-play-service-account.json"`
|
|
332
|
-
6. Add to `.gitignore` — never commit this file
|
|
333
|
-
|
|
334
|
-
**Submission status:**
|
|
335
|
-
|
|
336
|
-
```
|
|
337
|
-
https://expo.dev/accounts/<project>/projects/<project>-shield/submissions/SUBMISSION_ID
|
|
338
|
-
```
|
|
339
|
-
|
|
340
|
-
**<project> iOS submission (failed) — check:**
|
|
341
|
-
`https://expo.dev/accounts/<project>/projects/<project>-shield/submissions/595e31cf`
|
|
342
|
-
|
|
343
|
-
---
|
|
344
|
-
|
|
345
|
-
## 6. EAS Update (OTA)
|
|
346
|
-
|
|
347
|
-
**OTA updates — what can be updated:**
|
|
348
|
-
|
|
349
|
-
- JavaScript bundle
|
|
350
|
-
- Assets (images, fonts, JSON)
|
|
351
|
-
- Any non-native code
|
|
352
|
-
|
|
353
|
-
**What CANNOT be updated via OTA:**
|
|
354
|
-
|
|
355
|
-
- Native module additions/removals
|
|
356
|
-
- app.json changes requiring native rebuild
|
|
357
|
-
- New permissions
|
|
358
|
-
- New SDK features requiring native code
|
|
359
|
-
|
|
360
|
-
**Commands:**
|
|
361
|
-
|
|
362
|
-
```bash
|
|
363
|
-
# Push OTA update to production channel
|
|
364
|
-
eas update --channel production --message "Fix: ACH challenge timer"
|
|
365
|
-
|
|
366
|
-
# Push to staging
|
|
367
|
-
eas update --channel staging --message "Testing new UPI flow"
|
|
368
|
-
|
|
369
|
-
# List updates
|
|
370
|
-
eas update:list
|
|
371
|
-
|
|
372
|
-
# Rollback to previous update
|
|
373
|
-
eas update:rollback --channel production
|
|
374
|
-
```
|
|
375
|
-
|
|
376
|
-
**Channel configuration in app.json:**
|
|
377
|
-
|
|
378
|
-
```json
|
|
379
|
-
{
|
|
380
|
-
"expo": {
|
|
381
|
-
"runtimeVersion": {
|
|
382
|
-
"policy": "sdkVersion"
|
|
383
|
-
},
|
|
384
|
-
"updates": {
|
|
385
|
-
"url": "https://u.expo.dev/YOUR_PROJECT_ID",
|
|
386
|
-
"enabled": true,
|
|
387
|
-
"fallbackToCacheTimeout": 0
|
|
388
|
-
}
|
|
389
|
-
}
|
|
390
|
-
}
|
|
391
|
-
```
|
|
392
|
-
|
|
393
|
-
**Runtime version:** Must match between the running app and the OTA update.
|
|
394
|
-
`sdkVersion` policy: runtime version = Expo SDK version (safest, updates only delivered to compatible builds)
|
|
395
|
-
|
|
396
|
-
**OTA in code (expo-updates):**
|
|
397
|
-
|
|
398
|
-
```typescript
|
|
399
|
-
import * as Updates from "expo-updates";
|
|
400
|
-
|
|
401
|
-
async function checkForUpdate() {
|
|
402
|
-
const update = await Updates.checkForUpdateAsync();
|
|
403
|
-
if (update.isAvailable) {
|
|
404
|
-
await Updates.fetchUpdateAsync();
|
|
405
|
-
await Updates.reloadAsync(); // restart app with new bundle
|
|
406
|
-
}
|
|
407
|
-
}
|
|
408
|
-
```
|
|
409
|
-
|
|
410
|
-
---
|
|
411
|
-
|
|
412
|
-
## 7. Config Plugins
|
|
413
|
-
|
|
414
|
-
**What config plugins do:**
|
|
415
|
-
Modify native iOS/Android project files without ejecting to bare workflow.
|
|
416
|
-
Runs during `eas build` (prebuild phase).
|
|
417
|
-
|
|
418
|
-
**Common config plugins for <project>:**
|
|
419
|
-
|
|
420
|
-
```json
|
|
421
|
-
{
|
|
422
|
-
"plugins": [
|
|
423
|
-
"expo-camera",
|
|
424
|
-
"expo-local-authentication",
|
|
425
|
-
["expo-notifications", { ... }],
|
|
426
|
-
["@react-native-google-signin/google-signin", { ... }],
|
|
427
|
-
"expo-apple-authentication",
|
|
428
|
-
["expo-build-properties", {
|
|
429
|
-
"android": {
|
|
430
|
-
"compileSdkVersion": 35,
|
|
431
|
-
"targetSdkVersion": 34,
|
|
432
|
-
"minSdkVersion": 23,
|
|
433
|
-
"kotlinVersion": "1.9.24"
|
|
434
|
-
},
|
|
435
|
-
"ios": {
|
|
436
|
-
"deploymentTarget": "16.0"
|
|
437
|
-
}
|
|
438
|
-
}]
|
|
439
|
-
]
|
|
440
|
-
}
|
|
441
|
-
```
|
|
442
|
-
|
|
443
|
-
**Writing custom config plugins:**
|
|
444
|
-
|
|
445
|
-
```typescript
|
|
446
|
-
// plugins/withPrivacyManifest.ts
|
|
447
|
-
import { ConfigPlugin, withInfoPlist } from "expo/config-plugins";
|
|
448
|
-
|
|
449
|
-
const withPrivacyManifest: ConfigPlugin = (config) => {
|
|
450
|
-
return withInfoPlist(config, (config) => {
|
|
451
|
-
// Modify Info.plist
|
|
452
|
-
return config;
|
|
453
|
-
});
|
|
454
|
-
};
|
|
455
|
-
export default withPrivacyManifest;
|
|
456
|
-
```
|
|
457
|
-
|
|
458
|
-
**`expo-build-properties`** — most commonly needed plugin to set Android/iOS build settings.
|
|
459
|
-
Install: `npx expo install expo-build-properties`
|
|
460
|
-
|
|
461
|
-
**Prebuild (generate native code without building):**
|
|
462
|
-
|
|
463
|
-
```bash
|
|
464
|
-
npx expo prebuild --clean
|
|
465
|
-
# Generates android/ and ios/ folders
|
|
466
|
-
# DO NOT commit these if using managed workflow
|
|
467
|
-
```
|
|
468
|
-
|
|
469
|
-
---
|
|
470
|
-
|
|
471
|
-
## 8. Native Modules & expo-modules
|
|
472
|
-
|
|
473
|
-
**Modules removed from <project> Shield (incompatible):**
|
|
474
|
-
|
|
475
|
-
- `react-native-ble-plx` — BLE (incompatible with SDK 54 managed workflow)
|
|
476
|
-
- `react-native-mmkv` — fast key-value storage (requires bare workflow)
|
|
477
|
-
- `react-native-tts` — text-to-speech (not needed)
|
|
478
|
-
- `react-native-permissions` — replaced by built-in expo permission APIs
|
|
479
|
-
- `react-native-reanimated` — removed; use `react-native-reanimated` v3+ with config plugin if needed
|
|
480
|
-
- `react-native-gesture-handler` — use with reanimated; add as config plugin
|
|
481
|
-
- `react-native-worklets` — incompatible
|
|
482
|
-
|
|
483
|
-
**Expo SDK 54 equivalents:**
|
|
484
|
-
| Removed | Use instead |
|
|
485
|
-
|---------|-------------|
|
|
486
|
-
| react-native-ble-plx | expo-bluetooth (experimental) or remove BLE features |
|
|
487
|
-
| react-native-mmkv | expo-secure-store or AsyncStorage |
|
|
488
|
-
| react-native-permissions | expo-camera, expo-location built-in permission APIs |
|
|
489
|
-
| react-native-reanimated | Install v3 + add to plugins |
|
|
490
|
-
|
|
491
|
-
**Adding react-native-reanimated properly (if needed):**
|
|
492
|
-
|
|
493
|
-
```bash
|
|
494
|
-
npx expo install react-native-reanimated
|
|
495
|
-
```
|
|
496
|
-
|
|
497
|
-
Then add to babel.config.js:
|
|
498
|
-
|
|
499
|
-
```javascript
|
|
500
|
-
module.exports = { plugins: ["react-native-reanimated/plugin"] };
|
|
501
|
-
```
|
|
502
|
-
|
|
503
|
-
And app.json plugins: `"react-native-reanimated"` (as config plugin).
|
|
504
|
-
|
|
505
|
-
**Checking module compatibility:**
|
|
506
|
-
https://reactnative.directory — search any module
|
|
507
|
-
https://expo.dev/go — Expo Go supported packages
|
|
508
|
-
https://www.npmjs.com/package/expo-modules-core — SDK compatibility matrix
|
|
509
|
-
|
|
510
|
-
---
|
|
511
|
-
|
|
512
|
-
## 9. Secrets Management in EAS
|
|
513
|
-
|
|
514
|
-
**EAS secrets (stored securely, injected at build time):**
|
|
515
|
-
|
|
516
|
-
```bash
|
|
517
|
-
# Set a secret
|
|
518
|
-
eas secret:create --scope project --name API_KEY --value "your-value"
|
|
519
|
-
|
|
520
|
-
# List secrets
|
|
521
|
-
eas secret:list
|
|
522
|
-
|
|
523
|
-
# Delete a secret
|
|
524
|
-
eas secret:delete --id SECRET_ID
|
|
525
|
-
```
|
|
526
|
-
|
|
527
|
-
**Types:**
|
|
528
|
-
|
|
529
|
-
- **Project secrets:** Available to all builds for this project
|
|
530
|
-
- **Account secrets:** Available to all projects under this Expo account
|
|
531
|
-
|
|
532
|
-
**Using secrets in code:**
|
|
533
|
-
|
|
534
|
-
```typescript
|
|
535
|
-
// Secrets are injected as environment variables at build time
|
|
536
|
-
const apiKey = process.env.API_KEY;
|
|
537
|
-
|
|
538
|
-
// In app.json, expose them:
|
|
539
|
-
{
|
|
540
|
-
"expo": {
|
|
541
|
-
"extra": {
|
|
542
|
-
"apiKey": process.env.API_KEY
|
|
543
|
-
}
|
|
544
|
-
}
|
|
545
|
-
}
|
|
546
|
-
|
|
547
|
-
// In code:
|
|
548
|
-
import Constants from 'expo-constants';
|
|
549
|
-
const apiKey = Constants.expoConfig?.extra?.apiKey;
|
|
550
|
-
```
|
|
551
|
-
|
|
552
|
-
**Secret precedence:** eas.json `env` → EAS project secrets → EAS account secrets
|
|
553
|
-
|
|
554
|
-
**Never put secrets in app.json directly** — these are bundled into the app binary and visible to anyone who decompiles the APK/IPA.
|
|
555
|
-
Use EAS secrets for: API keys, backend URLs, Firebase config overrides.
|
|
556
|
-
|
|
557
|
-
---
|
|
558
|
-
|
|
559
|
-
## 10. Common EAS Build Errors & Fixes
|
|
560
|
-
|
|
561
|
-
**"No Expo project found":**
|
|
562
|
-
Run `eas init` in the project root to link with Expo account.
|
|
563
|
-
Or check `extra.eas.projectId` in app.json is correct.
|
|
564
|
-
|
|
565
|
-
**"Unable to find module 'X'":**
|
|
566
|
-
Module not installed or incompatible with current SDK.
|
|
567
|
-
Fix: `npx expo install X` (uses compatible version)
|
|
568
|
-
Never use `npm install X` for Expo modules — always `npx expo install`.
|
|
569
|
-
|
|
570
|
-
**iOS build: "No matching provisioning profiles found":**
|
|
571
|
-
Fix via `eas credentials` → iOS → reset credentials and let EAS generate new ones.
|
|
572
|
-
Or in App Store Connect: revoke expired provisioning profiles and regenerate.
|
|
573
|
-
|
|
574
|
-
**iOS build: "Xcode build failed":**
|
|
575
|
-
Check build logs: `eas build:view BUILD_ID`
|
|
576
|
-
Common causes:
|
|
577
|
-
|
|
578
|
-
- Missing config plugin configuration
|
|
579
|
-
- Incompatible native module version
|
|
580
|
-
- Info.plist key conflict between plugins
|
|
581
|
-
- Swift version mismatch
|
|
582
|
-
|
|
583
|
-
**Android build: "AAPT2 error":**
|
|
584
|
-
Usually a resource conflict or missing drawable.
|
|
585
|
-
Fix: ensure all icon assets exist at correct sizes.
|
|
586
|
-
Adaptive icon: 108×108 dp (432×432 px for xxxhdpi)
|
|
587
|
-
|
|
588
|
-
**Android build: "Duplicate class":**
|
|
589
|
-
Two dependencies include the same class.
|
|
590
|
-
Fix in app.json plugins/expo-build-properties:
|
|
591
|
-
|
|
592
|
-
```json
|
|
593
|
-
[
|
|
594
|
-
"expo-build-properties",
|
|
595
|
-
{
|
|
596
|
-
"android": {
|
|
597
|
-
"packagingOptions": {
|
|
598
|
-
"pickFirst": ["**/libc++_shared.so"]
|
|
599
|
-
}
|
|
600
|
-
}
|
|
601
|
-
}
|
|
602
|
-
]
|
|
603
|
-
```
|
|
604
|
-
|
|
605
|
-
**"Build queue timeout":**
|
|
606
|
-
EAS free tier has build time limits. Upgrade or retry.
|
|
607
|
-
Use `--no-wait` flag to submit build without waiting in CLI.
|
|
608
|
-
|
|
609
|
-
**"google-services.json not found":**
|
|
610
|
-
File must be in Expo project root (not android/ subfolder).
|
|
611
|
-
app.json: `"android": { "googleServicesFile": "./google-services.json" }`
|
|
612
|
-
|
|
613
|
-
**"GoogleService-Info.plist not found":**
|
|
614
|
-
File must be in Expo project root.
|
|
615
|
-
app.json: `"ios": { "googleServicesFile": "./GoogleService-Info.plist" }`
|
|
616
|
-
|
|
617
|
-
**Build succeeds but app crashes on launch:**
|
|
618
|
-
|
|
619
|
-
- Check EAS Build logs for any warning about incompatible modules
|
|
620
|
-
- Common cause: Hermes engine incompatibility with a native module
|
|
621
|
-
- Test with development build first: `eas build --profile development`
|
|
622
|
-
|
|
623
|
-
---
|
|
624
|
-
|
|
625
|
-
## 11. Common EAS Submit Errors & Fixes
|
|
626
|
-
|
|
627
|
-
**iOS: "No Apple ID credentials found":**
|
|
628
|
-
Run `eas credentials` → iOS → App Store Connect API Key → add credentials.
|
|
629
|
-
Do not use Apple ID + password for 2FA accounts — use ASC API key instead.
|
|
630
|
-
|
|
631
|
-
**iOS: "The bundle 'com.<project>.shield' is not available":**
|
|
632
|
-
App not created in App Store Connect yet.
|
|
633
|
-
Fix: Create app in App Store Connect first, then submit.
|
|
634
|
-
|
|
635
|
-
**iOS: "App Store Connect operation error" (generic):**
|
|
636
|
-
Check Apple system status: developer.apple.com/system-status/
|
|
637
|
-
If Apple services are degraded, wait and retry.
|
|
638
|
-
|
|
639
|
-
**iOS: "Invalid Bundle. The bundle does not support the minimum OS version":**
|
|
640
|
-
Update `ios.deploymentTarget` in expo-build-properties plugin.
|
|
641
|
-
|
|
642
|
-
**iOS: "Missing compliance" error:**
|
|
643
|
-
Add to app.json: `"ITSAppUsesNonExemptEncryption": false`
|
|
644
|
-
Rebuild and resubmit.
|
|
645
|
-
|
|
646
|
-
**iOS: BGTaskScheduler rejection (Guideline 2.5.4):**
|
|
647
|
-
This is an App Review rejection, not a submission error.
|
|
648
|
-
`BGTaskSchedulerPermittedIdentifiers` in Info.plist must exactly match registered identifiers in code.
|
|
649
|
-
Check: app.json → `BGTaskSchedulerPermittedIdentifiers` matches `BackgroundFetch.registerTaskAsync()` task name.
|
|
650
|
-
|
|
651
|
-
**iOS: "Sign in with Apple required":**
|
|
652
|
-
If Google Sign-In is present, Apple Sign-In must also be present.
|
|
653
|
-
Install `expo-apple-authentication` and add flow.
|
|
654
|
-
|
|
655
|
-
**Android: "No service account key found":**
|
|
656
|
-
Place `google-play-service-account.json` in project root (gitignored).
|
|
657
|
-
Update eas.json: `"serviceAccountKeyPath": "./google-play-service-account.json"`
|
|
658
|
-
|
|
659
|
-
**Android: "Version code already used":**
|
|
660
|
-
Increment versionCode in app.json and rebuild before submitting.
|
|
661
|
-
|
|
662
|
-
**Android: "Package name mismatch":**
|
|
663
|
-
Package in AAB must match Play Console app registration: `com.<project>.shield`.
|
|
664
|
-
|
|
665
|
-
**Submission 595e31cf (current iOS failure):**
|
|
666
|
-
Check: `https://expo.dev/accounts/<project>/projects/<project>-shield/submissions/595e31cf`
|
|
667
|
-
Most likely causes given build history:
|
|
668
|
-
|
|
669
|
-
1. BGTaskScheduler identifier mismatch
|
|
670
|
-
2. Sign in with Apple missing
|
|
671
|
-
3. Privacy manifest missing (ITMS-91053)
|
|
672
|
-
4. Missing REVERSED_CLIENT_ID URL scheme for Google Sign-In
|
|
673
|
-
|
|
674
|
-
---
|
|
675
|
-
|
|
676
|
-
## 12. Dependency Compatibility Matrix
|
|
677
|
-
|
|
678
|
-
**SDK 54 confirmed compatible packages:**
|
|
679
|
-
| Package | Version | Notes |
|
|
680
|
-
|---------|---------|-------|
|
|
681
|
-
| expo | ~54.0.0 | |
|
|
682
|
-
| react-native | 0.76.x | |
|
|
683
|
-
| expo-camera | ~15.0.0 | |
|
|
684
|
-
| expo-local-authentication | ~15.0.0 | |
|
|
685
|
-
| expo-notifications | ~0.29.0 | |
|
|
686
|
-
| expo-secure-store | ~14.0.0 | |
|
|
687
|
-
| expo-updates | ~0.27.0 | |
|
|
688
|
-
| expo-router | ~4.0.0 | |
|
|
689
|
-
| expo-build-properties | ~0.13.0 | |
|
|
690
|
-
| expo-apple-authentication | ~7.0.0 | |
|
|
691
|
-
| @react-native-firebase/app | ~21.x | |
|
|
692
|
-
| @react-native-firebase/messaging | ~21.x | |
|
|
693
|
-
| @react-native-google-signin/google-signin | ~13.x | |
|
|
694
|
-
|
|
695
|
-
**Install compatible versions:**
|
|
696
|
-
|
|
697
|
-
```bash
|
|
698
|
-
npx expo install expo-camera expo-notifications expo-local-authentication
|
|
699
|
-
```
|
|
700
|
-
|
|
701
|
-
Always use `npx expo install` — it automatically selects SDK-compatible versions.
|
|
702
|
-
|
|
703
|
-
**Checking for outdated packages:**
|
|
704
|
-
|
|
705
|
-
```bash
|
|
706
|
-
npx expo-doctor
|
|
707
|
-
# or
|
|
708
|
-
npx expo install --check
|
|
709
|
-
```
|
|
710
|
-
|
|
711
|
-
---
|
|
712
|
-
|
|
713
|
-
## 13. Development Workflow
|
|
714
|
-
|
|
715
|
-
**Daily development cycle:**
|
|
716
|
-
|
|
717
|
-
```bash
|
|
718
|
-
# Start dev server
|
|
719
|
-
npx expo start
|
|
720
|
-
|
|
721
|
-
# Start with specific options
|
|
722
|
-
npx expo start --clear # clear cache
|
|
723
|
-
npx expo start --tunnel # use ngrok tunnel (for physical devices on different network)
|
|
724
|
-
|
|
725
|
-
# Open in simulator
|
|
726
|
-
npx expo start --ios # iOS simulator
|
|
727
|
-
npx expo start --android # Android emulator
|
|
728
|
-
|
|
729
|
-
# Run on physical device
|
|
730
|
-
# Install Expo Go or dev client → scan QR code
|
|
731
|
-
```
|
|
732
|
-
|
|
733
|
-
**Development client vs Expo Go:**
|
|
734
|
-
|
|
735
|
-
- **Expo Go:** Sandboxed, limited native modules, good for prototyping
|
|
736
|
-
- **expo-dev-client:** Full native module support, required for <project> (Firebase, Google Sign-In, etc.)
|
|
737
|
-
|
|
738
|
-
**Build and test on device (without EAS):**
|
|
739
|
-
|
|
740
|
-
```bash
|
|
741
|
-
# Build locally (requires Xcode/Android Studio)
|
|
742
|
-
npx expo run:ios
|
|
743
|
-
npx expo run:android
|
|
744
|
-
|
|
745
|
-
# EAS development build (no local Xcode needed)
|
|
746
|
-
eas build --profile development --platform ios
|
|
747
|
-
# Install dev client IPA on device → start Expo server → connect
|
|
748
|
-
```
|
|
749
|
-
|
|
750
|
-
**Clearing caches (when things go wrong):**
|
|
751
|
-
|
|
752
|
-
```bash
|
|
753
|
-
npx expo start --clear
|
|
754
|
-
npx expo install --fix # Fix version mismatches
|
|
755
|
-
rm -rf node_modules && npm install
|
|
756
|
-
cd ios && pod install && cd .. # Re-install iOS pods (bare workflow)
|
|
757
|
-
```
|
|
758
|
-
|
|
759
|
-
---
|
|
760
|
-
|
|
761
|
-
## 14. <project> Specific Fixes
|
|
762
|
-
|
|
763
|
-
**iOS submission 595e31cf failure — systematic fix checklist:**
|
|
764
|
-
|
|
765
|
-
1. **Check exact error in submission details** at expo.dev link
|
|
766
|
-
2. **BGTaskScheduler fix (most likely):**
|
|
767
|
-
- Verify `BGTaskSchedulerPermittedIdentifiers` in app.json InfoPlist
|
|
768
|
-
- Ensure exactly one identifier: `"com.<project>.shield.refresh"`
|
|
769
|
-
- Verify same string is used in background task registration code
|
|
770
|
-
3. **Privacy manifest check:**
|
|
771
|
-
- Ensure `PrivacyInfo.xcprivacy` is added via config plugin
|
|
772
|
-
- If not present, add `expo-privacy-manifest` plugin or custom config plugin
|
|
773
|
-
4. **Sign in with Apple:**
|
|
774
|
-
- `expo-apple-authentication` must be installed AND functional in app
|
|
775
|
-
- `usesAppleSignIn: true` in app.json is not enough — actual sign-in flow must exist
|
|
776
|
-
5. **Rebuild after fix:**
|
|
777
|
-
```bash
|
|
778
|
-
# Increment buildNumber in app.json (15 → 16)
|
|
779
|
-
eas build --platform ios --profile production
|
|
780
|
-
eas submit --platform ios --latest
|
|
781
|
-
```
|
|
782
|
-
|
|
783
|
-
**Google Sign-In fix for versionCode 14 (Android):**
|
|
784
|
-
|
|
785
|
-
- Both SHA-1 fingerprints are in Firebase (confirmed)
|
|
786
|
-
- versionCode 14 build uses production SHA-1
|
|
787
|
-
- Once Play Store approves and tester installs: test Google Sign-In
|
|
788
|
-
- If Error 10 (DEVELOPER_ERROR) still occurs: download fresh google-services.json from Firebase
|
|
789
|
-
|
|
790
|
-
**ACH Shield Unit.co webhook in app:**
|
|
791
|
-
App receives FCM push with challenge data:
|
|
792
|
-
|
|
793
|
-
```typescript
|
|
794
|
-
const challengeData = {
|
|
795
|
-
challengeId: remoteMessage.data.challengeId,
|
|
796
|
-
options: JSON.parse(remoteMessage.data.options), // ["3", "7", "9"]
|
|
797
|
-
expiresAt: remoteMessage.data.expiresAt,
|
|
798
|
-
amount: remoteMessage.data.amount,
|
|
799
|
-
};
|
|
800
|
-
// Navigate to ACH challenge screen with this data
|
|
801
|
-
```
|
|
802
|
-
|
|
803
|
-
**UPI daily limit tracker:**
|
|
804
|
-
|
|
805
|
-
- Backend: `GET /api/upi/daily-limit` returns `{ used: number, limit: 10000, currency: 'INR' }`
|
|
806
|
-
- Stored in DB per user per UTC day
|
|
807
|
-
- Reset at midnight UTC (not IST — careful with timezone)
|
|
808
|
-
- For IST midnight reset: use Cloud Scheduler with IST timezone (Asia/Kolkata)
|
|
809
|
-
|
|
810
|
-
**Unit.co SANDBOX → PRODUCTION switch (before public launch):**
|
|
811
|
-
|
|
812
|
-
1. Unit.co dashboard: switch org to production mode
|
|
813
|
-
2. Get production UNIT_API_KEY JWT
|
|
814
|
-
3. Update in GCP Secret Manager: `gcloud secrets versions add UNIT_API_KEY --data-file=...`
|
|
815
|
-
4. Redeploy all 3 regions
|
|
816
|
-
5. Test with a real bank account before any user-facing launch
|
|
1
|
+
# Expo / EAS Expert Reference — SDK 54 Build to Launch
|
|
2
|
+
|
|
3
|
+
## Table of Contents
|
|
4
|
+
|
|
5
|
+
1. [Expo SDK 54 Overview](#1-expo-sdk-54-overview)
|
|
6
|
+
2. [EAS Build Configuration (eas.json)](#2-eas-build-configuration-easjson)
|
|
7
|
+
3. [app.json Complete Reference](#3-appjson-complete-reference)
|
|
8
|
+
4. [EAS Build — Profiles & Triggers](#4-eas-build--profiles--triggers)
|
|
9
|
+
5. [EAS Submit — App Store & Play Store](#5-eas-submit--app-store--play-store)
|
|
10
|
+
6. [EAS Update (OTA)](#6-eas-update-ota)
|
|
11
|
+
7. [Config Plugins](#7-config-plugins)
|
|
12
|
+
8. [Native Modules & expo-modules](#8-native-modules--expo-modules)
|
|
13
|
+
9. [Secrets Management in EAS](#9-secrets-management-in-eas)
|
|
14
|
+
10. [Common EAS Build Errors & Fixes](#10-common-eas-build-errors--fixes)
|
|
15
|
+
11. [Common EAS Submit Errors & Fixes](#11-common-eas-submit-errors--fixes)
|
|
16
|
+
12. [Dependency Compatibility Matrix](#12-dependency-compatibility-matrix)
|
|
17
|
+
13. [Development Workflow](#13-development-workflow)
|
|
18
|
+
14. [<project> Specific Fixes](#14-<project>-specific-fixes)
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## 1. Expo SDK 54 Overview
|
|
23
|
+
|
|
24
|
+
**SDK 54 highlights (released Feb 2026):**
|
|
25
|
+
|
|
26
|
+
- React Native 0.76
|
|
27
|
+
- Hermes engine default (cannot opt out)
|
|
28
|
+
- New Architecture (Fabric + JSI) opt-in stable
|
|
29
|
+
- `expo-router` v4 (file-based routing)
|
|
30
|
+
- `expo-sqlite` v15 with full synchronous and async APIs
|
|
31
|
+
- `expo-camera` v15 with new Vision Camera API
|
|
32
|
+
- `expo-notifications` v0.29 — improved background handling
|
|
33
|
+
- `expo-dev-client` v4 — stable
|
|
34
|
+
- Dropped support for Android API < 23
|
|
35
|
+
|
|
36
|
+
**Breaking changes from SDK 53→54:**
|
|
37
|
+
|
|
38
|
+
- `expo-av` fully replaced by `expo-video` and `expo-audio`
|
|
39
|
+
- `expo-modules-core` requires minimum iOS 16
|
|
40
|
+
- `SplashScreen.preventAutoHideAsync()` → must call `SplashScreen.setOptions()` first
|
|
41
|
+
- `expo-font` async loading API changed
|
|
42
|
+
|
|
43
|
+
**Hermes engine:** Enabled by default in SDK 48+.
|
|
44
|
+
Benefits: faster startup (~2x), lower memory, better GC.
|
|
45
|
+
`console.log` in production now works in LogBox; remove before release.
|
|
46
|
+
|
|
47
|
+
**New Architecture (Fabric):**
|
|
48
|
+
Opt-in in SDK 54 — stable but not all third-party libraries support it.
|
|
49
|
+
Enable in app.json: `"newArchEnabled": true` (Android) — test thoroughly before enabling.
|
|
50
|
+
For <project>: keep disabled until all native dependencies confirmed compatible.
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## 2. EAS Build Configuration (eas.json)
|
|
55
|
+
|
|
56
|
+
**<project> eas.json (complete production-ready config):**
|
|
57
|
+
|
|
58
|
+
```json
|
|
59
|
+
{
|
|
60
|
+
"cli": {
|
|
61
|
+
"version": ">= 12.0.0",
|
|
62
|
+
"appVersionSource": "remote"
|
|
63
|
+
},
|
|
64
|
+
"build": {
|
|
65
|
+
"development": {
|
|
66
|
+
"developmentClient": true,
|
|
67
|
+
"distribution": "internal",
|
|
68
|
+
"ios": {
|
|
69
|
+
"simulator": false,
|
|
70
|
+
"resourceClass": "m-medium"
|
|
71
|
+
},
|
|
72
|
+
"android": {
|
|
73
|
+
"buildType": "apk",
|
|
74
|
+
"gradleCommand": ":app:assembleDebug"
|
|
75
|
+
},
|
|
76
|
+
"env": {
|
|
77
|
+
"APP_ENV": "development"
|
|
78
|
+
}
|
|
79
|
+
},
|
|
80
|
+
"preview": {
|
|
81
|
+
"distribution": "internal",
|
|
82
|
+
"ios": {
|
|
83
|
+
"simulator": false,
|
|
84
|
+
"resourceClass": "m-medium"
|
|
85
|
+
},
|
|
86
|
+
"android": {
|
|
87
|
+
"buildType": "apk"
|
|
88
|
+
},
|
|
89
|
+
"env": {
|
|
90
|
+
"APP_ENV": "staging"
|
|
91
|
+
}
|
|
92
|
+
},
|
|
93
|
+
"production": {
|
|
94
|
+
"autoIncrement": true,
|
|
95
|
+
"ios": {
|
|
96
|
+
"resourceClass": "m-medium",
|
|
97
|
+
"image": "latest"
|
|
98
|
+
},
|
|
99
|
+
"android": {
|
|
100
|
+
"buildType": "app-bundle"
|
|
101
|
+
},
|
|
102
|
+
"env": {
|
|
103
|
+
"APP_ENV": "production"
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
},
|
|
107
|
+
"submit": {
|
|
108
|
+
"production": {
|
|
109
|
+
"ios": {
|
|
110
|
+
"appleId": "<email>",
|
|
111
|
+
"ascAppId": "6762309517",
|
|
112
|
+
"appleTeamId": "LZT4U6348K"
|
|
113
|
+
},
|
|
114
|
+
"android": {
|
|
115
|
+
"serviceAccountKeyPath": "./google-play-service-account.json",
|
|
116
|
+
"track": "internal"
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
**`appVersionSource: "remote"`** — versionCode and buildNumber are managed by EAS servers, auto-incrementing. Recommended for production.
|
|
124
|
+
|
|
125
|
+
**`autoIncrement: true`** — auto-increments versionCode/buildNumber on each production build. Use with `appVersionSource: remote`.
|
|
126
|
+
|
|
127
|
+
**Resource classes:**
|
|
128
|
+
|
|
129
|
+
- `m-medium`: 4 vCPU, 8GB RAM — default, sufficient for <project>
|
|
130
|
+
- `m-large`: 8 vCPU, 16GB RAM — for very large apps or slow builds
|
|
131
|
+
- iOS builds require macOS workers (m-medium = Apple Silicon M1)
|
|
132
|
+
|
|
133
|
+
---
|
|
134
|
+
|
|
135
|
+
## 3. app.json Complete Reference
|
|
136
|
+
|
|
137
|
+
**<project> app.json (production-ready):**
|
|
138
|
+
|
|
139
|
+
```json
|
|
140
|
+
{
|
|
141
|
+
"expo": {
|
|
142
|
+
"name": "<project> Shield",
|
|
143
|
+
"slug": "<project>-shield",
|
|
144
|
+
"version": "2.3.0",
|
|
145
|
+
"orientation": "portrait",
|
|
146
|
+
"icon": "./assets/icon.png",
|
|
147
|
+
"userInterfaceStyle": "light",
|
|
148
|
+
"scheme": "<project>",
|
|
149
|
+
"splash": {
|
|
150
|
+
"image": "./assets/splash.png",
|
|
151
|
+
"resizeMode": "contain",
|
|
152
|
+
"backgroundColor": "#0A1C48"
|
|
153
|
+
},
|
|
154
|
+
"assetBundlePatterns": ["**/*"],
|
|
155
|
+
"ios": {
|
|
156
|
+
"supportsTablet": false,
|
|
157
|
+
"bundleIdentifier": "com.<project>.shield",
|
|
158
|
+
"buildNumber": "15",
|
|
159
|
+
"googleServicesFile": "./GoogleService-Info.plist",
|
|
160
|
+
"usesAppleSignIn": true,
|
|
161
|
+
"infoPlist": {
|
|
162
|
+
"ITSAppUsesNonExemptEncryption": false,
|
|
163
|
+
"UIBackgroundModes": ["fetch", "processing", "remote-notification"],
|
|
164
|
+
"BGTaskSchedulerPermittedIdentifiers": ["com.<project>.shield.refresh"],
|
|
165
|
+
"NSCameraUsageDescription": "Used to scan QR codes for UPI payments",
|
|
166
|
+
"NSFaceIDUsageDescription": "Used to authenticate your identity securely",
|
|
167
|
+
"NSContactsUsageDescription": "Used to quickly find contacts for payments"
|
|
168
|
+
}
|
|
169
|
+
},
|
|
170
|
+
"android": {
|
|
171
|
+
"package": "com.<project>.shield",
|
|
172
|
+
"versionCode": 14,
|
|
173
|
+
"googleServicesFile": "./google-services.json",
|
|
174
|
+
"permissions": [
|
|
175
|
+
"CAMERA",
|
|
176
|
+
"VIBRATE",
|
|
177
|
+
"RECEIVE_BOOT_COMPLETED",
|
|
178
|
+
"USE_BIOMETRIC",
|
|
179
|
+
"USE_FINGERPRINT"
|
|
180
|
+
],
|
|
181
|
+
"adaptiveIcon": {
|
|
182
|
+
"foregroundImage": "./assets/adaptive-icon.png",
|
|
183
|
+
"backgroundColor": "#0A1C48"
|
|
184
|
+
}
|
|
185
|
+
},
|
|
186
|
+
"web": {
|
|
187
|
+
"favicon": "./assets/favicon.png"
|
|
188
|
+
},
|
|
189
|
+
"plugins": [
|
|
190
|
+
[
|
|
191
|
+
"expo-camera",
|
|
192
|
+
{ "cameraPermission": "Allow <project> to access your camera to scan QR codes." }
|
|
193
|
+
],
|
|
194
|
+
["expo-local-authentication"],
|
|
195
|
+
[
|
|
196
|
+
"expo-notifications",
|
|
197
|
+
{
|
|
198
|
+
"icon": "./assets/notification-icon.png",
|
|
199
|
+
"color": "#3B82F6",
|
|
200
|
+
"sounds": ["./assets/notification.wav"],
|
|
201
|
+
"androidCollapsedTitle": "<project> Alert",
|
|
202
|
+
"iosDisplayInForeground": true
|
|
203
|
+
}
|
|
204
|
+
],
|
|
205
|
+
[
|
|
206
|
+
"@react-native-google-signin/google-signin",
|
|
207
|
+
{
|
|
208
|
+
"iosUrlScheme": "com.googleusercontent.apps.929418470411-REPLACE_WITH_REVERSED_CLIENT_ID"
|
|
209
|
+
}
|
|
210
|
+
],
|
|
211
|
+
"expo-apple-authentication"
|
|
212
|
+
],
|
|
213
|
+
"extra": {
|
|
214
|
+
"eas": {
|
|
215
|
+
"projectId": "EXPO_PROJECT_ID"
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
**Key fields:**
|
|
223
|
+
|
|
224
|
+
- `scheme`: URL scheme for deep links (`<project>://`)
|
|
225
|
+
- `userInterfaceStyle`: "light" | "dark" | "automatic"
|
|
226
|
+
- `supportsTablet`: false for phone-only app
|
|
227
|
+
- `ITSAppUsesNonExemptEncryption: false` — avoids US export compliance questionnaire if no custom crypto
|
|
228
|
+
- `buildNumber` is a **string** (iOS), `versionCode` is a **number** (Android)
|
|
229
|
+
|
|
230
|
+
---
|
|
231
|
+
|
|
232
|
+
## 4. EAS Build — Profiles & Triggers
|
|
233
|
+
|
|
234
|
+
**Build commands:**
|
|
235
|
+
|
|
236
|
+
```bash
|
|
237
|
+
# Production iOS (App Store submission)
|
|
238
|
+
eas build --platform ios --profile production
|
|
239
|
+
|
|
240
|
+
# Production Android (AAB for Play Store)
|
|
241
|
+
eas build --platform android --profile production
|
|
242
|
+
|
|
243
|
+
# Both platforms simultaneously
|
|
244
|
+
eas build --platform all --profile production
|
|
245
|
+
|
|
246
|
+
# Preview APK (internal testing without Play Store)
|
|
247
|
+
eas build --platform android --profile preview
|
|
248
|
+
|
|
249
|
+
# Development build with expo-dev-client
|
|
250
|
+
eas build --platform ios --profile development
|
|
251
|
+
eas build --platform android --profile development
|
|
252
|
+
|
|
253
|
+
# Check build status
|
|
254
|
+
eas build:list
|
|
255
|
+
|
|
256
|
+
# Cancel a build
|
|
257
|
+
eas build:cancel BUILD_ID
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
**Build queues:**
|
|
261
|
+
|
|
262
|
+
- Free tier: serial queue, potentially long wait
|
|
263
|
+
- Priority builds: available on paid plans (EAS $19/mo Starter or higher)
|
|
264
|
+
- Typical build time: iOS 10-20 min, Android 8-15 min
|
|
265
|
+
|
|
266
|
+
**Build artifacts:**
|
|
267
|
+
|
|
268
|
+
- iOS production: `.ipa` file → directly submittable to App Store Connect
|
|
269
|
+
- Android production: `.aab` file → directly submittable to Play Console
|
|
270
|
+
- Android preview: `.apk` file → install directly on device
|
|
271
|
+
|
|
272
|
+
**Artifact URLs:** Available in EAS Dashboard and printed in CLI output.
|
|
273
|
+
<project> versionCode 14 AAB: `https://expo.dev/artifacts/eas/4wJ3M2VNwNco4YYjrQQNkL.aab`
|
|
274
|
+
<project> build 15 IPA: `https://expo.dev/artifacts/eas/3K9FQFpKJRxJyxybuH9a9Z.ipa`
|
|
275
|
+
|
|
276
|
+
**Build logs:**
|
|
277
|
+
|
|
278
|
+
```bash
|
|
279
|
+
eas build:view BUILD_ID
|
|
280
|
+
# or open in browser:
|
|
281
|
+
# https://expo.dev/accounts/<project>/projects/<project>-shield/builds/BUILD_ID
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
---
|
|
285
|
+
|
|
286
|
+
## 5. EAS Submit — App Store & Play Store
|
|
287
|
+
|
|
288
|
+
**iOS submission:**
|
|
289
|
+
|
|
290
|
+
```bash
|
|
291
|
+
# Submit latest build
|
|
292
|
+
eas submit --platform ios --latest
|
|
293
|
+
|
|
294
|
+
# Submit specific build
|
|
295
|
+
eas submit --platform ios --id BUILD_ID
|
|
296
|
+
|
|
297
|
+
# Submit local IPA
|
|
298
|
+
eas submit --platform ios --path ./app.ipa
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
**EAS Submit requires ASC API Key (not Apple ID + password):**
|
|
302
|
+
|
|
303
|
+
1. App Store Connect → Users and Access → Integrations → App Store Connect API
|
|
304
|
+
2. Generate key with App Manager role
|
|
305
|
+
3. Download .p8 file (one-time download!)
|
|
306
|
+
4. Run: `eas credentials` → iOS → App Store Connect API Key → Add new
|
|
307
|
+
|
|
308
|
+
**iOS submission flow:**
|
|
309
|
+
|
|
310
|
+
1. EAS validates IPA against App Store requirements
|
|
311
|
+
2. Uploads to App Store Connect using ASC API
|
|
312
|
+
3. Build appears in TestFlight section (takes 5-30 min to process)
|
|
313
|
+
4. Select build for external TestFlight testing or App Store release
|
|
314
|
+
|
|
315
|
+
**Android submission:**
|
|
316
|
+
|
|
317
|
+
```bash
|
|
318
|
+
# Submit latest AAB
|
|
319
|
+
eas submit --platform android --latest
|
|
320
|
+
|
|
321
|
+
# Submit to specific track
|
|
322
|
+
eas submit --platform android --latest --android-package com.<project>.shield
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
**Android requires Google Play service account:**
|
|
326
|
+
|
|
327
|
+
1. Play Console → Setup → API access → Link to Google Cloud project
|
|
328
|
+
2. Google Cloud Console → Create service account
|
|
329
|
+
3. Grant roles: Release Manager + Storage Admin
|
|
330
|
+
4. Download service account JSON key
|
|
331
|
+
5. Add to `eas.json`: `"serviceAccountKeyPath": "./google-play-service-account.json"`
|
|
332
|
+
6. Add to `.gitignore` — never commit this file
|
|
333
|
+
|
|
334
|
+
**Submission status:**
|
|
335
|
+
|
|
336
|
+
```
|
|
337
|
+
https://expo.dev/accounts/<project>/projects/<project>-shield/submissions/SUBMISSION_ID
|
|
338
|
+
```
|
|
339
|
+
|
|
340
|
+
**<project> iOS submission (failed) — check:**
|
|
341
|
+
`https://expo.dev/accounts/<project>/projects/<project>-shield/submissions/595e31cf`
|
|
342
|
+
|
|
343
|
+
---
|
|
344
|
+
|
|
345
|
+
## 6. EAS Update (OTA)
|
|
346
|
+
|
|
347
|
+
**OTA updates — what can be updated:**
|
|
348
|
+
|
|
349
|
+
- JavaScript bundle
|
|
350
|
+
- Assets (images, fonts, JSON)
|
|
351
|
+
- Any non-native code
|
|
352
|
+
|
|
353
|
+
**What CANNOT be updated via OTA:**
|
|
354
|
+
|
|
355
|
+
- Native module additions/removals
|
|
356
|
+
- app.json changes requiring native rebuild
|
|
357
|
+
- New permissions
|
|
358
|
+
- New SDK features requiring native code
|
|
359
|
+
|
|
360
|
+
**Commands:**
|
|
361
|
+
|
|
362
|
+
```bash
|
|
363
|
+
# Push OTA update to production channel
|
|
364
|
+
eas update --channel production --message "Fix: ACH challenge timer"
|
|
365
|
+
|
|
366
|
+
# Push to staging
|
|
367
|
+
eas update --channel staging --message "Testing new UPI flow"
|
|
368
|
+
|
|
369
|
+
# List updates
|
|
370
|
+
eas update:list
|
|
371
|
+
|
|
372
|
+
# Rollback to previous update
|
|
373
|
+
eas update:rollback --channel production
|
|
374
|
+
```
|
|
375
|
+
|
|
376
|
+
**Channel configuration in app.json:**
|
|
377
|
+
|
|
378
|
+
```json
|
|
379
|
+
{
|
|
380
|
+
"expo": {
|
|
381
|
+
"runtimeVersion": {
|
|
382
|
+
"policy": "sdkVersion"
|
|
383
|
+
},
|
|
384
|
+
"updates": {
|
|
385
|
+
"url": "https://u.expo.dev/YOUR_PROJECT_ID",
|
|
386
|
+
"enabled": true,
|
|
387
|
+
"fallbackToCacheTimeout": 0
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
```
|
|
392
|
+
|
|
393
|
+
**Runtime version:** Must match between the running app and the OTA update.
|
|
394
|
+
`sdkVersion` policy: runtime version = Expo SDK version (safest, updates only delivered to compatible builds)
|
|
395
|
+
|
|
396
|
+
**OTA in code (expo-updates):**
|
|
397
|
+
|
|
398
|
+
```typescript
|
|
399
|
+
import * as Updates from "expo-updates";
|
|
400
|
+
|
|
401
|
+
async function checkForUpdate() {
|
|
402
|
+
const update = await Updates.checkForUpdateAsync();
|
|
403
|
+
if (update.isAvailable) {
|
|
404
|
+
await Updates.fetchUpdateAsync();
|
|
405
|
+
await Updates.reloadAsync(); // restart app with new bundle
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
```
|
|
409
|
+
|
|
410
|
+
---
|
|
411
|
+
|
|
412
|
+
## 7. Config Plugins
|
|
413
|
+
|
|
414
|
+
**What config plugins do:**
|
|
415
|
+
Modify native iOS/Android project files without ejecting to bare workflow.
|
|
416
|
+
Runs during `eas build` (prebuild phase).
|
|
417
|
+
|
|
418
|
+
**Common config plugins for <project>:**
|
|
419
|
+
|
|
420
|
+
```json
|
|
421
|
+
{
|
|
422
|
+
"plugins": [
|
|
423
|
+
"expo-camera",
|
|
424
|
+
"expo-local-authentication",
|
|
425
|
+
["expo-notifications", { ... }],
|
|
426
|
+
["@react-native-google-signin/google-signin", { ... }],
|
|
427
|
+
"expo-apple-authentication",
|
|
428
|
+
["expo-build-properties", {
|
|
429
|
+
"android": {
|
|
430
|
+
"compileSdkVersion": 35,
|
|
431
|
+
"targetSdkVersion": 34,
|
|
432
|
+
"minSdkVersion": 23,
|
|
433
|
+
"kotlinVersion": "1.9.24"
|
|
434
|
+
},
|
|
435
|
+
"ios": {
|
|
436
|
+
"deploymentTarget": "16.0"
|
|
437
|
+
}
|
|
438
|
+
}]
|
|
439
|
+
]
|
|
440
|
+
}
|
|
441
|
+
```
|
|
442
|
+
|
|
443
|
+
**Writing custom config plugins:**
|
|
444
|
+
|
|
445
|
+
```typescript
|
|
446
|
+
// plugins/withPrivacyManifest.ts
|
|
447
|
+
import { ConfigPlugin, withInfoPlist } from "expo/config-plugins";
|
|
448
|
+
|
|
449
|
+
const withPrivacyManifest: ConfigPlugin = (config) => {
|
|
450
|
+
return withInfoPlist(config, (config) => {
|
|
451
|
+
// Modify Info.plist
|
|
452
|
+
return config;
|
|
453
|
+
});
|
|
454
|
+
};
|
|
455
|
+
export default withPrivacyManifest;
|
|
456
|
+
```
|
|
457
|
+
|
|
458
|
+
**`expo-build-properties`** — most commonly needed plugin to set Android/iOS build settings.
|
|
459
|
+
Install: `npx expo install expo-build-properties`
|
|
460
|
+
|
|
461
|
+
**Prebuild (generate native code without building):**
|
|
462
|
+
|
|
463
|
+
```bash
|
|
464
|
+
npx expo prebuild --clean
|
|
465
|
+
# Generates android/ and ios/ folders
|
|
466
|
+
# DO NOT commit these if using managed workflow
|
|
467
|
+
```
|
|
468
|
+
|
|
469
|
+
---
|
|
470
|
+
|
|
471
|
+
## 8. Native Modules & expo-modules
|
|
472
|
+
|
|
473
|
+
**Modules removed from <project> Shield (incompatible):**
|
|
474
|
+
|
|
475
|
+
- `react-native-ble-plx` — BLE (incompatible with SDK 54 managed workflow)
|
|
476
|
+
- `react-native-mmkv` — fast key-value storage (requires bare workflow)
|
|
477
|
+
- `react-native-tts` — text-to-speech (not needed)
|
|
478
|
+
- `react-native-permissions` — replaced by built-in expo permission APIs
|
|
479
|
+
- `react-native-reanimated` — removed; use `react-native-reanimated` v3+ with config plugin if needed
|
|
480
|
+
- `react-native-gesture-handler` — use with reanimated; add as config plugin
|
|
481
|
+
- `react-native-worklets` — incompatible
|
|
482
|
+
|
|
483
|
+
**Expo SDK 54 equivalents:**
|
|
484
|
+
| Removed | Use instead |
|
|
485
|
+
|---------|-------------|
|
|
486
|
+
| react-native-ble-plx | expo-bluetooth (experimental) or remove BLE features |
|
|
487
|
+
| react-native-mmkv | expo-secure-store or AsyncStorage |
|
|
488
|
+
| react-native-permissions | expo-camera, expo-location built-in permission APIs |
|
|
489
|
+
| react-native-reanimated | Install v3 + add to plugins |
|
|
490
|
+
|
|
491
|
+
**Adding react-native-reanimated properly (if needed):**
|
|
492
|
+
|
|
493
|
+
```bash
|
|
494
|
+
npx expo install react-native-reanimated
|
|
495
|
+
```
|
|
496
|
+
|
|
497
|
+
Then add to babel.config.js:
|
|
498
|
+
|
|
499
|
+
```javascript
|
|
500
|
+
module.exports = { plugins: ["react-native-reanimated/plugin"] };
|
|
501
|
+
```
|
|
502
|
+
|
|
503
|
+
And app.json plugins: `"react-native-reanimated"` (as config plugin).
|
|
504
|
+
|
|
505
|
+
**Checking module compatibility:**
|
|
506
|
+
https://reactnative.directory — search any module
|
|
507
|
+
https://expo.dev/go — Expo Go supported packages
|
|
508
|
+
https://www.npmjs.com/package/expo-modules-core — SDK compatibility matrix
|
|
509
|
+
|
|
510
|
+
---
|
|
511
|
+
|
|
512
|
+
## 9. Secrets Management in EAS
|
|
513
|
+
|
|
514
|
+
**EAS secrets (stored securely, injected at build time):**
|
|
515
|
+
|
|
516
|
+
```bash
|
|
517
|
+
# Set a secret
|
|
518
|
+
eas secret:create --scope project --name API_KEY --value "your-value"
|
|
519
|
+
|
|
520
|
+
# List secrets
|
|
521
|
+
eas secret:list
|
|
522
|
+
|
|
523
|
+
# Delete a secret
|
|
524
|
+
eas secret:delete --id SECRET_ID
|
|
525
|
+
```
|
|
526
|
+
|
|
527
|
+
**Types:**
|
|
528
|
+
|
|
529
|
+
- **Project secrets:** Available to all builds for this project
|
|
530
|
+
- **Account secrets:** Available to all projects under this Expo account
|
|
531
|
+
|
|
532
|
+
**Using secrets in code:**
|
|
533
|
+
|
|
534
|
+
```typescript
|
|
535
|
+
// Secrets are injected as environment variables at build time
|
|
536
|
+
const apiKey = process.env.API_KEY;
|
|
537
|
+
|
|
538
|
+
// In app.json, expose them:
|
|
539
|
+
{
|
|
540
|
+
"expo": {
|
|
541
|
+
"extra": {
|
|
542
|
+
"apiKey": process.env.API_KEY
|
|
543
|
+
}
|
|
544
|
+
}
|
|
545
|
+
}
|
|
546
|
+
|
|
547
|
+
// In code:
|
|
548
|
+
import Constants from 'expo-constants';
|
|
549
|
+
const apiKey = Constants.expoConfig?.extra?.apiKey;
|
|
550
|
+
```
|
|
551
|
+
|
|
552
|
+
**Secret precedence:** eas.json `env` → EAS project secrets → EAS account secrets
|
|
553
|
+
|
|
554
|
+
**Never put secrets in app.json directly** — these are bundled into the app binary and visible to anyone who decompiles the APK/IPA.
|
|
555
|
+
Use EAS secrets for: API keys, backend URLs, Firebase config overrides.
|
|
556
|
+
|
|
557
|
+
---
|
|
558
|
+
|
|
559
|
+
## 10. Common EAS Build Errors & Fixes
|
|
560
|
+
|
|
561
|
+
**"No Expo project found":**
|
|
562
|
+
Run `eas init` in the project root to link with Expo account.
|
|
563
|
+
Or check `extra.eas.projectId` in app.json is correct.
|
|
564
|
+
|
|
565
|
+
**"Unable to find module 'X'":**
|
|
566
|
+
Module not installed or incompatible with current SDK.
|
|
567
|
+
Fix: `npx expo install X` (uses compatible version)
|
|
568
|
+
Never use `npm install X` for Expo modules — always `npx expo install`.
|
|
569
|
+
|
|
570
|
+
**iOS build: "No matching provisioning profiles found":**
|
|
571
|
+
Fix via `eas credentials` → iOS → reset credentials and let EAS generate new ones.
|
|
572
|
+
Or in App Store Connect: revoke expired provisioning profiles and regenerate.
|
|
573
|
+
|
|
574
|
+
**iOS build: "Xcode build failed":**
|
|
575
|
+
Check build logs: `eas build:view BUILD_ID`
|
|
576
|
+
Common causes:
|
|
577
|
+
|
|
578
|
+
- Missing config plugin configuration
|
|
579
|
+
- Incompatible native module version
|
|
580
|
+
- Info.plist key conflict between plugins
|
|
581
|
+
- Swift version mismatch
|
|
582
|
+
|
|
583
|
+
**Android build: "AAPT2 error":**
|
|
584
|
+
Usually a resource conflict or missing drawable.
|
|
585
|
+
Fix: ensure all icon assets exist at correct sizes.
|
|
586
|
+
Adaptive icon: 108×108 dp (432×432 px for xxxhdpi)
|
|
587
|
+
|
|
588
|
+
**Android build: "Duplicate class":**
|
|
589
|
+
Two dependencies include the same class.
|
|
590
|
+
Fix in app.json plugins/expo-build-properties:
|
|
591
|
+
|
|
592
|
+
```json
|
|
593
|
+
[
|
|
594
|
+
"expo-build-properties",
|
|
595
|
+
{
|
|
596
|
+
"android": {
|
|
597
|
+
"packagingOptions": {
|
|
598
|
+
"pickFirst": ["**/libc++_shared.so"]
|
|
599
|
+
}
|
|
600
|
+
}
|
|
601
|
+
}
|
|
602
|
+
]
|
|
603
|
+
```
|
|
604
|
+
|
|
605
|
+
**"Build queue timeout":**
|
|
606
|
+
EAS free tier has build time limits. Upgrade or retry.
|
|
607
|
+
Use `--no-wait` flag to submit build without waiting in CLI.
|
|
608
|
+
|
|
609
|
+
**"google-services.json not found":**
|
|
610
|
+
File must be in Expo project root (not android/ subfolder).
|
|
611
|
+
app.json: `"android": { "googleServicesFile": "./google-services.json" }`
|
|
612
|
+
|
|
613
|
+
**"GoogleService-Info.plist not found":**
|
|
614
|
+
File must be in Expo project root.
|
|
615
|
+
app.json: `"ios": { "googleServicesFile": "./GoogleService-Info.plist" }`
|
|
616
|
+
|
|
617
|
+
**Build succeeds but app crashes on launch:**
|
|
618
|
+
|
|
619
|
+
- Check EAS Build logs for any warning about incompatible modules
|
|
620
|
+
- Common cause: Hermes engine incompatibility with a native module
|
|
621
|
+
- Test with development build first: `eas build --profile development`
|
|
622
|
+
|
|
623
|
+
---
|
|
624
|
+
|
|
625
|
+
## 11. Common EAS Submit Errors & Fixes
|
|
626
|
+
|
|
627
|
+
**iOS: "No Apple ID credentials found":**
|
|
628
|
+
Run `eas credentials` → iOS → App Store Connect API Key → add credentials.
|
|
629
|
+
Do not use Apple ID + password for 2FA accounts — use ASC API key instead.
|
|
630
|
+
|
|
631
|
+
**iOS: "The bundle 'com.<project>.shield' is not available":**
|
|
632
|
+
App not created in App Store Connect yet.
|
|
633
|
+
Fix: Create app in App Store Connect first, then submit.
|
|
634
|
+
|
|
635
|
+
**iOS: "App Store Connect operation error" (generic):**
|
|
636
|
+
Check Apple system status: developer.apple.com/system-status/
|
|
637
|
+
If Apple services are degraded, wait and retry.
|
|
638
|
+
|
|
639
|
+
**iOS: "Invalid Bundle. The bundle does not support the minimum OS version":**
|
|
640
|
+
Update `ios.deploymentTarget` in expo-build-properties plugin.
|
|
641
|
+
|
|
642
|
+
**iOS: "Missing compliance" error:**
|
|
643
|
+
Add to app.json: `"ITSAppUsesNonExemptEncryption": false`
|
|
644
|
+
Rebuild and resubmit.
|
|
645
|
+
|
|
646
|
+
**iOS: BGTaskScheduler rejection (Guideline 2.5.4):**
|
|
647
|
+
This is an App Review rejection, not a submission error.
|
|
648
|
+
`BGTaskSchedulerPermittedIdentifiers` in Info.plist must exactly match registered identifiers in code.
|
|
649
|
+
Check: app.json → `BGTaskSchedulerPermittedIdentifiers` matches `BackgroundFetch.registerTaskAsync()` task name.
|
|
650
|
+
|
|
651
|
+
**iOS: "Sign in with Apple required":**
|
|
652
|
+
If Google Sign-In is present, Apple Sign-In must also be present.
|
|
653
|
+
Install `expo-apple-authentication` and add flow.
|
|
654
|
+
|
|
655
|
+
**Android: "No service account key found":**
|
|
656
|
+
Place `google-play-service-account.json` in project root (gitignored).
|
|
657
|
+
Update eas.json: `"serviceAccountKeyPath": "./google-play-service-account.json"`
|
|
658
|
+
|
|
659
|
+
**Android: "Version code already used":**
|
|
660
|
+
Increment versionCode in app.json and rebuild before submitting.
|
|
661
|
+
|
|
662
|
+
**Android: "Package name mismatch":**
|
|
663
|
+
Package in AAB must match Play Console app registration: `com.<project>.shield`.
|
|
664
|
+
|
|
665
|
+
**Submission 595e31cf (current iOS failure):**
|
|
666
|
+
Check: `https://expo.dev/accounts/<project>/projects/<project>-shield/submissions/595e31cf`
|
|
667
|
+
Most likely causes given build history:
|
|
668
|
+
|
|
669
|
+
1. BGTaskScheduler identifier mismatch
|
|
670
|
+
2. Sign in with Apple missing
|
|
671
|
+
3. Privacy manifest missing (ITMS-91053)
|
|
672
|
+
4. Missing REVERSED_CLIENT_ID URL scheme for Google Sign-In
|
|
673
|
+
|
|
674
|
+
---
|
|
675
|
+
|
|
676
|
+
## 12. Dependency Compatibility Matrix
|
|
677
|
+
|
|
678
|
+
**SDK 54 confirmed compatible packages:**
|
|
679
|
+
| Package | Version | Notes |
|
|
680
|
+
|---------|---------|-------|
|
|
681
|
+
| expo | ~54.0.0 | |
|
|
682
|
+
| react-native | 0.76.x | |
|
|
683
|
+
| expo-camera | ~15.0.0 | |
|
|
684
|
+
| expo-local-authentication | ~15.0.0 | |
|
|
685
|
+
| expo-notifications | ~0.29.0 | |
|
|
686
|
+
| expo-secure-store | ~14.0.0 | |
|
|
687
|
+
| expo-updates | ~0.27.0 | |
|
|
688
|
+
| expo-router | ~4.0.0 | |
|
|
689
|
+
| expo-build-properties | ~0.13.0 | |
|
|
690
|
+
| expo-apple-authentication | ~7.0.0 | |
|
|
691
|
+
| @react-native-firebase/app | ~21.x | |
|
|
692
|
+
| @react-native-firebase/messaging | ~21.x | |
|
|
693
|
+
| @react-native-google-signin/google-signin | ~13.x | |
|
|
694
|
+
|
|
695
|
+
**Install compatible versions:**
|
|
696
|
+
|
|
697
|
+
```bash
|
|
698
|
+
npx expo install expo-camera expo-notifications expo-local-authentication
|
|
699
|
+
```
|
|
700
|
+
|
|
701
|
+
Always use `npx expo install` — it automatically selects SDK-compatible versions.
|
|
702
|
+
|
|
703
|
+
**Checking for outdated packages:**
|
|
704
|
+
|
|
705
|
+
```bash
|
|
706
|
+
npx expo-doctor
|
|
707
|
+
# or
|
|
708
|
+
npx expo install --check
|
|
709
|
+
```
|
|
710
|
+
|
|
711
|
+
---
|
|
712
|
+
|
|
713
|
+
## 13. Development Workflow
|
|
714
|
+
|
|
715
|
+
**Daily development cycle:**
|
|
716
|
+
|
|
717
|
+
```bash
|
|
718
|
+
# Start dev server
|
|
719
|
+
npx expo start
|
|
720
|
+
|
|
721
|
+
# Start with specific options
|
|
722
|
+
npx expo start --clear # clear cache
|
|
723
|
+
npx expo start --tunnel # use ngrok tunnel (for physical devices on different network)
|
|
724
|
+
|
|
725
|
+
# Open in simulator
|
|
726
|
+
npx expo start --ios # iOS simulator
|
|
727
|
+
npx expo start --android # Android emulator
|
|
728
|
+
|
|
729
|
+
# Run on physical device
|
|
730
|
+
# Install Expo Go or dev client → scan QR code
|
|
731
|
+
```
|
|
732
|
+
|
|
733
|
+
**Development client vs Expo Go:**
|
|
734
|
+
|
|
735
|
+
- **Expo Go:** Sandboxed, limited native modules, good for prototyping
|
|
736
|
+
- **expo-dev-client:** Full native module support, required for <project> (Firebase, Google Sign-In, etc.)
|
|
737
|
+
|
|
738
|
+
**Build and test on device (without EAS):**
|
|
739
|
+
|
|
740
|
+
```bash
|
|
741
|
+
# Build locally (requires Xcode/Android Studio)
|
|
742
|
+
npx expo run:ios
|
|
743
|
+
npx expo run:android
|
|
744
|
+
|
|
745
|
+
# EAS development build (no local Xcode needed)
|
|
746
|
+
eas build --profile development --platform ios
|
|
747
|
+
# Install dev client IPA on device → start Expo server → connect
|
|
748
|
+
```
|
|
749
|
+
|
|
750
|
+
**Clearing caches (when things go wrong):**
|
|
751
|
+
|
|
752
|
+
```bash
|
|
753
|
+
npx expo start --clear
|
|
754
|
+
npx expo install --fix # Fix version mismatches
|
|
755
|
+
rm -rf node_modules && npm install
|
|
756
|
+
cd ios && pod install && cd .. # Re-install iOS pods (bare workflow)
|
|
757
|
+
```
|
|
758
|
+
|
|
759
|
+
---
|
|
760
|
+
|
|
761
|
+
## 14. <project> Specific Fixes
|
|
762
|
+
|
|
763
|
+
**iOS submission 595e31cf failure — systematic fix checklist:**
|
|
764
|
+
|
|
765
|
+
1. **Check exact error in submission details** at expo.dev link
|
|
766
|
+
2. **BGTaskScheduler fix (most likely):**
|
|
767
|
+
- Verify `BGTaskSchedulerPermittedIdentifiers` in app.json InfoPlist
|
|
768
|
+
- Ensure exactly one identifier: `"com.<project>.shield.refresh"`
|
|
769
|
+
- Verify same string is used in background task registration code
|
|
770
|
+
3. **Privacy manifest check:**
|
|
771
|
+
- Ensure `PrivacyInfo.xcprivacy` is added via config plugin
|
|
772
|
+
- If not present, add `expo-privacy-manifest` plugin or custom config plugin
|
|
773
|
+
4. **Sign in with Apple:**
|
|
774
|
+
- `expo-apple-authentication` must be installed AND functional in app
|
|
775
|
+
- `usesAppleSignIn: true` in app.json is not enough — actual sign-in flow must exist
|
|
776
|
+
5. **Rebuild after fix:**
|
|
777
|
+
```bash
|
|
778
|
+
# Increment buildNumber in app.json (15 → 16)
|
|
779
|
+
eas build --platform ios --profile production
|
|
780
|
+
eas submit --platform ios --latest
|
|
781
|
+
```
|
|
782
|
+
|
|
783
|
+
**Google Sign-In fix for versionCode 14 (Android):**
|
|
784
|
+
|
|
785
|
+
- Both SHA-1 fingerprints are in Firebase (confirmed)
|
|
786
|
+
- versionCode 14 build uses production SHA-1
|
|
787
|
+
- Once Play Store approves and tester installs: test Google Sign-In
|
|
788
|
+
- If Error 10 (DEVELOPER_ERROR) still occurs: download fresh google-services.json from Firebase
|
|
789
|
+
|
|
790
|
+
**ACH Shield Unit.co webhook in app:**
|
|
791
|
+
App receives FCM push with challenge data:
|
|
792
|
+
|
|
793
|
+
```typescript
|
|
794
|
+
const challengeData = {
|
|
795
|
+
challengeId: remoteMessage.data.challengeId,
|
|
796
|
+
options: JSON.parse(remoteMessage.data.options), // ["3", "7", "9"]
|
|
797
|
+
expiresAt: remoteMessage.data.expiresAt,
|
|
798
|
+
amount: remoteMessage.data.amount,
|
|
799
|
+
};
|
|
800
|
+
// Navigate to ACH challenge screen with this data
|
|
801
|
+
```
|
|
802
|
+
|
|
803
|
+
**UPI daily limit tracker:**
|
|
804
|
+
|
|
805
|
+
- Backend: `GET /api/upi/daily-limit` returns `{ used: number, limit: 10000, currency: 'INR' }`
|
|
806
|
+
- Stored in DB per user per UTC day
|
|
807
|
+
- Reset at midnight UTC (not IST — careful with timezone)
|
|
808
|
+
- For IST midnight reset: use Cloud Scheduler with IST timezone (Asia/Kolkata)
|
|
809
|
+
|
|
810
|
+
**Unit.co SANDBOX → PRODUCTION switch (before public launch):**
|
|
811
|
+
|
|
812
|
+
1. Unit.co dashboard: switch org to production mode
|
|
813
|
+
2. Get production UNIT_API_KEY JWT
|
|
814
|
+
3. Update in GCP Secret Manager: `gcloud secrets versions add UNIT_API_KEY --data-file=...`
|
|
815
|
+
4. Redeploy all 3 regions
|
|
816
|
+
5. Test with a real bank account before any user-facing launch
|