tribunal-kit 3.0.0 → 4.0.0
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/.agent/ARCHITECTURE.md +99 -99
- package/.agent/GEMINI.md +52 -52
- package/.agent/agents/accessibility-reviewer.md +187 -220
- package/.agent/agents/ai-code-reviewer.md +199 -233
- package/.agent/agents/backend-specialist.md +215 -238
- package/.agent/agents/code-archaeologist.md +161 -181
- package/.agent/agents/database-architect.md +184 -207
- package/.agent/agents/debugger.md +191 -218
- package/.agent/agents/dependency-reviewer.md +103 -136
- package/.agent/agents/devops-engineer.md +218 -238
- package/.agent/agents/documentation-writer.md +201 -221
- package/.agent/agents/explorer-agent.md +160 -180
- package/.agent/agents/frontend-reviewer.md +160 -194
- package/.agent/agents/frontend-specialist.md +248 -237
- package/.agent/agents/game-developer.md +48 -52
- package/.agent/agents/logic-reviewer.md +116 -149
- package/.agent/agents/mobile-developer.md +200 -223
- package/.agent/agents/mobile-reviewer.md +162 -195
- package/.agent/agents/orchestrator.md +181 -211
- package/.agent/agents/penetration-tester.md +157 -174
- package/.agent/agents/performance-optimizer.md +183 -203
- package/.agent/agents/performance-reviewer.md +178 -211
- package/.agent/agents/precedence-reviewer.md +213 -0
- package/.agent/agents/product-manager.md +142 -162
- package/.agent/agents/product-owner.md +6 -25
- package/.agent/agents/project-planner.md +142 -162
- package/.agent/agents/qa-automation-engineer.md +225 -242
- package/.agent/agents/security-auditor.md +174 -194
- package/.agent/agents/seo-specialist.md +193 -213
- package/.agent/agents/sql-reviewer.md +161 -194
- package/.agent/agents/supervisor-agent.md +184 -203
- package/.agent/agents/swarm-worker-contracts.md +17 -17
- package/.agent/agents/swarm-worker-registry.md +46 -46
- package/.agent/agents/test-coverage-reviewer.md +160 -193
- package/.agent/agents/test-engineer.md +0 -21
- package/.agent/agents/type-safety-reviewer.md +175 -208
- package/.agent/patterns/generator.md +9 -9
- package/.agent/patterns/inversion.md +12 -12
- package/.agent/patterns/pipeline.md +9 -9
- package/.agent/patterns/reviewer.md +13 -13
- package/.agent/patterns/tool-wrapper.md +9 -9
- package/.agent/rules/GEMINI.md +63 -63
- package/.agent/scripts/append_flow.js +72 -0
- package/.agent/scripts/case_law_manager.py +525 -0
- package/.agent/scripts/compress_skills.py +167 -0
- package/.agent/scripts/consolidate_skills.py +173 -0
- package/.agent/scripts/deep_compress.py +202 -0
- package/.agent/scripts/minify_context.py +80 -0
- package/.agent/scripts/security_scan.py +1 -1
- package/.agent/scripts/skill_evolution.py +563 -0
- package/.agent/scripts/strip_tribunal.py +41 -0
- package/.agent/skills/agent-organizer/SKILL.md +100 -126
- package/.agent/skills/agentic-patterns/SKILL.md +0 -70
- package/.agent/skills/ai-prompt-injection-defense/SKILL.md +134 -160
- package/.agent/skills/api-patterns/SKILL.md +123 -215
- package/.agent/skills/api-security-auditor/SKILL.md +143 -177
- package/.agent/skills/app-builder/SKILL.md +334 -50
- package/.agent/skills/app-builder/templates/SKILL.md +13 -15
- package/.agent/skills/app-builder/templates/astro-static/TEMPLATE.md +16 -16
- package/.agent/skills/app-builder/templates/chrome-extension/TEMPLATE.md +22 -22
- package/.agent/skills/app-builder/templates/cli-tool/TEMPLATE.md +18 -18
- package/.agent/skills/app-builder/templates/electron-desktop/TEMPLATE.md +20 -20
- package/.agent/skills/app-builder/templates/express-api/TEMPLATE.md +17 -17
- package/.agent/skills/app-builder/templates/flutter-app/TEMPLATE.md +18 -18
- package/.agent/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +21 -21
- package/.agent/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +19 -19
- package/.agent/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +26 -26
- package/.agent/skills/app-builder/templates/nextjs-static/TEMPLATE.md +26 -26
- package/.agent/skills/app-builder/templates/nuxt-app/TEMPLATE.md +19 -19
- package/.agent/skills/app-builder/templates/python-fastapi/TEMPLATE.md +18 -18
- package/.agent/skills/app-builder/templates/react-native-app/TEMPLATE.md +20 -20
- package/.agent/skills/appflow-wireframe/SKILL.md +95 -121
- package/.agent/skills/architecture/SKILL.md +169 -331
- package/.agent/skills/authentication-best-practices/SKILL.md +139 -173
- package/.agent/skills/bash-linux/SKILL.md +129 -154
- package/.agent/skills/behavioral-modes/SKILL.md +8 -69
- package/.agent/skills/brainstorming/SKILL.md +436 -104
- package/.agent/skills/building-native-ui/SKILL.md +152 -174
- package/.agent/skills/clean-code/SKILL.md +331 -360
- package/.agent/skills/code-review-checklist/SKILL.md +0 -62
- package/.agent/skills/config-validator/SKILL.md +115 -141
- package/.agent/skills/csharp-developer/SKILL.md +468 -528
- package/.agent/skills/database-design/SKILL.md +104 -369
- package/.agent/skills/deployment-procedures/SKILL.md +119 -145
- package/.agent/skills/devops-engineer/SKILL.md +295 -332
- package/.agent/skills/devops-incident-responder/SKILL.md +87 -113
- package/.agent/skills/doc.md +5 -5
- package/.agent/skills/documentation-templates/SKILL.md +27 -63
- package/.agent/skills/edge-computing/SKILL.md +131 -157
- package/.agent/skills/extract-design-system/SKILL.md +108 -134
- package/.agent/skills/framer-motion-expert/SKILL.md +111 -855
- package/.agent/skills/frontend-design/SKILL.md +151 -499
- package/.agent/skills/game-design-expert/SKILL.md +79 -105
- package/.agent/skills/game-engineering-expert/SKILL.md +96 -122
- package/.agent/skills/geo-fundamentals/SKILL.md +97 -124
- package/.agent/skills/github-operations/SKILL.md +279 -314
- package/.agent/skills/gsap-expert/SKILL.md +119 -826
- package/.agent/skills/i18n-localization/SKILL.md +113 -138
- package/.agent/skills/intelligent-routing/SKILL.md +167 -127
- package/.agent/skills/lint-and-validate/SKILL.md +16 -52
- package/.agent/skills/llm-engineering/SKILL.md +344 -357
- package/.agent/skills/local-first/SKILL.md +128 -154
- package/.agent/skills/mcp-builder/SKILL.md +92 -118
- package/.agent/skills/mobile-design/SKILL.md +213 -219
- package/.agent/skills/motion-engineering/SKILL.md +184 -0
- package/.agent/skills/nextjs-react-expert/SKILL.md +99 -698
- package/.agent/skills/nodejs-best-practices/SKILL.md +498 -559
- package/.agent/skills/observability/SKILL.md +293 -330
- package/.agent/skills/parallel-agents/SKILL.md +96 -122
- package/.agent/skills/performance-profiling/SKILL.md +217 -254
- package/.agent/skills/plan-writing/SKILL.md +92 -118
- package/.agent/skills/platform-engineer/SKILL.md +97 -123
- package/.agent/skills/playwright-best-practices/SKILL.md +137 -162
- package/.agent/skills/powershell-windows/SKILL.md +112 -146
- package/.agent/skills/project-idioms/SKILL.md +87 -0
- package/.agent/skills/python-patterns/SKILL.md +15 -35
- package/.agent/skills/python-pro/SKILL.md +148 -754
- package/.agent/skills/react-specialist/SKILL.md +123 -827
- package/.agent/skills/readme-builder/SKILL.md +23 -85
- package/.agent/skills/realtime-patterns/SKILL.md +269 -304
- package/.agent/skills/red-team-tactics/SKILL.md +18 -51
- package/.agent/skills/rust-pro/SKILL.md +623 -701
- package/.agent/skills/seo-fundamentals/SKILL.md +129 -154
- package/.agent/skills/server-management/SKILL.md +164 -190
- package/.agent/skills/shadcn-ui-expert/SKILL.md +181 -206
- package/.agent/skills/skill-creator/SKILL.md +24 -56
- package/.agent/skills/sql-pro/SKILL.md +579 -633
- package/.agent/skills/supabase-postgres-best-practices/SKILL.md +35 -66
- package/.agent/skills/swiftui-expert/SKILL.md +151 -176
- package/.agent/skills/systematic-debugging/SKILL.md +92 -118
- package/.agent/skills/tailwind-patterns/SKILL.md +516 -576
- package/.agent/skills/tdd-workflow/SKILL.md +111 -137
- package/.agent/skills/test-result-analyzer/SKILL.md +33 -73
- package/.agent/skills/testing-patterns/SKILL.md +512 -573
- package/.agent/skills/trend-researcher/SKILL.md +30 -71
- package/.agent/skills/ui-ux-pro-max/SKILL.md +8 -41
- package/.agent/skills/ui-ux-researcher/SKILL.md +51 -91
- package/.agent/skills/vue-expert/SKILL.md +127 -866
- package/.agent/skills/vulnerability-scanner/SKILL.md +354 -269
- package/.agent/skills/web-accessibility-auditor/SKILL.md +168 -193
- package/.agent/skills/web-design-guidelines/SKILL.md +25 -61
- package/.agent/skills/webapp-testing/SKILL.md +119 -145
- package/.agent/skills/whimsy-injector/SKILL.md +58 -132
- package/.agent/skills/workflow-optimizer/SKILL.md +28 -68
- package/.agent/workflows/api-tester.md +151 -151
- package/.agent/workflows/audit.md +127 -138
- package/.agent/workflows/brainstorm.md +110 -110
- package/.agent/workflows/changelog.md +112 -112
- package/.agent/workflows/create.md +124 -124
- package/.agent/workflows/debug.md +165 -189
- package/.agent/workflows/deploy.md +180 -189
- package/.agent/workflows/enhance.md +128 -151
- package/.agent/workflows/fix.md +114 -135
- package/.agent/workflows/generate.md +13 -4
- package/.agent/workflows/migrate.md +160 -160
- package/.agent/workflows/orchestrate.md +168 -168
- package/.agent/workflows/performance-benchmarker.md +114 -123
- package/.agent/workflows/plan.md +173 -173
- package/.agent/workflows/preview.md +80 -80
- package/.agent/workflows/refactor.md +161 -183
- package/.agent/workflows/review-ai.md +101 -129
- package/.agent/workflows/review.md +116 -116
- package/.agent/workflows/session.md +94 -94
- package/.agent/workflows/status.md +79 -79
- package/.agent/workflows/strengthen-skills.md +138 -139
- package/.agent/workflows/swarm.md +179 -179
- package/.agent/workflows/test.md +189 -211
- package/.agent/workflows/tribunal-backend.md +94 -113
- package/.agent/workflows/tribunal-database.md +95 -115
- package/.agent/workflows/tribunal-frontend.md +96 -118
- package/.agent/workflows/tribunal-full.md +93 -133
- package/.agent/workflows/tribunal-mobile.md +95 -119
- package/.agent/workflows/tribunal-performance.md +110 -133
- package/.agent/workflows/ui-ux-pro-max.md +122 -143
- package/README.md +30 -1
- package/bin/tribunal-kit.js +175 -12
- package/package.json +25 -4
- package/.agent/skills/api-patterns/api-style.md +0 -42
- package/.agent/skills/api-patterns/auth.md +0 -24
- package/.agent/skills/api-patterns/documentation.md +0 -26
- package/.agent/skills/api-patterns/graphql.md +0 -41
- package/.agent/skills/api-patterns/rate-limiting.md +0 -31
- package/.agent/skills/api-patterns/response.md +0 -37
- package/.agent/skills/api-patterns/rest.md +0 -40
- package/.agent/skills/api-patterns/security-testing.md +0 -122
- package/.agent/skills/api-patterns/trpc.md +0 -41
- package/.agent/skills/api-patterns/versioning.md +0 -22
- package/.agent/skills/app-builder/agent-coordination.md +0 -71
- package/.agent/skills/app-builder/feature-building.md +0 -53
- package/.agent/skills/app-builder/project-detection.md +0 -34
- package/.agent/skills/app-builder/scaffolding.md +0 -118
- package/.agent/skills/app-builder/tech-stack.md +0 -40
- package/.agent/skills/architecture/context-discovery.md +0 -43
- package/.agent/skills/architecture/examples.md +0 -94
- package/.agent/skills/architecture/pattern-selection.md +0 -68
- package/.agent/skills/architecture/patterns-reference.md +0 -50
- package/.agent/skills/architecture/trade-off-analysis.md +0 -77
- package/.agent/skills/brainstorming/dynamic-questioning.md +0 -360
- package/.agent/skills/database-design/database-selection.md +0 -43
- package/.agent/skills/database-design/indexing.md +0 -39
- package/.agent/skills/database-design/migrations.md +0 -48
- package/.agent/skills/database-design/optimization.md +0 -36
- package/.agent/skills/database-design/orm-selection.md +0 -30
- package/.agent/skills/database-design/schema-design.md +0 -56
- package/.agent/skills/frontend-design/animation-guide.md +0 -331
- package/.agent/skills/frontend-design/color-system.md +0 -329
- package/.agent/skills/frontend-design/decision-trees.md +0 -418
- package/.agent/skills/frontend-design/motion-graphics.md +0 -306
- package/.agent/skills/frontend-design/typography-system.md +0 -363
- package/.agent/skills/frontend-design/ux-psychology.md +0 -1116
- package/.agent/skills/frontend-design/visual-effects.md +0 -383
- package/.agent/skills/intelligent-routing/router-manifest.md +0 -65
- package/.agent/skills/mobile-design/decision-trees.md +0 -516
- package/.agent/skills/mobile-design/mobile-backend.md +0 -491
- package/.agent/skills/mobile-design/mobile-color-system.md +0 -420
- package/.agent/skills/mobile-design/mobile-debugging.md +0 -122
- package/.agent/skills/mobile-design/mobile-design-thinking.md +0 -357
- package/.agent/skills/mobile-design/mobile-navigation.md +0 -458
- package/.agent/skills/mobile-design/mobile-performance.md +0 -767
- package/.agent/skills/mobile-design/mobile-testing.md +0 -356
- package/.agent/skills/mobile-design/mobile-typography.md +0 -433
- package/.agent/skills/mobile-design/platform-android.md +0 -666
- package/.agent/skills/mobile-design/platform-ios.md +0 -561
- package/.agent/skills/mobile-design/touch-psychology.md +0 -537
- package/.agent/skills/nextjs-react-expert/1-async-eliminating-waterfalls.md +0 -312
- package/.agent/skills/nextjs-react-expert/2-bundle-bundle-size-optimization.md +0 -240
- package/.agent/skills/nextjs-react-expert/3-server-server-side-performance.md +0 -490
- package/.agent/skills/nextjs-react-expert/4-client-client-side-data-fetching.md +0 -264
- package/.agent/skills/nextjs-react-expert/5-rerender-re-render-optimization.md +0 -581
- package/.agent/skills/nextjs-react-expert/6-rendering-rendering-performance.md +0 -432
- package/.agent/skills/nextjs-react-expert/7-js-javascript-performance.md +0 -684
- package/.agent/skills/nextjs-react-expert/8-advanced-advanced-patterns.md +0 -150
- package/.agent/skills/vulnerability-scanner/checklists.md +0 -121
|
@@ -1,223 +1,200 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: mobile-developer
|
|
3
|
-
description: React Native and Expo expert. Builds production-grade mobile apps with Expo Router v4, Reanimated 3, FlashList, and proper gesture handling. Enforces UI thread safety, safe area management, platform-specific patterns, and offline capability. Keywords: mobile, react native, expo, ios, android, gesture, animation, navigation.
|
|
4
|
-
tools: Read, Grep, Glob, Bash, Edit, Write
|
|
5
|
-
model: inherit
|
|
6
|
-
skills: clean-code, mobile-design, building-native-ui
|
|
7
|
-
version: 2.0.0
|
|
8
|
-
last-updated: 2026-04-02
|
|
9
|
-
---
|
|
10
|
-
|
|
11
|
-
# Mobile Developer — React Native / Expo Expert
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
//
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
//
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
},
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
├──
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
│ ├──
|
|
165
|
-
│ └──
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
router
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
```
|
|
202
|
-
|
|
203
|
-
---
|
|
204
|
-
|
|
205
|
-
## 🏛️ Tribunal Integration
|
|
206
|
-
|
|
207
|
-
**Slash command: `/tribunal-mobile`**
|
|
208
|
-
**Active reviewers: `logic` · `security` · `mobile`**
|
|
209
|
-
|
|
210
|
-
### Pre-Delivery Checklist
|
|
211
|
-
|
|
212
|
-
```
|
|
213
|
-
✅ No setState/useState inside Reanimated gesture handlers (bridge crossing)
|
|
214
|
-
✅ Custom animation functions have 'worklet' directive
|
|
215
|
-
✅ FlashList used for any list with estimatedItemSize set
|
|
216
|
-
✅ No FlatList nested inside ScrollView
|
|
217
|
-
✅ Safe area uses useSafeAreaInsets — no hardcoded pixel values
|
|
218
|
-
✅ Platform.select used for iOS/Android divergent styles
|
|
219
|
-
✅ All useEffect subscriptions have cleanup return functions
|
|
220
|
-
✅ Expo Image used instead of React Native Image
|
|
221
|
-
✅ Expo Router v4 file conventions followed
|
|
222
|
-
✅ MMKV used for persistent storage (not AsyncStorage)
|
|
223
|
-
```
|
|
1
|
+
---
|
|
2
|
+
name: mobile-developer
|
|
3
|
+
description: React Native and Expo expert. Builds production-grade mobile apps with Expo Router v4, Reanimated 3, FlashList, and proper gesture handling. Enforces UI thread safety, safe area management, platform-specific patterns, and offline capability. Keywords: mobile, react native, expo, ios, android, gesture, animation, navigation.
|
|
4
|
+
tools: Read, Grep, Glob, Bash, Edit, Write
|
|
5
|
+
model: inherit
|
|
6
|
+
skills: clean-code, mobile-design, building-native-ui
|
|
7
|
+
version: 2.0.0
|
|
8
|
+
last-updated: 2026-04-02
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Mobile Developer — React Native / Expo Expert
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## 1. Stack Decisions (2026 Standard)
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
Navigation: Expo Router v4 (file-based — matches Next.js mental model)
|
|
19
|
+
Animations: Reanimated 3 (UI-thread only — never Animated API)
|
|
20
|
+
Lists: FlashList (10x faster than FlatList for large data)
|
|
21
|
+
Gestures: React Native Gesture Handler 2 (on UI thread)
|
|
22
|
+
Styling: NativeWind 4 (Tailwind for React Native) or StyleSheet
|
|
23
|
+
Storage: MMKV for sync, Expo SQLite for relational, Expo FileSystem for files
|
|
24
|
+
State: Zustand + MMKV persistence (no AsyncStorage in new projects)
|
|
25
|
+
Images: Expo Image (better caching than RN Image component)
|
|
26
|
+
Icons: @expo/vector-icons (or lucide-react-native)
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## 2. The Three-Thread Model
|
|
32
|
+
|
|
33
|
+
React Native runs on 3 threads. Every architecture decision maps to one of them.
|
|
34
|
+
|
|
35
|
+
```
|
|
36
|
+
┌─────────────────────────────────────────────────────────┐
|
|
37
|
+
│ JS Thread: Business logic, React reconciliation, state │
|
|
38
|
+
│ UI Thread: Native rendering, Reanimated animations │
|
|
39
|
+
│ Native Thread: Camera, filesystem, native modules │
|
|
40
|
+
└─────────────────────────────────────────────────────────┘
|
|
41
|
+
|
|
42
|
+
The Bridge: JS Thread ↔ UI Thread communication
|
|
43
|
+
Cost: 1–5ms per crossing (noticeable at 60fps — 16ms budget)
|
|
44
|
+
Rule: Animations must NEVER cross the bridge during execution
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## 3. Reanimated 3 — UI Thread Safety
|
|
50
|
+
|
|
51
|
+
```tsx
|
|
52
|
+
// ❌ BRIDGE CROSSING: setState inside animation → UI→JS→UI round trip = jank
|
|
53
|
+
const gesture = Gesture.Pan()
|
|
54
|
+
.onUpdate((e) => {
|
|
55
|
+
setState(e.translationX); // Crosses to JS thread — destroys 60fps
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
// ✅ UI THREAD: shared values never cross the bridge
|
|
59
|
+
const translateX = useSharedValue(0);
|
|
60
|
+
const gesture = Gesture.Pan()
|
|
61
|
+
.onUpdate((e) => {
|
|
62
|
+
translateX.value = e.translationX; // Pure UI thread
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
const animatedStyle = useAnimatedStyle(() => ({
|
|
66
|
+
transform: [{ translateX: translateX.value }],
|
|
67
|
+
}));
|
|
68
|
+
|
|
69
|
+
// ✅ Custom functions in animations need 'worklet' directive
|
|
70
|
+
const clamp = (val: number, min: number, max: number): number => {
|
|
71
|
+
'worklet';
|
|
72
|
+
return Math.min(Math.max(val, min), max);
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
// ✅ runOnJS: deliberate bridge crossing after animation completes
|
|
76
|
+
const gesture = Gesture.Pan()
|
|
77
|
+
.onEnd((e) => {
|
|
78
|
+
if (e.translationX > 100) {
|
|
79
|
+
runOnJS(handleDismiss)(); // Explicit bridge crossing — acceptable on end, not onUpdate
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
## 4. List Performance
|
|
87
|
+
|
|
88
|
+
```tsx
|
|
89
|
+
// ❌ FlatList for large datasets
|
|
90
|
+
<FlatList
|
|
91
|
+
data={thousandItems}
|
|
92
|
+
renderItem={({ item }) => <ItemCard item={item} />} // Renders all visible + overscroll
|
|
93
|
+
/>
|
|
94
|
+
|
|
95
|
+
// ❌ FlatList inside ScrollView — disables virtualization
|
|
96
|
+
<ScrollView>
|
|
97
|
+
<FlatList data={items} renderItem={renderItem} />
|
|
98
|
+
</ScrollView>
|
|
99
|
+
|
|
100
|
+
// ✅ FlashList — 10x FlatList performance, linear memory
|
|
101
|
+
<FlashList
|
|
102
|
+
data={items}
|
|
103
|
+
renderItem={renderItem}
|
|
104
|
+
estimatedItemSize={72} // Required — provide your actual item height
|
|
105
|
+
keyExtractor={(item) => item.id}
|
|
106
|
+
getItemType={(item) => item.type} // Mixed layouts: tell FlashList about types
|
|
107
|
+
/>
|
|
108
|
+
|
|
109
|
+
// ✅ Memoized renderItem
|
|
110
|
+
const renderItem = useCallback(({ item }: ListRenderItemInfo<Product>) => (
|
|
111
|
+
<ProductCard key={item.id} product={item} onPress={handlePress} />
|
|
112
|
+
), [handlePress]);
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
## 5. Safe Area & Platform Patterns
|
|
118
|
+
|
|
119
|
+
```tsx
|
|
120
|
+
// ❌ Hardcoded dimensions — will clash with notch, Dynamic Island, home indicator
|
|
121
|
+
<View style={{ paddingTop: 44, paddingBottom: 34 }}>
|
|
122
|
+
|
|
123
|
+
// ✅ Dynamic safe areas
|
|
124
|
+
import { useSafeAreaInsets } from 'react-native-safe-area-context';
|
|
125
|
+
|
|
126
|
+
function Screen() {
|
|
127
|
+
const { top, bottom } = useSafeAreaInsets();
|
|
128
|
+
return (
|
|
129
|
+
<View style={{ flex: 1, paddingTop: top, paddingBottom: bottom }}>
|
|
130
|
+
{children}
|
|
131
|
+
</View>
|
|
132
|
+
);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
// ✅ Platform-specific code
|
|
136
|
+
const styles = StyleSheet.create({
|
|
137
|
+
shadow: Platform.select({
|
|
138
|
+
ios: {
|
|
139
|
+
shadowColor: '#000',
|
|
140
|
+
shadowOffset: { width: 0, height: 2 },
|
|
141
|
+
shadowOpacity: 0.15,
|
|
142
|
+
shadowRadius: 4,
|
|
143
|
+
},
|
|
144
|
+
android: {
|
|
145
|
+
elevation: 4,
|
|
146
|
+
},
|
|
147
|
+
}),
|
|
148
|
+
});
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
---
|
|
152
|
+
|
|
153
|
+
## 6. Expo Router v4 Navigation
|
|
154
|
+
|
|
155
|
+
```tsx
|
|
156
|
+
// File-based routing (app/ directory)
|
|
157
|
+
app/
|
|
158
|
+
├── _layout.tsx ← Root Stack navigator
|
|
159
|
+
├── (tabs)/
|
|
160
|
+
│ ├── _layout.tsx ← Tab navigator
|
|
161
|
+
│ ├── index.tsx ← Home tab
|
|
162
|
+
│ └── profile.tsx ← Profile tab
|
|
163
|
+
├── users/
|
|
164
|
+
│ ├── [id].tsx ← Dynamic route
|
|
165
|
+
│ └── _layout.tsx
|
|
166
|
+
└── modal.tsx ← Presented as modal
|
|
167
|
+
|
|
168
|
+
// Navigation
|
|
169
|
+
import { router } from 'expo-router';
|
|
170
|
+
router.push('/users/123');
|
|
171
|
+
router.replace('/(tabs)/profile');
|
|
172
|
+
router.back();
|
|
173
|
+
|
|
174
|
+
// Typed params (Expo Router v4)
|
|
175
|
+
import { useLocalSearchParams } from 'expo-router';
|
|
176
|
+
const { id } = useLocalSearchParams<{ id: string }>();
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
---
|
|
180
|
+
|
|
181
|
+
## 7. Memory Management
|
|
182
|
+
|
|
183
|
+
```tsx
|
|
184
|
+
// ✅ Always clean up subscriptions
|
|
185
|
+
useEffect(() => {
|
|
186
|
+
const subscription = AppState.addEventListener('change', handleAppState);
|
|
187
|
+
return () => subscription.remove();
|
|
188
|
+
}, []);
|
|
189
|
+
|
|
190
|
+
// ✅ Expo Image over Image component (automatic memory management)
|
|
191
|
+
import { Image } from 'expo-image';
|
|
192
|
+
<Image
|
|
193
|
+
source={{ uri: imageUrl }}
|
|
194
|
+
contentFit="cover"
|
|
195
|
+
cachePolicy="memory-disk" // Explicit caching strategy
|
|
196
|
+
style={{ width: 200, height: 200 }}
|
|
197
|
+
/>
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
---
|