@etus/bhono-app 0.1.6 → 0.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/package.json +3 -2
  2. package/templates/base/.claude/commands/check-skill-rules.md +112 -29
  3. package/templates/base/.claude/commands/linear/implement-issue.md +383 -55
  4. package/templates/base/.claude/commands/ship.md +77 -13
  5. package/templates/base/.claude/hooks/package-lock.json +0 -419
  6. package/templates/base/.claude/hooks/skill-activation-prompt.ts +185 -113
  7. package/templates/base/.claude/hooks/skill-tool-guard.sh +6 -0
  8. package/templates/base/.claude/hooks/skill-tool-guard.ts +198 -0
  9. package/templates/base/.claude/scripts/validate-skill-rules.sh +55 -32
  10. package/templates/base/.claude/settings.json +18 -11
  11. package/templates/base/.claude/skills/skill-rules.json +326 -173
  12. package/templates/base/.env.example +3 -0
  13. package/templates/base/README.md +9 -7
  14. package/templates/base/config/eslint.config.js +1 -0
  15. package/templates/base/config/wrangler.json +16 -17
  16. package/templates/base/docs/SETUP-GUIDE.md +566 -0
  17. package/templates/base/docs/architecture/README.md +162 -8
  18. package/templates/base/docs/architecture/api-catalog.md +575 -0
  19. package/templates/base/docs/architecture/c4-component.md +309 -0
  20. package/templates/base/docs/architecture/c4-container.md +183 -0
  21. package/templates/base/docs/architecture/c4-context.md +106 -0
  22. package/templates/base/docs/architecture/dependencies.md +327 -0
  23. package/templates/base/docs/architecture/tech-debt.md +184 -0
  24. package/templates/base/package.json +20 -15
  25. package/templates/base/scripts/capture-prod-session.ts +2 -2
  26. package/templates/base/scripts/sync-template.sh +104 -0
  27. package/templates/base/src/server/db/sql.ts +24 -4
  28. package/templates/base/src/server/index.ts +1 -0
  29. package/templates/base/src/server/lib/audited-db.ts +10 -10
  30. package/templates/base/src/server/middleware/account.ts +1 -1
  31. package/templates/base/src/server/middleware/auth.ts +11 -11
  32. package/templates/base/src/server/middleware/rate-limit.ts +3 -6
  33. package/templates/base/src/server/routes/auth/handlers.ts +5 -5
  34. package/templates/base/src/server/routes/auth/test-login.ts +9 -9
  35. package/templates/base/src/server/routes/index.ts +9 -0
  36. package/templates/base/src/server/routes/invitations/handlers.ts +6 -6
  37. package/templates/base/src/server/routes/openapi.ts +1 -1
  38. package/templates/base/src/server/services/accounts.ts +9 -9
  39. package/templates/base/src/server/services/audits.ts +12 -12
  40. package/templates/base/src/server/services/auth.ts +15 -15
  41. package/templates/base/src/server/services/invitations.ts +16 -16
  42. package/templates/base/src/server/services/users.ts +13 -13
  43. package/templates/base/src/shared/types/api.ts +66 -198
  44. package/templates/base/tests/e2e/auth.setup.ts +1 -1
  45. package/templates/base/tests/unit/server/auth/guards.test.ts +1 -1
  46. package/templates/base/tests/unit/server/middleware/auth.test.ts +273 -0
  47. package/templates/base/tests/unit/server/routes/auth/handlers.test.ts +111 -0
  48. package/templates/base/tests/unit/server/routes/users/handlers.test.ts +69 -5
  49. package/templates/base/tests/unit/server/services/accounts.test.ts +148 -0
  50. package/templates/base/tests/unit/server/services/audits.test.ts +219 -0
  51. package/templates/base/tests/unit/server/services/auth.test.ts +480 -3
  52. package/templates/base/tests/unit/server/services/invitations.test.ts +178 -0
  53. package/templates/base/tests/unit/server/services/users.test.ts +363 -8
  54. package/templates/base/tests/unit/shared/schemas.test.ts +1 -1
  55. package/templates/base/vite.config.ts +3 -1
  56. package/templates/base/.github/workflows/test.yml +0 -127
  57. package/templates/base/.husky/pre-push +0 -26
  58. package/templates/base/auth-setup-error.png +0 -0
  59. package/templates/base/pnpm-lock.yaml +0 -8052
  60. package/templates/base/tests/e2e/_auth/.gitkeep +0 -0
  61. package/templates/base/tsconfig.tsbuildinfo +0 -1
@@ -76,20 +76,22 @@
76
76
  ],
77
77
  "SessionStart": [
78
78
  {
79
- "matcher": "startup|resume|compact|clear",
79
+ "matcher": "startup|resume|compact|clear",
80
80
  "hooks": [
81
81
  {
82
82
  "type": "command",
83
- "command": "$CLAUDE_PROJECT_DIR/.claude/scripts/install_pkgs.sh"
83
+ "command": "$CLAUDE_PROJECT_DIR/.claude/scripts/install_pkgs.sh",
84
+ "timeout": 10
85
+ },
86
+ {
87
+ "type": "command",
88
+ "command": "$CLAUDE_PROJECT_DIR/.claude/scripts/validate-skill-rules.sh",
89
+ "timeout": 10
84
90
  },
85
- {
86
- "type": "command",
87
- "command": "$CLAUDE_PROJECT_DIR/.claude/scripts/validate-skill-rules.sh"
88
- },
89
91
  {
90
92
  "type": "command",
91
93
  "command": "echo \"Current date: $(date '+%Y-%m-%d') | Year: $(date +%Y)\"",
92
- "timeout": 5
94
+ "timeout": 10
93
95
  }
94
96
  ]
95
97
  }
@@ -101,13 +103,18 @@
101
103
  {
102
104
  "type": "command",
103
105
  "command": "q=$(cat | jq -r '.tool_input.query'); y=$(date +%Y); echo $q | grep -qE '20[0-9]{2}|latest|recent|current|new|now|today' && nq=\"$q\" || nq=\"$q $y\"; echo \"{\\\"hookSpecificOutput\\\":{\\\"hookEventName\\\":\\\"PreToolUse\\\",\\\"permissionDecision\\\":\\\"allow\\\",\\\"updatedInput\\\":{\\\"query\\\":\\\"$nq\\\"}}}\"",
104
- "timeout": 5
106
+ "timeout": 10
107
+ }
108
+ ]
109
+ },
110
+ {
111
+ "hooks": [
112
+ {
113
+ "type": "command",
114
+ "command": "$CLAUDE_PROJECT_DIR/.claude/hooks/skill-tool-guard.sh"
105
115
  }
106
116
  ]
107
117
  }
108
118
  ]
109
- },
110
- "enabledPlugins": {
111
- "frontend-design@claude-plugins-official": true
112
119
  }
113
120
  }
@@ -1,184 +1,337 @@
1
1
  {
2
- "version": "1.1",
3
- "description": "Skill activation rules for project and user skills",
4
- "skills": {
5
- "architecture-analyzer": {
6
- "type": "domain",
7
- "enforcement": "suggest",
8
- "priority": "high",
9
- "description": "Architectural analysis and documentation - C4 diagrams, ERD, dependency maps, tech debt assessment, API documentation",
10
- "promptTriggers": {
11
- "keywords": [
12
- "analyze architecture",
13
- "architecture analysis",
14
- "document codebase",
15
- "codebase documentation",
16
- "C4 diagram",
17
- "ERD",
18
- "entity relationship",
19
- "dependency map",
20
- "tech debt",
21
- "technical debt",
22
- "architecture report",
23
- "architecture review",
24
- "map dependencies",
25
- "generate diagram",
26
- "system diagram",
27
- "component diagram",
28
- "architecture documentation"
29
- ],
30
- "intentPatterns": [
31
- "(analyze|review|assess).*?architecture",
32
- "(generate|create|build).*?(C4|ERD|diagram|documentation)",
33
- "(map|visualize).*?dependenc",
34
- "(document|analyze).*?codebase",
35
- "tech.*?debt.*(analysis|assessment|report)",
36
- "architecture.*(report|review|assessment)"
37
- ]
38
- }
39
- },
2
+ "version": "1.2",
3
+ "description": "Skill activation rules for project and user skills",
4
+ "skills": {
5
+ "architecture-analyzer": {
6
+ "type": "domain",
7
+ "enforcement": "suggest",
8
+ "priority": "high",
9
+ "description": "Architectural analysis and documentation - C4 diagrams, ERD, dependency maps, tech debt assessment, API documentation",
10
+ "promptTriggers": {
11
+ "keywords": [
12
+ "analyze architecture",
13
+ "architecture analysis",
14
+ "document codebase",
15
+ "codebase documentation",
16
+ "C4 diagram",
17
+ "ERD",
18
+ "entity relationship",
19
+ "dependency map",
20
+ "tech debt",
21
+ "technical debt",
22
+ "architecture report",
23
+ "architecture review",
24
+ "map dependencies",
25
+ "generate diagram",
26
+ "system diagram",
27
+ "component diagram",
28
+ "architecture documentation"
29
+ ],
30
+ "intentPatterns": [
31
+ "(analyze|review|assess).*?architecture",
32
+ "(generate|create|build).*?(C4|ERD|diagram|documentation)",
33
+ "(map|visualize).*?dependenc",
34
+ "(document|analyze).*?codebase",
35
+ "tech.*?debt.*(analysis|assessment|report)",
36
+ "architecture.*(report|review|assessment)"
37
+ ]
38
+ }
39
+ },
40
40
 
41
- "dev-browser": {
42
- "type": "domain",
43
- "enforcement": "suggest",
44
- "priority": "high",
45
- "description": "Browser automation with persistent page state - navigate websites, fill forms, take screenshots, scrape data, test web apps",
46
- "promptTriggers": {
47
- "keywords": [
48
- "browser automation",
49
- "take screenshot",
50
- "fill form",
51
- "click button",
52
- "scrape website",
53
- "scrape page",
54
- "web scraping",
55
- "automate browser",
56
- "test website",
57
- "log into",
58
- "login to website",
59
- "navigate to",
60
- "go to url",
61
- "extract data",
62
- "web automation",
63
- "playwright automation"
64
- ],
65
- "intentPatterns": [
66
- "(go|navigate).*?(to|url|website|page)",
67
- "(click|press).*?(button|link|element)",
68
- "(fill|complete|submit).*?(form|input|field)",
69
- "(take|capture).*?screenshot",
70
- "(scrape|extract).*?(data|content|text|page)",
71
- "(automate|test).*?(browser|website|web)",
72
- "(log|sign).*?in.*?(to|website|page)",
73
- "browser.*(interact|automat)"
74
- ]
75
- }
76
- },
41
+ "dev-browser": {
42
+ "type": "domain",
43
+ "enforcement": "suggest",
44
+ "priority": "high",
45
+ "description": "Browser automation with persistent page state - navigate websites, fill forms, take screenshots, scrape data, test web apps",
46
+ "promptTriggers": {
47
+ "keywords": [
48
+ "browser automation",
49
+ "take screenshot",
50
+ "fill form",
51
+ "click button",
52
+ "scrape website",
53
+ "scrape page",
54
+ "web scraping",
55
+ "automate browser",
56
+ "test website",
57
+ "log into",
58
+ "login to website",
59
+ "navigate to",
60
+ "go to url",
61
+ "extract data",
62
+ "web automation",
63
+ "playwright automation"
64
+ ],
65
+ "intentPatterns": [
66
+ "(go|navigate).*?(to|url|website|page)",
67
+ "(click|press).*?(button|link|element)",
68
+ "(fill|complete|submit).*?(form|input|field)",
69
+ "(take|capture).*?screenshot",
70
+ "(scrape|extract).*?(data|content|text|page)",
71
+ "(automate|test).*?(browser|website|web)",
72
+ "(log|sign).*?in.*?(to|website|page)",
73
+ "browser.*(interact|automat)"
74
+ ]
75
+ }
76
+ },
77
77
 
78
- "linear": {
79
- "type": "domain",
80
- "enforcement": "suggest",
81
- "priority": "high",
82
- "description": "Linear issue tracking - teams, projects, issues, status, labels, comments via CLI scripts",
83
- "promptTriggers": {
84
- "keywords": [
85
- "linear",
86
- "linear issue",
87
- "linear team",
88
- "linear project",
89
- "issue status",
90
- "issue label",
91
- "create issue",
92
- "list issues",
93
- "linear workflow"
94
- ],
95
- "intentPatterns": [
96
- "(list|filter|get).*?linear.*?(issue|team|project)",
97
- "(create|update|archive).*?issue",
98
- "(manage|change).*?(status|priority|label|assignment)",
99
- "(add|view).*?comment"
100
- ]
101
- }
78
+ "linear": {
79
+ "type": "domain",
80
+ "enforcement": "suggest",
81
+ "priority": "high",
82
+ "description": "Linear issue tracking - teams, projects, issues, status, labels, comments via CLI scripts",
83
+ "promptTriggers": {
84
+ "keywords": [
85
+ "linear",
86
+ "linear issue",
87
+ "linear team",
88
+ "linear project",
89
+ "issue status",
90
+ "issue label",
91
+ "create issue",
92
+ "list issues",
93
+ "linear workflow"
94
+ ],
95
+ "intentPatterns": [
96
+ "(list|filter|get).*?linear.*?(issue|team|project)",
97
+ "(create|update|archive).*?issue",
98
+ "(manage|change).*?(status|priority|label|assignment)",
99
+ "(add|view).*?comment"
100
+ ]
101
+ }
102
+ },
103
+
104
+ "playwright-e2e-testing": {
105
+ "type": "domain",
106
+ "enforcement": "suggest",
107
+ "priority": "high",
108
+ "description": "Playwright-specific E2E testing - Page Objects, fixtures, OAuth, API testing, visual regression, debugging",
109
+ "promptTriggers": {
110
+ "keywords": [
111
+ "playwright",
112
+ "playwright test",
113
+ "page object",
114
+ "playwright fixture",
115
+ "playwright oauth",
116
+ "playwright api",
117
+ "visual regression",
118
+ "playwright debug",
119
+ "playwright selector",
120
+ "getByRole",
121
+ "getByText",
122
+ "toBeVisible"
123
+ ],
124
+ "intentPatterns": [
125
+ "(write|create|add).*?playwright.*?test",
126
+ "(debug|fix).*?playwright",
127
+ "playwright.*(oauth|authentication|login)",
128
+ "playwright.*(api|visual|snapshot)",
129
+ "(optimize|improve).*?playwright"
130
+ ]
131
+ },
132
+ "toolGuards": [
133
+ {
134
+ "tool": "Edit",
135
+ "patterns": ["\\.spec\\.ts$", "\\.test\\.ts$", "e2e/.*\\.ts$", "tests/.*\\.ts$"]
102
136
  },
137
+ {
138
+ "tool": "Write",
139
+ "patterns": ["\\.spec\\.ts$", "\\.test\\.ts$", "e2e/.*\\.ts$"]
140
+ }
141
+ ]
142
+ },
103
143
 
104
- "playwright-e2e-testing": {
105
- "type": "domain",
106
- "enforcement": "suggest",
107
- "priority": "high",
108
- "description": "Playwright-specific E2E testing - Page Objects, fixtures, OAuth, API testing, visual regression, debugging",
109
- "promptTriggers": {
110
- "keywords": [
111
- "playwright",
112
- "playwright test",
113
- "page object",
114
- "playwright fixture",
115
- "playwright oauth",
116
- "playwright api",
117
- "visual regression",
118
- "playwright debug",
119
- "playwright selector",
120
- "getByRole",
121
- "getByText",
122
- "toBeVisible"
123
- ],
124
- "intentPatterns": [
125
- "(write|create|add).*?playwright.*?test",
126
- "(debug|fix).*?playwright",
127
- "playwright.*(oauth|authentication|login)",
128
- "playwright.*(api|visual|snapshot)",
129
- "(optimize|improve).*?playwright"
130
- ]
131
- }
144
+ "wrangler": {
145
+ "type": "domain",
146
+ "enforcement": "suggest",
147
+ "priority": "high",
148
+ "description": "Cloudflare Wrangler CLI - Workers deployment, D1, KV, R2, Queues, Workflows, secrets, and local development",
149
+ "promptTriggers": {
150
+ "keywords": [
151
+ "wrangler",
152
+ "cloudflare worker",
153
+ "cloudflare workers",
154
+ "wrangler deploy",
155
+ "wrangler dev",
156
+ "wrangler d1",
157
+ "wrangler kv",
158
+ "wrangler r2",
159
+ "wrangler secret",
160
+ "wrangler queues",
161
+ "wrangler workflows",
162
+ "wrangler pages",
163
+ "wrangler init",
164
+ "cloudflare deploy",
165
+ "worker deploy",
166
+ "worker development"
167
+ ],
168
+ "intentPatterns": [
169
+ "(deploy|publish).*?(worker|cloudflare)",
170
+ "(run|start).*?wrangler",
171
+ "wrangler.*(command|cli|help)",
172
+ "(create|manage|configure).*?(d1|kv|r2|queue|workflow|secret)",
173
+ "(local|dev).*?worker",
174
+ "cloudflare.*(storage|database|queue)"
175
+ ]
176
+ },
177
+ "toolGuards": [
178
+ {
179
+ "tool": "Bash",
180
+ "patterns": ["wrangler deploy", "wrangler publish", "npx wrangler deploy", "pnpm wrangler deploy"]
132
181
  },
182
+ {
183
+ "tool": "Edit",
184
+ "patterns": ["wrangler\\.json$", "wrangler\\.toml$"]
185
+ }
186
+ ]
187
+ },
133
188
 
134
- "wrangler": {
135
- "type": "domain",
136
- "enforcement": "suggest",
137
- "priority": "high",
138
- "description": "Cloudflare Wrangler CLI - Workers deployment, D1, KV, R2, Queues, Workflows, secrets, and local development",
139
- "promptTriggers": {
140
- "keywords": [
141
- "wrangler",
142
- "cloudflare worker",
143
- "cloudflare workers",
144
- "wrangler deploy",
145
- "wrangler dev",
146
- "wrangler d1",
147
- "wrangler kv",
148
- "wrangler r2",
149
- "wrangler secret",
150
- "wrangler queues",
151
- "wrangler workflows",
152
- "wrangler pages",
153
- "wrangler init",
154
- "cloudflare deploy",
155
- "worker deploy",
156
- "worker development"
157
- ],
158
- "intentPatterns": [
159
- "(deploy|publish).*?(worker|cloudflare)",
160
- "(run|start).*?wrangler",
161
- "wrangler.*(command|cli|help)",
162
- "(create|manage|configure).*?(d1|kv|r2|queue|workflow|secret)",
163
- "(local|dev).*?worker",
164
- "cloudflare.*(storage|database|queue)"
165
- ]
166
- }
189
+ "superpowers:verification-before-completion": {
190
+ "type": "guardrail",
191
+ "enforcement": "suggest",
192
+ "priority": "critical",
193
+ "description": "Verify work before claiming completion - run tests, check build, confirm output",
194
+ "promptTriggers": {
195
+ "keywords": [
196
+ "verify",
197
+ "check if it works",
198
+ "make sure it works",
199
+ "test it",
200
+ "run tests"
201
+ ],
202
+ "intentPatterns": [
203
+ "(verify|confirm|check).*?(work|pass|succeed)",
204
+ "(make sure|ensure).*?(work|pass|build)"
205
+ ]
206
+ },
207
+ "toolGuards": [
208
+ {
209
+ "tool": "Bash",
210
+ "patterns": ["git push", "git push origin", "gh pr create", "npm publish", "pnpm publish"]
167
211
  }
212
+ ]
168
213
  },
169
- "notes": {
170
- "current_implementation": "Only promptTriggers are currently functional via UserPromptSubmit hook",
171
- "enforcement_types": {
172
- "suggest": "Skill suggestion appears but doesn't block execution (WORKING)",
173
- "block": "Requires skill to be used before proceeding (NOT IMPLEMENTED)",
174
- "warn": "Shows warning but allows proceeding (NOT IMPLEMENTED)"
175
- },
176
- "priority_levels": {
177
- "critical": "Highest - Always trigger when matched",
178
- "high": "Important - Trigger for most matches",
179
- "medium": "Moderate - Trigger for clear matches",
180
- "low": "Optional - Trigger only for explicit matches"
181
- },
182
- "trigger_detection": "Only prompt-based detection works: keywords (exact match) and intentPatterns (regex)"
214
+
215
+ "superpowers:brainstorming": {
216
+ "type": "guardrail",
217
+ "enforcement": "suggest",
218
+ "priority": "high",
219
+ "description": "Explore requirements and design before implementation",
220
+ "promptTriggers": {
221
+ "keywords": [
222
+ "brainstorm",
223
+ "design",
224
+ "plan feature",
225
+ "new feature",
226
+ "build feature"
227
+ ],
228
+ "intentPatterns": [
229
+ "(create|build|implement|add).*?(feature|component|module|service)",
230
+ "(design|plan|architect).*?(system|feature|solution)"
231
+ ]
232
+ },
233
+ "toolGuards": [
234
+ {
235
+ "tool": "Write",
236
+ "patterns": ["src/.*\\.(ts|tsx|js|jsx)$"]
237
+ }
238
+ ]
239
+ },
240
+
241
+ "superpowers:systematic-debugging": {
242
+ "type": "guardrail",
243
+ "enforcement": "suggest",
244
+ "priority": "high",
245
+ "description": "Systematic approach to debugging - gather evidence before proposing fixes",
246
+ "promptTriggers": {
247
+ "keywords": [
248
+ "debug",
249
+ "fix bug",
250
+ "not working",
251
+ "broken",
252
+ "error",
253
+ "failing"
254
+ ],
255
+ "intentPatterns": [
256
+ "(fix|debug|solve).*?(bug|error|issue|problem)",
257
+ "(why|what).*?(not working|broken|failing|error)",
258
+ "(investigate|diagnose).*?(issue|problem|error)"
259
+ ]
260
+ }
261
+ },
262
+
263
+ "superpowers:test-driven-development": {
264
+ "type": "guardrail",
265
+ "enforcement": "suggest",
266
+ "priority": "medium",
267
+ "description": "Write tests before implementation code",
268
+ "promptTriggers": {
269
+ "keywords": [
270
+ "tdd",
271
+ "test driven",
272
+ "write tests first",
273
+ "test first"
274
+ ],
275
+ "intentPatterns": [
276
+ "(implement|build|create).*?with.*?test",
277
+ "test.*?driven"
278
+ ]
279
+ },
280
+ "toolGuards": [
281
+ {
282
+ "tool": "Write",
283
+ "patterns": ["src/.*(?<!\\.spec|\\.test)\\.(ts|tsx|js|jsx)$"]
284
+ }
285
+ ]
286
+ },
287
+
288
+ "ship": {
289
+ "type": "guardrail",
290
+ "enforcement": "suggest",
291
+ "priority": "high",
292
+ "description": "Automated commit/push workflow with quality checks",
293
+ "promptTriggers": {
294
+ "keywords": [
295
+ "ship",
296
+ "commit and push",
297
+ "push changes",
298
+ "create pr",
299
+ "pull request"
300
+ ],
301
+ "intentPatterns": [
302
+ "(commit|push).*?(changes|code)",
303
+ "(create|open).*?(pr|pull request)",
304
+ "ship.*?(it|this|code|changes)"
305
+ ]
306
+ },
307
+ "toolGuards": [
308
+ {
309
+ "tool": "Bash",
310
+ "patterns": ["git commit", "git push"]
311
+ }
312
+ ]
313
+ }
314
+ },
315
+ "notes": {
316
+ "version_history": {
317
+ "1.0": "Initial version with promptTriggers only",
318
+ "1.1": "Added notes and documentation",
319
+ "1.2": "Added toolGuards for PreToolUse hook"
320
+ },
321
+ "enforcement_types": {
322
+ "suggest": "Skill suggestion appears but doesn't block execution",
323
+ "block": "Requires skill to be used before proceeding (NOT IMPLEMENTED)",
324
+ "warn": "Shows warning but allows proceeding (NOT IMPLEMENTED)"
325
+ },
326
+ "priority_levels": {
327
+ "critical": "Highest - Always trigger, should be used",
328
+ "high": "Important - Strongly recommended",
329
+ "medium": "Moderate - Good to use if relevant",
330
+ "low": "Optional - Nice to have"
331
+ },
332
+ "trigger_types": {
333
+ "promptTriggers": "Activated via UserPromptSubmit hook based on user prompt",
334
+ "toolGuards": "Activated via PreToolUse hook before specific tool executions"
183
335
  }
336
+ }
184
337
  }
@@ -27,3 +27,6 @@ APP_URL=http://localhost:3000
27
27
  # Optional
28
28
  CORS_ORIGINS=*
29
29
  LOG_LEVEL=info
30
+
31
+ # npm (publishing)
32
+ NPM_TOKEN=your-npm-token
@@ -96,8 +96,8 @@ This boilerplate provides everything you need to build a modern, secure, and sca
96
96
 
97
97
  ```bash
98
98
  # Clone the repository
99
- git clone https://github.com/your-org/{{projectName}}.git
100
- cd {{projectName}}
99
+ git clone https://github.com/your-org/hono-boilerplate.git
100
+ cd hono-boilerplate
101
101
 
102
102
  # Install dependencies
103
103
  pnpm install
@@ -237,6 +237,8 @@ pnpm dlx @etus/bhono-app <project-name>
237
237
  npm init bhono-app <project-name>
238
238
  ```
239
239
 
240
+ If the CLI cannot find local templates, it will clone the default Bhono template repo. You can override this by setting `BHONO_TEMPLATE_REPO` (or `ETUS_TEMPLATE_REPO`) to a git URL.
241
+
240
242
  ---
241
243
 
242
244
  ## Database Schema
@@ -483,17 +485,17 @@ wrangler deploy --config config/wrangler.json
483
485
 
484
486
  ```json
485
487
  {
486
- "name": "{{projectName}}",
488
+ "name": "hono-boilerplate",
487
489
  "main": "../src/server/index.ts",
488
490
  "compatibility_date": "2025-01-01",
489
491
  "compatibility_flags": ["nodejs_compat"],
490
492
  "d1_databases": [{
491
493
  "binding": "DB",
492
- "database_name": "{{projectName}}-db"
494
+ "database_name": "boilerplate-db"
493
495
  }],
494
496
  "r2_buckets": [{
495
497
  "binding": "R2_BUCKET",
496
- "bucket_name": "{{projectName}}-storage"
498
+ "bucket_name": "boilerplate-storage"
497
499
  }],
498
500
  "kv_namespaces": [{
499
501
  "binding": "SESSIONS",
@@ -514,10 +516,10 @@ wrangler deploy --config config/wrangler.json
514
516
 
515
517
  ```bash
516
518
  # Create D1 database
517
- wrangler d1 create {{projectName}}-db
519
+ wrangler d1 create boilerplate-db
518
520
 
519
521
  # Create R2 bucket
520
- wrangler r2 bucket create {{projectName}}-storage
522
+ wrangler r2 bucket create boilerplate-storage
521
523
 
522
524
  # Create KV namespace
523
525
  wrangler kv:namespace create SESSIONS
@@ -37,6 +37,7 @@ export default tseslint.config(
37
37
  "**/.pnpm*",
38
38
  "**/config/**",
39
39
  "**/.test-output/**",
40
+ "**/scripts/**",
40
41
  ],
41
42
  },
42
43