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.
Files changed (233) hide show
  1. package/.agent/ARCHITECTURE.md +99 -99
  2. package/.agent/GEMINI.md +52 -52
  3. package/.agent/agents/accessibility-reviewer.md +187 -220
  4. package/.agent/agents/ai-code-reviewer.md +199 -233
  5. package/.agent/agents/backend-specialist.md +215 -238
  6. package/.agent/agents/code-archaeologist.md +161 -181
  7. package/.agent/agents/database-architect.md +184 -207
  8. package/.agent/agents/debugger.md +191 -218
  9. package/.agent/agents/dependency-reviewer.md +103 -136
  10. package/.agent/agents/devops-engineer.md +218 -238
  11. package/.agent/agents/documentation-writer.md +201 -221
  12. package/.agent/agents/explorer-agent.md +160 -180
  13. package/.agent/agents/frontend-reviewer.md +160 -194
  14. package/.agent/agents/frontend-specialist.md +248 -237
  15. package/.agent/agents/game-developer.md +48 -52
  16. package/.agent/agents/logic-reviewer.md +116 -149
  17. package/.agent/agents/mobile-developer.md +200 -223
  18. package/.agent/agents/mobile-reviewer.md +162 -195
  19. package/.agent/agents/orchestrator.md +181 -211
  20. package/.agent/agents/penetration-tester.md +157 -174
  21. package/.agent/agents/performance-optimizer.md +183 -203
  22. package/.agent/agents/performance-reviewer.md +178 -211
  23. package/.agent/agents/precedence-reviewer.md +213 -0
  24. package/.agent/agents/product-manager.md +142 -162
  25. package/.agent/agents/product-owner.md +6 -25
  26. package/.agent/agents/project-planner.md +142 -162
  27. package/.agent/agents/qa-automation-engineer.md +225 -242
  28. package/.agent/agents/security-auditor.md +174 -194
  29. package/.agent/agents/seo-specialist.md +193 -213
  30. package/.agent/agents/sql-reviewer.md +161 -194
  31. package/.agent/agents/supervisor-agent.md +184 -203
  32. package/.agent/agents/swarm-worker-contracts.md +17 -17
  33. package/.agent/agents/swarm-worker-registry.md +46 -46
  34. package/.agent/agents/test-coverage-reviewer.md +160 -193
  35. package/.agent/agents/test-engineer.md +0 -21
  36. package/.agent/agents/type-safety-reviewer.md +175 -208
  37. package/.agent/patterns/generator.md +9 -9
  38. package/.agent/patterns/inversion.md +12 -12
  39. package/.agent/patterns/pipeline.md +9 -9
  40. package/.agent/patterns/reviewer.md +13 -13
  41. package/.agent/patterns/tool-wrapper.md +9 -9
  42. package/.agent/rules/GEMINI.md +63 -63
  43. package/.agent/scripts/append_flow.js +72 -0
  44. package/.agent/scripts/case_law_manager.py +525 -0
  45. package/.agent/scripts/compress_skills.py +167 -0
  46. package/.agent/scripts/consolidate_skills.py +173 -0
  47. package/.agent/scripts/deep_compress.py +202 -0
  48. package/.agent/scripts/minify_context.py +80 -0
  49. package/.agent/scripts/security_scan.py +1 -1
  50. package/.agent/scripts/skill_evolution.py +563 -0
  51. package/.agent/scripts/strip_tribunal.py +41 -0
  52. package/.agent/skills/agent-organizer/SKILL.md +100 -126
  53. package/.agent/skills/agentic-patterns/SKILL.md +0 -70
  54. package/.agent/skills/ai-prompt-injection-defense/SKILL.md +134 -160
  55. package/.agent/skills/api-patterns/SKILL.md +123 -215
  56. package/.agent/skills/api-security-auditor/SKILL.md +143 -177
  57. package/.agent/skills/app-builder/SKILL.md +334 -50
  58. package/.agent/skills/app-builder/templates/SKILL.md +13 -15
  59. package/.agent/skills/app-builder/templates/astro-static/TEMPLATE.md +16 -16
  60. package/.agent/skills/app-builder/templates/chrome-extension/TEMPLATE.md +22 -22
  61. package/.agent/skills/app-builder/templates/cli-tool/TEMPLATE.md +18 -18
  62. package/.agent/skills/app-builder/templates/electron-desktop/TEMPLATE.md +20 -20
  63. package/.agent/skills/app-builder/templates/express-api/TEMPLATE.md +17 -17
  64. package/.agent/skills/app-builder/templates/flutter-app/TEMPLATE.md +18 -18
  65. package/.agent/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +21 -21
  66. package/.agent/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +19 -19
  67. package/.agent/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +26 -26
  68. package/.agent/skills/app-builder/templates/nextjs-static/TEMPLATE.md +26 -26
  69. package/.agent/skills/app-builder/templates/nuxt-app/TEMPLATE.md +19 -19
  70. package/.agent/skills/app-builder/templates/python-fastapi/TEMPLATE.md +18 -18
  71. package/.agent/skills/app-builder/templates/react-native-app/TEMPLATE.md +20 -20
  72. package/.agent/skills/appflow-wireframe/SKILL.md +95 -121
  73. package/.agent/skills/architecture/SKILL.md +169 -331
  74. package/.agent/skills/authentication-best-practices/SKILL.md +139 -173
  75. package/.agent/skills/bash-linux/SKILL.md +129 -154
  76. package/.agent/skills/behavioral-modes/SKILL.md +8 -69
  77. package/.agent/skills/brainstorming/SKILL.md +436 -104
  78. package/.agent/skills/building-native-ui/SKILL.md +152 -174
  79. package/.agent/skills/clean-code/SKILL.md +331 -360
  80. package/.agent/skills/code-review-checklist/SKILL.md +0 -62
  81. package/.agent/skills/config-validator/SKILL.md +115 -141
  82. package/.agent/skills/csharp-developer/SKILL.md +468 -528
  83. package/.agent/skills/database-design/SKILL.md +104 -369
  84. package/.agent/skills/deployment-procedures/SKILL.md +119 -145
  85. package/.agent/skills/devops-engineer/SKILL.md +295 -332
  86. package/.agent/skills/devops-incident-responder/SKILL.md +87 -113
  87. package/.agent/skills/doc.md +5 -5
  88. package/.agent/skills/documentation-templates/SKILL.md +27 -63
  89. package/.agent/skills/edge-computing/SKILL.md +131 -157
  90. package/.agent/skills/extract-design-system/SKILL.md +108 -134
  91. package/.agent/skills/framer-motion-expert/SKILL.md +111 -855
  92. package/.agent/skills/frontend-design/SKILL.md +151 -499
  93. package/.agent/skills/game-design-expert/SKILL.md +79 -105
  94. package/.agent/skills/game-engineering-expert/SKILL.md +96 -122
  95. package/.agent/skills/geo-fundamentals/SKILL.md +97 -124
  96. package/.agent/skills/github-operations/SKILL.md +279 -314
  97. package/.agent/skills/gsap-expert/SKILL.md +119 -826
  98. package/.agent/skills/i18n-localization/SKILL.md +113 -138
  99. package/.agent/skills/intelligent-routing/SKILL.md +167 -127
  100. package/.agent/skills/lint-and-validate/SKILL.md +16 -52
  101. package/.agent/skills/llm-engineering/SKILL.md +344 -357
  102. package/.agent/skills/local-first/SKILL.md +128 -154
  103. package/.agent/skills/mcp-builder/SKILL.md +92 -118
  104. package/.agent/skills/mobile-design/SKILL.md +213 -219
  105. package/.agent/skills/motion-engineering/SKILL.md +184 -0
  106. package/.agent/skills/nextjs-react-expert/SKILL.md +99 -698
  107. package/.agent/skills/nodejs-best-practices/SKILL.md +498 -559
  108. package/.agent/skills/observability/SKILL.md +293 -330
  109. package/.agent/skills/parallel-agents/SKILL.md +96 -122
  110. package/.agent/skills/performance-profiling/SKILL.md +217 -254
  111. package/.agent/skills/plan-writing/SKILL.md +92 -118
  112. package/.agent/skills/platform-engineer/SKILL.md +97 -123
  113. package/.agent/skills/playwright-best-practices/SKILL.md +137 -162
  114. package/.agent/skills/powershell-windows/SKILL.md +112 -146
  115. package/.agent/skills/project-idioms/SKILL.md +87 -0
  116. package/.agent/skills/python-patterns/SKILL.md +15 -35
  117. package/.agent/skills/python-pro/SKILL.md +148 -754
  118. package/.agent/skills/react-specialist/SKILL.md +123 -827
  119. package/.agent/skills/readme-builder/SKILL.md +23 -85
  120. package/.agent/skills/realtime-patterns/SKILL.md +269 -304
  121. package/.agent/skills/red-team-tactics/SKILL.md +18 -51
  122. package/.agent/skills/rust-pro/SKILL.md +623 -701
  123. package/.agent/skills/seo-fundamentals/SKILL.md +129 -154
  124. package/.agent/skills/server-management/SKILL.md +164 -190
  125. package/.agent/skills/shadcn-ui-expert/SKILL.md +181 -206
  126. package/.agent/skills/skill-creator/SKILL.md +24 -56
  127. package/.agent/skills/sql-pro/SKILL.md +579 -633
  128. package/.agent/skills/supabase-postgres-best-practices/SKILL.md +35 -66
  129. package/.agent/skills/swiftui-expert/SKILL.md +151 -176
  130. package/.agent/skills/systematic-debugging/SKILL.md +92 -118
  131. package/.agent/skills/tailwind-patterns/SKILL.md +516 -576
  132. package/.agent/skills/tdd-workflow/SKILL.md +111 -137
  133. package/.agent/skills/test-result-analyzer/SKILL.md +33 -73
  134. package/.agent/skills/testing-patterns/SKILL.md +512 -573
  135. package/.agent/skills/trend-researcher/SKILL.md +30 -71
  136. package/.agent/skills/ui-ux-pro-max/SKILL.md +8 -41
  137. package/.agent/skills/ui-ux-researcher/SKILL.md +51 -91
  138. package/.agent/skills/vue-expert/SKILL.md +127 -866
  139. package/.agent/skills/vulnerability-scanner/SKILL.md +354 -269
  140. package/.agent/skills/web-accessibility-auditor/SKILL.md +168 -193
  141. package/.agent/skills/web-design-guidelines/SKILL.md +25 -61
  142. package/.agent/skills/webapp-testing/SKILL.md +119 -145
  143. package/.agent/skills/whimsy-injector/SKILL.md +58 -132
  144. package/.agent/skills/workflow-optimizer/SKILL.md +28 -68
  145. package/.agent/workflows/api-tester.md +151 -151
  146. package/.agent/workflows/audit.md +127 -138
  147. package/.agent/workflows/brainstorm.md +110 -110
  148. package/.agent/workflows/changelog.md +112 -112
  149. package/.agent/workflows/create.md +124 -124
  150. package/.agent/workflows/debug.md +165 -189
  151. package/.agent/workflows/deploy.md +180 -189
  152. package/.agent/workflows/enhance.md +128 -151
  153. package/.agent/workflows/fix.md +114 -135
  154. package/.agent/workflows/generate.md +13 -4
  155. package/.agent/workflows/migrate.md +160 -160
  156. package/.agent/workflows/orchestrate.md +168 -168
  157. package/.agent/workflows/performance-benchmarker.md +114 -123
  158. package/.agent/workflows/plan.md +173 -173
  159. package/.agent/workflows/preview.md +80 -80
  160. package/.agent/workflows/refactor.md +161 -183
  161. package/.agent/workflows/review-ai.md +101 -129
  162. package/.agent/workflows/review.md +116 -116
  163. package/.agent/workflows/session.md +94 -94
  164. package/.agent/workflows/status.md +79 -79
  165. package/.agent/workflows/strengthen-skills.md +138 -139
  166. package/.agent/workflows/swarm.md +179 -179
  167. package/.agent/workflows/test.md +189 -211
  168. package/.agent/workflows/tribunal-backend.md +94 -113
  169. package/.agent/workflows/tribunal-database.md +95 -115
  170. package/.agent/workflows/tribunal-frontend.md +96 -118
  171. package/.agent/workflows/tribunal-full.md +93 -133
  172. package/.agent/workflows/tribunal-mobile.md +95 -119
  173. package/.agent/workflows/tribunal-performance.md +110 -133
  174. package/.agent/workflows/ui-ux-pro-max.md +122 -143
  175. package/README.md +30 -1
  176. package/bin/tribunal-kit.js +175 -12
  177. package/package.json +25 -4
  178. package/.agent/skills/api-patterns/api-style.md +0 -42
  179. package/.agent/skills/api-patterns/auth.md +0 -24
  180. package/.agent/skills/api-patterns/documentation.md +0 -26
  181. package/.agent/skills/api-patterns/graphql.md +0 -41
  182. package/.agent/skills/api-patterns/rate-limiting.md +0 -31
  183. package/.agent/skills/api-patterns/response.md +0 -37
  184. package/.agent/skills/api-patterns/rest.md +0 -40
  185. package/.agent/skills/api-patterns/security-testing.md +0 -122
  186. package/.agent/skills/api-patterns/trpc.md +0 -41
  187. package/.agent/skills/api-patterns/versioning.md +0 -22
  188. package/.agent/skills/app-builder/agent-coordination.md +0 -71
  189. package/.agent/skills/app-builder/feature-building.md +0 -53
  190. package/.agent/skills/app-builder/project-detection.md +0 -34
  191. package/.agent/skills/app-builder/scaffolding.md +0 -118
  192. package/.agent/skills/app-builder/tech-stack.md +0 -40
  193. package/.agent/skills/architecture/context-discovery.md +0 -43
  194. package/.agent/skills/architecture/examples.md +0 -94
  195. package/.agent/skills/architecture/pattern-selection.md +0 -68
  196. package/.agent/skills/architecture/patterns-reference.md +0 -50
  197. package/.agent/skills/architecture/trade-off-analysis.md +0 -77
  198. package/.agent/skills/brainstorming/dynamic-questioning.md +0 -360
  199. package/.agent/skills/database-design/database-selection.md +0 -43
  200. package/.agent/skills/database-design/indexing.md +0 -39
  201. package/.agent/skills/database-design/migrations.md +0 -48
  202. package/.agent/skills/database-design/optimization.md +0 -36
  203. package/.agent/skills/database-design/orm-selection.md +0 -30
  204. package/.agent/skills/database-design/schema-design.md +0 -56
  205. package/.agent/skills/frontend-design/animation-guide.md +0 -331
  206. package/.agent/skills/frontend-design/color-system.md +0 -329
  207. package/.agent/skills/frontend-design/decision-trees.md +0 -418
  208. package/.agent/skills/frontend-design/motion-graphics.md +0 -306
  209. package/.agent/skills/frontend-design/typography-system.md +0 -363
  210. package/.agent/skills/frontend-design/ux-psychology.md +0 -1116
  211. package/.agent/skills/frontend-design/visual-effects.md +0 -383
  212. package/.agent/skills/intelligent-routing/router-manifest.md +0 -65
  213. package/.agent/skills/mobile-design/decision-trees.md +0 -516
  214. package/.agent/skills/mobile-design/mobile-backend.md +0 -491
  215. package/.agent/skills/mobile-design/mobile-color-system.md +0 -420
  216. package/.agent/skills/mobile-design/mobile-debugging.md +0 -122
  217. package/.agent/skills/mobile-design/mobile-design-thinking.md +0 -357
  218. package/.agent/skills/mobile-design/mobile-navigation.md +0 -458
  219. package/.agent/skills/mobile-design/mobile-performance.md +0 -767
  220. package/.agent/skills/mobile-design/mobile-testing.md +0 -356
  221. package/.agent/skills/mobile-design/mobile-typography.md +0 -433
  222. package/.agent/skills/mobile-design/platform-android.md +0 -666
  223. package/.agent/skills/mobile-design/platform-ios.md +0 -561
  224. package/.agent/skills/mobile-design/touch-psychology.md +0 -537
  225. package/.agent/skills/nextjs-react-expert/1-async-eliminating-waterfalls.md +0 -312
  226. package/.agent/skills/nextjs-react-expert/2-bundle-bundle-size-optimization.md +0 -240
  227. package/.agent/skills/nextjs-react-expert/3-server-server-side-performance.md +0 -490
  228. package/.agent/skills/nextjs-react-expert/4-client-client-side-data-fetching.md +0 -264
  229. package/.agent/skills/nextjs-react-expert/5-rerender-re-render-optimization.md +0 -581
  230. package/.agent/skills/nextjs-react-expert/6-rendering-rendering-performance.md +0 -432
  231. package/.agent/skills/nextjs-react-expert/7-js-javascript-performance.md +0 -684
  232. package/.agent/skills/nextjs-react-expert/8-advanced-advanced-patterns.md +0 -150
  233. package/.agent/skills/vulnerability-scanner/checklists.md +0 -121
@@ -1,491 +0,0 @@
1
- # Mobile Backend Patterns
2
-
3
- > **This file covers backend/API patterns SPECIFIC to mobile clients.**
4
- > Generic backend patterns are in `nodejs-best-practices` and `api-patterns`.
5
- > **Mobile backend is NOT the same as web backend. Different constraints, different patterns.**
6
-
7
- ---
8
-
9
- ## 🧠 MOBILE BACKEND MINDSET
10
-
11
- ```
12
- Mobile clients are DIFFERENT from web clients:
13
- ├── Unreliable network (2G, subway, elevator)
14
- ├── Battery constraints (minimize wake-ups)
15
- ├── Limited storage (can't cache everything)
16
- ├── Interrupted sessions (calls, notifications)
17
- ├── Diverse devices (old phones to flagships)
18
- └── Binary updates are slow (App Store review)
19
- ```
20
-
21
- **Your backend must compensate for ALL of these.**
22
-
23
- ---
24
-
25
- ## 🚫 AI MOBILE BACKEND ANTI-PATTERNS
26
-
27
- ### These are common AI mistakes when building mobile backends:
28
-
29
- | ❌ AI Default | Why It's Wrong | ✅ Mobile-Correct |
30
- |---------------|----------------|-------------------|
31
- | Same API for web and mobile | Mobile needs compact responses | Separate mobile endpoints OR field selection |
32
- | Full object responses | Wastes bandwidth, battery | Partial responses, pagination |
33
- | No offline consideration | App crashes without network | Offline-first design, sync queues |
34
- | WebSocket for everything | Battery drain | Push notifications + polling fallback |
35
- | No app versioning | Can't force updates, breaking changes | Version headers, minimum version check |
36
- | Generic error messages | Users can't fix issues | Mobile-specific error codes + recovery actions |
37
- | Session-based auth | Mobile apps restart | Token-based with refresh |
38
- | Ignore device info | Can't debug issues | Device ID, app version in headers |
39
-
40
- ---
41
-
42
- ## 1. Push Notifications
43
-
44
- ### Platform Architecture
45
-
46
- ```
47
- ┌─────────────────────────────────────────────────────────────────┐
48
- │ YOUR BACKEND │
49
- ├─────────────────────────────────────────────────────────────────┤
50
- │ │ │
51
- │ ┌──────────┴──────────┐ │
52
- │ ▼ ▼ │
53
- │ ┌─────────────────┐ ┌─────────────────┐ │
54
- │ │ FCM (Google) │ │ APNs (Apple) │ │
55
- │ │ Firebase │ │ Direct or FCM │ │
56
- │ └────────┬────────┘ └────────┬────────┘ │
57
- │ │ │ │
58
- │ ▼ ▼ │
59
- │ ┌─────────────────┐ ┌─────────────────┐ │
60
- │ │ Android Device │ │ iOS Device │ │
61
- │ └─────────────────┘ └─────────────────┘ │
62
- └─────────────────────────────────────────────────────────────────┘
63
- ```
64
-
65
- ### Push Types
66
-
67
- | Type | Use Case | User Sees |
68
- |------|----------|-----------|
69
- | **Display** | New message, order update | Notification banner |
70
- | **Silent** | Background sync, content update | Nothing (background) |
71
- | **Data** | Custom handling by app | Depends on app logic |
72
-
73
- ### Anti-Patterns
74
-
75
- | ❌ NEVER | ✅ ALWAYS |
76
- |----------|----------|
77
- | Send sensitive data in push | Push says "New message", app fetches content |
78
- | Overload with pushes | Batch, dedupe, respect quiet hours |
79
- | Same message to all | Segment by user preference, timezone |
80
- | Ignore failed tokens | Clean up invalid tokens regularly |
81
- | Skip APNs for iOS | FCM alone doesn't guarantee iOS delivery |
82
-
83
- ### Token Management
84
-
85
- ```
86
- TOKEN LIFECYCLE:
87
- ├── App registers → Get token → Send to backend
88
- ├── Token can change → App must re-register on start
89
- ├── Token expires → Clean from database
90
- ├── User uninstalls → Token becomes invalid (detect via error)
91
- └── Multiple devices → Store multiple tokens per user
92
- ```
93
-
94
- ---
95
-
96
- ## 2. Offline Sync & Conflict Resolution
97
-
98
- ### Sync Strategy Selection
99
-
100
- ```
101
- WHAT TYPE OF DATA?
102
-
103
- ├── Read-only (news, catalog)
104
- │ └── Simple cache + TTL
105
- │ └── ETag/Last-Modified for invalidation
106
-
107
- ├── User-owned (notes, todos)
108
- │ └── Last-write-wins (simple)
109
- │ └── Or timestamp-based merge
110
-
111
- ├── Collaborative (shared docs)
112
- │ └── CRDT or OT required
113
- │ └── Consider Firebase/Supabase
114
-
115
- └── Critical (payments, inventory)
116
- └── Server is source of truth
117
- └── Optimistic UI + server confirmation
118
- ```
119
-
120
- ### Conflict Resolution Strategies
121
-
122
- | Strategy | How It Works | Best For |
123
- |----------|--------------|----------|
124
- | **Last-write-wins** | Latest timestamp overwrites | Simple data, single user |
125
- | **Server-wins** | Server always authoritative | Critical transactions |
126
- | **Client-wins** | Offline changes prioritized | Offline-heavy apps |
127
- | **Merge** | Combine changes field-by-field | Documents, rich content |
128
- | **CRDT** | Mathematically conflict-free | Real-time collaboration |
129
-
130
- ### Sync Queue Pattern
131
-
132
- ```
133
- CLIENT SIDE:
134
- ├── User makes change → Write to local DB
135
- ├── Add to sync queue → { action, data, timestamp, retries }
136
- ├── Network available → Process queue FIFO
137
- ├── Success → Remove from queue
138
- ├── Failure → Retry with backoff (max 5 retries)
139
- └── Conflict → Apply resolution strategy
140
-
141
- SERVER SIDE:
142
- ├── Accept change with client timestamp
143
- ├── Compare with server version
144
- ├── Apply conflict resolution
145
- ├── Return merged state
146
- └── Client updates local with server response
147
- ```
148
-
149
- ---
150
-
151
- ## 3. Mobile API Optimization
152
-
153
- ### Response Size Reduction
154
-
155
- | Technique | Savings | Implementation |
156
- |-----------|---------|----------------|
157
- | **Field selection** | 30-70% | `?fields=id,name,thumbnail` |
158
- | **Compression** | 60-80% | gzip/brotli (automatic) |
159
- | **Pagination** | Varies | Cursor-based for mobile |
160
- | **Image variants** | 50-90% | `/image?w=200&q=80` |
161
- | **Delta sync** | 80-95% | Only changed records since timestamp |
162
-
163
- ### Pagination: Cursor vs Offset
164
-
165
- ```
166
- OFFSET (Bad for mobile):
167
- ├── Page 1: OFFSET 0 LIMIT 20
168
- ├── Page 2: OFFSET 20 LIMIT 20
169
- ├── Problem: New item added → duplicates!
170
- └── Problem: Large offset = slow query
171
-
172
- CURSOR (Good for mobile):
173
- ├── First: ?limit=20
174
- ├── Next: ?limit=20&after=cursor_abc123
175
- ├── Cursor = encoded (id + sort values)
176
- ├── No duplicates on data changes
177
- └── Consistent performance
178
- ```
179
-
180
- ### Batch Requests
181
-
182
- ```
183
- Instead of:
184
- GET /users/1
185
- GET /users/2
186
- GET /users/3
187
- (3 round trips, 3x latency)
188
-
189
- Use:
190
- POST /batch
191
- { requests: [
192
- { method: "GET", path: "/users/1" },
193
- { method: "GET", path: "/users/2" },
194
- { method: "GET", path: "/users/3" }
195
- ]}
196
- (1 round trip)
197
- ```
198
-
199
- ---
200
-
201
- ## 4. App Versioning
202
-
203
- ### Version Check Endpoint
204
-
205
- ```
206
- GET /api/app-config
207
- Headers:
208
- X-App-Version: 2.1.0
209
- X-Platform: ios
210
- X-Device-ID: abc123
211
-
212
- Response:
213
- {
214
- "minimum_version": "2.0.0",
215
- "latest_version": "2.3.0",
216
- "force_update": false,
217
- "update_url": "https://apps.apple.com/...",
218
- "feature_flags": {
219
- "new_player": true,
220
- "dark_mode": true
221
- },
222
- "maintenance": false,
223
- "maintenance_message": null
224
- }
225
- ```
226
-
227
- ### Version Comparison Logic
228
-
229
- ```
230
- CLIENT VERSION vs MINIMUM VERSION:
231
- ├── client >= minimum → Continue normally
232
- ├── client < minimum → Show force update screen
233
- │ └── Block app usage until updated
234
- └── client < latest → Show optional update prompt
235
-
236
- FEATURE FLAGS:
237
- ├── Enable/disable features without app update
238
- ├── A/B testing by version/device
239
- └── Gradual rollout (10% → 50% → 100%)
240
- ```
241
-
242
- ---
243
-
244
- ## 5. Authentication for Mobile
245
-
246
- ### Token Strategy
247
-
248
- ```
249
- ACCESS TOKEN:
250
- ├── Short-lived (15 min - 1 hour)
251
- ├── Stored in memory (not persistent)
252
- ├── Used for API requests
253
- └── Refresh when expired
254
-
255
- REFRESH TOKEN:
256
- ├── Long-lived (30-90 days)
257
- ├── Stored in SecureStore/Keychain
258
- ├── Used only to get new access token
259
- └── Rotate on each use (security)
260
-
261
- DEVICE TOKEN:
262
- ├── Identifies this device
263
- ├── Allows "log out all devices"
264
- ├── Stored alongside refresh token
265
- └── Server tracks active devices
266
- ```
267
-
268
- ### Silent Re-authentication
269
-
270
- ```
271
- REQUEST FLOW:
272
- ├── Make request with access token
273
- ├── 401 Unauthorized?
274
- │ ├── Have refresh token?
275
- │ │ ├── Yes → Call /auth/refresh
276
- │ │ │ ├── Success → Retry original request
277
- │ │ │ └── Failure → Force logout
278
- │ │ └── No → Force logout
279
- │ └── Token just expired (not invalid)
280
- │ └── Auto-refresh, user doesn't notice
281
- └── Success → Continue
282
- ```
283
-
284
- ---
285
-
286
- ## 6. Error Handling for Mobile
287
-
288
- ### Mobile-Specific Error Format
289
-
290
- ```json
291
- {
292
- "error": {
293
- "code": "PAYMENT_DECLINED",
294
- "message": "Your payment was declined",
295
- "user_message": "Please check your card details or try another payment method",
296
- "action": {
297
- "type": "navigate",
298
- "destination": "payment_methods"
299
- },
300
- "retry": {
301
- "allowed": true,
302
- "after_seconds": 5
303
- }
304
- }
305
- }
306
- ```
307
-
308
- ### Error Categories
309
-
310
- | Code Range | Category | Mobile Handling |
311
- |------------|----------|-----------------|
312
- | 400-499 | Client error | Show message, user action needed |
313
- | 401 | Auth expired | Silent refresh or re-login |
314
- | 403 | Forbidden | Show upgrade/permission screen |
315
- | 404 | Not found | Remove from local cache |
316
- | 409 | Conflict | Show sync conflict UI |
317
- | 429 | Rate limit | Retry after header, backoff |
318
- | 500-599 | Server error | Retry with backoff, show "try later" |
319
- | Network | No connection | Use cached data, queue for sync |
320
-
321
- ---
322
-
323
- ## 7. Media & Binary Handling
324
-
325
- ### Image Optimization
326
-
327
- ```
328
- CLIENT REQUEST:
329
- GET /images/{id}?w=400&h=300&q=80&format=webp
330
-
331
- SERVER RESPONSE:
332
- ├── Resize on-the-fly OR use CDN
333
- ├── WebP for Android (smaller)
334
- ├── HEIC for iOS 14+ (if supported)
335
- ├── JPEG fallback
336
- └── Cache-Control: max-age=31536000
337
- ```
338
-
339
- ### Chunked Upload (Large Files)
340
-
341
- ```
342
- UPLOAD FLOW:
343
- 1. POST /uploads/init
344
- { filename, size, mime_type }
345
- → { upload_id, chunk_size }
346
-
347
- 2. PUT /uploads/{upload_id}/chunks/{n}
348
- → Upload each chunk (1-5 MB)
349
- → Can resume if interrupted
350
-
351
- 3. POST /uploads/{upload_id}/complete
352
- → Server assembles chunks
353
- → Return final file URL
354
- ```
355
-
356
- ### Streaming Audio/Video
357
-
358
- ```
359
- REQUIREMENTS:
360
- ├── HLS (HTTP Live Streaming) for iOS
361
- ├── DASH or HLS for Android
362
- ├── Multiple quality levels (adaptive bitrate)
363
- ├── Range request support (seeking)
364
- └── Offline download chunks
365
-
366
- ENDPOINTS:
367
- GET /media/{id}/manifest.m3u8 → HLS manifest
368
- GET /media/{id}/segment_{n}.ts → Video segment
369
- GET /media/{id}/download → Full file for offline
370
- ```
371
-
372
- ---
373
-
374
- ## 8. Security for Mobile
375
-
376
- ### Device Attestation
377
-
378
- ```
379
- VERIFY REAL DEVICE (not emulator/bot):
380
- ├── iOS: DeviceCheck API
381
- │ └── Server verifies with Apple
382
- ├── Android: Play Integrity API (replaces SafetyNet)
383
- │ └── Server verifies with Google
384
- └── Fail closed: Reject if attestation fails
385
- ```
386
-
387
- ### Request Signing
388
-
389
- ```
390
- CLIENT:
391
- ├── Create signature = HMAC(timestamp + path + body, secret)
392
- ├── Send: X-Signature: {signature}
393
- ├── Send: X-Timestamp: {timestamp}
394
- └── Send: X-Device-ID: {device_id}
395
-
396
- SERVER:
397
- ├── Validate timestamp (within 5 minutes)
398
- ├── Recreate signature with same inputs
399
- ├── Compare signatures
400
- └── Reject if mismatch (tampering detected)
401
- ```
402
-
403
- ### Rate Limiting
404
-
405
- ```
406
- MOBILE-SPECIFIC LIMITS:
407
- ├── Per device (X-Device-ID)
408
- ├── Per user (after auth)
409
- ├── Per endpoint (stricter for sensitive)
410
- └── Sliding window preferred
411
-
412
- HEADERS:
413
- X-RateLimit-Limit: 100
414
- X-RateLimit-Remaining: 95
415
- X-RateLimit-Reset: 1609459200
416
- Retry-After: 60 (when 429)
417
- ```
418
-
419
- ---
420
-
421
- ## 9. Monitoring & Analytics
422
-
423
- ### Required Headers from Mobile
424
-
425
- ```
426
- Every mobile request should include:
427
- ├── X-App-Version: 2.1.0
428
- ├── X-Platform: ios | android
429
- ├── X-OS-Version: 17.0
430
- ├── X-Device-Model: iPhone15,2
431
- ├── X-Device-ID: uuid (persistent)
432
- ├── X-Request-ID: uuid (per request, for tracing)
433
- ├── Accept-Language: tr-TR
434
- └── X-Timezone: Europe/Istanbul
435
- ```
436
-
437
- ### What to Log
438
-
439
- ```
440
- FOR EACH REQUEST:
441
- ├── All headers above
442
- ├── Endpoint, method, status
443
- ├── Response time
444
- ├── Error details (if any)
445
- └── User ID (if authenticated)
446
-
447
- ALERTS:
448
- ├── Error rate > 5% per version
449
- ├── P95 latency > 2 seconds
450
- ├── Specific version crash spike
451
- ├── Auth failure spike (attack?)
452
- └── Push delivery failure spike
453
- ```
454
-
455
- ---
456
-
457
- ## 📝 MOBILE BACKEND CHECKLIST
458
-
459
- ### Before API Design
460
- - [ ] Identified mobile-specific requirements?
461
- - [ ] Planned offline behavior?
462
- - [ ] Designed sync strategy?
463
- - [ ] Considered bandwidth constraints?
464
-
465
- ### For Every Endpoint
466
- - [ ] Response as small as possible?
467
- - [ ] Pagination cursor-based?
468
- - [ ] Proper caching headers?
469
- - [ ] Mobile error format with actions?
470
-
471
- ### Authentication
472
- - [ ] Token refresh implemented?
473
- - [ ] Silent re-auth flow?
474
- - [ ] Multi-device logout?
475
- - [ ] Secure token storage guidance?
476
-
477
- ### Push Notifications
478
- - [ ] FCM + APNs configured?
479
- - [ ] Token lifecycle managed?
480
- - [ ] Silent vs display push defined?
481
- - [ ] Sensitive data NOT in push payload?
482
-
483
- ### Release
484
- - [ ] Version check endpoint ready?
485
- - [ ] Feature flags configured?
486
- - [ ] Force update mechanism?
487
- - [ ] Monitoring headers required?
488
-
489
- ---
490
-
491
- > **Remember:** Mobile backend must be resilient to bad networks, respect battery life, and handle interrupted sessions gracefully. The client cannot be trusted, but it also cannot be hung up—provide offline capabilities and clear error recovery paths.