@mrtrinhvn/ag-kit 1.0.11 → 1.1.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 (219) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1 -0
  3. package/bin/cli.js +62 -0
  4. package/package.json +7 -1
  5. package/template/.agent/rules/GEMINI.md +1 -1
  6. package/template/.agent/skills/regent-orchestrator/SKILL.md +31 -0
  7. package/template/.agent/skills/telegram-bridge/SKILL.md +30 -0
  8. package/.agent/.shared/ui-ux-pro-max/data/charts.csv +0 -26
  9. package/.agent/.shared/ui-ux-pro-max/data/colors.csv +0 -97
  10. package/.agent/.shared/ui-ux-pro-max/data/icons.csv +0 -101
  11. package/.agent/.shared/ui-ux-pro-max/data/landing.csv +0 -31
  12. package/.agent/.shared/ui-ux-pro-max/data/products.csv +0 -97
  13. package/.agent/.shared/ui-ux-pro-max/data/prompts.csv +0 -24
  14. package/.agent/.shared/ui-ux-pro-max/data/react-performance.csv +0 -45
  15. package/.agent/.shared/ui-ux-pro-max/data/stacks/flutter.csv +0 -53
  16. package/.agent/.shared/ui-ux-pro-max/data/stacks/html-tailwind.csv +0 -56
  17. package/.agent/.shared/ui-ux-pro-max/data/stacks/jetpack-compose.csv +0 -53
  18. package/.agent/.shared/ui-ux-pro-max/data/stacks/nextjs.csv +0 -53
  19. package/.agent/.shared/ui-ux-pro-max/data/stacks/nuxt-ui.csv +0 -51
  20. package/.agent/.shared/ui-ux-pro-max/data/stacks/nuxtjs.csv +0 -59
  21. package/.agent/.shared/ui-ux-pro-max/data/stacks/react-native.csv +0 -52
  22. package/.agent/.shared/ui-ux-pro-max/data/stacks/react.csv +0 -54
  23. package/.agent/.shared/ui-ux-pro-max/data/stacks/shadcn.csv +0 -61
  24. package/.agent/.shared/ui-ux-pro-max/data/stacks/svelte.csv +0 -54
  25. package/.agent/.shared/ui-ux-pro-max/data/stacks/swiftui.csv +0 -51
  26. package/.agent/.shared/ui-ux-pro-max/data/stacks/vue.csv +0 -50
  27. package/.agent/.shared/ui-ux-pro-max/data/styles.csv +0 -59
  28. package/.agent/.shared/ui-ux-pro-max/data/typography.csv +0 -58
  29. package/.agent/.shared/ui-ux-pro-max/data/ui-reasoning.csv +0 -101
  30. package/.agent/.shared/ui-ux-pro-max/data/ux-guidelines.csv +0 -100
  31. package/.agent/.shared/ui-ux-pro-max/data/web-interface.csv +0 -31
  32. package/.agent/.shared/ui-ux-pro-max/scripts/__pycache__/core.cpython-313.pyc +0 -0
  33. package/.agent/.shared/ui-ux-pro-max/scripts/__pycache__/design_system.cpython-313.pyc +0 -0
  34. package/.agent/.shared/ui-ux-pro-max/scripts/core.py +0 -258
  35. package/.agent/.shared/ui-ux-pro-max/scripts/design_system.py +0 -1067
  36. package/.agent/.shared/ui-ux-pro-max/scripts/search.py +0 -106
  37. package/.agent/ARCHITECTURE.md +0 -288
  38. package/.agent/agents/backend-specialist.md +0 -263
  39. package/.agent/agents/code-archaeologist.md +0 -106
  40. package/.agent/agents/database-architect.md +0 -226
  41. package/.agent/agents/debugger.md +0 -225
  42. package/.agent/agents/devops-engineer.md +0 -242
  43. package/.agent/agents/documentation-writer.md +0 -104
  44. package/.agent/agents/explorer-agent.md +0 -73
  45. package/.agent/agents/frontend-specialist.md +0 -556
  46. package/.agent/agents/game-developer.md +0 -162
  47. package/.agent/agents/mobile-developer.md +0 -377
  48. package/.agent/agents/orchestrator.md +0 -416
  49. package/.agent/agents/penetration-tester.md +0 -188
  50. package/.agent/agents/performance-optimizer.md +0 -187
  51. package/.agent/agents/product-manager.md +0 -112
  52. package/.agent/agents/product-owner.md +0 -95
  53. package/.agent/agents/project-planner.md +0 -406
  54. package/.agent/agents/qa-automation-engineer.md +0 -103
  55. package/.agent/agents/quant-architect.md +0 -31
  56. package/.agent/agents/security-auditor.md +0 -170
  57. package/.agent/agents/seo-specialist.md +0 -111
  58. package/.agent/agents/test-engineer.md +0 -158
  59. package/.agent/mcp_config.json +0 -24
  60. package/.agent/rules/GEMINI.md +0 -280
  61. package/.agent/scripts/auto_preview.py +0 -148
  62. package/.agent/scripts/checklist.py +0 -217
  63. package/.agent/scripts/session_manager.py +0 -120
  64. package/.agent/scripts/verify_all.py +0 -327
  65. package/.agent/skills/api-patterns/SKILL.md +0 -81
  66. package/.agent/skills/api-patterns/api-style.md +0 -42
  67. package/.agent/skills/api-patterns/auth.md +0 -24
  68. package/.agent/skills/api-patterns/documentation.md +0 -26
  69. package/.agent/skills/api-patterns/graphql.md +0 -41
  70. package/.agent/skills/api-patterns/rate-limiting.md +0 -31
  71. package/.agent/skills/api-patterns/response.md +0 -37
  72. package/.agent/skills/api-patterns/rest.md +0 -40
  73. package/.agent/skills/api-patterns/scripts/api_validator.py +0 -211
  74. package/.agent/skills/api-patterns/security-testing.md +0 -122
  75. package/.agent/skills/api-patterns/trpc.md +0 -41
  76. package/.agent/skills/api-patterns/versioning.md +0 -22
  77. package/.agent/skills/app-builder/SKILL.md +0 -75
  78. package/.agent/skills/app-builder/agent-coordination.md +0 -71
  79. package/.agent/skills/app-builder/feature-building.md +0 -53
  80. package/.agent/skills/app-builder/project-detection.md +0 -34
  81. package/.agent/skills/app-builder/scaffolding.md +0 -118
  82. package/.agent/skills/app-builder/tech-stack.md +0 -40
  83. package/.agent/skills/app-builder/templates/SKILL.md +0 -39
  84. package/.agent/skills/app-builder/templates/astro-static/TEMPLATE.md +0 -76
  85. package/.agent/skills/app-builder/templates/chrome-extension/TEMPLATE.md +0 -92
  86. package/.agent/skills/app-builder/templates/cli-tool/TEMPLATE.md +0 -88
  87. package/.agent/skills/app-builder/templates/electron-desktop/TEMPLATE.md +0 -88
  88. package/.agent/skills/app-builder/templates/express-api/TEMPLATE.md +0 -83
  89. package/.agent/skills/app-builder/templates/flutter-app/TEMPLATE.md +0 -90
  90. package/.agent/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +0 -90
  91. package/.agent/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +0 -82
  92. package/.agent/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +0 -100
  93. package/.agent/skills/app-builder/templates/nextjs-static/TEMPLATE.md +0 -106
  94. package/.agent/skills/app-builder/templates/nuxt-app/TEMPLATE.md +0 -101
  95. package/.agent/skills/app-builder/templates/python-fastapi/TEMPLATE.md +0 -83
  96. package/.agent/skills/app-builder/templates/react-native-app/TEMPLATE.md +0 -93
  97. package/.agent/skills/architecture/SKILL.md +0 -55
  98. package/.agent/skills/architecture/context-discovery.md +0 -43
  99. package/.agent/skills/architecture/examples.md +0 -94
  100. package/.agent/skills/architecture/pattern-selection.md +0 -68
  101. package/.agent/skills/architecture/patterns-reference.md +0 -50
  102. package/.agent/skills/architecture/trade-off-analysis.md +0 -77
  103. package/.agent/skills/bash-linux/SKILL.md +0 -199
  104. package/.agent/skills/behavioral-modes/SKILL.md +0 -242
  105. package/.agent/skills/brainstorming/SKILL.md +0 -168
  106. package/.agent/skills/brainstorming/dynamic-questioning.md +0 -350
  107. package/.agent/skills/business-ops/SKILL.md +0 -26
  108. package/.agent/skills/clean-code/SKILL.md +0 -202
  109. package/.agent/skills/cli-generator/SKILL.md +0 -48
  110. package/.agent/skills/code-review-checklist/SKILL.md +0 -109
  111. package/.agent/skills/cognitive-session/SKILL.md +0 -28
  112. package/.agent/skills/data-science/SKILL.md +0 -28
  113. package/.agent/skills/database-design/SKILL.md +0 -52
  114. package/.agent/skills/database-design/database-selection.md +0 -43
  115. package/.agent/skills/database-design/indexing.md +0 -39
  116. package/.agent/skills/database-design/migrations.md +0 -48
  117. package/.agent/skills/database-design/optimization.md +0 -36
  118. package/.agent/skills/database-design/orm-selection.md +0 -30
  119. package/.agent/skills/database-design/schema-design.md +0 -56
  120. package/.agent/skills/database-design/scripts/schema_validator.py +0 -172
  121. package/.agent/skills/deployment-procedures/SKILL.md +0 -241
  122. package/.agent/skills/doc.md +0 -177
  123. package/.agent/skills/documentation-templates/SKILL.md +0 -194
  124. package/.agent/skills/frontend-design/SKILL.md +0 -418
  125. package/.agent/skills/frontend-design/animation-guide.md +0 -331
  126. package/.agent/skills/frontend-design/color-system.md +0 -311
  127. package/.agent/skills/frontend-design/decision-trees.md +0 -418
  128. package/.agent/skills/frontend-design/motion-graphics.md +0 -306
  129. package/.agent/skills/frontend-design/scripts/accessibility_checker.py +0 -183
  130. package/.agent/skills/frontend-design/scripts/ux_audit.py +0 -722
  131. package/.agent/skills/frontend-design/typography-system.md +0 -345
  132. package/.agent/skills/frontend-design/ux-psychology.md +0 -541
  133. package/.agent/skills/frontend-design/visual-effects.md +0 -383
  134. package/.agent/skills/game-development/2d-games/SKILL.md +0 -119
  135. package/.agent/skills/game-development/3d-games/SKILL.md +0 -135
  136. package/.agent/skills/game-development/SKILL.md +0 -167
  137. package/.agent/skills/game-development/game-art/SKILL.md +0 -185
  138. package/.agent/skills/game-development/game-audio/SKILL.md +0 -190
  139. package/.agent/skills/game-development/game-design/SKILL.md +0 -129
  140. package/.agent/skills/game-development/mobile-games/SKILL.md +0 -108
  141. package/.agent/skills/game-development/multiplayer/SKILL.md +0 -132
  142. package/.agent/skills/game-development/pc-games/SKILL.md +0 -144
  143. package/.agent/skills/game-development/vr-ar/SKILL.md +0 -123
  144. package/.agent/skills/game-development/web-games/SKILL.md +0 -150
  145. package/.agent/skills/geo-fundamentals/SKILL.md +0 -156
  146. package/.agent/skills/geo-fundamentals/scripts/geo_checker.py +0 -289
  147. package/.agent/skills/i18n-localization/SKILL.md +0 -154
  148. package/.agent/skills/i18n-localization/scripts/i18n_checker.py +0 -241
  149. package/.agent/skills/intelligent-routing/SKILL.md +0 -335
  150. package/.agent/skills/knowledge-management/SKILL.md +0 -66
  151. package/.agent/skills/lint-and-validate/SKILL.md +0 -45
  152. package/.agent/skills/lint-and-validate/scripts/lint_runner.py +0 -172
  153. package/.agent/skills/lint-and-validate/scripts/type_coverage.py +0 -173
  154. package/.agent/skills/llm-routing-quirks/SKILL.md +0 -41
  155. package/.agent/skills/mcp-builder/SKILL.md +0 -176
  156. package/.agent/skills/memory-architecture/SKILL.md +0 -107
  157. package/.agent/skills/mini-antigravity-injection/SKILL.md +0 -66
  158. package/.agent/skills/mobile-design/SKILL.md +0 -394
  159. package/.agent/skills/mobile-design/decision-trees.md +0 -516
  160. package/.agent/skills/mobile-design/mobile-backend.md +0 -491
  161. package/.agent/skills/mobile-design/mobile-color-system.md +0 -420
  162. package/.agent/skills/mobile-design/mobile-debugging.md +0 -122
  163. package/.agent/skills/mobile-design/mobile-design-thinking.md +0 -357
  164. package/.agent/skills/mobile-design/mobile-navigation.md +0 -458
  165. package/.agent/skills/mobile-design/mobile-performance.md +0 -767
  166. package/.agent/skills/mobile-design/mobile-testing.md +0 -356
  167. package/.agent/skills/mobile-design/mobile-typography.md +0 -433
  168. package/.agent/skills/mobile-design/platform-android.md +0 -666
  169. package/.agent/skills/mobile-design/platform-ios.md +0 -561
  170. package/.agent/skills/mobile-design/scripts/mobile_audit.py +0 -670
  171. package/.agent/skills/mobile-design/touch-psychology.md +0 -537
  172. package/.agent/skills/nextjs-react-expert/1-async-eliminating-waterfalls.md +0 -312
  173. package/.agent/skills/nextjs-react-expert/2-bundle-bundle-size-optimization.md +0 -240
  174. package/.agent/skills/nextjs-react-expert/3-server-server-side-performance.md +0 -490
  175. package/.agent/skills/nextjs-react-expert/4-client-client-side-data-fetching.md +0 -264
  176. package/.agent/skills/nextjs-react-expert/5-rerender-re-render-optimization.md +0 -581
  177. package/.agent/skills/nextjs-react-expert/6-rendering-rendering-performance.md +0 -432
  178. package/.agent/skills/nextjs-react-expert/7-js-javascript-performance.md +0 -684
  179. package/.agent/skills/nextjs-react-expert/8-advanced-advanced-patterns.md +0 -150
  180. package/.agent/skills/nextjs-react-expert/9-cache-components.md +0 -103
  181. package/.agent/skills/nextjs-react-expert/SKILL.md +0 -267
  182. package/.agent/skills/nextjs-react-expert/scripts/convert_rules.py +0 -222
  183. package/.agent/skills/nextjs-react-expert/scripts/react_performance_checker.py +0 -252
  184. package/.agent/skills/nodejs-best-practices/SKILL.md +0 -333
  185. package/.agent/skills/parallel-agents/SKILL.md +0 -175
  186. package/.agent/skills/performance-profiling/SKILL.md +0 -143
  187. package/.agent/skills/performance-profiling/scripts/lighthouse_audit.py +0 -76
  188. package/.agent/skills/plan-writing/SKILL.md +0 -153
  189. package/.agent/skills/powershell-windows/SKILL.md +0 -167
  190. package/.agent/skills/product-management/SKILL.md +0 -30
  191. package/.agent/skills/python-patterns/SKILL.md +0 -441
  192. package/.agent/skills/red-team-tactics/SKILL.md +0 -199
  193. package/.agent/skills/rust-pro/SKILL.md +0 -176
  194. package/.agent/skills/seo-fundamentals/SKILL.md +0 -129
  195. package/.agent/skills/seo-fundamentals/scripts/seo_checker.py +0 -219
  196. package/.agent/skills/server-management/SKILL.md +0 -161
  197. package/.agent/skills/systematic-debugging/SKILL.md +0 -120
  198. package/.agent/skills/tailwind-patterns/SKILL.md +0 -269
  199. package/.agent/skills/tdd-workflow/SKILL.md +0 -148
  200. package/.agent/skills/telegram-agentic-gateway/SKILL.md +0 -80
  201. package/.agent/skills/testing-patterns/SKILL.md +0 -178
  202. package/.agent/skills/testing-patterns/scripts/test_runner.py +0 -219
  203. package/.agent/skills/vulnerability-scanner/SKILL.md +0 -276
  204. package/.agent/skills/vulnerability-scanner/checklists.md +0 -121
  205. package/.agent/skills/vulnerability-scanner/scripts/security_scan.py +0 -458
  206. package/.agent/skills/web-design-guidelines/SKILL.md +0 -57
  207. package/.agent/skills/webapp-testing/SKILL.md +0 -187
  208. package/.agent/skills/webapp-testing/scripts/playwright_runner.py +0 -173
  209. package/.agent/workflows/brainstorm.md +0 -113
  210. package/.agent/workflows/create.md +0 -59
  211. package/.agent/workflows/debug.md +0 -103
  212. package/.agent/workflows/deploy.md +0 -176
  213. package/.agent/workflows/enhance.md +0 -63
  214. package/.agent/workflows/orchestrate.md +0 -237
  215. package/.agent/workflows/plan.md +0 -89
  216. package/.agent/workflows/preview.md +0 -81
  217. package/.agent/workflows/status.md +0 -86
  218. package/.agent/workflows/test.md +0 -144
  219. package/.agent/workflows/ui-ux-pro-max.md +0 -296
@@ -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.