@shaykec/app-agent 1.0.8 → 1.0.10
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/.claude/agents/android-customizer.md +9 -1
- package/.claude/agents/catalog-analyzer.md +57 -0
- package/.claude/agents/ios-customizer.md +9 -1
- package/.claude/agents/react-native-customizer.md +71 -0
- package/.claude/skills/android-customizer/SKILL.md +108 -23
- package/.claude/skills/bug-fixer/SKILL.md +59 -0
- package/.claude/skills/catalog-analyzer/SKILL.md +96 -0
- package/.claude/skills/customization-planner/SKILL.md +44 -5
- package/.claude/skills/design-selector/SKILL.md +3 -1
- package/.claude/skills/design-system/SKILL.md +1 -1
- package/.claude/skills/exploratory-tester/SKILL.md +82 -0
- package/.claude/skills/ios-customizer/SKILL.md +123 -23
- package/.claude/skills/module-integrator/SKILL.md +1 -1
- package/.claude/skills/react-native-customizer/SKILL.md +97 -11
- package/.claude/skills/test-planner/SKILL.md +72 -0
- package/.cursor/agents/README.md +3 -1
- package/.cursor/agents/android-customizer.md +15 -11
- package/.cursor/agents/catalog-analyzer.md +83 -0
- package/.cursor/agents/ios-customizer.md +15 -10
- package/.cursor/agents/react-native-customizer.md +170 -0
- package/.cursor/mcp.json +2 -10
- package/.cursor/rules/safety-guardrails.mdc +1 -1
- package/.cursor/rules/workflow.mdc +52 -18
- package/.cursor/skills/android-customizer/SKILL.md +46 -22
- package/.cursor/skills/bug-fixer/SKILL.md +189 -0
- package/.cursor/skills/catalog-analyzer/SKILL.md +222 -0
- package/.cursor/skills/customization-planner/SKILL.md +55 -8
- package/.cursor/skills/design-selector/SKILL.md +6 -5
- package/.cursor/skills/design-system/SKILL.md +8 -7
- package/.cursor/skills/exploratory-tester/SKILL.md +223 -0
- package/.cursor/skills/ios-customizer/SKILL.md +50 -15
- package/.cursor/skills/module-integrator/SKILL.md +2 -2
- package/.cursor/skills/output-validator/SKILL.md +1 -1
- package/.cursor/skills/react-native-customizer/SKILL.md +115 -25
- package/.cursor/skills/test-planner/SKILL.md +199 -0
- package/AGENTS.md +32 -11
- package/CLAUDE.md +78 -33
- package/README.md +77 -11
- package/designs/DESIGN_CATALOG.md +17 -15
- package/designs/DESIGN_PRINCIPLES.md +53 -0
- package/designs/brands/accessible-high-contrast.md +14 -0
- package/designs/brands/corporate-professional.md +14 -0
- package/designs/brands/dark-luxe.md +14 -0
- package/designs/brands/kids-playful.md +14 -0
- package/designs/brands/medical-clinical.md +14 -0
- package/designs/brands/modern-minimal.md +14 -0
- package/designs/brands/nature-organic.md +14 -0
- package/designs/brands/neo-brutalist.md +14 -0
- package/designs/brands/retro-vintage.md +14 -0
- package/designs/brands/soft-gradient.md +14 -0
- package/designs/brands/sport-athletic.md +14 -0
- package/designs/brands/tech-dynamic.md +14 -0
- package/designs/brands/vibrant-playful.md +14 -0
- package/dist/cli.d.ts +4 -2
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +91 -1
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +2 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +2 -0
- package/dist/config.js.map +1 -1
- package/dist/engines/claude-engine.d.ts.map +1 -1
- package/dist/engines/claude-engine.js +16 -4
- package/dist/engines/claude-engine.js.map +1 -1
- package/dist/engines/types.d.ts +1 -1
- package/dist/engines/types.d.ts.map +1 -1
- package/dist/engines/types.js +31 -2
- package/dist/engines/types.js.map +1 -1
- package/dist/github.d.ts +3 -0
- package/dist/github.d.ts.map +1 -1
- package/dist/github.js +47 -4
- package/dist/github.js.map +1 -1
- package/dist/index.js +217 -9
- package/dist/index.js.map +1 -1
- package/dist/prompt-builder.d.ts +11 -1
- package/dist/prompt-builder.d.ts.map +1 -1
- package/dist/prompt-builder.js +216 -1
- package/dist/prompt-builder.js.map +1 -1
- package/dist/validator.d.ts +7 -2
- package/dist/validator.d.ts.map +1 -1
- package/dist/validator.js +61 -41
- package/dist/validator.js.map +1 -1
- package/dist/workspace.js +2 -2
- package/dist/workspace.js.map +1 -1
- package/package.json +2 -2
- package/prompts/agent-prompt.md +35 -18
- package/prompts/deep-test-agent-prompt.md +122 -0
- package/prompts/fix-agent-prompt.md +90 -0
- package/prompts/quick-agent-prompt.md +32 -2
- package/prompts/scratch-agent-prompt.md +5 -8
- package/templates/android/BookTemplate/app/src/main/kotlin/com/appship/book/core/animation/AnimatedTransitionsModifiers.kt +188 -0
- package/templates/android/ChatTemplate/app/src/main/kotlin/com/appship/chat/core/animation/AnimatedTransitionsModifiers.kt +188 -0
- package/templates/android/ChatTemplate/app/src/main/kotlin/com/appship/chat/features/conversations/ConversationsScreen.kt +1 -1
- package/templates/android/DashTemplate/app/src/main/kotlin/com/appship/dash/core/animation/AnimatedTransitionsModifiers.kt +188 -0
- package/templates/android/DashTemplate/app/src/main/kotlin/com/appship/dash/features/navigation/MainScreen.kt +1 -0
- package/templates/android/FamilyTemplate/app/src/main/java/com/appship/family/core/animation/AnimatedTransitionsModifiers.kt +188 -0
- package/templates/android/FamilyTemplate/app/src/main/java/com/appship/family/features/navigation/MainNavigation.kt +5 -1
- package/templates/android/FinanceTemplate/app/src/main/kotlin/com/appship/finance/core/animation/AnimatedTransitionsModifiers.kt +188 -0
- package/templates/android/GameTemplate/app/src/main/kotlin/com/appship/game/core/animation/AnimatedTransitionsModifiers.kt +188 -0
- package/templates/android/GameTemplate/app/src/main/kotlin/com/appship/game/core/animation/MotionPreferencesScreen.kt +3 -3
- package/templates/android/GameTemplate/app/src/main/kotlin/com/appship/game/features/navigation/Navigation.kt +1 -1
- package/templates/android/GameTemplate/app/src/main/kotlin/com/appship/game/features/settings/SettingsScreen.kt +1 -1
- package/templates/android/HealthTemplate/app/src/main/kotlin/com/appship/health/core/animation/AnimatedTransitionsModifiers.kt +188 -0
- package/templates/android/LearnTemplate/app/src/main/kotlin/com/appship/learn/core/animation/AnimatedTransitionsModifiers.kt +188 -0
- package/templates/android/MapTemplate/app/src/main/kotlin/com/appship/map/core/animation/AnimatedTransitionsModifiers.kt +188 -0
- package/templates/android/MediaTemplate/app/src/main/kotlin/com/appship/media/core/animation/AnimatedTransitionsModifiers.kt +188 -0
- package/templates/android/MediaTemplate/app/src/main/kotlin/com/appship/media/features/settings/SettingsScreen.kt +3 -2
- package/templates/android/ReferenceTemplate/app/src/main/kotlin/com/appship/reference/core/animation/AnimatedTransitionsModifiers.kt +188 -0
- package/templates/android/ReferenceTemplate/app/src/main/kotlin/com/appship/reference/features/settings/SettingsScreen.kt +1 -1
- package/templates/android/ShopTemplate/app/src/main/kotlin/com/appship/shop/core/animation/AnimatedTransitionsModifiers.kt +188 -0
- package/templates/android/ShopTemplate/app/src/main/kotlin/com/appship/shop/features/cart/CartScreen.kt +3 -2
- package/templates/android/Skeleton/TESTING_MANIFEST.md +2 -1
- package/templates/android/Skeleton/app/src/main/kotlin/com/appship/skeleton/MainActivity.kt +23 -2
- package/templates/android/Skeleton/app/src/main/kotlin/com/appship/skeleton/core/animation/AnimatedTransitionsModifiers.kt +188 -0
- package/templates/android/Skeleton/app/src/main/kotlin/com/appship/skeleton/core/theme/AppearanceManager.kt +42 -0
- package/templates/android/Skeleton/app/src/main/kotlin/com/appship/skeleton/features/profile/ProfileScreen.kt +20 -8
- package/templates/android/Skeleton/tests/03_detail_screen.yaml +3 -2
- package/templates/android/Skeleton/tests/04_favorites.yaml +3 -2
- package/templates/android/Skeleton/tests/08_full_e2e.yaml +9 -2
- package/templates/android/Skeleton/tests/09_dark_mode.yaml +50 -0
- package/templates/android/SocialTemplate/app/src/main/kotlin/com/appship/social/core/animation/AnimatedTransitionsModifiers.kt +188 -0
- package/templates/android/TaskTemplate/app/src/main/kotlin/com/appship/task/core/animation/AnimatedTransitionsModifiers.kt +188 -0
- package/templates/android/TaskTemplate/app/src/main/kotlin/com/appship/task/features/settings/SettingsScreen.kt +3 -2
- package/templates/android/TrackTemplate/app/src/main/kotlin/com/appship/track/core/animation/AnimatedTransitionsModifiers.kt +188 -0
- package/templates/ios/BookTemplate/BookTemplate/Core/Animation/AnimatedTransitionsView.swift +201 -0
- package/templates/ios/ChatTemplate/ChatTemplate/Core/Animation/AnimatedTransitionsView.swift +201 -0
- package/templates/ios/DashTemplate/DashTemplate/App/AppConfig.swift +1 -0
- package/templates/ios/DashTemplate/DashTemplate/Core/Animation/AnimatedTransitionsView.swift +201 -0
- package/templates/ios/DashTemplate/DashTemplate/Core/Strings.swift +13 -0
- package/templates/ios/DashTemplate/DashTemplate.xcodeproj/project.pbxproj +32 -20
- package/templates/ios/FamilyTemplate/FamilyTemplate/Core/Animation/AnimatedTransitionsView.swift +201 -0
- package/templates/ios/FinanceTemplate/FinanceTemplate/Core/Animation/AnimatedTransitionsView.swift +201 -0
- package/templates/ios/FinanceTemplate/FinanceTemplate/Core/Strings.swift +42 -0
- package/templates/ios/FinanceTemplate/FinanceTemplate.xcodeproj/project.pbxproj +36 -30
- package/templates/ios/GameTemplate/GameTemplate/Core/Animation/AnimatedTransitionsView.swift +201 -0
- package/templates/ios/HealthTemplate/HealthTemplate/Core/Animation/AnimatedTransitionsView.swift +201 -0
- package/templates/ios/LearnTemplate/LearnTemplate/Core/Animation/AnimatedTransitionsView.swift +201 -0
- package/templates/ios/MapTemplate/MapTemplate/Core/Animation/AnimatedTransitionsView.swift +201 -0
- package/templates/ios/MediaTemplate/MediaTemplate/Core/Animation/AnimatedTransitionsView.swift +201 -0
- package/templates/ios/ReferenceTemplate/ReferenceTemplate/Core/Animation/AnimatedTransitionsView.swift +201 -0
- package/templates/ios/ReferenceTemplate/ReferenceTemplate/Core/Strings.swift +12 -0
- package/templates/ios/ReferenceTemplate/ReferenceTemplate/Features/SkeletonLoading/SkeletonLoadingView.swift +2 -37
- package/templates/ios/ShopTemplate/ShopTemplate/Core/Animation/AnimatedTransitionsView.swift +201 -0
- package/templates/ios/Skeleton/Skeleton/Core/Animation/AnimatedTransitionsView.swift +201 -0
- package/templates/ios/Skeleton/tests/08_full_e2e.yaml +4 -0
- package/templates/ios/Skeleton/tests/09_dark_mode.yaml +52 -0
- package/templates/ios/SocialTemplate/SocialTemplate/Core/Animation/AnimatedTransitionsView.swift +201 -0
- package/templates/ios/TaskTemplate/TaskTemplate/Core/Animation/AnimatedTransitionsView.swift +201 -0
- package/templates/ios/TrackTemplate/TrackTemplate/Core/Animation/AnimatedTransitionsView.swift +201 -0
- package/templates/react-native/BookTemplate/src/animation/useAnimatedList.ts +219 -2
- package/templates/react-native/BookTemplate/src/animation/useMotionPreferences.ts +23 -9
- package/templates/react-native/BookTemplate/src/screens/Profile/ProfileScreen.tsx +1 -1
- package/templates/react-native/ChatTemplate/src/animation/useAnimatedList.ts +219 -2
- package/templates/react-native/ChatTemplate/src/animation/useMotionPreferences.ts +23 -9
- package/templates/react-native/ChatTemplate/src/screens/Profile/ProfileScreen.tsx +1 -1
- package/templates/react-native/DashTemplate/src/animation/useAnimatedList.ts +219 -2
- package/templates/react-native/DashTemplate/src/animation/useMotionPreferences.ts +23 -9
- package/templates/react-native/DashTemplate/src/screens/Profile/ProfileScreen.tsx +1 -1
- package/templates/react-native/FamilyTemplate/src/animation/useAnimatedList.ts +219 -2
- package/templates/react-native/FamilyTemplate/src/animation/useMotionPreferences.ts +23 -9
- package/templates/react-native/FamilyTemplate/src/screens/Profile/ProfileScreen.tsx +1 -1
- package/templates/react-native/FinanceTemplate/src/animation/useAnimatedList.ts +219 -2
- package/templates/react-native/FinanceTemplate/src/animation/useMotionPreferences.ts +23 -9
- package/templates/react-native/FinanceTemplate/src/screens/Profile/ProfileScreen.tsx +1 -1
- package/templates/react-native/GameTemplate/src/animation/useAnimatedList.ts +219 -2
- package/templates/react-native/GameTemplate/src/animation/useMotionPreferences.ts +23 -9
- package/templates/react-native/GameTemplate/src/screens/GameDetail/GameDetailScreen.tsx +2 -1
- package/templates/react-native/GameTemplate/src/screens/Profile/ProfileScreen.tsx +1 -1
- package/templates/react-native/HealthTemplate/src/animation/useAnimatedList.ts +219 -2
- package/templates/react-native/HealthTemplate/src/animation/useMotionPreferences.ts +23 -9
- package/templates/react-native/HealthTemplate/src/screens/Profile/ProfileScreen.tsx +1 -1
- package/templates/react-native/HealthTemplate/src/screens/WorkoutDetail/WorkoutDetailScreen.tsx +1 -1
- package/templates/react-native/LearnTemplate/src/animation/useAnimatedList.ts +219 -2
- package/templates/react-native/LearnTemplate/src/animation/useMotionPreferences.ts +23 -9
- package/templates/react-native/LearnTemplate/src/screens/Profile/ProfileScreen.tsx +1 -1
- package/templates/react-native/MapTemplate/src/animation/useAnimatedList.ts +219 -2
- package/templates/react-native/MapTemplate/src/animation/useMotionPreferences.ts +23 -9
- package/templates/react-native/MapTemplate/src/screens/Map/MapScreen.tsx +14 -0
- package/templates/react-native/MapTemplate/src/screens/Profile/ProfileScreen.tsx +1 -1
- package/templates/react-native/MediaTemplate/src/animation/useAnimatedList.ts +219 -2
- package/templates/react-native/MediaTemplate/src/animation/useMotionPreferences.ts +23 -9
- package/templates/react-native/MediaTemplate/src/screens/PlaylistDetail/PlaylistDetailScreen.tsx +1 -1
- package/templates/react-native/MediaTemplate/src/screens/Profile/ProfileScreen.tsx +1 -1
- package/templates/react-native/ReferenceTemplate/src/animation/useAnimatedList.ts +219 -2
- package/templates/react-native/ReferenceTemplate/src/animation/useMotionPreferences.ts +23 -9
- package/templates/react-native/ReferenceTemplate/src/screens/Settings/SettingsScreen.tsx +1 -1
- package/templates/react-native/ShopTemplate/src/animation/useAnimatedList.ts +219 -2
- package/templates/react-native/ShopTemplate/src/animation/useMotionPreferences.ts +23 -9
- package/templates/react-native/ShopTemplate/src/screens/Profile/ProfileScreen.tsx +1 -1
- package/templates/react-native/Skeleton/TESTING_MANIFEST.md +2 -1
- package/templates/react-native/Skeleton/src/animation/useAnimatedList.ts +219 -2
- package/templates/react-native/Skeleton/src/animation/useMotionPreferences.ts +23 -9
- package/templates/react-native/Skeleton/src/screens/Profile/ProfileScreen.tsx +1 -1
- package/templates/react-native/Skeleton/tests/07_profile.yaml +3 -2
- package/templates/react-native/Skeleton/tests/08_full_e2e.yaml +12 -1
- package/templates/react-native/Skeleton/tests/09_dark_mode.yaml +46 -0
- package/templates/react-native/SocialTemplate/src/animation/useAnimatedList.ts +219 -2
- package/templates/react-native/SocialTemplate/src/animation/useMotionPreferences.ts +23 -9
- package/templates/react-native/SocialTemplate/src/screens/Feed/FeedScreen.tsx +1 -0
- package/templates/react-native/SocialTemplate/src/screens/Profile/ProfileScreen.tsx +1 -1
- package/templates/react-native/TaskTemplate/src/animation/useAnimatedList.ts +219 -2
- package/templates/react-native/TaskTemplate/src/animation/useMotionPreferences.ts +23 -9
- package/templates/react-native/TaskTemplate/src/screens/Profile/ProfileScreen.tsx +1 -1
- package/templates/react-native/TrackTemplate/src/animation/useAnimatedList.ts +219 -2
- package/templates/react-native/TrackTemplate/src/animation/useMotionPreferences.ts +23 -9
- package/templates/react-native/TrackTemplate/src/screens/Settings/SettingsScreen.tsx +1 -1
- package/templates/shared/ios/AnimatedTransitions/AnimatedTransitionsView.swift +233 -93
- package/.claude/agents/template-selector.md +0 -39
- package/.claude/skills/module-selector/SKILL.md +0 -81
- package/.claude/skills/template-selector/SKILL.md +0 -44
- package/.cursor/agents/template-selector.md +0 -52
- package/.cursor/skills/module-selector/SKILL.md +0 -135
- package/.cursor/skills/template-selector/SKILL.md +0 -123
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: bug-fixer
|
|
3
|
+
description: Reads a bug report from a previous deep-test run and systematically fixes each bug. Rebuilds the app, re-tests the fixed screens, and produces a fix report. Used in Phase 4 of --deep-test --fix or standalone via --fix.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Bug Fixer Skill
|
|
7
|
+
|
|
8
|
+
Use this skill to fix bugs documented in a bug report from a previous deep-test run. You read the report, fix each bug in the source code, rebuild, and verify the fixes.
|
|
9
|
+
|
|
10
|
+
## When to Use
|
|
11
|
+
|
|
12
|
+
- As Phase 4 of the `--deep-test --fix` pipeline (after testing phases complete)
|
|
13
|
+
- Standalone via the `--fix` command (reads an existing bug report without re-testing)
|
|
14
|
+
- When you have a `reports/11-bug-report.md` with documented bugs to fix
|
|
15
|
+
|
|
16
|
+
## Context You Need
|
|
17
|
+
|
|
18
|
+
- **App directory** — path under `output/` (e.g., `output/pawspa-ios/`)
|
|
19
|
+
- **Platform** — `ios`, `android`, or `react-native`
|
|
20
|
+
- **App name** — display name
|
|
21
|
+
- **Bundle ID** — e.g., `com.pawspa.app`
|
|
22
|
+
- **Bug report** — `reports/11-bug-report.md` with categorized bugs
|
|
23
|
+
- **Build artifact path** — for re-testing after fixes (may need to rebuild)
|
|
24
|
+
|
|
25
|
+
## Instructions
|
|
26
|
+
|
|
27
|
+
### Step 1 — Read and Prioritize Bugs
|
|
28
|
+
|
|
29
|
+
1. Read `output/{app-name}/reports/11-bug-report.md`
|
|
30
|
+
2. Parse all bugs (both `[EXPLORATORY]` and `[STRUCTURED]` tagged)
|
|
31
|
+
3. Sort by severity: P0 (Critical) → P1 (High) → P2 (Medium) → P3 (Low)
|
|
32
|
+
4. Triage each bug into one of three categories:
|
|
33
|
+
- **FIX** — can be fixed in the source code
|
|
34
|
+
- **DEFER** — requires major refactoring or design change (document recommendation instead)
|
|
35
|
+
- **SKIP** — false positive or cosmetic non-issue
|
|
36
|
+
|
|
37
|
+
### Step 2 — Locate Source Files
|
|
38
|
+
|
|
39
|
+
For each bug marked FIX:
|
|
40
|
+
|
|
41
|
+
#### For `[STRUCTURED]` bugs:
|
|
42
|
+
- The bug report typically includes the file path — open it directly
|
|
43
|
+
- Cross-reference with the test plan (`reports/10-test-plan.md`) for additional context
|
|
44
|
+
|
|
45
|
+
#### For `[EXPLORATORY]` bugs:
|
|
46
|
+
- Use the screen name and element description to find the relevant source file
|
|
47
|
+
- **iOS:** Search for `{ScreenName}View.swift` and `{ScreenName}ViewModel.swift`
|
|
48
|
+
- **Android:** Search for `{ScreenName}Screen.kt` and `{ScreenName}ViewModel.kt`
|
|
49
|
+
- **React Native:** Search for `{ScreenName}Screen.tsx` and `use{ScreenName}.ts`
|
|
50
|
+
- For content bugs: also check `AppConfig`, `MockDataProvider`, and string resources
|
|
51
|
+
|
|
52
|
+
#### For `[A11Y]` bugs:
|
|
53
|
+
- Open the View file for the affected screen
|
|
54
|
+
- Search for the element type mentioned in the bug (Image, Button, etc.)
|
|
55
|
+
- Add accessibility modifiers/attributes
|
|
56
|
+
|
|
57
|
+
### Step 3 — Fix Each Bug
|
|
58
|
+
|
|
59
|
+
Apply fixes in priority order (P0 first, P3 last). For each bug:
|
|
60
|
+
|
|
61
|
+
1. **Read the source file(s)** involved
|
|
62
|
+
2. **Understand the root cause** — don't just patch the symptom
|
|
63
|
+
3. **Apply the minimal fix** — change as little code as possible to fix the bug
|
|
64
|
+
4. **Document the fix** — record what you changed and why
|
|
65
|
+
|
|
66
|
+
#### Fix Patterns by Bug Type
|
|
67
|
+
|
|
68
|
+
**`[VISUAL]` — Layout/visual issues:**
|
|
69
|
+
- Truncation: add `lineLimit`, adjust `frame`, use `minimumScaleFactor`
|
|
70
|
+
- Overlap: fix `ZStack` ordering, add padding/spacing, fix constraint priorities
|
|
71
|
+
- Spacing: adjust `padding`, `spacing` parameters
|
|
72
|
+
|
|
73
|
+
**`[A11Y]` — Accessibility issues:**
|
|
74
|
+
- Missing label: add `.accessibilityLabel("Description")` (iOS) or `contentDescription` (Android) or `accessibilityLabel` (React Native)
|
|
75
|
+
- Missing image description: add `.accessibilityLabel` to Image views
|
|
76
|
+
- Small touch targets: increase `frame` size or add `.contentShape(Rectangle())` + padding
|
|
77
|
+
|
|
78
|
+
**`[UX]` — Dead buttons / broken navigation:**
|
|
79
|
+
- Dead button: check the action handler — likely missing navigation call or action dispatch
|
|
80
|
+
- Broken navigation: verify `NavigationLink` destination or `navigate()` call
|
|
81
|
+
- Wrong destination: fix the navigation target
|
|
82
|
+
|
|
83
|
+
**`[CONTENT]` — Template leftovers / wrong text:**
|
|
84
|
+
- Search the file for the leftover text and replace with domain-appropriate text
|
|
85
|
+
- Check `AppConfig` and `MockDataProvider` for the source of the wrong text
|
|
86
|
+
- Check string resource files if the text comes from a resource
|
|
87
|
+
|
|
88
|
+
**`[STATE]` — State not persisting:**
|
|
89
|
+
- Check ViewModel — is the state being saved after the action?
|
|
90
|
+
- Check MockDataProvider — is the update method being called?
|
|
91
|
+
- Check binding: is the View observing the ViewModel correctly?
|
|
92
|
+
|
|
93
|
+
**`[CRASH]` — App crashes:**
|
|
94
|
+
- Look for force unwraps (`!`), array index out of bounds, nil reference
|
|
95
|
+
- Add nil checks, use optional binding, add bounds checking
|
|
96
|
+
- If crash is in navigation, check for missing views or circular dependencies
|
|
97
|
+
|
|
98
|
+
### Step 4 — Rebuild the App
|
|
99
|
+
|
|
100
|
+
After all fixes are applied:
|
|
101
|
+
|
|
102
|
+
1. Follow the `build-tester` skill to rebuild the app
|
|
103
|
+
2. If the build fails, fix the compilation errors (your fixes may have introduced syntax issues)
|
|
104
|
+
3. Maximum **3 rebuild cycles** for build errors
|
|
105
|
+
|
|
106
|
+
### Step 5 — Verify Fixes
|
|
107
|
+
|
|
108
|
+
After a successful build:
|
|
109
|
+
|
|
110
|
+
1. Boot a simulator (or use an existing one if already running)
|
|
111
|
+
2. Install the new build artifact
|
|
112
|
+
3. Launch the app
|
|
113
|
+
4. For each fixed bug, navigate to the affected screen and verify:
|
|
114
|
+
- The specific issue is resolved
|
|
115
|
+
- No new issues were introduced on that screen
|
|
116
|
+
- The fix didn't break navigation to/from that screen
|
|
117
|
+
|
|
118
|
+
Use ai-tester MCP tools for verification:
|
|
119
|
+
```
|
|
120
|
+
inspect({ platform: "{platform}", app: "{bundleId}", deviceName: "{sim}" })
|
|
121
|
+
act({ action: "tap", ... })
|
|
122
|
+
assert({ type: "visible", ... })
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
### Step 6 — Write Fix Report
|
|
126
|
+
|
|
127
|
+
Write `output/{app-name}/reports/12-fix-report.md`:
|
|
128
|
+
|
|
129
|
+
```markdown
|
|
130
|
+
# Fix Report
|
|
131
|
+
|
|
132
|
+
## Summary
|
|
133
|
+
- Bugs in report: {total}
|
|
134
|
+
- Fixed: {N}
|
|
135
|
+
- Deferred: {N}
|
|
136
|
+
- Skipped (false positive): {N}
|
|
137
|
+
|
|
138
|
+
## Bugs Fixed
|
|
139
|
+
|
|
140
|
+
### BUG-{NNN}: [{SEVERITY}][{SOURCE}][{TAG}] {description}
|
|
141
|
+
- **Root cause:** {what was actually wrong}
|
|
142
|
+
- **Fix:** {what you changed}
|
|
143
|
+
- **Files modified:** {list of files}
|
|
144
|
+
- **Verified:** PASS / FAIL
|
|
145
|
+
|
|
146
|
+
### BUG-{NNN}: ...
|
|
147
|
+
...
|
|
148
|
+
|
|
149
|
+
## Bugs Deferred
|
|
150
|
+
|
|
151
|
+
### BUG-{NNN}: [{SEVERITY}][{SOURCE}][{TAG}] {description}
|
|
152
|
+
- **Reason:** {why this can't be fixed in a quick pass}
|
|
153
|
+
- **Recommendation:** {what should be done to fix it properly}
|
|
154
|
+
|
|
155
|
+
## Rebuild Result
|
|
156
|
+
- Build: PASS / FAIL
|
|
157
|
+
- Build cycles: {N}
|
|
158
|
+
|
|
159
|
+
## Verification Result
|
|
160
|
+
- Fixes verified: {N}/{total fixed}
|
|
161
|
+
- Regressions found: {N}
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
Update `summary.json` — add a step entry:
|
|
165
|
+
|
|
166
|
+
```json
|
|
167
|
+
{
|
|
168
|
+
"step": 12,
|
|
169
|
+
"name": "bug-fix",
|
|
170
|
+
"result": "PASS",
|
|
171
|
+
"bugsTotal": 0,
|
|
172
|
+
"bugsFixed": 0,
|
|
173
|
+
"bugsDeferred": 0,
|
|
174
|
+
"bugsSkipped": 0,
|
|
175
|
+
"rebuildCycles": 0,
|
|
176
|
+
"verificationsPass": 0
|
|
177
|
+
}
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
## Important Rules
|
|
181
|
+
|
|
182
|
+
- **Fix in priority order** — P0 first, P3 last. If you run out of fix cycles, at least the critical bugs are fixed.
|
|
183
|
+
- **Minimal fixes** — change as little code as possible. Don't refactor unrelated code.
|
|
184
|
+
- **Preserve architecture** — keep MVVM separation, don't merge View and ViewModel code
|
|
185
|
+
- **Preserve MockDataProvider** — update data through the provider, don't hardcode data in views
|
|
186
|
+
- **Maximum 3 rebuild cycles** — if you can't get a clean build in 3 tries, stop and document remaining issues
|
|
187
|
+
- **ONLY write files under `output/`** — never modify templates or skills
|
|
188
|
+
- If a bug fix requires adding a new dependency, DEFER it instead — no new dependencies allowed
|
|
189
|
+
- If a bug fix would require significant redesign (>50 lines changed across >3 files), DEFER it with a recommendation
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: catalog-analyzer
|
|
3
|
+
description: Selects the best template from CATALOG.md and the best shared modules from MODULES_CATALOG.md in a single pass. Uses the selected template to boost module selection accuracy via the "Relevant Templates" column.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Catalog Analyzer Skill
|
|
7
|
+
|
|
8
|
+
Use this skill to select the best template AND the best shared modules for the user's app in one pass.
|
|
9
|
+
|
|
10
|
+
## When to Use
|
|
11
|
+
|
|
12
|
+
- At Step 0 of the AppAgent workflow, in parallel with prompt validation and design brand selection
|
|
13
|
+
- When you need to pick both a starting template and shared modules
|
|
14
|
+
- Before cloning any template to `output/`
|
|
15
|
+
|
|
16
|
+
## Context You Need
|
|
17
|
+
|
|
18
|
+
- **User description** — what kind of app the user wants to build
|
|
19
|
+
- **Platform** — `ios`, `android`, or `react-native`
|
|
20
|
+
- **Sanitized description** — from the prompt-validator skill (if available)
|
|
21
|
+
|
|
22
|
+
## Instructions
|
|
23
|
+
|
|
24
|
+
### Phase 1 — Template Selection
|
|
25
|
+
|
|
26
|
+
#### Step 1 — Read the Template Catalog
|
|
27
|
+
|
|
28
|
+
Read `templates/CATALOG.md` thoroughly. Understand each template's:
|
|
29
|
+
- Feature set and architecture
|
|
30
|
+
- "Best-For Keywords" in the decision matrix
|
|
31
|
+
- "Best match when" criteria
|
|
32
|
+
- "NOT a match when" exclusion rules
|
|
33
|
+
|
|
34
|
+
#### Step 2 — Score Each Template
|
|
35
|
+
|
|
36
|
+
For each template in the catalog:
|
|
37
|
+
1. Score it against the user's description using the "Best-For Keywords"
|
|
38
|
+
2. Check the "Best match when" criteria — how many match?
|
|
39
|
+
3. Apply the "NOT a match when" rules — does any exclusion trigger?
|
|
40
|
+
4. Consider navigation pattern similarity (tabs, lists, detail screens)
|
|
41
|
+
|
|
42
|
+
#### Step 3 — Handle Edge Cases
|
|
43
|
+
|
|
44
|
+
- If the app spans multiple categories, check the "Hybrid Apps" table in the catalog
|
|
45
|
+
- If no template is a strong match, follow the "When No Template Fits" guidance — pick the template with the most similar navigation and screen patterns
|
|
46
|
+
- Consider the platform (iOS vs Android vs React Native) — all templates are available on all three platforms. The same template names exist under `templates/ios/`, `templates/android/`, and `templates/react-native/`
|
|
47
|
+
|
|
48
|
+
#### Step 4 — Select ONE Template
|
|
49
|
+
|
|
50
|
+
Choose exactly ONE primary template. Determine confidence:
|
|
51
|
+
- **high** — multiple criteria match, clear winner
|
|
52
|
+
- **medium** — good fit but some aspects don't align perfectly
|
|
53
|
+
- **low** — no great match, picking the closest option
|
|
54
|
+
|
|
55
|
+
If hybrid is needed, identify what to borrow from a secondary template.
|
|
56
|
+
|
|
57
|
+
**Important:** Features covered by shared modules (consent, paywall, push notifications, etc.) should NOT affect template scoring — they are handled by module selection in Phase 2.
|
|
58
|
+
|
|
59
|
+
### Phase 2 — Module Selection
|
|
60
|
+
|
|
61
|
+
Uses the template selected in Phase 1 for improved accuracy.
|
|
62
|
+
|
|
63
|
+
#### Step 5 — Read the Modules Catalog
|
|
64
|
+
|
|
65
|
+
Read `templates/shared/MODULES_CATALOG.md` thoroughly. Understand each module's:
|
|
66
|
+
- "Best-For Keywords" in the decision matrix
|
|
67
|
+
- "Relevant Templates" column
|
|
68
|
+
- Module dependencies
|
|
69
|
+
|
|
70
|
+
#### Step 6 — Match Modules by Keywords + Relevant Templates
|
|
71
|
+
|
|
72
|
+
For every module in the catalog:
|
|
73
|
+
1. Compare its "Best-For Keywords" against the user's description (primary signal)
|
|
74
|
+
2. Check if the **selected template** (from Phase 1) is in the "Relevant Templates" column (boost signal)
|
|
75
|
+
3. If keyword matches AND template matches → **strong include**
|
|
76
|
+
4. If keyword matches but template doesn't match → include with lower confidence
|
|
77
|
+
5. If no keyword match but template matches → consider if implied by domain
|
|
78
|
+
|
|
79
|
+
**Selection guidance:**
|
|
80
|
+
- Aim for **5-15 modules** that genuinely match the app's features
|
|
81
|
+
- Don't over-select — only include modules the app will actually use
|
|
82
|
+
- Don't under-select — if a keyword matches, the module is likely needed
|
|
83
|
+
- Consider implicit needs (e.g., a "shopping app" implies payment, a "social app" implies sharing)
|
|
84
|
+
|
|
85
|
+
#### Step 7 — BaaS Module Selection
|
|
86
|
+
|
|
87
|
+
**BaaS module selection (FirebaseProvider, SupabaseProvider, CachedRepository):**
|
|
88
|
+
- Select FirebaseProvider OR SupabaseProvider (not both) when the description mentions: "real data", "users", "auth", "login", "sign up", "accounts", "cloud", "sync", "backend", "database", "multi-device", "server"
|
|
89
|
+
- Default (no BaaS keywords): NO BaaS module. The app uses `localStorage` (Core Data / Room) by default.
|
|
90
|
+
- If SupabaseProvider is selected, also add CachedRepository (Supabase has no built-in offline cache)
|
|
91
|
+
- If FirebaseProvider is selected, do NOT add CachedRepository (Firestore has built-in offline persistence)
|
|
92
|
+
- Prefer Firebase for "Google ecosystem" keywords, Supabase for "PostgreSQL", "open source", "self-hosted" keywords
|
|
93
|
+
- When both would fit equally, prefer Firebase (more mature mobile SDK)
|
|
94
|
+
|
|
95
|
+
#### Step 8 — Check Dependencies
|
|
96
|
+
|
|
97
|
+
Verify that included modules have their dependencies met:
|
|
98
|
+
- Paywall depends on BiometricAuth (optional)
|
|
99
|
+
- AccountDeletion depends on ConsentPrivacy
|
|
100
|
+
- PushNotifications depends on ConsentPrivacy
|
|
101
|
+
- PaymentMethods depends on Paywall
|
|
102
|
+
- GamificationKit depends on ChartsLibrary
|
|
103
|
+
- NotificationCenter depends on PushNotifications
|
|
104
|
+
- CloudSync depends on NetworkBanner
|
|
105
|
+
- LiveActivities depends on PushNotifications
|
|
106
|
+
- SupabaseProvider depends on CachedRepository (for offline support)
|
|
107
|
+
- FirebaseProvider depends on ErrorHandling (optional), NetworkBanner (optional)
|
|
108
|
+
- SupabaseProvider depends on ErrorHandling (optional), NetworkBanner (optional)
|
|
109
|
+
|
|
110
|
+
If a dependency is missing, add it.
|
|
111
|
+
|
|
112
|
+
#### Step 9 — Animation & Sensory Module Heuristics
|
|
113
|
+
|
|
114
|
+
When the user description contains words like **"stunning", "beautiful", "premium feel", "polished", "delightful", "smooth", "animated", "modern", "sleek", "creative", "artistic", "colorful", "vibrant", "elegant", "stylish", "cool", "interactive"**, consider these signal-word matches:
|
|
115
|
+
|
|
116
|
+
| Signal Word | Consider Modules |
|
|
117
|
+
|---|---|
|
|
118
|
+
| stunning, beautiful, premium, polished | MicroInteractions, AnimatedTransitions, CelebrationEffects |
|
|
119
|
+
| haptic, tactile, vibration, feedback | HapticEngine |
|
|
120
|
+
| sound, audio, click sound, chime | AudioFeedback |
|
|
121
|
+
| parallax, scroll effect, header animation | ScrollEffects |
|
|
122
|
+
| confetti, celebration, achievement | CelebrationEffects |
|
|
123
|
+
| onboarding, walkthrough, tutorial | AnimatedOnboarding |
|
|
124
|
+
| transitions, hero, card flip, animated navigation | AnimatedTransitions |
|
|
125
|
+
| micro-animations, bounce, press, stagger | MicroInteractions |
|
|
126
|
+
|
|
127
|
+
**Auto-include rule:** When ANY of HapticEngine, AudioFeedback, ScrollEffects, CelebrationEffects, MicroInteractions, AnimatedTransitions, or AnimatedOnboarding is selected, **MotionPreferences is automatically added** (it provides the accessibility foundation — reduce motion support).
|
|
128
|
+
|
|
129
|
+
**Visual liveliness rule:** For apps that should feel vibrant and alive (most consumer apps — shopping, social, food, fitness, travel, art, music, creative, lifestyle), automatically include **MicroInteractions** (press feedback, bounces) unless the domain explicitly demands restraint (medical, legal, finance). This ensures every app gets basic visual polish through press feedback and toggle animations.
|
|
130
|
+
|
|
131
|
+
#### Step 10 — Final Module List
|
|
132
|
+
|
|
133
|
+
Produce the final list of selected modules with reasoning for each.
|
|
134
|
+
|
|
135
|
+
## Report Output
|
|
136
|
+
|
|
137
|
+
Write the report to `output/{app-name}/reports/02-catalog-analysis.md`:
|
|
138
|
+
|
|
139
|
+
```markdown
|
|
140
|
+
# Catalog Analysis Report
|
|
141
|
+
|
|
142
|
+
**Step:** 0
|
|
143
|
+
**Skill:** catalog-analyzer
|
|
144
|
+
**Timestamp:** {ISO 8601}
|
|
145
|
+
**Result:** PASS
|
|
146
|
+
|
|
147
|
+
## Template Selection
|
|
148
|
+
|
|
149
|
+
**Selected Template:** {TemplateName}
|
|
150
|
+
**Confidence:** high | medium | low
|
|
151
|
+
|
|
152
|
+
### Reasoning
|
|
153
|
+
|
|
154
|
+
{2-3 sentences explaining why this template was chosen}
|
|
155
|
+
|
|
156
|
+
### Scoring
|
|
157
|
+
|
|
158
|
+
| Template | Score | Match Criteria | Exclusions |
|
|
159
|
+
|----------|-------|---------------|------------|
|
|
160
|
+
| {name} | {/10} | {matched} | {any} |
|
|
161
|
+
|
|
162
|
+
### Hybrid Recommendation
|
|
163
|
+
|
|
164
|
+
**Borrow From:** {other template name} or "none"
|
|
165
|
+
**Hybrid Notes:** {what to borrow and why} or "n/a"
|
|
166
|
+
|
|
167
|
+
## Module Selection — {N} total
|
|
168
|
+
|
|
169
|
+
| Module | Matched Keywords | Template Boost | Reason |
|
|
170
|
+
|--------|-----------------|----------------|--------|
|
|
171
|
+
| {name} | {keywords} | yes/no | {why included} |
|
|
172
|
+
...
|
|
173
|
+
|
|
174
|
+
### Excluded Modules
|
|
175
|
+
|
|
176
|
+
| Module | Reason for Exclusion |
|
|
177
|
+
|--------|---------------------|
|
|
178
|
+
...
|
|
179
|
+
|
|
180
|
+
### Dependencies Added
|
|
181
|
+
|
|
182
|
+
| Module | Added Because |
|
|
183
|
+
|--------|--------------|
|
|
184
|
+
| {name} | Required by {other module} |
|
|
185
|
+
...
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
Update `output/{app-name}/reports/summary.json` — read the file, append this step.
|
|
189
|
+
|
|
190
|
+
**Timing:** Record the current timestamp when you begin this skill. When writing the step entry, set `"startedAt"` to that timestamp (ISO 8601) and `"durationSeconds"` to the elapsed seconds.
|
|
191
|
+
|
|
192
|
+
```json
|
|
193
|
+
{
|
|
194
|
+
"step": 0,
|
|
195
|
+
"name": "catalog-analysis",
|
|
196
|
+
"startedAt": "{ISO 8601 timestamp}",
|
|
197
|
+
"durationSeconds": 0,
|
|
198
|
+
"result": "PASS",
|
|
199
|
+
"reportFile": "02-catalog-analysis.md",
|
|
200
|
+
"template": "{TemplateName}",
|
|
201
|
+
"confidence": "high|medium|low",
|
|
202
|
+
"borrowFrom": "{other template or null}",
|
|
203
|
+
"modulesSelected": {N}
|
|
204
|
+
}
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
Also update the top-level `"template"` field in summary.json.
|
|
208
|
+
|
|
209
|
+
## Important Rules
|
|
210
|
+
|
|
211
|
+
- This skill is READ-ONLY — do NOT create, edit, or delete any app source files during this step
|
|
212
|
+
- The ONLY files you write are the report files in `reports/`
|
|
213
|
+
- Always recommend exactly ONE primary template
|
|
214
|
+
- If confidence is "low", explain what aspects don't fit well
|
|
215
|
+
- Do NOT recommend building from scratch — always pick the closest template
|
|
216
|
+
- Consider the platform when relevant — all templates are available on iOS, Android, and React Native
|
|
217
|
+
- For React Native, templates use TypeScript + React Navigation + custom hooks (MVVM-hook pattern)
|
|
218
|
+
- Features covered by shared modules should NOT affect template scoring — they are handled in Phase 2
|
|
219
|
+
- No modules are auto-included — every module must earn its place via keyword matching (exception: MotionPreferences is auto-included when any animation/sensory module is selected)
|
|
220
|
+
- Aim for 5-15 modules — be selective, not exhaustive
|
|
221
|
+
- Module integration happens later during customization (Steps 4-5) — this skill only produces the selection list
|
|
222
|
+
- The "Relevant Templates" column is a **boost signal**, not a hard filter — a module can be selected without template match if keywords are strong
|
|
@@ -9,8 +9,8 @@ Use this skill to produce a single, comprehensive customization manifest before
|
|
|
9
9
|
|
|
10
10
|
## When to Use
|
|
11
11
|
|
|
12
|
-
- After Step 0 (Prompt Validation
|
|
13
|
-
- After Step 1 (Clone) and Step
|
|
12
|
+
- After Step 0 (Prompt Validation, Catalog Analysis, Design Brand Selection) is complete
|
|
13
|
+
- After Step 1 (Clone) and Step 2 (Rename) are complete — the output app directory exists
|
|
14
14
|
- BEFORE any code modifications (AppConfig, MockDataProvider, screens, theme)
|
|
15
15
|
|
|
16
16
|
## Context You Need
|
|
@@ -23,7 +23,7 @@ Use this skill to produce a single, comprehensive customization manifest before
|
|
|
23
23
|
- **Selected template** — which template was cloned (e.g., "TrackTemplate")
|
|
24
24
|
- **Selected design brand** — brand name and file path (e.g., "VibrantPlayful", `designs/brands/vibrant-playful.md`)
|
|
25
25
|
- **Adaptation suggestions** — from the design-selector (if any)
|
|
26
|
-
- **Selected modules** — from the
|
|
26
|
+
- **Selected modules** — from the catalog analysis report (`reports/02-catalog-analysis.md`)
|
|
27
27
|
|
|
28
28
|
## Instructions
|
|
29
29
|
|
|
@@ -37,7 +37,7 @@ Read these files in parallel (batch your read calls):
|
|
|
37
37
|
4. **MockDataProvider** — find and read the MockDataProvider file — understand seed data structure, entity types, item counts
|
|
38
38
|
5. **Template Features directory** — list all screen files in `Features/` (iOS), `features/` (Android), or `src/screens/` (React Native)
|
|
39
39
|
6. **TESTING_MANIFEST.md** — `output/{app-name}/TESTING_MANIFEST.md` — all test IDs, screens, element counts
|
|
40
|
-
7. **
|
|
40
|
+
7. **Catalog analysis report** — `output/{app-name}/reports/02-catalog-analysis.md` — which template and shared modules were selected
|
|
41
41
|
|
|
42
42
|
### Step 2 — Produce the Design Brief
|
|
43
43
|
|
|
@@ -165,7 +165,7 @@ DATA REPOSITORY:
|
|
|
165
165
|
|
|
166
166
|
### Step 6 — Produce Module Integration Plan
|
|
167
167
|
|
|
168
|
-
Read the
|
|
168
|
+
Read the "Module Selection" section from `output/{app-name}/reports/02-catalog-analysis.md`. For each selected module, plan how it connects to the app:
|
|
169
169
|
|
|
170
170
|
```
|
|
171
171
|
MODULE INTEGRATION PLAN:
|
|
@@ -271,6 +271,39 @@ Write the complete manifest to `output/{app-name}/reports/customization-manifest
|
|
|
271
271
|
- Spacing: {scale}
|
|
272
272
|
- Icon style: {filled|outlined}
|
|
273
273
|
|
|
274
|
+
### Visual Polish Plan
|
|
275
|
+
|
|
276
|
+
#### Shadow Style
|
|
277
|
+
| Token | Value |
|
|
278
|
+
|-------|-------|
|
|
279
|
+
| Shadow type | {colored / neutral} |
|
|
280
|
+
| Shadow color | {primary at X% / black at X%} |
|
|
281
|
+
| Shadow blur | {X}pt |
|
|
282
|
+
| Shadow y-offset | {X}pt |
|
|
283
|
+
| Floating element shadow | {deeper: blur Xpt, y Xpt} |
|
|
284
|
+
|
|
285
|
+
#### Gradient Usage
|
|
286
|
+
- Hero sections: {primary-to-secondary gradient / subtle gradient / none}
|
|
287
|
+
- CTA buttons: {gradient / solid}
|
|
288
|
+
- Section backgrounds: {subtle gradient / solid}
|
|
289
|
+
|
|
290
|
+
#### Animation Choreography
|
|
291
|
+
| Token | Value |
|
|
292
|
+
|-------|-------|
|
|
293
|
+
| Spring preset | {bouncy / smooth / snappy} |
|
|
294
|
+
| Spring response | {X}s |
|
|
295
|
+
| Spring damping | {X} |
|
|
296
|
+
| Stagger delay | {X}ms per item |
|
|
297
|
+
| Press scale | {0.95} |
|
|
298
|
+
| Button feedback | {scale + haptic (light)} |
|
|
299
|
+
| Favorite toggle | {heart bounce + haptic} |
|
|
300
|
+
| Success event | {confetti / sparkle / none} |
|
|
301
|
+
|
|
302
|
+
#### Depth & Material
|
|
303
|
+
- Sheet backgrounds: {glass blur / solid / gradient}
|
|
304
|
+
- Navigation bar: {transparent+blur / solid / gradient}
|
|
305
|
+
- Tab bar: {blur / solid / elevated}
|
|
306
|
+
|
|
274
307
|
### Icon Mapping — Tabs
|
|
275
308
|
| Tab | Label | iOS (SF Symbol) | Android (Material) |
|
|
276
309
|
|-----|-------|-----------------|-------------------|
|
|
@@ -364,11 +397,25 @@ Write the complete manifest to `output/{app-name}/reports/customization-manifest
|
|
|
364
397
|
{List selected animation/sensory modules and their purpose in this app}
|
|
365
398
|
|
|
366
399
|
### Per-Screen Animation Modifiers
|
|
400
|
+
|
|
401
|
+
**Built-in modifiers (always available, no module required):**
|
|
402
|
+
- `.staggeredAppear(index:)` — staggered fade+slide for list items
|
|
403
|
+
- `.slideIn()` — slide-from-bottom on appear
|
|
404
|
+
- `.slideAndFade()` — slide-from-side + fade on appear
|
|
405
|
+
- `.scaleOnPress()` — scale-down press feedback (0.95 + spring)
|
|
406
|
+
- `.hapticFeedback()` / `.hapticFeedback(.medium)` — haptic on tap
|
|
407
|
+
- `.bounceOnChange(isActive:)` — scale bounce on state toggle
|
|
408
|
+
- `.cardShadow()` — subtle shadow for cards/elevated surfaces
|
|
409
|
+
- `.elevatedShadow()` — deeper shadow for FABs/floating elements
|
|
410
|
+
- `.shimmer()` — shimmer loading overlay for skeleton/placeholder views
|
|
411
|
+
- `.pulse()` — repeating scale pulse for live indicators, notification badges
|
|
412
|
+
- `.heartBounce(isActive:)` — bounce-on-activate for favorite/like buttons
|
|
413
|
+
|
|
367
414
|
| Screen File | Modifiers to Apply | Notes |
|
|
368
415
|
|---|---|---|
|
|
369
|
-
| HomeView.swift | `.
|
|
370
|
-
| DetailView.swift | `.slideAndFade()`, `.
|
|
371
|
-
| CreateView.swift | `.scaleOnPress()`, `.hapticFeedback(.
|
|
416
|
+
| HomeView.swift | `.staggeredAppear(index:)`, `.cardShadow()` | List items stagger in, cards have shadows |
|
|
417
|
+
| DetailView.swift | `.slideAndFade()`, `.cardShadow()` | Content slides in with shadows |
|
|
418
|
+
| CreateView.swift | `.scaleOnPress()`, `.hapticFeedback(.medium)` on save | Button feedback |
|
|
372
419
|
| {screen} | {modifiers} | {notes} |
|
|
373
420
|
...
|
|
374
421
|
|
|
@@ -9,7 +9,7 @@ Use this skill to select the best visual design brand for the user's app.
|
|
|
9
9
|
|
|
10
10
|
## When to Use
|
|
11
11
|
|
|
12
|
-
- At Step
|
|
12
|
+
- At Step 0 of the AppAgent workflow, in parallel with prompt validation and catalog analysis
|
|
13
13
|
- When you need to pick a visual identity from the design brand catalog
|
|
14
14
|
- Before applying design tokens to the app
|
|
15
15
|
|
|
@@ -18,7 +18,7 @@ Use this skill to select the best visual design brand for the user's app.
|
|
|
18
18
|
- **App name** — display name (e.g., "PawSpa")
|
|
19
19
|
- **App description** — what the app does and who it's for
|
|
20
20
|
- **Platform** — `ios` or `android`
|
|
21
|
-
- **App template** — which template was selected (
|
|
21
|
+
- **App template** (optional) — which template was selected, if available (may not be when running in parallel)
|
|
22
22
|
- **User style preferences** — any explicit color, style, or visual direction the user mentioned (may be empty)
|
|
23
23
|
|
|
24
24
|
## Instructions
|
|
@@ -40,6 +40,7 @@ For each brand in the catalog:
|
|
|
40
40
|
3. Apply "NOT a match when" exclusion rules
|
|
41
41
|
4. Follow the "Brand Selection Guide" decision flow
|
|
42
42
|
5. Consider the "Hybrid Brands" table if the app spans categories
|
|
43
|
+
6. **Energy bias**: When multiple brands score equally, prefer the one with higher Energy score (from the catalog's decision matrix). For ambiguous domains (not explicitly medical, finance, or corporate), bias toward brands with Energy >= 3. Apps should feel vibrant and alive by default — only choose low-energy brands when the domain clearly demands restraint.
|
|
43
44
|
|
|
44
45
|
### Step 3 — Handle User Style Preferences
|
|
45
46
|
|
|
@@ -59,7 +60,7 @@ Write the report to `output/{app-name}/reports/03-design-brand.md`:
|
|
|
59
60
|
```markdown
|
|
60
61
|
# Design Brand Report
|
|
61
62
|
|
|
62
|
-
**Step:**
|
|
63
|
+
**Step:** 0
|
|
63
64
|
**Skill:** design-selector
|
|
64
65
|
**Timestamp:** {ISO 8601}
|
|
65
66
|
**Result:** PASS
|
|
@@ -99,7 +100,7 @@ Update `output/{app-name}/reports/summary.json` — read the file, append this s
|
|
|
99
100
|
|
|
100
101
|
```json
|
|
101
102
|
{
|
|
102
|
-
"step":
|
|
103
|
+
"step": 0,
|
|
103
104
|
"name": "design-brand",
|
|
104
105
|
"startedAt": "{ISO 8601 timestamp}",
|
|
105
106
|
"durationSeconds": 0,
|
|
@@ -121,4 +122,4 @@ Also update the top-level `"designBrand"` field in summary.json.
|
|
|
121
122
|
- Do NOT recommend building a custom brand from scratch — always start with a catalog brand
|
|
122
123
|
- If the user mentioned specific colors, put them in adaptations — never ignore user style preferences
|
|
123
124
|
- The brand file path must use the exact filename from the catalog (kebab-case .md)
|
|
124
|
-
-
|
|
125
|
+
- If the app template is available, consider it as a weak hint — a FinanceTemplate naturally pairs with CorporateProfessional, but the user description keywords are the primary signal
|
|
@@ -9,9 +9,9 @@ Use this skill to produce a complete design brief for a newly cloned app. The pr
|
|
|
9
9
|
|
|
10
10
|
## When to Use
|
|
11
11
|
|
|
12
|
-
- After the `design-selector` subagent has picked a brand (Step
|
|
13
|
-
- Before AppConfig customization (Step
|
|
14
|
-
- Before the platform customizer runs (Step
|
|
12
|
+
- After the `design-selector` subagent has picked a brand (Step 0 complete)
|
|
13
|
+
- Before AppConfig customization (Step 4) — the design brief feeds into CUSTOMIZE:THEME
|
|
14
|
+
- Before the platform customizer runs (Step 5) — it applies the tokens to code
|
|
15
15
|
|
|
16
16
|
## What You Produce
|
|
17
17
|
|
|
@@ -39,8 +39,9 @@ If the `design-selector` provided a brand:
|
|
|
39
39
|
3. Extract layout tokens (corner radius, spacing scale, card elevation, border width)
|
|
40
40
|
4. Extract typography settings (font family, heading weight, body weight, body size)
|
|
41
41
|
5. Extract icon style preferences (filled vs outlined, line weight)
|
|
42
|
-
6.
|
|
43
|
-
7. Note any
|
|
42
|
+
6. Extract **Motion & Effects** tokens (default spring, press scale, stagger delay, shadow style, gradient usage, depth approach, haptic policy)
|
|
43
|
+
7. Note any brand-specific do's, don'ts, and overrides
|
|
44
|
+
8. Note any ADAPT suggestions from the design-selector
|
|
44
45
|
|
|
45
46
|
**If the design-selector suggested adaptations** (in the ADAPT field):
|
|
46
47
|
- Apply color overrides (e.g., "shift primary to teal for pet domain")
|
|
@@ -256,7 +257,7 @@ ACCESSIBILITY:
|
|
|
256
257
|
|
|
257
258
|
After producing the design brief, the tokens are applied to specific files in subsequent steps. All templates follow a standardized theme structure:
|
|
258
259
|
|
|
259
|
-
### iOS (applied by ios-customizer in Step
|
|
260
|
+
### iOS (applied by ios-customizer in Step 5)
|
|
260
261
|
|
|
261
262
|
| Token Category | File | Structure |
|
|
262
263
|
|---------------|------|-----------|
|
|
@@ -268,7 +269,7 @@ After producing the design brief, the tokens are applied to specific files in su
|
|
|
268
269
|
| Domain-specific colors | `Core/Theme/Colors.swift` | Semantic color tokens (e.g., `Color.incomeColor`, `Color.starFilled`) |
|
|
269
270
|
| Gradient definitions | `Core/Theme/Colors.swift` | `LinearGradient` extensions |
|
|
270
271
|
|
|
271
|
-
### Android (applied by android-customizer in Step
|
|
272
|
+
### Android (applied by android-customizer in Step 5)
|
|
272
273
|
|
|
273
274
|
| Token Category | File | Structure |
|
|
274
275
|
|---------------|------|-----------|
|