create-vasvibe 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +84 -0
- package/bin/cli.mjs +9 -0
- package/package.json +45 -0
- package/src/git.mjs +47 -0
- package/src/index.mjs +178 -0
- package/src/prompts.mjs +87 -0
- package/src/scaffold.mjs +66 -0
- package/src/utils.mjs +91 -0
- package/template/.agents/skills/developer/SKILL.md +93 -0
- package/template/.agents/skills/find-skills/SKILL.md +142 -0
- package/template/.agents/skills/penetration-testing/SKILL.md +94 -0
- package/template/.agents/skills/penetration-testing/references/automated-penetration-testing-framework.md +328 -0
- package/template/.agents/skills/penetration-testing/references/burp-suite-automation-script.md +135 -0
- package/template/.agents/skills/penetration-testing/scripts/security-checklist.sh +30 -0
- package/template/.agents/skills/pm/SKILL.md +202 -0
- package/template/.agents/skills/ui-ux-pro-max/SKILL.md +659 -0
- package/template/.agents/skills/ui-ux-pro-max/data/_sync_all.py +414 -0
- package/template/.agents/skills/ui-ux-pro-max/data/app-interface.csv +31 -0
- package/template/.agents/skills/ui-ux-pro-max/data/charts.csv +26 -0
- package/template/.agents/skills/ui-ux-pro-max/data/colors.csv +162 -0
- package/template/.agents/skills/ui-ux-pro-max/data/design.csv +1776 -0
- package/template/.agents/skills/ui-ux-pro-max/data/draft.csv +1779 -0
- package/template/.agents/skills/ui-ux-pro-max/data/google-fonts.csv +1924 -0
- package/template/.agents/skills/ui-ux-pro-max/data/icons.csv +106 -0
- package/template/.agents/skills/ui-ux-pro-max/data/landing.csv +35 -0
- package/template/.agents/skills/ui-ux-pro-max/data/products.csv +162 -0
- package/template/.agents/skills/ui-ux-pro-max/data/react-performance.csv +45 -0
- package/template/.agents/skills/ui-ux-pro-max/data/stacks/angular.csv +51 -0
- package/template/.agents/skills/ui-ux-pro-max/data/stacks/astro.csv +54 -0
- package/template/.agents/skills/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
- package/template/.agents/skills/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
- package/template/.agents/skills/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
- package/template/.agents/skills/ui-ux-pro-max/data/stacks/laravel.csv +51 -0
- package/template/.agents/skills/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
- package/template/.agents/skills/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
- package/template/.agents/skills/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
- package/template/.agents/skills/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
- package/template/.agents/skills/ui-ux-pro-max/data/stacks/react.csv +54 -0
- package/template/.agents/skills/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
- package/template/.agents/skills/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
- package/template/.agents/skills/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
- package/template/.agents/skills/ui-ux-pro-max/data/stacks/threejs.csv +54 -0
- package/template/.agents/skills/ui-ux-pro-max/data/stacks/vue.csv +50 -0
- package/template/.agents/skills/ui-ux-pro-max/data/styles.csv +85 -0
- package/template/.agents/skills/ui-ux-pro-max/data/typography.csv +74 -0
- package/template/.agents/skills/ui-ux-pro-max/data/ui-reasoning.csv +162 -0
- package/template/.agents/skills/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
- package/template/.agents/skills/ui-ux-pro-max/scripts/core.py +262 -0
- package/template/.agents/skills/ui-ux-pro-max/scripts/design_system.py +1148 -0
- package/template/.agents/skills/ui-ux-pro-max/scripts/search.py +114 -0
- package/template/.claude/agents/analyst.md +61 -0
- package/template/.claude/agents/developer.md +144 -0
- package/template/.claude/agents/document.md +18 -0
- package/template/.claude/agents/fixer.md +67 -0
- package/template/.claude/agents/initiator.md +58 -0
- package/template/.claude/agents/pm.md +371 -0
- package/template/.claude/agents/sysarch.md +356 -0
- package/template/.claude/agents/tester.md +83 -0
- package/template/.claude/skills/find-skills/SKILL.md +142 -0
- package/template/.claude/skills/penetration-testing/SKILL.md +94 -0
- package/template/.claude/skills/penetration-testing/references/automated-penetration-testing-framework.md +328 -0
- package/template/.claude/skills/penetration-testing/references/burp-suite-automation-script.md +135 -0
- package/template/.claude/skills/penetration-testing/scripts/security-checklist.sh +30 -0
- package/template/.claude/skills/ui-ux-pro-max/SKILL.md +659 -0
- package/template/.claude/skills/ui-ux-pro-max/data/_sync_all.py +414 -0
- package/template/.claude/skills/ui-ux-pro-max/data/app-interface.csv +31 -0
- package/template/.claude/skills/ui-ux-pro-max/data/charts.csv +26 -0
- package/template/.claude/skills/ui-ux-pro-max/data/colors.csv +162 -0
- package/template/.claude/skills/ui-ux-pro-max/data/design.csv +1776 -0
- package/template/.claude/skills/ui-ux-pro-max/data/draft.csv +1779 -0
- package/template/.claude/skills/ui-ux-pro-max/data/google-fonts.csv +1924 -0
- package/template/.claude/skills/ui-ux-pro-max/data/icons.csv +106 -0
- package/template/.claude/skills/ui-ux-pro-max/data/landing.csv +35 -0
- package/template/.claude/skills/ui-ux-pro-max/data/products.csv +162 -0
- package/template/.claude/skills/ui-ux-pro-max/data/react-performance.csv +45 -0
- package/template/.claude/skills/ui-ux-pro-max/data/stacks/angular.csv +51 -0
- package/template/.claude/skills/ui-ux-pro-max/data/stacks/astro.csv +54 -0
- package/template/.claude/skills/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
- package/template/.claude/skills/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
- package/template/.claude/skills/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
- package/template/.claude/skills/ui-ux-pro-max/data/stacks/laravel.csv +51 -0
- package/template/.claude/skills/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
- package/template/.claude/skills/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
- package/template/.claude/skills/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
- package/template/.claude/skills/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
- package/template/.claude/skills/ui-ux-pro-max/data/stacks/react.csv +54 -0
- package/template/.claude/skills/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
- package/template/.claude/skills/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
- package/template/.claude/skills/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
- package/template/.claude/skills/ui-ux-pro-max/data/stacks/threejs.csv +54 -0
- package/template/.claude/skills/ui-ux-pro-max/data/stacks/vue.csv +50 -0
- package/template/.claude/skills/ui-ux-pro-max/data/styles.csv +85 -0
- package/template/.claude/skills/ui-ux-pro-max/data/typography.csv +74 -0
- package/template/.claude/skills/ui-ux-pro-max/data/ui-reasoning.csv +162 -0
- package/template/.claude/skills/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
- package/template/.claude/skills/ui-ux-pro-max/scripts/core.py +262 -0
- package/template/.claude/skills/ui-ux-pro-max/scripts/design_system.py +1148 -0
- package/template/.claude/skills/ui-ux-pro-max/scripts/search.py +114 -0
- package/template/.github/prompts/analyst.prompt.md +58 -0
- package/template/.github/prompts/developer.prompt.md +100 -0
- package/template/.github/prompts/document.prompt.md +15 -0
- package/template/.github/prompts/fixer.prompt.md +64 -0
- package/template/.github/prompts/initiator.prompt.md +55 -0
- package/template/.github/prompts/pm.prompt.md +177 -0
- package/template/.github/prompts/sysarch.prompt.md +352 -0
- package/template/.github/prompts/tester.prompt.md +80 -0
- package/template/.opencode/commands/analyst.md +61 -0
- package/template/.opencode/commands/developer.md +174 -0
- package/template/.opencode/commands/document.md +18 -0
- package/template/.opencode/commands/fixer.md +67 -0
- package/template/.opencode/commands/initiator.md +58 -0
- package/template/.opencode/commands/pm.md +348 -0
- package/template/.opencode/commands/sysarch.md +356 -0
- package/template/.opencode/commands/tester.md +83 -0
- package/template/.opencode/skills/penetration-testing/SKILL.md +94 -0
- package/template/.opencode/skills/penetration-testing/references/automated-penetration-testing-framework.md +328 -0
- package/template/.opencode/skills/penetration-testing/references/burp-suite-automation-script.md +135 -0
- package/template/.opencode/skills/penetration-testing/scripts/security-checklist.sh +30 -0
- package/template/.opencode/skills/ui-ux-pro-max/SKILL.md +659 -0
- package/template/.opencode/skills/ui-ux-pro-max/data/_sync_all.py +414 -0
- package/template/.opencode/skills/ui-ux-pro-max/data/app-interface.csv +31 -0
- package/template/.opencode/skills/ui-ux-pro-max/data/charts.csv +26 -0
- package/template/.opencode/skills/ui-ux-pro-max/data/colors.csv +162 -0
- package/template/.opencode/skills/ui-ux-pro-max/data/design.csv +1776 -0
- package/template/.opencode/skills/ui-ux-pro-max/data/draft.csv +1779 -0
- package/template/.opencode/skills/ui-ux-pro-max/data/google-fonts.csv +1924 -0
- package/template/.opencode/skills/ui-ux-pro-max/data/icons.csv +106 -0
- package/template/.opencode/skills/ui-ux-pro-max/data/landing.csv +35 -0
- package/template/.opencode/skills/ui-ux-pro-max/data/products.csv +162 -0
- package/template/.opencode/skills/ui-ux-pro-max/data/react-performance.csv +45 -0
- package/template/.opencode/skills/ui-ux-pro-max/data/stacks/angular.csv +51 -0
- package/template/.opencode/skills/ui-ux-pro-max/data/stacks/astro.csv +54 -0
- package/template/.opencode/skills/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
- package/template/.opencode/skills/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
- package/template/.opencode/skills/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
- package/template/.opencode/skills/ui-ux-pro-max/data/stacks/laravel.csv +51 -0
- package/template/.opencode/skills/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
- package/template/.opencode/skills/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
- package/template/.opencode/skills/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
- package/template/.opencode/skills/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
- package/template/.opencode/skills/ui-ux-pro-max/data/stacks/react.csv +54 -0
- package/template/.opencode/skills/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
- package/template/.opencode/skills/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
- package/template/.opencode/skills/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
- package/template/.opencode/skills/ui-ux-pro-max/data/stacks/threejs.csv +54 -0
- package/template/.opencode/skills/ui-ux-pro-max/data/stacks/vue.csv +50 -0
- package/template/.opencode/skills/ui-ux-pro-max/data/styles.csv +85 -0
- package/template/.opencode/skills/ui-ux-pro-max/data/typography.csv +74 -0
- package/template/.opencode/skills/ui-ux-pro-max/data/ui-reasoning.csv +162 -0
- package/template/.opencode/skills/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
- package/template/.opencode/skills/ui-ux-pro-max/scripts/core.py +262 -0
- package/template/.opencode/skills/ui-ux-pro-max/scripts/design_system.py +1148 -0
- package/template/.opencode/skills/ui-ux-pro-max/scripts/search.py +114 -0
- package/template/GIT_STRUCTURE_GUIDE.md +270 -0
- package/template/PROJECT_README.example.md +81 -0
- package/template/README.md +52 -0
- package/template/_gitignore +148 -0
- package/template/agent/workflows/analyst.md +58 -0
- package/template/agent/workflows/developer.md +66 -0
- package/template/agent/workflows/document.md +15 -0
- package/template/agent/workflows/fixer.md +64 -0
- package/template/agent/workflows/initiator.md +55 -0
- package/template/agent/workflows/pm.md +177 -0
- package/template/agent/workflows/sysacrh.md +352 -0
- package/template/agent/workflows/tester.md +80 -0
- package/template/codes/.gitkeep +1 -0
- package/template/project_overview_example.md +41 -0
- package/template/skills-lock.json +11 -0
- package/template/specifications/.gitkeep +1 -0
- package/template/tests/.gitkeep +1 -0
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
"""
|
|
4
|
+
UI/UX Pro Max Search - BM25 search engine for UI/UX style guides
|
|
5
|
+
Usage: python search.py "<query>" [--domain <domain>] [--stack <stack>] [--max-results 3]
|
|
6
|
+
python search.py "<query>" --design-system [-p "Project Name"]
|
|
7
|
+
python search.py "<query>" --design-system --persist [-p "Project Name"] [--page "dashboard"]
|
|
8
|
+
|
|
9
|
+
Domains: style, prompt, color, chart, landing, product, ux, typography, google-fonts
|
|
10
|
+
Stacks: react, nextjs, vue, svelte, astro, swiftui, react-native, flutter, nuxtjs, nuxt-ui, html-tailwind, shadcn, jetpack-compose, threejs
|
|
11
|
+
|
|
12
|
+
Persistence (Master + Overrides pattern):
|
|
13
|
+
--persist Save design system to design-system/MASTER.md
|
|
14
|
+
--page Also create a page-specific override file in design-system/pages/
|
|
15
|
+
"""
|
|
16
|
+
|
|
17
|
+
import argparse
|
|
18
|
+
import sys
|
|
19
|
+
import io
|
|
20
|
+
from core import CSV_CONFIG, AVAILABLE_STACKS, MAX_RESULTS, search, search_stack
|
|
21
|
+
from design_system import generate_design_system, persist_design_system
|
|
22
|
+
|
|
23
|
+
# Force UTF-8 for stdout/stderr to handle emojis on Windows (cp1252 default)
|
|
24
|
+
if sys.stdout.encoding and sys.stdout.encoding.lower() != 'utf-8':
|
|
25
|
+
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
|
|
26
|
+
if sys.stderr.encoding and sys.stderr.encoding.lower() != 'utf-8':
|
|
27
|
+
sys.stderr = io.TextIOWrapper(sys.stderr.buffer, encoding='utf-8')
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def format_output(result):
|
|
31
|
+
"""Format results for Claude consumption (token-optimized)"""
|
|
32
|
+
if "error" in result:
|
|
33
|
+
return f"Error: {result['error']}"
|
|
34
|
+
|
|
35
|
+
output = []
|
|
36
|
+
if result.get("stack"):
|
|
37
|
+
output.append(f"## UI Pro Max Stack Guidelines")
|
|
38
|
+
output.append(f"**Stack:** {result['stack']} | **Query:** {result['query']}")
|
|
39
|
+
else:
|
|
40
|
+
output.append(f"## UI Pro Max Search Results")
|
|
41
|
+
output.append(f"**Domain:** {result['domain']} | **Query:** {result['query']}")
|
|
42
|
+
output.append(f"**Source:** {result['file']} | **Found:** {result['count']} results\n")
|
|
43
|
+
|
|
44
|
+
for i, row in enumerate(result['results'], 1):
|
|
45
|
+
output.append(f"### Result {i}")
|
|
46
|
+
for key, value in row.items():
|
|
47
|
+
value_str = str(value)
|
|
48
|
+
if len(value_str) > 300:
|
|
49
|
+
value_str = value_str[:300] + "..."
|
|
50
|
+
output.append(f"- **{key}:** {value_str}")
|
|
51
|
+
output.append("")
|
|
52
|
+
|
|
53
|
+
return "\n".join(output)
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
if __name__ == "__main__":
|
|
57
|
+
parser = argparse.ArgumentParser(description="UI Pro Max Search")
|
|
58
|
+
parser.add_argument("query", help="Search query")
|
|
59
|
+
parser.add_argument("--domain", "-d", choices=list(CSV_CONFIG.keys()), help="Search domain")
|
|
60
|
+
parser.add_argument("--stack", "-s", choices=AVAILABLE_STACKS, help=f"Stack-specific search. Available: {', '.join(AVAILABLE_STACKS)}")
|
|
61
|
+
parser.add_argument("--max-results", "-n", type=int, default=MAX_RESULTS, help="Max results (default: 3)")
|
|
62
|
+
parser.add_argument("--json", action="store_true", help="Output as JSON")
|
|
63
|
+
# Design system generation
|
|
64
|
+
parser.add_argument("--design-system", "-ds", action="store_true", help="Generate complete design system recommendation")
|
|
65
|
+
parser.add_argument("--project-name", "-p", type=str, default=None, help="Project name for design system output")
|
|
66
|
+
parser.add_argument("--format", "-f", choices=["ascii", "markdown"], default="ascii", help="Output format for design system")
|
|
67
|
+
# Persistence (Master + Overrides pattern)
|
|
68
|
+
parser.add_argument("--persist", action="store_true", help="Save design system to design-system/MASTER.md (creates hierarchical structure)")
|
|
69
|
+
parser.add_argument("--page", type=str, default=None, help="Create page-specific override file in design-system/pages/")
|
|
70
|
+
parser.add_argument("--output-dir", "-o", type=str, default=None, help="Output directory for persisted files (default: current directory)")
|
|
71
|
+
|
|
72
|
+
args = parser.parse_args()
|
|
73
|
+
|
|
74
|
+
# Design system takes priority
|
|
75
|
+
if args.design_system:
|
|
76
|
+
result = generate_design_system(
|
|
77
|
+
args.query,
|
|
78
|
+
args.project_name,
|
|
79
|
+
args.format,
|
|
80
|
+
persist=args.persist,
|
|
81
|
+
page=args.page,
|
|
82
|
+
output_dir=args.output_dir
|
|
83
|
+
)
|
|
84
|
+
print(result)
|
|
85
|
+
|
|
86
|
+
# Print persistence confirmation
|
|
87
|
+
if args.persist:
|
|
88
|
+
project_slug = args.project_name.lower().replace(' ', '-') if args.project_name else "default"
|
|
89
|
+
print("\n" + "=" * 60)
|
|
90
|
+
print(f"✅ Design system persisted to design-system/{project_slug}/")
|
|
91
|
+
print(f" 📄 design-system/{project_slug}/MASTER.md (Global Source of Truth)")
|
|
92
|
+
if args.page:
|
|
93
|
+
page_filename = args.page.lower().replace(' ', '-')
|
|
94
|
+
print(f" 📄 design-system/{project_slug}/pages/{page_filename}.md (Page Overrides)")
|
|
95
|
+
print("")
|
|
96
|
+
print(f"📖 Usage: When building a page, check design-system/{project_slug}/pages/[page].md first.")
|
|
97
|
+
print(f" If exists, its rules override MASTER.md. Otherwise, use MASTER.md.")
|
|
98
|
+
print("=" * 60)
|
|
99
|
+
# Stack search
|
|
100
|
+
elif args.stack:
|
|
101
|
+
result = search_stack(args.query, args.stack, args.max_results)
|
|
102
|
+
if args.json:
|
|
103
|
+
import json
|
|
104
|
+
print(json.dumps(result, indent=2, ensure_ascii=False))
|
|
105
|
+
else:
|
|
106
|
+
print(format_output(result))
|
|
107
|
+
# Domain search
|
|
108
|
+
else:
|
|
109
|
+
result = search(args.query, args.domain, args.max_results)
|
|
110
|
+
if args.json:
|
|
111
|
+
import json
|
|
112
|
+
print(json.dumps(result, indent=2, ensure_ascii=False))
|
|
113
|
+
else:
|
|
114
|
+
print(format_output(result))
|
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
# Git Repository Structure Guide
|
|
2
|
+
|
|
3
|
+
## 📁 Folder Structure Strategy
|
|
4
|
+
|
|
5
|
+
Project ini menggunakan strategi **"empty folder tracking"** dengan `.gitkeep` files.
|
|
6
|
+
|
|
7
|
+
### Concept:
|
|
8
|
+
- Git tidak bisa track folder kosong
|
|
9
|
+
- Solusi: Tambahkan file `.gitkeep` di folder yang ingin di-track
|
|
10
|
+
- File lain di folder tersebut tetap di-ignore
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## 🎯 Current Configuration
|
|
15
|
+
|
|
16
|
+
### Folders with .gitkeep:
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
vas_vibe/
|
|
20
|
+
├── codes/.gitkeep ✅ Folder tracked, contents ignored
|
|
21
|
+
├── specifications/.gitkeep ✅ Folder tracked, contents ignored
|
|
22
|
+
└── tests/.gitkeep ✅ Folder tracked, contents ignored
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
### .gitignore Rules:
|
|
26
|
+
|
|
27
|
+
```gitignore
|
|
28
|
+
# Ignore all files in folder
|
|
29
|
+
codes/*
|
|
30
|
+
specifications/*
|
|
31
|
+
tests/*
|
|
32
|
+
|
|
33
|
+
# But keep .gitkeep files
|
|
34
|
+
!codes/.gitkeep
|
|
35
|
+
!specifications/.gitkeep
|
|
36
|
+
!tests/.gitkeep
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## 🔍 How It Works
|
|
42
|
+
|
|
43
|
+
### Pattern Explanation:
|
|
44
|
+
|
|
45
|
+
1. **`codes/*`** - Ignore semua file di dalam folder `codes/`
|
|
46
|
+
2. **`!codes/.gitkeep`** - Tapi **jangan** ignore file `.gitkeep`
|
|
47
|
+
|
|
48
|
+
Simbol `!` adalah **negation pattern** yang membatalkan ignore rule sebelumnya.
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## ✅ Verification
|
|
53
|
+
|
|
54
|
+
### Check what gets tracked:
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
# See all tracked files
|
|
58
|
+
git add .
|
|
59
|
+
git status
|
|
60
|
+
|
|
61
|
+
# Output should show:
|
|
62
|
+
# .gitignore
|
|
63
|
+
# codes/.gitkeep
|
|
64
|
+
# specifications/.gitkeep
|
|
65
|
+
# tests/.gitkeep
|
|
66
|
+
# README.md
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### Check what gets ignored:
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
# See ignored files
|
|
73
|
+
git status --ignored
|
|
74
|
+
|
|
75
|
+
# Output should show:
|
|
76
|
+
# codes/ (all files except .gitkeep)
|
|
77
|
+
# specifications/ (all files except .gitkeep)
|
|
78
|
+
# tests/ (all files except .gitkeep)
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
## 📊 Result
|
|
84
|
+
|
|
85
|
+
### When someone clones the repository:
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
git clone <repository-url>
|
|
89
|
+
cd vas_vibe
|
|
90
|
+
ls -la
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
**They will get:**
|
|
94
|
+
```
|
|
95
|
+
vas_vibe/
|
|
96
|
+
├── .gitignore ✅ Present
|
|
97
|
+
├── README.md ✅ Present
|
|
98
|
+
├── codes/ ✅ Folder exists (empty except .gitkeep)
|
|
99
|
+
│ └── .gitkeep ✅ Present
|
|
100
|
+
├── specifications/ ✅ Folder exists (empty except .gitkeep)
|
|
101
|
+
│ └── .gitkeep ✅ Present
|
|
102
|
+
└── tests/ ✅ Folder exists (empty except .gitkeep)
|
|
103
|
+
└── .gitkeep ✅ Present
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
**They will NOT get:**
|
|
107
|
+
- ❌ Files in `codes/` (except `.gitkeep`)
|
|
108
|
+
- ❌ Files in `specifications/` (except `.gitkeep`)
|
|
109
|
+
- ❌ Files in `tests/` (except `.gitkeep`)
|
|
110
|
+
- ❌ `project_overview.md`
|
|
111
|
+
- ❌ `development_log.md`
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
## 🎯 Use Cases
|
|
116
|
+
|
|
117
|
+
### Scenario 1: Fresh Clone
|
|
118
|
+
```bash
|
|
119
|
+
git clone <repo>
|
|
120
|
+
cd vas_vibe
|
|
121
|
+
# Folders exist but are empty
|
|
122
|
+
# Developer can start adding code to codes/ folder
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
### Scenario 2: Working with Code
|
|
126
|
+
```bash
|
|
127
|
+
cd codes
|
|
128
|
+
npm install
|
|
129
|
+
npm run dev
|
|
130
|
+
# All development files stay local
|
|
131
|
+
# .gitkeep ensures folder structure is preserved
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
### Scenario 3: Team Collaboration
|
|
135
|
+
```bash
|
|
136
|
+
# Each developer has:
|
|
137
|
+
# - Same folder structure (thanks to .gitkeep)
|
|
138
|
+
# - Own local code (not tracked)
|
|
139
|
+
# - Shared documentation (README, etc.)
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
## 💡 Advanced Patterns
|
|
145
|
+
|
|
146
|
+
### If you want to track SOME files in codes:
|
|
147
|
+
|
|
148
|
+
```gitignore
|
|
149
|
+
# In .gitignore:
|
|
150
|
+
codes/*
|
|
151
|
+
!codes/.gitkeep
|
|
152
|
+
!codes/important-config.json
|
|
153
|
+
!codes/README.md
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
### If you want to track a subfolder:
|
|
157
|
+
|
|
158
|
+
```gitignore
|
|
159
|
+
# In .gitignore:
|
|
160
|
+
codes/*
|
|
161
|
+
!codes/.gitkeep
|
|
162
|
+
!codes/shared/
|
|
163
|
+
codes/shared/*
|
|
164
|
+
!codes/shared/.gitkeep
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
---
|
|
168
|
+
|
|
169
|
+
## 🔧 Common Commands
|
|
170
|
+
|
|
171
|
+
### Add everything (respecting .gitignore):
|
|
172
|
+
```bash
|
|
173
|
+
git add .
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
### Check what will be committed:
|
|
177
|
+
```bash
|
|
178
|
+
git status
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
### See ignored files:
|
|
182
|
+
```bash
|
|
183
|
+
git status --ignored
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
### Force add an ignored file (if needed):
|
|
187
|
+
```bash
|
|
188
|
+
git add -f codes/special-file.ts
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
### Remove a file from tracking (keep local):
|
|
192
|
+
```bash
|
|
193
|
+
git rm --cached codes/some-file.ts
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
---
|
|
197
|
+
|
|
198
|
+
## 📝 Benefits
|
|
199
|
+
|
|
200
|
+
### ✅ Pros:
|
|
201
|
+
1. **Folder structure preserved** - New developers get correct structure
|
|
202
|
+
2. **No accidental commits** - Code stays local
|
|
203
|
+
3. **Clean repository** - Only essential files tracked
|
|
204
|
+
4. **Easy setup** - Clone and start coding
|
|
205
|
+
5. **Flexible** - Can add exceptions with `!` pattern
|
|
206
|
+
|
|
207
|
+
### ⚠️ Considerations:
|
|
208
|
+
1. Must document which files go in which folder
|
|
209
|
+
2. Developers need to know structure
|
|
210
|
+
3. `.gitkeep` files add minimal overhead
|
|
211
|
+
|
|
212
|
+
---
|
|
213
|
+
|
|
214
|
+
## 🎓 Best Practices
|
|
215
|
+
|
|
216
|
+
### DO:
|
|
217
|
+
- ✅ Keep `.gitkeep` files simple (just a comment)
|
|
218
|
+
- ✅ Document folder purpose in `.gitkeep`
|
|
219
|
+
- ✅ Use consistent naming (`.gitkeep` is convention)
|
|
220
|
+
- ✅ Add README.md in root to explain structure
|
|
221
|
+
|
|
222
|
+
### DON'T:
|
|
223
|
+
- ❌ Put important code in `.gitkeep`
|
|
224
|
+
- ❌ Forget to add `!` negation in `.gitignore`
|
|
225
|
+
- ❌ Delete `.gitkeep` files
|
|
226
|
+
- ❌ Track both folder contents AND use `.gitkeep`
|
|
227
|
+
|
|
228
|
+
---
|
|
229
|
+
|
|
230
|
+
## 📚 References
|
|
231
|
+
|
|
232
|
+
### Git Ignore Patterns:
|
|
233
|
+
- `*` - Match all files
|
|
234
|
+
- `!` - Negate previous pattern
|
|
235
|
+
- `*/` - Match directories only
|
|
236
|
+
- `**` - Match nested directories
|
|
237
|
+
|
|
238
|
+
### Examples:
|
|
239
|
+
```gitignore
|
|
240
|
+
# Ignore all .log files
|
|
241
|
+
*.log
|
|
242
|
+
|
|
243
|
+
# But keep important.log
|
|
244
|
+
!important.log
|
|
245
|
+
|
|
246
|
+
# Ignore all in folder
|
|
247
|
+
folder/*
|
|
248
|
+
|
|
249
|
+
# But keep .gitkeep
|
|
250
|
+
!folder/.gitkeep
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
---
|
|
254
|
+
|
|
255
|
+
## ✅ Current Status
|
|
256
|
+
|
|
257
|
+
```
|
|
258
|
+
Repository Structure: ✅ Configured
|
|
259
|
+
.gitkeep Files: ✅ Created (3 files)
|
|
260
|
+
.gitignore Rules: ✅ Updated with negation
|
|
261
|
+
Folder Tracking: ✅ Active
|
|
262
|
+
Contents Ignored: ✅ Working
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
**Ready to commit and push!** 🚀
|
|
266
|
+
|
|
267
|
+
---
|
|
268
|
+
|
|
269
|
+
**Last Updated:** December 30, 2025
|
|
270
|
+
**Status:** ✅ Complete
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# Example Project README (VasVibe)
|
|
2
|
+
|
|
3
|
+
> This file is shipped as a reference example by `create-vasvibe`. It shows
|
|
4
|
+
> what a real project README built on top of this scaffold can look like.
|
|
5
|
+
> You can safely delete this file or use it as a starting point for your own
|
|
6
|
+
> `README.md`.
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# 🚢 VasVibe - Platform Reservasi Kapal Wisata Labuan Bajo
|
|
11
|
+
|
|
12
|
+
Platform reservasi online untuk jasa layanan pariwisata kapal di Labuan Bajo. Sistem lengkap dengan backoffice management dan customer booking platform.
|
|
13
|
+
|
|
14
|
+
## 📋 Project Structure
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
vas_vibe/
|
|
18
|
+
├── .gitignore # Git ignore rules
|
|
19
|
+
├── README.md # This file
|
|
20
|
+
├── project_overview.md # Project overview & requirements
|
|
21
|
+
├── codes/ # Source code (ignored by git)
|
|
22
|
+
│ ├── app/ # Next.js app directory
|
|
23
|
+
│ ├── components/ # React components
|
|
24
|
+
│ ├── lib/ # Utility functions & configs
|
|
25
|
+
│ ├── prisma/ # Database schema & migrations
|
|
26
|
+
│ ├── public/ # Static assets
|
|
27
|
+
│ └── ...
|
|
28
|
+
├── specifications/ # Technical specifications (ignored by git)
|
|
29
|
+
│ ├── SPEC-000-*.md # Environment setup
|
|
30
|
+
│ ├── SPEC-001-*.md # Database schema
|
|
31
|
+
│ ├── SPEC-002-*.md # Authentication system
|
|
32
|
+
│ └── SPEC-003-*.md # Booking management
|
|
33
|
+
└── tests/ # Test files
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## 🎯 Key Features
|
|
37
|
+
|
|
38
|
+
### Backoffice System
|
|
39
|
+
- Dashboard, booking management, payment recording
|
|
40
|
+
- Customer, ship, pricing management
|
|
41
|
+
- Reports, audit logs, role-based access control
|
|
42
|
+
|
|
43
|
+
### Customer Platform
|
|
44
|
+
- Online booking, payment gateway, customer dashboard, e-tickets
|
|
45
|
+
|
|
46
|
+
## 🛠️ Tech Stack
|
|
47
|
+
|
|
48
|
+
- **Framework:** Next.js 15 (App Router)
|
|
49
|
+
- **Language:** TypeScript
|
|
50
|
+
- **Database:** PostgreSQL 16
|
|
51
|
+
- **ORM:** Prisma
|
|
52
|
+
- **Authentication:** NextAuth.js v5
|
|
53
|
+
- **UI:** Tailwind CSS + Shadcn/UI
|
|
54
|
+
- **Icons:** Lucide React
|
|
55
|
+
- **Validation:** Zod
|
|
56
|
+
- **Date Handling:** date-fns
|
|
57
|
+
- **Excel Export:** xlsx
|
|
58
|
+
- **Deployment:** Docker Compose
|
|
59
|
+
|
|
60
|
+
## 🚀 Getting Started
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
# 1. Clone
|
|
64
|
+
git clone <repository-url>
|
|
65
|
+
cd {{projectName}}
|
|
66
|
+
|
|
67
|
+
# 2. Setup code workspace
|
|
68
|
+
cd codes
|
|
69
|
+
npm install
|
|
70
|
+
cp .env.example .env
|
|
71
|
+
|
|
72
|
+
# 3. Start services
|
|
73
|
+
docker compose up -d
|
|
74
|
+
npx prisma migrate dev
|
|
75
|
+
npm run prisma:seed
|
|
76
|
+
npm run dev
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
This file is illustrative only. See `README.md` for the actual project setup.
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# {{projectName}}
|
|
2
|
+
|
|
3
|
+
Project ini di-scaffold dengan [`create-vasvibe`](https://www.npmjs.com/package/create-vasvibe), starter base yang sudah disiapkan dengan agent prompts (Claude, OpenCode, GitHub Copilot) dan struktur folder kerja standar tim.
|
|
4
|
+
|
|
5
|
+
## Struktur folder
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
{{projectName}}/
|
|
9
|
+
├── .agents/ # Skills bersama (developer, pm, find-skills, dll)
|
|
10
|
+
├── .claude/ # Claude Code agents & skills
|
|
11
|
+
├── .opencode/ # OpenCode commands & skills
|
|
12
|
+
├── .github/prompts/ # GitHub Copilot prompt files
|
|
13
|
+
├── agent/workflows/ # Workflow markdown agnostik tooling
|
|
14
|
+
├── codes/ # Source code (di-gitignore by default)
|
|
15
|
+
├── specifications/ # Dokumen spek teknis (di-gitignore by default)
|
|
16
|
+
├── tests/ # Test files (di-gitignore by default)
|
|
17
|
+
├── project_overview_example.md
|
|
18
|
+
├── skills-lock.json
|
|
19
|
+
├── GIT_STRUCTURE_GUIDE.md
|
|
20
|
+
└── PROJECT_README.example.md
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Mulai
|
|
24
|
+
|
|
25
|
+
1. **Konfigurasi AI provider untuk OpenCode** (opsional)
|
|
26
|
+
|
|
27
|
+
Buat `opencode.json` di root project sesuai panduan di https://opencode.ai/docs.
|
|
28
|
+
|
|
29
|
+
2. **Mulai develop**
|
|
30
|
+
|
|
31
|
+
- Tulis `project_overview.md` di root (contoh tersedia di `project_overview_example.md`).
|
|
32
|
+
- Letakkan source code di `codes/`.
|
|
33
|
+
- Letakkan dokumen spek di `specifications/`.
|
|
34
|
+
- Letakkan test di `tests/`.
|
|
35
|
+
|
|
36
|
+
3. **Pakai agent**
|
|
37
|
+
|
|
38
|
+
- Claude Code: agent tersedia di `.claude/agents/`.
|
|
39
|
+
- OpenCode: command tersedia di `.opencode/commands/`.
|
|
40
|
+
- GitHub Copilot: prompt files di `.github/prompts/`.
|
|
41
|
+
|
|
42
|
+
## Catatan tracking git
|
|
43
|
+
|
|
44
|
+
Folder `codes/`, `specifications/`, dan `tests/` di-track secara struktur (lewat `.gitkeep`) tetapi isinya di-`gitignore` by default. Lihat `GIT_STRUCTURE_GUIDE.md` untuk detailnya, atau ubah `.gitignore` sesuai kebutuhan project.
|
|
45
|
+
|
|
46
|
+
## Contoh project nyata
|
|
47
|
+
|
|
48
|
+
Lihat `PROJECT_README.example.md` untuk contoh README project nyata yang dibangun dengan starter ini (VasVibe).
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
Generated {{year}}.
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
# {{projectName}} .gitignore
|
|
2
|
+
# Generated by create-vasvibe
|
|
3
|
+
|
|
4
|
+
# ==========================================
|
|
5
|
+
# Project Folders to Ignore
|
|
6
|
+
# ==========================================
|
|
7
|
+
# Ignore all files in codes folder (development code)
|
|
8
|
+
codes/*
|
|
9
|
+
!codes/.gitkeep
|
|
10
|
+
|
|
11
|
+
# Ignore all files in specifications folder (project specs)
|
|
12
|
+
specifications/*
|
|
13
|
+
!specifications/.gitkeep
|
|
14
|
+
|
|
15
|
+
# Ignore all files in tests folder (test files)
|
|
16
|
+
tests/*
|
|
17
|
+
!tests/.gitkeep
|
|
18
|
+
|
|
19
|
+
project_overview.md
|
|
20
|
+
development_log.md
|
|
21
|
+
.mcp.json
|
|
22
|
+
opencode.json
|
|
23
|
+
|
|
24
|
+
# ==========================================
|
|
25
|
+
# OS Files
|
|
26
|
+
# ==========================================
|
|
27
|
+
# macOS
|
|
28
|
+
.DS_Store
|
|
29
|
+
.AppleDouble
|
|
30
|
+
.LSOverride
|
|
31
|
+
._*
|
|
32
|
+
|
|
33
|
+
# Windows
|
|
34
|
+
Thumbs.db
|
|
35
|
+
ehthumbs.db
|
|
36
|
+
Desktop.ini
|
|
37
|
+
$RECYCLE.BIN/
|
|
38
|
+
|
|
39
|
+
# Linux
|
|
40
|
+
*~
|
|
41
|
+
.directory
|
|
42
|
+
|
|
43
|
+
# ==========================================
|
|
44
|
+
# IDE & Editor Files
|
|
45
|
+
# ==========================================
|
|
46
|
+
# VS Code
|
|
47
|
+
.vscode/
|
|
48
|
+
*.code-workspace
|
|
49
|
+
|
|
50
|
+
# JetBrains IDEs (WebStorm, IntelliJ, etc.)
|
|
51
|
+
.idea/
|
|
52
|
+
*.iml
|
|
53
|
+
*.iws
|
|
54
|
+
*.ipr
|
|
55
|
+
|
|
56
|
+
# Sublime Text
|
|
57
|
+
*.sublime-project
|
|
58
|
+
*.sublime-workspace
|
|
59
|
+
|
|
60
|
+
# Vim
|
|
61
|
+
*.swp
|
|
62
|
+
*.swo
|
|
63
|
+
|
|
64
|
+
# Emacs
|
|
65
|
+
\#*\#
|
|
66
|
+
.\#*
|
|
67
|
+
|
|
68
|
+
# ==========================================
|
|
69
|
+
# Node.js
|
|
70
|
+
# ==========================================
|
|
71
|
+
node_modules/
|
|
72
|
+
npm-debug.log*
|
|
73
|
+
yarn-debug.log*
|
|
74
|
+
yarn-error.log*
|
|
75
|
+
lerna-debug.log*
|
|
76
|
+
.pnpm-debug.log*
|
|
77
|
+
|
|
78
|
+
# ==========================================
|
|
79
|
+
# Frontend frameworks
|
|
80
|
+
# ==========================================
|
|
81
|
+
.next/
|
|
82
|
+
out/
|
|
83
|
+
build/
|
|
84
|
+
dist/
|
|
85
|
+
|
|
86
|
+
# ==========================================
|
|
87
|
+
# Environment Variables
|
|
88
|
+
# ==========================================
|
|
89
|
+
.env
|
|
90
|
+
.env.local
|
|
91
|
+
.env.development.local
|
|
92
|
+
.env.test.local
|
|
93
|
+
.env.production.local
|
|
94
|
+
.env*.local
|
|
95
|
+
|
|
96
|
+
# ==========================================
|
|
97
|
+
# Database
|
|
98
|
+
# ==========================================
|
|
99
|
+
*.sqlite
|
|
100
|
+
*.sqlite3
|
|
101
|
+
*.db
|
|
102
|
+
|
|
103
|
+
# Prisma
|
|
104
|
+
prisma/migrations/
|
|
105
|
+
!prisma/migrations/.gitkeep
|
|
106
|
+
|
|
107
|
+
# ==========================================
|
|
108
|
+
# Logs
|
|
109
|
+
# ==========================================
|
|
110
|
+
logs/
|
|
111
|
+
*.log
|
|
112
|
+
|
|
113
|
+
# ==========================================
|
|
114
|
+
# Testing
|
|
115
|
+
# ==========================================
|
|
116
|
+
coverage/
|
|
117
|
+
.nyc_output/
|
|
118
|
+
*.lcov
|
|
119
|
+
|
|
120
|
+
# ==========================================
|
|
121
|
+
# Build & Cache
|
|
122
|
+
# ==========================================
|
|
123
|
+
.cache/
|
|
124
|
+
.parcel-cache/
|
|
125
|
+
.turbo/
|
|
126
|
+
*.tsbuildinfo
|
|
127
|
+
|
|
128
|
+
# ==========================================
|
|
129
|
+
# Dependencies
|
|
130
|
+
# ==========================================
|
|
131
|
+
jspm_packages/
|
|
132
|
+
|
|
133
|
+
# ==========================================
|
|
134
|
+
# Miscellaneous
|
|
135
|
+
# ==========================================
|
|
136
|
+
.vercel
|
|
137
|
+
.netlify
|
|
138
|
+
.firebase/
|
|
139
|
+
|
|
140
|
+
# Temporary files
|
|
141
|
+
*.tmp
|
|
142
|
+
*.temp
|
|
143
|
+
tmp/
|
|
144
|
+
temp/
|
|
145
|
+
|
|
146
|
+
# OpenCode local artifacts
|
|
147
|
+
.opencode/node_modules/
|
|
148
|
+
.opencode/bun.lock
|