codehava-agent-kit 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 +56 -0
- package/bin/cli.js +56 -0
- package/package.json +26 -0
- package/templates/.agent/.shared/ui-ux-pro-max/data/charts.csv +26 -0
- package/templates/.agent/.shared/ui-ux-pro-max/data/colors.csv +97 -0
- package/templates/.agent/.shared/ui-ux-pro-max/data/icons.csv +101 -0
- package/templates/.agent/.shared/ui-ux-pro-max/data/landing.csv +31 -0
- package/templates/.agent/.shared/ui-ux-pro-max/data/products.csv +97 -0
- package/templates/.agent/.shared/ui-ux-pro-max/data/prompts.csv +24 -0
- package/templates/.agent/.shared/ui-ux-pro-max/data/react-performance.csv +45 -0
- package/templates/.agent/.shared/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
- package/templates/.agent/.shared/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
- package/templates/.agent/.shared/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
- package/templates/.agent/.shared/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
- package/templates/.agent/.shared/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
- package/templates/.agent/.shared/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
- package/templates/.agent/.shared/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
- package/templates/.agent/.shared/ui-ux-pro-max/data/stacks/react.csv +54 -0
- package/templates/.agent/.shared/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
- package/templates/.agent/.shared/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
- package/templates/.agent/.shared/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
- package/templates/.agent/.shared/ui-ux-pro-max/data/stacks/vue.csv +50 -0
- package/templates/.agent/.shared/ui-ux-pro-max/data/styles.csv +59 -0
- package/templates/.agent/.shared/ui-ux-pro-max/data/typography.csv +58 -0
- package/templates/.agent/.shared/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
- package/templates/.agent/.shared/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
- package/templates/.agent/.shared/ui-ux-pro-max/data/web-interface.csv +31 -0
- package/templates/.agent/.shared/ui-ux-pro-max/scripts/__pycache__/core.cpython-313.pyc +0 -0
- package/templates/.agent/.shared/ui-ux-pro-max/scripts/__pycache__/design_system.cpython-313.pyc +0 -0
- package/templates/.agent/.shared/ui-ux-pro-max/scripts/core.py +258 -0
- package/templates/.agent/.shared/ui-ux-pro-max/scripts/design_system.py +1067 -0
- package/templates/.agent/.shared/ui-ux-pro-max/scripts/search.py +106 -0
- package/templates/.agent/agents/backend-specialist.md +263 -0
- package/templates/.agent/agents/code-archaeologist.md +106 -0
- package/templates/.agent/agents/database-architect.md +226 -0
- package/templates/.agent/agents/debugger.md +225 -0
- package/templates/.agent/agents/devops-engineer.md +242 -0
- package/templates/.agent/agents/documentation-writer.md +104 -0
- package/templates/.agent/agents/explorer-agent.md +73 -0
- package/templates/.agent/agents/frontend-specialist.md +593 -0
- package/templates/.agent/agents/game-developer.md +162 -0
- package/templates/.agent/agents/mobile-developer.md +377 -0
- package/templates/.agent/agents/orchestrator.md +416 -0
- package/templates/.agent/agents/penetration-tester.md +188 -0
- package/templates/.agent/agents/performance-optimizer.md +187 -0
- package/templates/.agent/agents/product-manager.md +112 -0
- package/templates/.agent/agents/product-owner.md +95 -0
- package/templates/.agent/agents/project-planner.md +406 -0
- package/templates/.agent/agents/qa-automation-engineer.md +103 -0
- package/templates/.agent/agents/security-auditor.md +170 -0
- package/templates/.agent/agents/seo-specialist.md +111 -0
- package/templates/.agent/agents/test-engineer.md +158 -0
- package/templates/.agent/mcp_config.json +129 -0
- package/templates/.agent/rules/GEMINI.md +273 -0
- package/templates/.agent/scripts/auto_preview.py +148 -0
- package/templates/.agent/scripts/checklist.py +217 -0
- package/templates/.agent/scripts/session_manager.py +120 -0
- package/templates/.agent/scripts/verify_all.py +327 -0
- package/templates/.agent/skills/api-patterns/SKILL.md +81 -0
- package/templates/.agent/skills/api-patterns/api-style.md +42 -0
- package/templates/.agent/skills/api-patterns/auth.md +24 -0
- package/templates/.agent/skills/api-patterns/documentation.md +26 -0
- package/templates/.agent/skills/api-patterns/graphql.md +41 -0
- package/templates/.agent/skills/api-patterns/rate-limiting.md +31 -0
- package/templates/.agent/skills/api-patterns/response.md +37 -0
- package/templates/.agent/skills/api-patterns/rest.md +40 -0
- package/templates/.agent/skills/api-patterns/scripts/api_validator.py +211 -0
- package/templates/.agent/skills/api-patterns/security-testing.md +122 -0
- package/templates/.agent/skills/api-patterns/trpc.md +41 -0
- package/templates/.agent/skills/api-patterns/versioning.md +22 -0
- package/templates/.agent/skills/app-builder/SKILL.md +75 -0
- package/templates/.agent/skills/app-builder/agent-coordination.md +71 -0
- package/templates/.agent/skills/app-builder/feature-building.md +53 -0
- package/templates/.agent/skills/app-builder/project-detection.md +34 -0
- package/templates/.agent/skills/app-builder/scaffolding.md +118 -0
- package/templates/.agent/skills/app-builder/tech-stack.md +41 -0
- package/templates/.agent/skills/app-builder/templates/SKILL.md +39 -0
- package/templates/.agent/skills/app-builder/templates/astro-static/TEMPLATE.md +76 -0
- package/templates/.agent/skills/app-builder/templates/chrome-extension/TEMPLATE.md +92 -0
- package/templates/.agent/skills/app-builder/templates/cli-tool/TEMPLATE.md +88 -0
- package/templates/.agent/skills/app-builder/templates/electron-desktop/TEMPLATE.md +88 -0
- package/templates/.agent/skills/app-builder/templates/express-api/TEMPLATE.md +83 -0
- package/templates/.agent/skills/app-builder/templates/flutter-app/TEMPLATE.md +90 -0
- package/templates/.agent/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +90 -0
- package/templates/.agent/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +122 -0
- package/templates/.agent/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +122 -0
- package/templates/.agent/skills/app-builder/templates/nextjs-static/TEMPLATE.md +169 -0
- package/templates/.agent/skills/app-builder/templates/nuxt-app/TEMPLATE.md +134 -0
- package/templates/.agent/skills/app-builder/templates/python-fastapi/TEMPLATE.md +83 -0
- package/templates/.agent/skills/app-builder/templates/react-native-app/TEMPLATE.md +119 -0
- package/templates/.agent/skills/architecture/SKILL.md +55 -0
- package/templates/.agent/skills/architecture/context-discovery.md +43 -0
- package/templates/.agent/skills/architecture/examples.md +94 -0
- package/templates/.agent/skills/architecture/pattern-selection.md +68 -0
- package/templates/.agent/skills/architecture/patterns-reference.md +50 -0
- package/templates/.agent/skills/architecture/trade-off-analysis.md +77 -0
- package/templates/.agent/skills/bash-linux/SKILL.md +199 -0
- package/templates/.agent/skills/behavioral-modes/SKILL.md +242 -0
- package/templates/.agent/skills/better-auth-patterns/SKILL.md +121 -0
- package/templates/.agent/skills/brainstorming/SKILL.md +163 -0
- package/templates/.agent/skills/brainstorming/dynamic-questioning.md +350 -0
- package/templates/.agent/skills/bullmq-worker/SKILL.md +124 -0
- package/templates/.agent/skills/clean-code/SKILL.md +201 -0
- package/templates/.agent/skills/code-review-checklist/SKILL.md +109 -0
- package/templates/.agent/skills/database-design/SKILL.md +52 -0
- package/templates/.agent/skills/database-design/database-selection.md +43 -0
- package/templates/.agent/skills/database-design/indexing.md +39 -0
- package/templates/.agent/skills/database-design/migrations.md +48 -0
- package/templates/.agent/skills/database-design/optimization.md +36 -0
- package/templates/.agent/skills/database-design/orm-selection.md +30 -0
- package/templates/.agent/skills/database-design/schema-design.md +56 -0
- package/templates/.agent/skills/database-design/scripts/schema_validator.py +172 -0
- package/templates/.agent/skills/deployment-procedures/SKILL.md +241 -0
- package/templates/.agent/skills/doc.md +177 -0
- package/templates/.agent/skills/documentation-templates/SKILL.md +194 -0
- package/templates/.agent/skills/feature-spec-writer/SKILL.md +76 -0
- package/templates/.agent/skills/frontend-design/SKILL.md +452 -0
- package/templates/.agent/skills/frontend-design/animation-guide.md +331 -0
- package/templates/.agent/skills/frontend-design/color-system.md +311 -0
- package/templates/.agent/skills/frontend-design/decision-trees.md +418 -0
- package/templates/.agent/skills/frontend-design/motion-graphics.md +306 -0
- package/templates/.agent/skills/frontend-design/scripts/accessibility_checker.py +183 -0
- package/templates/.agent/skills/frontend-design/scripts/ux_audit.py +722 -0
- package/templates/.agent/skills/frontend-design/typography-system.md +345 -0
- package/templates/.agent/skills/frontend-design/ux-psychology.md +1116 -0
- package/templates/.agent/skills/frontend-design/visual-effects.md +383 -0
- package/templates/.agent/skills/game-development/2d-games/SKILL.md +119 -0
- package/templates/.agent/skills/game-development/3d-games/SKILL.md +135 -0
- package/templates/.agent/skills/game-development/SKILL.md +167 -0
- package/templates/.agent/skills/game-development/game-art/SKILL.md +185 -0
- package/templates/.agent/skills/game-development/game-audio/SKILL.md +190 -0
- package/templates/.agent/skills/game-development/game-design/SKILL.md +129 -0
- package/templates/.agent/skills/game-development/mobile-games/SKILL.md +108 -0
- package/templates/.agent/skills/game-development/multiplayer/SKILL.md +132 -0
- package/templates/.agent/skills/game-development/pc-games/SKILL.md +144 -0
- package/templates/.agent/skills/game-development/vr-ar/SKILL.md +123 -0
- package/templates/.agent/skills/game-development/web-games/SKILL.md +150 -0
- package/templates/.agent/skills/geo-fundamentals/SKILL.md +156 -0
- package/templates/.agent/skills/geo-fundamentals/scripts/geo_checker.py +289 -0
- package/templates/.agent/skills/i18n-localization/SKILL.md +154 -0
- package/templates/.agent/skills/i18n-localization/scripts/i18n_checker.py +241 -0
- package/templates/.agent/skills/intelligent-routing/SKILL.md +335 -0
- package/templates/.agent/skills/lint-and-validate/SKILL.md +45 -0
- package/templates/.agent/skills/lint-and-validate/scripts/lint_runner.py +184 -0
- package/templates/.agent/skills/lint-and-validate/scripts/type_coverage.py +173 -0
- package/templates/.agent/skills/mcp-builder/SKILL.md +176 -0
- package/templates/.agent/skills/mobile-design/SKILL.md +394 -0
- package/templates/.agent/skills/mobile-design/decision-trees.md +516 -0
- package/templates/.agent/skills/mobile-design/mobile-backend.md +491 -0
- package/templates/.agent/skills/mobile-design/mobile-color-system.md +420 -0
- package/templates/.agent/skills/mobile-design/mobile-debugging.md +122 -0
- package/templates/.agent/skills/mobile-design/mobile-design-thinking.md +357 -0
- package/templates/.agent/skills/mobile-design/mobile-navigation.md +458 -0
- package/templates/.agent/skills/mobile-design/mobile-performance.md +767 -0
- package/templates/.agent/skills/mobile-design/mobile-testing.md +356 -0
- package/templates/.agent/skills/mobile-design/mobile-typography.md +433 -0
- package/templates/.agent/skills/mobile-design/platform-android.md +666 -0
- package/templates/.agent/skills/mobile-design/platform-ios.md +561 -0
- package/templates/.agent/skills/mobile-design/scripts/mobile_audit.py +670 -0
- package/templates/.agent/skills/mobile-design/touch-psychology.md +537 -0
- package/templates/.agent/skills/neo-storage/SKILL.md +115 -0
- package/templates/.agent/skills/nextjs-api-route/SKILL.md +134 -0
- package/templates/.agent/skills/nextjs-react-expert/1-async-eliminating-waterfalls.md +351 -0
- package/templates/.agent/skills/nextjs-react-expert/2-bundle-bundle-size-optimization.md +240 -0
- package/templates/.agent/skills/nextjs-react-expert/3-server-server-side-performance.md +490 -0
- package/templates/.agent/skills/nextjs-react-expert/4-client-client-side-data-fetching.md +264 -0
- package/templates/.agent/skills/nextjs-react-expert/5-rerender-re-render-optimization.md +581 -0
- package/templates/.agent/skills/nextjs-react-expert/6-rendering-rendering-performance.md +432 -0
- package/templates/.agent/skills/nextjs-react-expert/7-js-javascript-performance.md +684 -0
- package/templates/.agent/skills/nextjs-react-expert/8-advanced-advanced-patterns.md +150 -0
- package/templates/.agent/skills/nextjs-react-expert/9-cache-components.md +103 -0
- package/templates/.agent/skills/nextjs-react-expert/SKILL.md +293 -0
- package/templates/.agent/skills/nextjs-react-expert/scripts/convert_rules.py +222 -0
- package/templates/.agent/skills/nextjs-react-expert/scripts/react_performance_checker.py +252 -0
- package/templates/.agent/skills/nodejs-best-practices/SKILL.md +333 -0
- package/templates/.agent/skills/parallel-agents/SKILL.md +175 -0
- package/templates/.agent/skills/performance-profiling/SKILL.md +143 -0
- package/templates/.agent/skills/performance-profiling/scripts/lighthouse_audit.py +76 -0
- package/templates/.agent/skills/plan-writing/SKILL.md +152 -0
- package/templates/.agent/skills/powershell-windows/SKILL.md +167 -0
- package/templates/.agent/skills/prisma-7-patterns/SKILL.md +91 -0
- package/templates/.agent/skills/python-patterns/SKILL.md +441 -0
- package/templates/.agent/skills/red-team-tactics/SKILL.md +199 -0
- package/templates/.agent/skills/rust-pro/SKILL.md +176 -0
- package/templates/.agent/skills/seo-fundamentals/SKILL.md +129 -0
- package/templates/.agent/skills/seo-fundamentals/scripts/seo_checker.py +219 -0
- package/templates/.agent/skills/server-management/SKILL.md +161 -0
- package/templates/.agent/skills/systematic-debugging/SKILL.md +109 -0
- package/templates/.agent/skills/tailwind-patterns/SKILL.md +269 -0
- package/templates/.agent/skills/tdd-workflow/SKILL.md +149 -0
- package/templates/.agent/skills/testing-patterns/SKILL.md +178 -0
- package/templates/.agent/skills/testing-patterns/scripts/test_runner.py +219 -0
- package/templates/.agent/skills/uu-pdp-feature-check/SKILL.md +116 -0
- package/templates/.agent/skills/vibe-buildplan/SKILL.md +232 -0
- package/templates/.agent/skills/vibe-prd/SKILL.md +226 -0
- package/templates/.agent/skills/vibe-research/SKILL.md +162 -0
- package/templates/.agent/skills/vibe-techdesign/SKILL.md +195 -0
- package/templates/.agent/skills/vulnerability-scanner/SKILL.md +276 -0
- package/templates/.agent/skills/vulnerability-scanner/checklists.md +121 -0
- package/templates/.agent/skills/vulnerability-scanner/scripts/security_scan.py +458 -0
- package/templates/.agent/skills/web-design-guidelines/SKILL.md +57 -0
- package/templates/.agent/skills/webapp-testing/SKILL.md +187 -0
- package/templates/.agent/skills/webapp-testing/scripts/playwright_runner.py +173 -0
- package/templates/.agent/skills/xendit-integration/SKILL.md +100 -0
- package/templates/.agent/snippets/@react-component-template.tsx +29 -0
- package/templates/.agent/workflows/brainstorm.md +113 -0
- package/templates/.agent/workflows/create.md +59 -0
- package/templates/.agent/workflows/db-migrate.md +26 -0
- package/templates/.agent/workflows/debug.md +103 -0
- package/templates/.agent/workflows/deploy.md +35 -0
- package/templates/.agent/workflows/dev-reset.md +40 -0
- package/templates/.agent/workflows/enhance.md +63 -0
- package/templates/.agent/workflows/git-commit.md +24 -0
- package/templates/.agent/workflows/health-check.md +34 -0
- package/templates/.agent/workflows/new-feature.md +32 -0
- package/templates/.agent/workflows/orchestrate.md +237 -0
- package/templates/.agent/workflows/plan.md +89 -0
- package/templates/.agent/workflows/preview.md +81 -0
- package/templates/.agent/workflows/status.md +86 -0
- package/templates/.agent/workflows/test.md +144 -0
- package/templates/.agent/workflows/ui-ux-pro-max.md +296 -0
- package/templates/.agent/workflows/vibe-plan.md +133 -0
- package/templates/.agent/workflows/vibe-recap.md +17 -0
- package/templates/.antigravity/rules.md +64 -0
- package/templates/AGENTS.md +268 -0
- package/templates/docs/00A-PROJECT-CHARTER.md +33 -0
- package/templates/docs/00B-BRD.md +25 -0
- package/templates/docs/01-PRD.md +122 -0
- package/templates/docs/01B-SRS-LENGKAP.md +60 -0
- package/templates/docs/02-TECH-DESIGN.md +491 -0
- package/templates/docs/03-UI-GUIDELINES.md +301 -0
- package/templates/docs/04-BACKLOG.md +127 -0
- package/templates/docs/05-DEPLOYMENT.md +363 -0
- package/templates/docs/06-DEVELOPMENT-LOG.md +78 -0
- package/templates/specs/README.md +54 -0
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
# 03 — UI Guidelines & Design System
|
|
2
|
+
> Panduan visual untuk konsistensi tampilan di Web (shadcn/ui) dan Mobile (Flutter).
|
|
3
|
+
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## 1. Prinsip Desain
|
|
7
|
+
|
|
8
|
+
1. **Mobile-First** — semua dimulai dari mobile, dikembangkan ke desktop
|
|
9
|
+
2. **Consistency** — komponen sama terlihat sama di seluruh aplikasi
|
|
10
|
+
3. **Clarity** — user selalu tahu apa yang bisa diklik dan apa hasilnya
|
|
11
|
+
4. **Performance** — tidak ada animasi berat, gambar selalu dioptimasi sebelum upload
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## 2. Color System
|
|
16
|
+
|
|
17
|
+
### Brand Colors (ganti dengan warna brand proyek)
|
|
18
|
+
```css
|
|
19
|
+
/* Tailwind custom colors di tailwind.config.ts */
|
|
20
|
+
colors: {
|
|
21
|
+
brand: {
|
|
22
|
+
50: '#[hex]',
|
|
23
|
+
100: '#[hex]',
|
|
24
|
+
500: '#[hex]', /* main */
|
|
25
|
+
600: '#[hex]', /* hover */
|
|
26
|
+
900: '#[hex]',
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
### Semantic Colors (pakai Tailwind defaults)
|
|
32
|
+
```
|
|
33
|
+
Success : green-500 (#22C55E)
|
|
34
|
+
Warning : amber-500 (#F59E0B)
|
|
35
|
+
Error : red-500 (#EF4444)
|
|
36
|
+
Info : blue-500 (#3B82F6)
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### Neutral (Text & Background)
|
|
40
|
+
```
|
|
41
|
+
Text primary : slate-900
|
|
42
|
+
Text secondary : slate-500
|
|
43
|
+
Text muted : slate-400
|
|
44
|
+
Border : slate-200
|
|
45
|
+
Background : slate-50
|
|
46
|
+
Surface : white
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## 3. Typography
|
|
52
|
+
|
|
53
|
+
| Element | Tailwind Class | Size |
|
|
54
|
+
|---------|----------------|------|
|
|
55
|
+
| Page title (H1) | `text-3xl font-bold` | 30px |
|
|
56
|
+
| Section title (H2) | `text-2xl font-semibold` | 24px |
|
|
57
|
+
| Card title (H3) | `text-lg font-semibold` | 18px |
|
|
58
|
+
| Body | `text-base` | 16px |
|
|
59
|
+
| Small / caption | `text-sm text-slate-500` | 14px |
|
|
60
|
+
| Label form | `text-sm font-medium` | 14px |
|
|
61
|
+
| Micro | `text-xs` | 12px |
|
|
62
|
+
|
|
63
|
+
**Font:** Inter (Google Fonts) — `font-family: 'Inter', system-ui, sans-serif`
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## 4. Spacing
|
|
68
|
+
|
|
69
|
+
Gunakan kelipatan 4px (Tailwind default):
|
|
70
|
+
|
|
71
|
+
| Token | Value | Tailwind |
|
|
72
|
+
|-------|-------|---------|
|
|
73
|
+
| xs | 4px | `p-1` / `gap-1` |
|
|
74
|
+
| sm | 8px | `p-2` / `gap-2` |
|
|
75
|
+
| md | 16px | `p-4` / `gap-4` |
|
|
76
|
+
| lg | 24px | `p-6` / `gap-6` |
|
|
77
|
+
| xl | 32px | `p-8` / `gap-8` |
|
|
78
|
+
| 2xl | 48px | `p-12` / `gap-12` |
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## 5. shadcn/ui Components — Pola Standar
|
|
83
|
+
|
|
84
|
+
### Button
|
|
85
|
+
```tsx
|
|
86
|
+
import { Button } from "@/components/ui/button"
|
|
87
|
+
import { Loader2 } from "lucide-react"
|
|
88
|
+
|
|
89
|
+
// Primary
|
|
90
|
+
<Button>Simpan</Button>
|
|
91
|
+
|
|
92
|
+
// Outline
|
|
93
|
+
<Button variant="outline">Batal</Button>
|
|
94
|
+
|
|
95
|
+
// Destructive
|
|
96
|
+
<Button variant="destructive">Hapus</Button>
|
|
97
|
+
|
|
98
|
+
// Loading state — WAJIB ada
|
|
99
|
+
<Button disabled={isLoading}>
|
|
100
|
+
{isLoading && <Loader2 className="mr-2 h-4 w-4 animate-spin" />}
|
|
101
|
+
{isLoading ? "Memproses..." : "Bayar Sekarang"}
|
|
102
|
+
</Button>
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### Form Input
|
|
106
|
+
```tsx
|
|
107
|
+
import { Input } from "@/components/ui/input"
|
|
108
|
+
import { Label } from "@/components/ui/label"
|
|
109
|
+
|
|
110
|
+
// Selalu pakai label + error message
|
|
111
|
+
<div className="space-y-2">
|
|
112
|
+
<Label htmlFor="email">Email</Label>
|
|
113
|
+
<Input
|
|
114
|
+
id="email"
|
|
115
|
+
type="email"
|
|
116
|
+
placeholder="nama@email.com"
|
|
117
|
+
{...register('email')}
|
|
118
|
+
className={errors.email ? 'border-red-500' : ''}
|
|
119
|
+
/>
|
|
120
|
+
{errors.email && (
|
|
121
|
+
<p className="text-sm text-red-500">{errors.email.message}</p>
|
|
122
|
+
)}
|
|
123
|
+
</div>
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
### Card
|
|
127
|
+
```tsx
|
|
128
|
+
import { Card, CardHeader, CardTitle, CardContent, CardFooter } from "@/components/ui/card"
|
|
129
|
+
|
|
130
|
+
<Card>
|
|
131
|
+
<CardHeader>
|
|
132
|
+
<CardTitle>Judul Card</CardTitle>
|
|
133
|
+
</CardHeader>
|
|
134
|
+
<CardContent>
|
|
135
|
+
{/* konten */}
|
|
136
|
+
</CardContent>
|
|
137
|
+
<CardFooter className="flex gap-2">
|
|
138
|
+
<Button>Aksi Utama</Button>
|
|
139
|
+
<Button variant="outline">Batal</Button>
|
|
140
|
+
</CardFooter>
|
|
141
|
+
</Card>
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
### Empty State — WAJIB di setiap list
|
|
145
|
+
```tsx
|
|
146
|
+
import { Inbox } from "lucide-react"
|
|
147
|
+
|
|
148
|
+
<div className="flex flex-col items-center justify-center py-16 text-center">
|
|
149
|
+
<Inbox className="h-12 w-12 text-slate-300 mb-4" />
|
|
150
|
+
<h3 className="text-slate-600 font-medium">Belum ada data</h3>
|
|
151
|
+
<p className="text-slate-400 text-sm mt-1">
|
|
152
|
+
Mulai dengan menambahkan [item] pertama
|
|
153
|
+
</p>
|
|
154
|
+
<Button className="mt-4">Tambah [Item]</Button>
|
|
155
|
+
</div>
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
### Loading Skeleton
|
|
159
|
+
```tsx
|
|
160
|
+
import { Skeleton } from "@/components/ui/skeleton"
|
|
161
|
+
|
|
162
|
+
// Card skeleton
|
|
163
|
+
<div className="space-y-3">
|
|
164
|
+
<Skeleton className="h-4 w-3/4" />
|
|
165
|
+
<Skeleton className="h-4 w-1/2" />
|
|
166
|
+
<Skeleton className="h-32 w-full rounded-lg" />
|
|
167
|
+
</div>
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
### Toast Notification
|
|
171
|
+
```tsx
|
|
172
|
+
import { toast } from "sonner"
|
|
173
|
+
|
|
174
|
+
toast.success("Data berhasil disimpan")
|
|
175
|
+
toast.error("Gagal. Coba lagi beberapa saat.")
|
|
176
|
+
toast.loading("Memproses pembayaran...")
|
|
177
|
+
toast.promise(createPayment(), {
|
|
178
|
+
loading: "Membuat tagihan...",
|
|
179
|
+
success: "Tagihan berhasil dibuat",
|
|
180
|
+
error: "Gagal membuat tagihan",
|
|
181
|
+
})
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
### Badge Status
|
|
185
|
+
```tsx
|
|
186
|
+
import { Badge } from "@/components/ui/badge"
|
|
187
|
+
|
|
188
|
+
// Status pembayaran Xendit
|
|
189
|
+
const statusVariant = {
|
|
190
|
+
PAID: 'default', // hijau
|
|
191
|
+
PENDING: 'secondary', // abu
|
|
192
|
+
FAILED: 'destructive', // merah
|
|
193
|
+
EXPIRED: 'outline', // outline
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
<Badge variant={statusVariant[status]}>{status}</Badge>
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
---
|
|
200
|
+
|
|
201
|
+
## 6. Layout Patterns
|
|
202
|
+
|
|
203
|
+
### Responsive Grid
|
|
204
|
+
```tsx
|
|
205
|
+
// 1 kolom di mobile, 2-3 kolom di desktop
|
|
206
|
+
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
### Page Container
|
|
210
|
+
```tsx
|
|
211
|
+
<div className="container mx-auto px-4 py-6 max-w-6xl">
|
|
212
|
+
{/* konten halaman */}
|
|
213
|
+
</div>
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
### Dashboard Sidebar Layout
|
|
217
|
+
```tsx
|
|
218
|
+
<div className="flex min-h-screen">
|
|
219
|
+
<aside className="w-64 border-r hidden md:block">
|
|
220
|
+
{/* sidebar */}
|
|
221
|
+
</aside>
|
|
222
|
+
<main className="flex-1 p-6">
|
|
223
|
+
{/* konten */}
|
|
224
|
+
</main>
|
|
225
|
+
</div>
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
---
|
|
229
|
+
|
|
230
|
+
## 7. Icons
|
|
231
|
+
|
|
232
|
+
Gunakan **Lucide React** (sudah include di shadcn):
|
|
233
|
+
```tsx
|
|
234
|
+
import { Plus, Trash2, Edit, ChevronRight, Loader2, CreditCard, CheckCircle } from "lucide-react"
|
|
235
|
+
|
|
236
|
+
// Ukuran standar
|
|
237
|
+
<Plus className="h-4 w-4" /> // inline dengan teks
|
|
238
|
+
<Edit className="h-5 w-5" /> // button icon
|
|
239
|
+
<Loader2 className="h-4 w-4 animate-spin" /> // loading
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
---
|
|
243
|
+
|
|
244
|
+
## 8. Responsive Breakpoints
|
|
245
|
+
|
|
246
|
+
```css
|
|
247
|
+
sm: 640px /* Tablet portrait */
|
|
248
|
+
md: 768px /* Tablet landscape */
|
|
249
|
+
lg: 1024px /* Desktop */
|
|
250
|
+
xl: 1280px /* Large desktop */
|
|
251
|
+
2xl: 1536px /* Wide screen */
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
---
|
|
255
|
+
|
|
256
|
+
## 9. Flutter Design System
|
|
257
|
+
|
|
258
|
+
```dart
|
|
259
|
+
// lib/core/theme/app_theme.dart
|
|
260
|
+
ThemeData appTheme = ThemeData(
|
|
261
|
+
colorScheme: ColorScheme.fromSeed(
|
|
262
|
+
seedColor: const Color(0xFF[brandHex]),
|
|
263
|
+
brightness: Brightness.light,
|
|
264
|
+
),
|
|
265
|
+
useMaterial3: true,
|
|
266
|
+
fontFamily: 'Inter',
|
|
267
|
+
cardTheme: CardTheme(
|
|
268
|
+
elevation: 0,
|
|
269
|
+
shape: RoundedRectangleBorder(
|
|
270
|
+
borderRadius: BorderRadius.circular(12),
|
|
271
|
+
side: BorderSide(color: Colors.grey.shade200),
|
|
272
|
+
),
|
|
273
|
+
),
|
|
274
|
+
);
|
|
275
|
+
|
|
276
|
+
// lib/core/constants/app_spacing.dart
|
|
277
|
+
class AppSpacing {
|
|
278
|
+
static const double xs = 4;
|
|
279
|
+
static const double sm = 8;
|
|
280
|
+
static const double md = 16;
|
|
281
|
+
static const double lg = 24;
|
|
282
|
+
static const double xl = 32;
|
|
283
|
+
static const double xxl = 48;
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
// lib/core/constants/app_radius.dart
|
|
287
|
+
class AppRadius {
|
|
288
|
+
static const double sm = 8;
|
|
289
|
+
static const double md = 12;
|
|
290
|
+
static const double lg = 16;
|
|
291
|
+
static const double full = 999;
|
|
292
|
+
}
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
### Flutter Color Tokens
|
|
296
|
+
```dart
|
|
297
|
+
// Akses via Theme
|
|
298
|
+
Theme.of(context).colorScheme.primary // brand color
|
|
299
|
+
Theme.of(context).colorScheme.surface // card background
|
|
300
|
+
Theme.of(context).colorScheme.onSurface // text di atas surface
|
|
301
|
+
```
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
# 04 — Sprint Backlog
|
|
2
|
+
> Update setiap sprint (1-2 minggu). AI membaca ini untuk tahu konteks task aktif.
|
|
3
|
+
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## 🗓️ Sprint Aktif
|
|
7
|
+
|
|
8
|
+
| Field | Isi |
|
|
9
|
+
|-------|-----|
|
|
10
|
+
| **Sprint #** | 1 |
|
|
11
|
+
| **Periode** | [tanggal mulai] → [tanggal selesai] |
|
|
12
|
+
| **Goal** | [1 kalimat tujuan sprint ini, contoh: user bisa login dan lihat dashboard] |
|
|
13
|
+
| **PIC** | [nama] |
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## 📋 Task Sprint 1
|
|
18
|
+
|
|
19
|
+
### 🔴 In Progress
|
|
20
|
+
| ID | Task | PIC | Notes |
|
|
21
|
+
|----|------|-----|-------|
|
|
22
|
+
| T001 | [nama task] | [nama] | [catatan] |
|
|
23
|
+
|
|
24
|
+
### 🟡 Todo
|
|
25
|
+
| ID | Task | Size | Prioritas |
|
|
26
|
+
|----|------|------|-----------|
|
|
27
|
+
| T002 | Setup project monorepo + Docker | S | P0 |
|
|
28
|
+
| T003 | Setup PostgreSQL + Prisma schema awal | S | P0 |
|
|
29
|
+
| T004 | Better Auth: login email + Google | M | P0 |
|
|
30
|
+
| T005 | Layout dashboard + sidebar (web) | M | P1 |
|
|
31
|
+
| T006 | Halaman login + register (web) | M | P0 |
|
|
32
|
+
| T007 | Setup Flutter project + navigation | M | P1 |
|
|
33
|
+
| T008 | Setup Socket.io server | S | P1 |
|
|
34
|
+
| T009 | Setup BullMQ + Redis | S | P1 |
|
|
35
|
+
| T010 | Integrasi Xendit sandbox | L | P1 |
|
|
36
|
+
|
|
37
|
+
### 🟢 Done
|
|
38
|
+
| ID | Task | Selesai |
|
|
39
|
+
|----|------|---------|
|
|
40
|
+
| — | — | — |
|
|
41
|
+
|
|
42
|
+
### 🚫 Blocked
|
|
43
|
+
| ID | Task | Blocker | Butuh Apa |
|
|
44
|
+
|----|------|---------|-----------|
|
|
45
|
+
| — | — | — | — |
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## 📦 Product Backlog
|
|
50
|
+
|
|
51
|
+
### Epic 1: Autentikasi & Onboarding
|
|
52
|
+
- [ ] T-001 Setup project, monorepo, Docker compose
|
|
53
|
+
- [ ] T-002 Better Auth: email + password
|
|
54
|
+
- [ ] T-003 Better Auth: Google OAuth
|
|
55
|
+
- [ ] T-004 Email verifikasi via Resend
|
|
56
|
+
- [ ] T-005 Forgot password flow
|
|
57
|
+
- [ ] T-006 Auth Flutter (simpan session di Hive)
|
|
58
|
+
- [ ] T-007 Protected routes web + Flutter
|
|
59
|
+
|
|
60
|
+
### Epic 2: [Core Feature — ganti sesuai aplikasi]
|
|
61
|
+
- [ ] T-010 [task]
|
|
62
|
+
- [ ] T-011 [task]
|
|
63
|
+
- [ ] T-012 [task]
|
|
64
|
+
|
|
65
|
+
### Epic 3: Pembayaran (Xendit)
|
|
66
|
+
- [ ] T-020 Setup Xendit SDK + credentials
|
|
67
|
+
- [ ] T-021 Buat payment link / invoice
|
|
68
|
+
- [ ] T-022 Webhook handler + verifikasi token
|
|
69
|
+
- [ ] T-023 BullMQ worker proses webhook
|
|
70
|
+
- [ ] T-024 Update order status setelah payment
|
|
71
|
+
- [ ] T-025 Socket.io notify client payment berhasil
|
|
72
|
+
- [ ] T-026 FCM push notif payment berhasil (Flutter)
|
|
73
|
+
- [ ] T-027 Halaman sukses/gagal payment
|
|
74
|
+
- [ ] T-028 Riwayat transaksi
|
|
75
|
+
|
|
76
|
+
### Epic 4: Realtime & Notifikasi
|
|
77
|
+
- [ ] T-030 Socket.io room management (per user)
|
|
78
|
+
- [ ] T-031 Realtime order status update (web)
|
|
79
|
+
- [ ] T-032 Realtime order status update (Flutter)
|
|
80
|
+
- [ ] T-033 FCM setup + Firebase project
|
|
81
|
+
- [ ] T-034 Push notif dari BullMQ worker
|
|
82
|
+
- [ ] T-035 Email notifikasi via Resend
|
|
83
|
+
|
|
84
|
+
### Epic 5: File Upload (NEO Object Storage)
|
|
85
|
+
- [ ] T-040 NEO S3 client setup
|
|
86
|
+
- [ ] T-041 Upload API route dengan validasi
|
|
87
|
+
- [ ] T-042 Resize/compress gambar via BullMQ job
|
|
88
|
+
- [ ] T-043 Flutter image picker + upload
|
|
89
|
+
|
|
90
|
+
### Epic 6: Admin & Monitoring
|
|
91
|
+
- [ ] T-050 Admin dashboard (order, user, transaksi)
|
|
92
|
+
- [ ] T-051 Uptime Kuma setup
|
|
93
|
+
- [ ] T-052 Sentry error tracking
|
|
94
|
+
- [ ] T-053 Bull Board UI (monitor BullMQ jobs)
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
## 🐛 Bug Log
|
|
99
|
+
|
|
100
|
+
| ID | Deskripsi | Severity | Status | Ditemukan |
|
|
101
|
+
|----|-----------|----------|--------|-----------|
|
|
102
|
+
| — | — | — | — | — |
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## 📏 Size Estimation
|
|
107
|
+
|
|
108
|
+
| Size | Waktu | Contoh |
|
|
109
|
+
|------|-------|--------|
|
|
110
|
+
| XS | < 1 jam | Fix typo, update copy, minor style |
|
|
111
|
+
| S | 1-3 jam | Setup config, 1 komponen sederhana |
|
|
112
|
+
| M | 3-6 jam | 1 halaman lengkap, 1 API route dengan logic |
|
|
113
|
+
| L | 6-12 jam | 1 fitur end-to-end (FE + BE + DB) |
|
|
114
|
+
| XL | > 12 jam | Epic besar — harus dipecah jadi task lebih kecil |
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
## 📝 Keputusan Sprint
|
|
119
|
+
|
|
120
|
+
### Keputusan Teknis
|
|
121
|
+
- [catat keputusan teknis yang dibuat sprint ini]
|
|
122
|
+
|
|
123
|
+
### Pelajaran
|
|
124
|
+
- [hal yang dipelajari]
|
|
125
|
+
|
|
126
|
+
### Rencana Sprint Berikutnya
|
|
127
|
+
- [gambaran umum sprint selanjutnya]
|