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.
- package/README.md +77 -0
- package/agents/developer.md +56 -0
- package/agents/frontend-design.md +69 -0
- package/agents/mobile-reviewer.md +36 -0
- package/agents/review-code.md +49 -0
- package/agents/security-scanner.md +50 -0
- package/agents/tester.md +72 -0
- package/bin/cli.js +226 -0
- package/package.json +20 -0
- package/skills/ai-asset-generator/SKILL.md +255 -0
- package/skills/ai-asset-generator/docs/gen-image.md +274 -0
- package/skills/ai-asset-generator/docs/genvideo.md +341 -0
- package/skills/ai-asset-generator/docs/remove-background.md +19 -0
- package/skills/ai-asset-generator/generate-credit-assets.mjs +180 -0
- package/skills/ai-asset-generator/generate-ginbrowser-assets.mjs +242 -0
- package/skills/ai-asset-generator/generate-sty-icon.mjs +149 -0
- package/skills/ai-asset-generator/lib/bg-remove.mjs +34 -0
- package/skills/ai-asset-generator/lib/env.mjs +38 -0
- package/skills/ai-asset-generator/lib/kie-client.mjs +88 -0
- package/skills/ai-asset-generator/scripts/scaffold-generator.mjs +203 -0
- package/skills/ai-build-ai/SKILL.md +124 -0
- package/skills/ai-build-ai/docs/agent-teams.md +293 -0
- package/skills/ai-build-ai/docs/checkpointing.md +161 -0
- package/skills/ai-build-ai/docs/create-agent.md +399 -0
- package/skills/ai-build-ai/docs/create-mcp.md +395 -0
- package/skills/ai-build-ai/docs/create-skill.md +299 -0
- package/skills/ai-build-ai/docs/headless-mode.md +614 -0
- package/skills/ai-build-ai/docs/hooks.md +578 -0
- package/skills/ai-build-ai/docs/memory-claude-md.md +375 -0
- package/skills/ai-build-ai/docs/output-styles.md +208 -0
- package/skills/ai-build-ai/docs/overview.md +162 -0
- package/skills/ai-build-ai/docs/permissions.md +391 -0
- package/skills/ai-build-ai/docs/plugins.md +396 -0
- package/skills/ai-build-ai/docs/sandbox.md +262 -0
- package/skills/ai-build-ai/scripts/load-tutorial.sh +54 -0
- package/skills/icon-generator/SKILL.md +270 -0
- package/skills/mobile-app-review/SKILL.md +321 -0
- package/skills/mobile-app-review/references/apple-review.md +132 -0
- package/skills/mobile-app-review/references/google-play-review.md +203 -0
- package/skills/mongodb/SKILL.md +667 -0
- package/skills/mongodb/references/mongoose-patterns.md +368 -0
- package/skills/nestjs-architecture/SKILL.md +1086 -0
- package/skills/nestjs-architecture/references/advanced-patterns.md +590 -0
- package/skills/performance/SKILL.md +509 -0
- package/skills/react-fsd-architecture/SKILL.md +693 -0
- package/skills/react-fsd-architecture/references/fsd-patterns.md +747 -0
- package/skills/react-query/SKILL.md +685 -0
- package/skills/react-query/references/query-patterns.md +365 -0
- package/skills/review-code/SKILL.md +321 -0
- package/skills/review-code/references/clean-code-principles.md +395 -0
- package/skills/review-code/references/frontend-patterns.md +136 -0
- package/skills/review-code/references/nestjs-patterns.md +184 -0
- package/skills/review-code/scripts/check-module.sh +201 -0
- package/skills/review-code/scripts/deep-scan.sh +604 -0
- package/skills/review-code/scripts/dep-check.sh +522 -0
- package/skills/review-code/scripts/detect-duplicates.sh +466 -0
- package/skills/review-code/scripts/format-check.sh +577 -0
- package/skills/review-code/scripts/run-review.sh +167 -0
- package/skills/review-code/scripts/scan-codebase.sh +152 -0
- package/skills/security-scanner/SKILL.md +327 -0
- package/skills/security-scanner/references/nestjs-security.md +260 -0
- package/skills/security-scanner/references/nextjs-security.md +201 -0
- package/skills/security-scanner/references/react-native-security.md +199 -0
- package/skills/security-scanner/scripts/security-scan.sh +478 -0
- package/skills/ui-ux-pro-max/SKILL.md +377 -0
- package/skills/ui-ux-pro-max/data/charts.csv +26 -0
- package/skills/ui-ux-pro-max/data/colors.csv +97 -0
- package/skills/ui-ux-pro-max/data/icons.csv +101 -0
- package/skills/ui-ux-pro-max/data/landing.csv +31 -0
- package/skills/ui-ux-pro-max/data/products.csv +97 -0
- package/skills/ui-ux-pro-max/data/react-performance.csv +45 -0
- package/skills/ui-ux-pro-max/data/stacks/astro.csv +54 -0
- package/skills/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
- package/skills/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
- package/skills/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
- package/skills/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
- package/skills/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
- package/skills/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
- package/skills/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
- package/skills/ui-ux-pro-max/data/stacks/react.csv +54 -0
- package/skills/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
- package/skills/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
- package/skills/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
- package/skills/ui-ux-pro-max/data/stacks/vue.csv +50 -0
- package/skills/ui-ux-pro-max/data/styles.csv +68 -0
- package/skills/ui-ux-pro-max/data/typography.csv +58 -0
- package/skills/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
- package/skills/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
- package/skills/ui-ux-pro-max/data/web-interface.csv +31 -0
- package/skills/ui-ux-pro-max/scripts/core.py +253 -0
- package/skills/ui-ux-pro-max/scripts/design_system.py +1067 -0
- 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
|