ginskill-init 1.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 (92) hide show
  1. package/README.md +77 -0
  2. package/agents/developer.md +56 -0
  3. package/agents/frontend-design.md +69 -0
  4. package/agents/mobile-reviewer.md +36 -0
  5. package/agents/review-code.md +49 -0
  6. package/agents/security-scanner.md +50 -0
  7. package/agents/tester.md +72 -0
  8. package/bin/cli.js +226 -0
  9. package/package.json +20 -0
  10. package/skills/ai-asset-generator/SKILL.md +255 -0
  11. package/skills/ai-asset-generator/docs/gen-image.md +274 -0
  12. package/skills/ai-asset-generator/docs/genvideo.md +341 -0
  13. package/skills/ai-asset-generator/docs/remove-background.md +19 -0
  14. package/skills/ai-asset-generator/generate-credit-assets.mjs +180 -0
  15. package/skills/ai-asset-generator/generate-ginbrowser-assets.mjs +242 -0
  16. package/skills/ai-asset-generator/generate-sty-icon.mjs +149 -0
  17. package/skills/ai-asset-generator/lib/bg-remove.mjs +34 -0
  18. package/skills/ai-asset-generator/lib/env.mjs +38 -0
  19. package/skills/ai-asset-generator/lib/kie-client.mjs +88 -0
  20. package/skills/ai-asset-generator/scripts/scaffold-generator.mjs +203 -0
  21. package/skills/ai-build-ai/SKILL.md +124 -0
  22. package/skills/ai-build-ai/docs/agent-teams.md +293 -0
  23. package/skills/ai-build-ai/docs/checkpointing.md +161 -0
  24. package/skills/ai-build-ai/docs/create-agent.md +399 -0
  25. package/skills/ai-build-ai/docs/create-mcp.md +395 -0
  26. package/skills/ai-build-ai/docs/create-skill.md +299 -0
  27. package/skills/ai-build-ai/docs/headless-mode.md +614 -0
  28. package/skills/ai-build-ai/docs/hooks.md +578 -0
  29. package/skills/ai-build-ai/docs/memory-claude-md.md +375 -0
  30. package/skills/ai-build-ai/docs/output-styles.md +208 -0
  31. package/skills/ai-build-ai/docs/overview.md +162 -0
  32. package/skills/ai-build-ai/docs/permissions.md +391 -0
  33. package/skills/ai-build-ai/docs/plugins.md +396 -0
  34. package/skills/ai-build-ai/docs/sandbox.md +262 -0
  35. package/skills/ai-build-ai/scripts/load-tutorial.sh +54 -0
  36. package/skills/icon-generator/SKILL.md +270 -0
  37. package/skills/mobile-app-review/SKILL.md +321 -0
  38. package/skills/mobile-app-review/references/apple-review.md +132 -0
  39. package/skills/mobile-app-review/references/google-play-review.md +203 -0
  40. package/skills/mongodb/SKILL.md +667 -0
  41. package/skills/mongodb/references/mongoose-patterns.md +368 -0
  42. package/skills/nestjs-architecture/SKILL.md +1086 -0
  43. package/skills/nestjs-architecture/references/advanced-patterns.md +590 -0
  44. package/skills/performance/SKILL.md +509 -0
  45. package/skills/react-fsd-architecture/SKILL.md +693 -0
  46. package/skills/react-fsd-architecture/references/fsd-patterns.md +747 -0
  47. package/skills/react-query/SKILL.md +685 -0
  48. package/skills/react-query/references/query-patterns.md +365 -0
  49. package/skills/review-code/SKILL.md +321 -0
  50. package/skills/review-code/references/clean-code-principles.md +395 -0
  51. package/skills/review-code/references/frontend-patterns.md +136 -0
  52. package/skills/review-code/references/nestjs-patterns.md +184 -0
  53. package/skills/review-code/scripts/check-module.sh +201 -0
  54. package/skills/review-code/scripts/deep-scan.sh +604 -0
  55. package/skills/review-code/scripts/dep-check.sh +522 -0
  56. package/skills/review-code/scripts/detect-duplicates.sh +466 -0
  57. package/skills/review-code/scripts/format-check.sh +577 -0
  58. package/skills/review-code/scripts/run-review.sh +167 -0
  59. package/skills/review-code/scripts/scan-codebase.sh +152 -0
  60. package/skills/security-scanner/SKILL.md +327 -0
  61. package/skills/security-scanner/references/nestjs-security.md +260 -0
  62. package/skills/security-scanner/references/nextjs-security.md +201 -0
  63. package/skills/security-scanner/references/react-native-security.md +199 -0
  64. package/skills/security-scanner/scripts/security-scan.sh +478 -0
  65. package/skills/ui-ux-pro-max/SKILL.md +377 -0
  66. package/skills/ui-ux-pro-max/data/charts.csv +26 -0
  67. package/skills/ui-ux-pro-max/data/colors.csv +97 -0
  68. package/skills/ui-ux-pro-max/data/icons.csv +101 -0
  69. package/skills/ui-ux-pro-max/data/landing.csv +31 -0
  70. package/skills/ui-ux-pro-max/data/products.csv +97 -0
  71. package/skills/ui-ux-pro-max/data/react-performance.csv +45 -0
  72. package/skills/ui-ux-pro-max/data/stacks/astro.csv +54 -0
  73. package/skills/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
  74. package/skills/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
  75. package/skills/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
  76. package/skills/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
  77. package/skills/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
  78. package/skills/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
  79. package/skills/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
  80. package/skills/ui-ux-pro-max/data/stacks/react.csv +54 -0
  81. package/skills/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
  82. package/skills/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
  83. package/skills/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
  84. package/skills/ui-ux-pro-max/data/stacks/vue.csv +50 -0
  85. package/skills/ui-ux-pro-max/data/styles.csv +68 -0
  86. package/skills/ui-ux-pro-max/data/typography.csv +58 -0
  87. package/skills/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
  88. package/skills/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
  89. package/skills/ui-ux-pro-max/data/web-interface.csv +31 -0
  90. package/skills/ui-ux-pro-max/scripts/core.py +253 -0
  91. package/skills/ui-ux-pro-max/scripts/design_system.py +1067 -0
  92. package/skills/ui-ux-pro-max/scripts/search.py +114 -0
@@ -0,0 +1,270 @@
1
+ ---
2
+ name: icon-generator
3
+ description: |
4
+ **SVG Icon Generator**: Generate beautiful, clean SVG icon components (.tsx) for React Native apps using react-native-svg.
5
+ - MANDATORY TRIGGERS: generate icon, create icon, new icon, icon component, svg icon, make icon, add icon, design icon, draw icon, icon for, need icon, icon component, react native icon, mobile icon
6
+ - Use this skill whenever the user wants to create a new SVG icon component for a React Native app. Also trigger when discussing icon design, icon style consistency, or generating multiple icons for a feature.
7
+ ---
8
+
9
+ # SVG Icon Generator for React Native
10
+
11
+ Generate production-ready SVG icon components (`.tsx`) for React Native apps. Icons are hand-crafted as `react-native-svg` components — not image files.
12
+
13
+ ## Output Directory
14
+
15
+ Before generating icons, **discover the project's icon directory** by searching for existing icon components:
16
+
17
+ 1. Look for a directory containing `.tsx` files that import from `react-native-svg` (commonly `src/assets/icons/`, `src/icons/`, `src/components/icons/`, etc.)
18
+ 2. Look for a barrel export file (`index.ts` or `index.tsx`) in that directory
19
+ 3. If no existing icon directory is found, ask the user where icons should go
20
+
21
+ After creating the icon file, **always update the barrel export** if one exists.
22
+
23
+ ## Discovering Project Conventions
24
+
25
+ Before generating the first icon in a project, **read 2-3 existing icon files** to detect:
26
+
27
+ - Which component pattern is used (see patterns below)
28
+ - Default color value (e.g. `#737373`, `#000`, `currentColor`)
29
+ - Default size (usually `24`)
30
+ - Stroke width (usually `1.5` or `2`)
31
+ - Whether the project uses a `size` prop convenience pattern
32
+ - Export style (default export, named export, or both)
33
+ - Whether there's a barrel `index.ts` file to update
34
+
35
+ Adapt all generated icons to match the project's existing conventions.
36
+
37
+ ## Component Patterns
38
+
39
+ Three common patterns for react-native-svg icon components. Choose based on project conventions and complexity:
40
+
41
+ ### Pattern A — Simple (most icons)
42
+
43
+ For single-color outline icons. Use `SvgProps` directly.
44
+
45
+ ```tsx
46
+ import Svg, { Path, SvgProps } from "react-native-svg"
47
+
48
+ export const BellIcon = (props: SvgProps) => (
49
+ <Svg width={24} height={24} viewBox="0 0 24 24" fill="none" {...props}>
50
+ <Path
51
+ d="M18 8A6 6 0 1 0 6 8c0 7-3 9-3 9h18s-3-2-3-9Z"
52
+ stroke={props.color || "#737373"}
53
+ strokeWidth={1.5}
54
+ strokeLinecap="round"
55
+ strokeLinejoin="round"
56
+ />
57
+ </Svg>
58
+ )
59
+
60
+ export default BellIcon
61
+ ```
62
+
63
+ ### Pattern B — With size prop
64
+
65
+ For icons that need a `size` convenience prop. Destructure and forward.
66
+
67
+ ```tsx
68
+ import Svg, { Path, SvgProps } from "react-native-svg"
69
+
70
+ interface MyIconProps extends SvgProps {
71
+ size?: number
72
+ }
73
+
74
+ const MyIcon = ({
75
+ size = 24,
76
+ width,
77
+ height,
78
+ color = "#FFFFFF",
79
+ ...props
80
+ }: MyIconProps) => {
81
+ const w = width ?? size
82
+ const h = height ?? size
83
+
84
+ return (
85
+ <Svg width={w} height={h} viewBox="0 0 24 24" fill="none" {...props}>
86
+ <Path d="..." fill={color} />
87
+ </Svg>
88
+ )
89
+ }
90
+
91
+ export default MyIcon
92
+ ```
93
+
94
+ ### Pattern C — Outlined + Filled variants
95
+
96
+ For icons that have both an outline and a filled version (e.g. tab bar icons). Export both as named exports from the same file.
97
+
98
+ ```tsx
99
+ import Svg, { Path, SvgProps } from "react-native-svg"
100
+
101
+ export const OutlinedIcon = (props: SvgProps) => (
102
+ <Svg height={24} width={24} fill="none" {...props}>
103
+ <Path
104
+ stroke={props.color || "#737373"}
105
+ strokeWidth={1.5}
106
+ d="..."
107
+ />
108
+ </Svg>
109
+ )
110
+
111
+ export const FilledIcon = (props: SvgProps) => (
112
+ <Svg height={24} width={24} fill="none" {...props}>
113
+ <Path
114
+ fill={props.color || "#737373"}
115
+ d="..."
116
+ fillRule="evenodd"
117
+ clipRule="evenodd"
118
+ />
119
+ </Svg>
120
+ )
121
+ ```
122
+
123
+ ### Available SVG elements
124
+
125
+ Import only what you need from `react-native-svg`:
126
+
127
+ | Element | Use for |
128
+ |---------|---------|
129
+ | `Path` | Most shapes — lines, curves, complex outlines |
130
+ | `Circle` | Dots, circular elements |
131
+ | `Rect` | Rectangles, rounded rectangles |
132
+ | `G` | Grouping elements |
133
+ | `Defs`, `LinearGradient`, `RadialGradient`, `Stop` | Gradient fills (complex icons only) |
134
+ | `ClipPath` | Clipping masks |
135
+
136
+ ## SVG Design Rules
137
+
138
+ Follow these rules when crafting the `d` attribute and overall icon design:
139
+
140
+ ### ViewBox & Grid
141
+
142
+ - **Always** use `viewBox="0 0 24 24"` unless the project uses a different standard (check existing icons)
143
+ - Default `width={24} height={24}` — consumers override via props
144
+ - Center the icon within the grid with ~1-2px visual padding
145
+
146
+ ### Stroke Style (outline icons)
147
+
148
+ - `strokeWidth={1.5}` — common standard (adapt to project)
149
+ - `strokeLinecap="round"` — always round caps
150
+ - `strokeLinejoin="round"` — always round joins
151
+ - Default stroke color from `props.color` with a fallback (detect from existing icons)
152
+ - `fill="none"` on the `<Svg>` element
153
+
154
+ ### Fill Style (solid icons)
155
+
156
+ - Use `fill={props.color || "..."}` on `<Path>` elements
157
+ - For complex filled shapes, use `fillRule="evenodd"` and `clipRule="evenodd"` to handle cutouts
158
+
159
+ ### Path Quality
160
+
161
+ - **Minimize anchor points** — fewer points = cleaner curves. A good icon uses 5-15 path commands, not 50+.
162
+ - **Use relative commands** (`m`, `l`, `c`, `a`) where they reduce file size
163
+ - **Round coordinates** to 1-2 decimal places max — no `14.293847` nonsense
164
+ - **Prefer arcs (`A/a`)** for rounded corners and circles over many cubic beziers
165
+ - **Keep paths semantic** — split into multiple `<Path>` elements for distinct visual parts (e.g. separate the lid from the box)
166
+ - **No transforms on elements** — bake all transforms into the path data itself
167
+
168
+ ### Visual Style
169
+
170
+ The icon set should follow a **Lucide-like** clean outline aesthetic:
171
+
172
+ - Uniform stroke weight
173
+ - Rounded caps and joins for friendly feel
174
+ - Geometric simplicity — reduce to essential form
175
+ - Optical balance — visually center, not mathematically center
176
+ - Consistent metaphors — follow existing icons in the project for similar concepts
177
+
178
+ ### What NOT to do
179
+
180
+ - No inline `style` attributes — use SVG props only
181
+ - No `<text>` elements — icons should be purely graphical
182
+ - No hardcoded colors without the `props.color` fallback
183
+ - No `px`, `em`, or CSS units in SVG attributes — use plain numbers
184
+ - No `transform` attributes on child elements
185
+ - No `opacity` below 0.4 — it won't be visible on all backgrounds
186
+ - No overly complex paths (>2KB for a single path `d` string) — simplify the design
187
+
188
+ ## Naming Convention
189
+
190
+ Follow the project's existing naming pattern. Common conventions:
191
+
192
+ | Rule | Example |
193
+ |------|---------|
194
+ | File name: PascalCase | `ShoppingBag.tsx` |
195
+ | Default export: PascalCase | `export default ShoppingBag` |
196
+ | Named export: PascalCase + `Icon` suffix | `export const ShoppingBagIcon = ...` |
197
+ | Outlined variant: `Outlined` prefix | `export const OutlinedShoppingBag = ...` |
198
+ | Filled variant: `Filled` prefix | `export const FilledShoppingBag = ...` |
199
+
200
+ ## Barrel Export
201
+
202
+ After creating the icon, add the export to the project's icon barrel file (e.g. `index.ts`).
203
+
204
+ For Pattern A/B (default export + named export):
205
+ ```ts
206
+ export { MyIconName } from "./MyIconName"
207
+ // or
208
+ export { default as MyIconNameIcon } from "./MyIconName"
209
+ ```
210
+
211
+ For Pattern C (outlined + filled):
212
+ ```ts
213
+ export { OutlinedMyIcon, FilledMyIcon } from "./MyIcon"
214
+ ```
215
+
216
+ ## Step-by-Step Process
217
+
218
+ When asked to generate an icon:
219
+
220
+ 1. **Discover the project's icon directory** — Search for existing `.tsx` files importing from `react-native-svg`. Read 2-3 to learn the conventions.
221
+ 2. **Clarify the concept** — Ask what the icon represents if not obvious. Check if a similar icon already exists.
222
+ 3. **Choose the pattern** — Match the project's existing pattern. Default to Pattern A for simple outline icons, B if the project uses `size` props, C if both outline and filled variants are requested.
223
+ 4. **Design the SVG paths** — Craft clean, minimal path data following the design rules above. Think of the icon in terms of simple geometric primitives.
224
+ 5. **Write the component** — Create the `.tsx` file matching the project's conventions.
225
+ 6. **Update barrel export** — Add the export to `index.ts` if one exists.
226
+ 7. **Verify** — Confirm the icon renders by asking the user to check it in their app.
227
+
228
+ ## Prompt Engineering for Beautiful Icons
229
+
230
+ When you need to design an icon from a concept, think through these steps:
231
+
232
+ ### Decompose the concept into shapes
233
+
234
+ Break the icon into 2-4 simple geometric primitives:
235
+ - **Circle** → dots, heads, wheels, buttons
236
+ - **Rectangle** → screens, cards, documents, boxes
237
+ - **Triangle** → arrows, play buttons, mountains
238
+ - **Line** → dividers, stems, connections
239
+ - **Arc** → smiles, curves, partial circles
240
+
241
+ ### Build the path step by step
242
+
243
+ 1. Start with the largest/most distinctive shape
244
+ 2. Add secondary details (e.g., handle on a bag, arrow on a share icon)
245
+ 3. Remove any element that doesn't add meaning — minimalism is key
246
+ 4. Test at 24×24: if a detail disappears at this size, remove it
247
+
248
+ ### Common icon recipes
249
+
250
+ | Concept | Approach |
251
+ |---------|----------|
252
+ | Notification bell | Arc for bell body + small circle for clapper + curved line for top |
253
+ | Shopping bag | Rounded rect + two arc handles |
254
+ | Heart | Two cubic bezier curves meeting at a point |
255
+ | Star | 5-point star via alternating outer/inner radius points |
256
+ | Checkmark | Single path with two line segments at an angle |
257
+ | Arrow | Line + chevron head (or triangle for filled) |
258
+ | Gear/Settings | Circle + evenly spaced rectangular teeth |
259
+ | Lock | Rounded rect body + arc shackle |
260
+ | Eye | Two symmetrical arcs + circle pupil |
261
+ | Trash | Trapezoid body + horizontal lid line + vertical deletion lines |
262
+
263
+ ### Fashion/clothing-specific icons
264
+
265
+ Patterns for clothing and fashion-related icons:
266
+ - **Hanger**: Arc hook on top + triangle body with slight shoulder curves
267
+ - **Shirt**: Rectangular body + notched collar + short sleeves using arcs
268
+ - **Dress**: Fitted top tapering to flared bottom via cubic beziers
269
+ - **Shoe**: Side profile — sole line + upper curve + heel
270
+ - **Closet/Wardrobe**: Rectangle with double doors (vertical line divider) + small circle handles
@@ -0,0 +1,321 @@
1
+ ---
2
+ name: mobile-app-review
3
+ description: |
4
+ **Mobile App Store Review Checklist**: Comprehensive pre-submission audit for Apple App Store and Google Play Store. Covers all review guidelines, common rejection reasons, and compliance requirements.
5
+ - MANDATORY TRIGGERS: app store review, app review, store submission, submit app, app store checklist, apple review, google play review, app rejection, pass review, store guidelines, app compliance, publish app, release app, app store requirements, pre-submission
6
+ - Use this skill whenever the user is preparing to submit or update a mobile app to the Apple App Store or Google Play Store, or when they want to audit their app against store guidelines. Also trigger when discussing app rejections, compliance issues, or store policy questions.
7
+ ---
8
+
9
+ # Mobile App Store Review Checklist
10
+
11
+ A comprehensive, actionable checklist to pass Apple App Store and Google Play Store review. Covers both platforms with platform-specific callouts where they differ.
12
+
13
+ Use this skill to audit an app before submission, diagnose a rejection, or ensure ongoing compliance.
14
+
15
+ ## How to Use This Skill
16
+
17
+ When the user asks for a review audit:
18
+
19
+ 1. **Determine the target platform(s)** — iOS, Android, or both
20
+ 2. **Identify the app type** — free, freemium, subscription, paid, contains UGC, uses AI, targets children, etc.
21
+ 3. **Walk through each section below** as a checklist, checking the project's code and configuration
22
+ 4. **Report findings** as PASS / FAIL / WARNING with specific file references and fix instructions
23
+ 5. **Prioritize blockers** — items that will definitely cause rejection come first
24
+
25
+ ---
26
+
27
+ ## Phase 1: Instant Rejection Checks
28
+
29
+ These are the most common rejection reasons. Check these first — any failure here is a guaranteed rejection.
30
+
31
+ ### 1.1 Crashes & Stability
32
+
33
+ - [ ] App launches without crashing on a fresh install
34
+ - [ ] All primary user flows complete without errors (signup, login, main feature, settings)
35
+ - [ ] No blank/white screens, infinite spinners, or dead-end states
36
+ - [ ] App handles no-network gracefully (show offline message, not crash)
37
+ - [ ] App handles expired auth tokens (redirect to login, not crash)
38
+ - [ ] Deep links and push notification opens don't crash
39
+ - [ ] Memory usage stays reasonable — no leaks on repeated navigation
40
+
41
+ **How to check**: Run the app on a real device (not just simulator). Walk through every screen. Toggle airplane mode mid-flow. Force-kill and reopen.
42
+
43
+ ### 1.2 Incomplete or Placeholder Content
44
+
45
+ - [ ] No "Coming Soon", "TODO", "Lorem ipsum", or placeholder text anywhere
46
+ - [ ] No test/debug screens accessible to users
47
+ - [ ] No dead buttons or non-functional UI elements
48
+ - [ ] All navigation paths lead to real content
49
+ - [ ] No empty states without helpful messaging (e.g. "No items yet — tap + to add one")
50
+
51
+ ### 1.3 Login & Demo Account
52
+
53
+ - [ ] If auth is required, provide a **demo account** in App Review Notes (Apple) / testing instructions (Google)
54
+ - [ ] Demo account works without 2FA, phone verification, or manual approval
55
+ - [ ] Demo account has enough data to showcase all features
56
+ - [ ] Social login (Apple, Google) works end-to-end
57
+ - [ ] **Apple Sign In is mandatory** if any third-party login is offered (Apple guideline 4.8)
58
+
59
+ ---
60
+
61
+ ## Phase 2: Privacy & Data
62
+
63
+ The #1 growing rejection category across both platforms.
64
+
65
+ ### 2.1 Privacy Policy
66
+
67
+ - [ ] Privacy policy URL is set in App Store Connect / Google Play Console
68
+ - [ ] Privacy policy is accessible **inside the app** (usually Settings > Privacy Policy)
69
+ - [ ] Policy is hosted on a live, accessible URL (not localhost, not broken)
70
+ - [ ] Policy accurately describes all data collected, used, and shared
71
+ - [ ] Policy covers third-party SDKs (analytics, crash reporting, ads, AI services)
72
+
73
+ ### 2.2 Data Collection Disclosure
74
+
75
+ **Apple (App Privacy Labels / "Nutrition Labels")**:
76
+ - [ ] All data types collected are declared in App Store Connect
77
+ - [ ] Declarations match actual app behavior and SDK data collection
78
+ - [ ] If using `expo-updates` or crash reporting, declare "Crash Data"
79
+ - [ ] If using analytics, declare "Analytics" and "Usage Data"
80
+
81
+ **Google (Data Safety Section)**:
82
+ - [ ] Data Safety form is complete in Play Console
83
+ - [ ] All data types and purposes are accurately declared
84
+ - [ ] SDK data collection is included (Google cross-checks with ML)
85
+ - [ ] Encryption in transit is declared if applicable
86
+
87
+ ### 2.3 Permissions
88
+
89
+ - [ ] Only request permissions the app actually uses
90
+ - [ ] Permission prompts explain **why** the permission is needed (custom message, not default)
91
+ - [ ] Camera, microphone, location, photo library — each has a clear use case description
92
+ - [ ] Permissions are requested **in context** (when the user taps the relevant feature), not on first launch
93
+ - [ ] App functions gracefully when permissions are denied (degrade, don't crash)
94
+
95
+ **Platform-specific permission strings**:
96
+ - **iOS**: `NSCameraUsageDescription`, `NSPhotoLibraryUsageDescription`, `NSLocationWhenInUseUsageDescription`, `NSMicrophoneUsageDescription`, etc. — all must be human-readable and specific
97
+ - **Android**: Only declare permissions in `AndroidManifest.xml` that are actually used. Remove unused permissions added by third-party libraries
98
+
99
+ ### 2.4 Account Deletion
100
+
101
+ - [ ] If the app has user accounts, there must be a way to **delete the account** from within the app
102
+ - [ ] Account deletion is accessible (Settings is the common location)
103
+ - [ ] Deletion actually removes user data (or clearly states the retention policy)
104
+ - [ ] Both Apple and Google now require this
105
+
106
+ ### 2.5 AI & External Services (2025+ requirement)
107
+
108
+ - [ ] If the app sends user data to external AI services, show a **consent modal** before any data is shared
109
+ - [ ] Consent modal identifies the AI provider and data types being shared
110
+ - [ ] User can decline without losing core app functionality
111
+ - [ ] AI-generated content is labeled if applicable
112
+
113
+ ### 2.6 Tracking & ATT (iOS only)
114
+
115
+ - [ ] If app tracks users across apps/websites, implement **App Tracking Transparency (ATT)** prompt
116
+ - [ ] ATT prompt must appear before any tracking begins
117
+ - [ ] App functions normally if user declines tracking
118
+
119
+ ---
120
+
121
+ ## Phase 3: In-App Purchases & Subscriptions
122
+
123
+ IAP issues are the #3 most common rejection reason on Apple.
124
+
125
+ ### 3.1 Payment Rules
126
+
127
+ - [ ] **All digital goods/content** must use the platform's IAP system (Apple IAP / Google Play Billing)
128
+ - [ ] No links to external payment methods for digital goods
129
+ - [ ] Physical goods and services (e.g., ride-sharing, food delivery) can use external payment
130
+ - [ ] No language that directs users to purchase outside the app
131
+
132
+ ### 3.2 Restore Purchases
133
+
134
+ - [ ] "Restore Purchases" button exists and is **easily findable** (Settings or Paywall screen)
135
+ - [ ] Restore works after: reinstall, new device, logout + login
136
+ - [ ] Restored purchases correctly unlock all entitled content
137
+ - [ ] **Test flow**: Purchase → Delete app → Reinstall → Restore → Verify unlocked
138
+
139
+ ### 3.3 Subscription Requirements
140
+
141
+ - [ ] Subscription period is at least 7 days
142
+ - [ ] Pricing and renewal terms are clearly displayed **before** the purchase button
143
+ - [ ] Free trial terms are explicit (duration, what happens after, how to cancel)
144
+ - [ ] Subscription management is accessible (link to platform subscription settings)
145
+ - [ ] Cancellation flow is clear — no dark patterns
146
+
147
+ ### 3.4 Paywall UI
148
+
149
+ - [ ] Price is displayed in the user's local currency (use platform APIs)
150
+ - [ ] All features gated by the paywall are clearly listed
151
+ - [ ] Free users can still use the core app experience
152
+ - [ ] No misleading "free" claims if a subscription is required for core functionality
153
+
154
+ ---
155
+
156
+ ## Phase 4: Content & Safety
157
+
158
+ ### 4.1 Age Rating
159
+
160
+ - [ ] Age rating questionnaire is completed accurately
161
+ - [ ] Content matches the declared age rating
162
+ - [ ] **Apple (2025+)**: New age tiers — 13+, 16+, 18+. Updated questionnaire must be completed by January 31, 2026
163
+ - [ ] **Google**: Content rating questionnaire via IARC is completed
164
+ - [ ] If app targets minors, additional compliance is required (COPPA, Google CSAE policy)
165
+
166
+ ### 4.2 User-Generated Content (UGC)
167
+
168
+ If users can create, upload, or share content:
169
+
170
+ - [ ] Content **reporting** mechanism exists (per-item report button)
171
+ - [ ] User **blocking** is available (server-side, not just local hide)
172
+ - [ ] Content **moderation** system is in place (filtering, review queue, or AI moderation)
173
+ - [ ] Published **contact info** for support is accessible in-app
174
+ - [ ] Terms of Service are accessible and prohibit objectionable content
175
+
176
+ ### 4.3 Restricted Content
177
+
178
+ - [ ] No hate speech, violence, or illegal content
179
+ - [ ] No copyrighted material used without license
180
+ - [ ] No misleading health or financial claims
181
+ - [ ] Alcohol, gambling, dating, real-money contests — require additional compliance and age gating
182
+
183
+ ---
184
+
185
+ ## Phase 5: Design & UX
186
+
187
+ ### 5.1 Apple Human Interface Guidelines
188
+
189
+ - [ ] App respects Safe Area insets (notch, Dynamic Island, home indicator)
190
+ - [ ] No custom UI that mimics system alerts or notifications
191
+ - [ ] Back navigation works consistently
192
+ - [ ] App respects system text size (Dynamic Type) — or at minimum doesn't break at larger sizes
193
+ - [ ] Dark mode is either fully supported or explicitly opted out
194
+ - [ ] App looks correct on all supported iPhone sizes (SE through Pro Max)
195
+ - [ ] If `supportsTablet` is not explicitly false, app must be usable on iPad
196
+
197
+ ### 5.2 Google Material Design
198
+
199
+ - [ ] App handles back button/gesture correctly on Android
200
+ - [ ] Status bar and navigation bar are styled appropriately
201
+ - [ ] App works across different screen densities (mdpi through xxxhdpi)
202
+ - [ ] Edge-to-edge display is handled properly
203
+ - [ ] Keyboard doesn't cover input fields
204
+
205
+ ### 5.3 Universal Requirements
206
+
207
+ - [ ] Loading states are present (skeletons, spinners) — no blank screens while data loads
208
+ - [ ] Error states provide helpful messages and recovery actions
209
+ - [ ] Empty states guide users on what to do next
210
+ - [ ] Text is readable (sufficient contrast, minimum ~14sp/pt body text)
211
+ - [ ] Touch targets are at least 44×44pt (iOS) / 48×48dp (Android)
212
+ - [ ] No horizontal scroll on screens that shouldn't scroll horizontally
213
+
214
+ ---
215
+
216
+ ## Phase 6: Metadata & Store Listing
217
+
218
+ ### 6.1 App Icon
219
+
220
+ - [ ] **Apple**: 1024×1024px, no transparency, no rounded corners (system applies them), no alpha channel
221
+ - [ ] **Google**: 512×512px, 32-bit PNG with alpha channel allowed
222
+ - [ ] Icon is unique, recognizable, and not confusingly similar to existing apps
223
+
224
+ ### 6.2 Screenshots
225
+
226
+ - [ ] Screenshots show **actual app UI** (not just marketing graphics with no app content)
227
+ - [ ] Required sizes provided for all targeted devices
228
+ - [ ] **Apple**: At least 1 screenshot per localization; up to 10 per device type
229
+ - [ ] **Google**: Minimum 2 screenshots; up to 8; 16:9 or 9:16 aspect ratio
230
+ - [ ] Screenshots are not misleading — features shown must exist in the app
231
+
232
+ ### 6.3 Description & Keywords
233
+
234
+ - [ ] Description accurately reflects app functionality
235
+ - [ ] No competitor names or trademarked terms in keywords
236
+ - [ ] No claims like "#1 app" or "best" without verification
237
+ - [ ] **Google**: Title max 30 chars; short description max 80 chars
238
+ - [ ] Support URL and marketing URL are live and accessible
239
+
240
+ ### 6.4 What's New / Release Notes
241
+
242
+ - [ ] Release notes describe actual changes (not just "bug fixes" repeatedly)
243
+ - [ ] No promotional language that doesn't match the update
244
+
245
+ ---
246
+
247
+ ## Phase 7: Technical Requirements
248
+
249
+ ### 7.1 iOS-Specific
250
+
251
+ - [ ] Built with the **latest required Xcode and SDK** (currently iOS 18 SDK as of April 2025)
252
+ - [ ] 64-bit architecture support
253
+ - [ ] App does not use private/undocumented APIs
254
+ - [ ] No embedded web browser for core functionality (WebView-only apps get rejected)
255
+ - [ ] App binary is under 4GB (over-the-air download limit is 200MB on cellular)
256
+ - [ ] Background modes are only declared if actually used (audio, location, VOIP, etc.)
257
+
258
+ ### 7.2 Android-Specific
259
+
260
+ - [ ] Target API level meets minimum requirement (API 35 / Android 15 for new apps as of Aug 2025)
261
+ - [ ] App bundle format (`.aab`) is used for new app submissions
262
+ - [ ] `minSdkVersion` is reasonable for your audience (API 24+ is common)
263
+ - [ ] No unnecessary permissions in `AndroidManifest.xml`
264
+ - [ ] ProGuard/R8 rules don't break runtime behavior
265
+ - [ ] **Financial features declaration** is completed in Play Console (required for all apps)
266
+
267
+ ### 7.3 Both Platforms
268
+
269
+ - [ ] App size is optimized (large downloads reduce conversion)
270
+ - [ ] Network requests use HTTPS (no plain HTTP)
271
+ - [ ] API keys, secrets, and tokens are not hardcoded in the bundle
272
+ - [ ] No console.log / debug logging in production builds
273
+ - [ ] Push notifications work correctly (token registration, payload handling)
274
+ - [ ] Universal/deep links resolve correctly
275
+
276
+ ---
277
+
278
+ ## Phase 8: Pre-Submission Final Check
279
+
280
+ ### The "Reviewer Run"
281
+
282
+ Perform this exactly as an app reviewer would:
283
+
284
+ 1. **Fresh install** the app on a real device (not simulator)
285
+ 2. **Create an account** (or use the demo account you'll provide)
286
+ 3. **Complete the main user flow** — the primary thing your app does
287
+ 4. **Test each tab/section** — tap every button, open every screen
288
+ 5. **Toggle airplane mode** — verify offline handling
289
+ 6. **Test restore purchases** — if applicable
290
+ 7. **Find the privacy policy** — can you reach it in < 3 taps?
291
+ 8. **Find account deletion** — can you reach it in < 3 taps?
292
+ 9. **Force-kill and reopen** — does the app restore state correctly?
293
+ 10. **Check all links** — support URL, privacy URL, terms URL
294
+
295
+ ### Submission Notes
296
+
297
+ - **Apple App Review Notes**: Include demo credentials, instructions for features that need special setup, explanations for any permissions
298
+ - **Google Testing Instructions**: Same — provide credentials and context
299
+ - **Contact info**: Ensure your developer contact email is real and monitored
300
+ - **Response plan**: Have someone available to respond to reviewer questions within 24-48 hours
301
+
302
+ ---
303
+
304
+ ## Quick Reference: Top Rejection Reasons
305
+
306
+ | Rank | Apple | Google |
307
+ |------|-------|--------|
308
+ | 1 | Crashes / bugs (2.1) | Crashes / ANR |
309
+ | 2 | Inaccurate metadata (2.3) | Misleading metadata |
310
+ | 3 | IAP misconfiguration (3.1.1) | Privacy / Data Safety violations |
311
+ | 4 | Missing privacy policy | Missing privacy policy |
312
+ | 5 | Incomplete app | Permissions abuse |
313
+ | 6 | No account deletion | Intellectual property |
314
+ | 7 | Missing Apple Sign In | Restricted content |
315
+ | 8 | Broken links | Broken links / dead features |
316
+
317
+ ## References
318
+
319
+ For detailed platform-specific checklists, see:
320
+ - `references/apple-review.md` — Full Apple App Store review guidelines deep-dive
321
+ - `references/google-play-review.md` — Full Google Play policy requirements deep-dive