@nextsparkjs/ai-workflow 0.1.0-beta.100

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 (272) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +115 -0
  3. package/claude/_docs/workflows-optimizations.md +359 -0
  4. package/claude/agents/api-tester.md +634 -0
  5. package/claude/agents/architecture-supervisor.md +1351 -0
  6. package/claude/agents/backend-developer.md +997 -0
  7. package/claude/agents/backend-validator.md +417 -0
  8. package/claude/agents/bdd-docs-writer.md +737 -0
  9. package/claude/agents/block-developer.md +677 -0
  10. package/claude/agents/code-reviewer.md +1432 -0
  11. package/claude/agents/db-developer.md +721 -0
  12. package/claude/agents/db-validator.md +407 -0
  13. package/claude/agents/demo-video-generator.md +493 -0
  14. package/claude/agents/documentation-writer.md +1268 -0
  15. package/claude/agents/frontend-developer.md +1234 -0
  16. package/claude/agents/frontend-validator.md +777 -0
  17. package/claude/agents/functional-validator.md +630 -0
  18. package/claude/agents/mock-analyst.md +387 -0
  19. package/claude/agents/product-manager.md +963 -0
  20. package/claude/agents/qa-automation.md +1762 -0
  21. package/claude/agents/release-manager.md +634 -0
  22. package/claude/agents/selectors-translator.md +262 -0
  23. package/claude/agents/unit-test-writer.md +785 -0
  24. package/claude/agents/visual-comparator.md +329 -0
  25. package/claude/agents/workflow-maintainer.md +352 -0
  26. package/claude/commands/do/README.md +88 -0
  27. package/claude/commands/do/create-api.md +64 -0
  28. package/claude/commands/do/create-entity.md +66 -0
  29. package/claude/commands/do/create-migration.md +64 -0
  30. package/claude/commands/do/create-plugin.md +56 -0
  31. package/claude/commands/do/create-theme.md +70 -0
  32. package/claude/commands/do/mock-data.md +67 -0
  33. package/claude/commands/do/reset-db.md +71 -0
  34. package/claude/commands/do/setup-scheduled-action.md +75 -0
  35. package/claude/commands/do/sync-code-review.md +117 -0
  36. package/claude/commands/do/update-selectors.md +112 -0
  37. package/claude/commands/do/use-skills.md +90 -0
  38. package/claude/commands/do/validate-blocks.md +69 -0
  39. package/claude/commands/how-to/README.md +261 -0
  40. package/claude/commands/how-to/add-metadata.md +692 -0
  41. package/claude/commands/how-to/add-taxonomies.md +806 -0
  42. package/claude/commands/how-to/add-translations.md +571 -0
  43. package/claude/commands/how-to/create-api.md +577 -0
  44. package/claude/commands/how-to/create-block.md +575 -0
  45. package/claude/commands/how-to/create-child-entities.md +771 -0
  46. package/claude/commands/how-to/create-entity.md +597 -0
  47. package/claude/commands/how-to/create-migrations.md +605 -0
  48. package/claude/commands/how-to/create-plugin.md +654 -0
  49. package/claude/commands/how-to/customize-app.md +481 -0
  50. package/claude/commands/how-to/customize-dashboard.md +553 -0
  51. package/claude/commands/how-to/customize-theme.md +438 -0
  52. package/claude/commands/how-to/define-features-flows.md +632 -0
  53. package/claude/commands/how-to/deploy.md +507 -0
  54. package/claude/commands/how-to/handle-file-uploads.md +746 -0
  55. package/claude/commands/how-to/implement-search.md +1001 -0
  56. package/claude/commands/how-to/install-plugins.md +352 -0
  57. package/claude/commands/how-to/manage-test-coverage.md +984 -0
  58. package/claude/commands/how-to/run-tests.md +400 -0
  59. package/claude/commands/how-to/set-app-languages.md +601 -0
  60. package/claude/commands/how-to/set-plans-and-permissions.md +575 -0
  61. package/claude/commands/how-to/set-scheduled-actions.md +527 -0
  62. package/claude/commands/how-to/set-user-roles-and-permissions.md +550 -0
  63. package/claude/commands/how-to/setup-authentication.md +388 -0
  64. package/claude/commands/how-to/setup-claude-code.md +440 -0
  65. package/claude/commands/how-to/setup-database.md +274 -0
  66. package/claude/commands/how-to/setup-email-providers.md +598 -0
  67. package/claude/commands/how-to/setup-mobile-dev.md +627 -0
  68. package/claude/commands/how-to/start.md +500 -0
  69. package/claude/commands/how-to/use-devtools.md +639 -0
  70. package/claude/commands/how-to/use-superadmin.md +622 -0
  71. package/claude/commands/session/README.md +193 -0
  72. package/claude/commands/session/block-create.md +190 -0
  73. package/claude/commands/session/block-list.md +203 -0
  74. package/claude/commands/session/block-update.md +192 -0
  75. package/claude/commands/session/block-validate.md +218 -0
  76. package/claude/commands/session/changelog.md +115 -0
  77. package/claude/commands/session/close.md +225 -0
  78. package/claude/commands/session/commit.md +174 -0
  79. package/claude/commands/session/db-entity.md +206 -0
  80. package/claude/commands/session/db-fix.md +212 -0
  81. package/claude/commands/session/db-sample.md +206 -0
  82. package/claude/commands/session/demo.md +178 -0
  83. package/claude/commands/session/doc-bdd.md +207 -0
  84. package/claude/commands/session/doc-feature.md +218 -0
  85. package/claude/commands/session/doc-read.md +225 -0
  86. package/claude/commands/session/execute.md +204 -0
  87. package/claude/commands/session/explain.md +202 -0
  88. package/claude/commands/session/fix-bug.md +210 -0
  89. package/claude/commands/session/fix-build.md +182 -0
  90. package/claude/commands/session/fix-test.md +189 -0
  91. package/claude/commands/session/pending.md +232 -0
  92. package/claude/commands/session/refine.md +188 -0
  93. package/claude/commands/session/resume.md +192 -0
  94. package/claude/commands/session/review.md +192 -0
  95. package/claude/commands/session/scope-change.md +181 -0
  96. package/claude/commands/session/start-blocks.md +347 -0
  97. package/claude/commands/session/start.md +604 -0
  98. package/claude/commands/session/status.md +169 -0
  99. package/claude/commands/session/test-fix.md +221 -0
  100. package/claude/commands/session/test-run.md +203 -0
  101. package/claude/commands/session/test-write.md +242 -0
  102. package/claude/commands/session/validate.md +162 -0
  103. package/claude/config/context.json +40 -0
  104. package/claude/config/github.json +69 -0
  105. package/claude/config/github.schema.json +106 -0
  106. package/claude/config/team.json +46 -0
  107. package/claude/config/team.schema.json +106 -0
  108. package/claude/config/workspace.json +43 -0
  109. package/claude/config/workspace.schema.json +75 -0
  110. package/claude/skills/README.md +228 -0
  111. package/claude/skills/accessibility/SKILL.md +573 -0
  112. package/claude/skills/api-bypass-layers/SKILL.md +550 -0
  113. package/claude/skills/asana-integration/SKILL.md +499 -0
  114. package/claude/skills/better-auth/SKILL.md +666 -0
  115. package/claude/skills/billing-subscriptions/SKILL.md +660 -0
  116. package/claude/skills/block-decision-matrix/SKILL.md +359 -0
  117. package/claude/skills/clickup-integration/SKILL.md +434 -0
  118. package/claude/skills/core-theme-responsibilities/SKILL.md +485 -0
  119. package/claude/skills/create-plugin/SKILL.md +425 -0
  120. package/claude/skills/create-theme/SKILL.md +331 -0
  121. package/claude/skills/cypress-api/SKILL.md +511 -0
  122. package/claude/skills/cypress-api/scripts/generate-api-controller.py +329 -0
  123. package/claude/skills/cypress-api/scripts/generate-api-test.py +930 -0
  124. package/claude/skills/cypress-e2e/SKILL.md +526 -0
  125. package/claude/skills/cypress-e2e/scripts/extract-selectors.py +383 -0
  126. package/claude/skills/cypress-e2e/scripts/generate-uat-test.py +788 -0
  127. package/claude/skills/cypress-selectors/SKILL.md +309 -0
  128. package/claude/skills/cypress-selectors/scripts/extract-missing.py +243 -0
  129. package/claude/skills/cypress-selectors/scripts/generate-block-selectors.py +283 -0
  130. package/claude/skills/cypress-selectors/scripts/validate-selectors.py +145 -0
  131. package/claude/skills/database-migrations/SKILL.md +335 -0
  132. package/claude/skills/database-migrations/scripts/generate-sample-data.py +284 -0
  133. package/claude/skills/database-migrations/scripts/validate-migration.py +323 -0
  134. package/claude/skills/design-system/SKILL.md +682 -0
  135. package/claude/skills/documentation/SKILL.md +540 -0
  136. package/claude/skills/entity-api/SKILL.md +482 -0
  137. package/claude/skills/entity-system/SKILL.md +635 -0
  138. package/claude/skills/entity-system/scripts/generate-child-migration.py +298 -0
  139. package/claude/skills/entity-system/scripts/generate-metas-migration.py +233 -0
  140. package/claude/skills/entity-system/scripts/generate-migration.py +382 -0
  141. package/claude/skills/entity-system/scripts/generate-sample-data.py +418 -0
  142. package/claude/skills/entity-system/scripts/scaffold-entity.py +661 -0
  143. package/claude/skills/github/SKILL.md +467 -0
  144. package/claude/skills/i18n-nextintl/SKILL.md +302 -0
  145. package/claude/skills/i18n-nextintl/scripts/add-translation.py +243 -0
  146. package/claude/skills/i18n-nextintl/scripts/extract-hardcoded.py +246 -0
  147. package/claude/skills/i18n-nextintl/scripts/validate-translations.py +260 -0
  148. package/claude/skills/impact-analysis/SKILL.md +203 -0
  149. package/claude/skills/jest-unit/SKILL.md +306 -0
  150. package/claude/skills/jest-unit/references/component-testing.md +371 -0
  151. package/claude/skills/jest-unit/references/mocking-patterns.md +380 -0
  152. package/claude/skills/jest-unit/references/service-hook-testing.md +454 -0
  153. package/claude/skills/jira-integration/SKILL.md +539 -0
  154. package/claude/skills/media-library/SKILL.md +743 -0
  155. package/claude/skills/mock-analysis/SKILL.md +276 -0
  156. package/claude/skills/monorepo-architecture/SKILL.md +162 -0
  157. package/claude/skills/nextjs-api-development/SKILL.md +364 -0
  158. package/claude/skills/nextjs-api-development/scripts/generate-crud-tests.py +456 -0
  159. package/claude/skills/nextjs-api-development/scripts/scaffold-endpoint.py +481 -0
  160. package/claude/skills/nextjs-api-development/scripts/validate-api.py +283 -0
  161. package/claude/skills/notion-integration/SKILL.md +641 -0
  162. package/claude/skills/npm-development-workflow/SKILL.md +480 -0
  163. package/claude/skills/page-builder-blocks/SKILL.md +530 -0
  164. package/claude/skills/page-builder-blocks/scripts/scaffold-block.py +444 -0
  165. package/claude/skills/permissions-system/SKILL.md +619 -0
  166. package/claude/skills/plugins/SKILL.md +340 -0
  167. package/claude/skills/plugins/references/plugin-templates.md +414 -0
  168. package/claude/skills/plugins/references/plugin-testing.md +353 -0
  169. package/claude/skills/plugins/references/plugin-types.md +198 -0
  170. package/claude/skills/plugins/scripts/scaffold-plugin.py +443 -0
  171. package/claude/skills/pom-patterns/SKILL.md +452 -0
  172. package/claude/skills/pom-patterns/scripts/generate-pom.py +392 -0
  173. package/claude/skills/rate-limiting/SKILL.md +342 -0
  174. package/claude/skills/react-best-practices/AGENTS.md +2410 -0
  175. package/claude/skills/react-best-practices/README.md +123 -0
  176. package/claude/skills/react-best-practices/SKILL.md +125 -0
  177. package/claude/skills/react-best-practices/metadata.json +15 -0
  178. package/claude/skills/react-best-practices/rules/_sections.md +46 -0
  179. package/claude/skills/react-best-practices/rules/_template.md +28 -0
  180. package/claude/skills/react-best-practices/rules/advanced-event-handler-refs.md +55 -0
  181. package/claude/skills/react-best-practices/rules/advanced-use-latest.md +49 -0
  182. package/claude/skills/react-best-practices/rules/async-api-routes.md +38 -0
  183. package/claude/skills/react-best-practices/rules/async-defer-await.md +80 -0
  184. package/claude/skills/react-best-practices/rules/async-dependencies.md +36 -0
  185. package/claude/skills/react-best-practices/rules/async-parallel.md +28 -0
  186. package/claude/skills/react-best-practices/rules/async-suspense-boundaries.md +99 -0
  187. package/claude/skills/react-best-practices/rules/bundle-barrel-imports.md +59 -0
  188. package/claude/skills/react-best-practices/rules/bundle-conditional.md +31 -0
  189. package/claude/skills/react-best-practices/rules/bundle-defer-third-party.md +49 -0
  190. package/claude/skills/react-best-practices/rules/bundle-dynamic-imports.md +35 -0
  191. package/claude/skills/react-best-practices/rules/bundle-preload.md +50 -0
  192. package/claude/skills/react-best-practices/rules/client-event-listeners.md +74 -0
  193. package/claude/skills/react-best-practices/rules/client-localstorage-schema.md +71 -0
  194. package/claude/skills/react-best-practices/rules/client-passive-event-listeners.md +48 -0
  195. package/claude/skills/react-best-practices/rules/client-swr-dedup.md +56 -0
  196. package/claude/skills/react-best-practices/rules/js-batch-dom-css.md +82 -0
  197. package/claude/skills/react-best-practices/rules/js-cache-function-results.md +80 -0
  198. package/claude/skills/react-best-practices/rules/js-cache-property-access.md +28 -0
  199. package/claude/skills/react-best-practices/rules/js-cache-storage.md +70 -0
  200. package/claude/skills/react-best-practices/rules/js-combine-iterations.md +32 -0
  201. package/claude/skills/react-best-practices/rules/js-early-exit.md +50 -0
  202. package/claude/skills/react-best-practices/rules/js-hoist-regexp.md +45 -0
  203. package/claude/skills/react-best-practices/rules/js-index-maps.md +37 -0
  204. package/claude/skills/react-best-practices/rules/js-length-check-first.md +49 -0
  205. package/claude/skills/react-best-practices/rules/js-min-max-loop.md +82 -0
  206. package/claude/skills/react-best-practices/rules/js-set-map-lookups.md +24 -0
  207. package/claude/skills/react-best-practices/rules/js-tosorted-immutable.md +57 -0
  208. package/claude/skills/react-best-practices/rules/rendering-activity.md +26 -0
  209. package/claude/skills/react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
  210. package/claude/skills/react-best-practices/rules/rendering-conditional-render.md +40 -0
  211. package/claude/skills/react-best-practices/rules/rendering-content-visibility.md +38 -0
  212. package/claude/skills/react-best-practices/rules/rendering-hoist-jsx.md +46 -0
  213. package/claude/skills/react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
  214. package/claude/skills/react-best-practices/rules/rendering-svg-precision.md +28 -0
  215. package/claude/skills/react-best-practices/rules/rerender-defer-reads.md +39 -0
  216. package/claude/skills/react-best-practices/rules/rerender-dependencies.md +45 -0
  217. package/claude/skills/react-best-practices/rules/rerender-derived-state.md +29 -0
  218. package/claude/skills/react-best-practices/rules/rerender-functional-setstate.md +74 -0
  219. package/claude/skills/react-best-practices/rules/rerender-lazy-state-init.md +58 -0
  220. package/claude/skills/react-best-practices/rules/rerender-memo.md +44 -0
  221. package/claude/skills/react-best-practices/rules/rerender-transitions.md +40 -0
  222. package/claude/skills/react-best-practices/rules/server-after-nonblocking.md +73 -0
  223. package/claude/skills/react-best-practices/rules/server-cache-lru.md +41 -0
  224. package/claude/skills/react-best-practices/rules/server-cache-react.md +76 -0
  225. package/claude/skills/react-best-practices/rules/server-parallel-fetching.md +83 -0
  226. package/claude/skills/react-best-practices/rules/server-serialization.md +38 -0
  227. package/claude/skills/react-patterns/SKILL.md +688 -0
  228. package/claude/skills/registry-system/SKILL.md +331 -0
  229. package/claude/skills/scheduled-actions/SKILL.md +671 -0
  230. package/claude/skills/scope-enforcement/SKILL.md +542 -0
  231. package/claude/skills/scope-enforcement/scripts/validate-scope.py +357 -0
  232. package/claude/skills/server-actions/SKILL.md +493 -0
  233. package/claude/skills/service-layer/SKILL.md +587 -0
  234. package/claude/skills/session-management/SKILL.md +266 -0
  235. package/claude/skills/session-management/scripts/create-session.py +166 -0
  236. package/claude/skills/session-management/scripts/iteration-close.sh +105 -0
  237. package/claude/skills/session-management/scripts/iteration-init.sh +180 -0
  238. package/claude/skills/session-management/scripts/session-archive.sh +87 -0
  239. package/claude/skills/session-management/scripts/session-close.sh +133 -0
  240. package/claude/skills/session-management/scripts/session-init.sh +225 -0
  241. package/claude/skills/session-management/scripts/session-list.sh +163 -0
  242. package/claude/skills/session-management/scripts/split-plan.sh +116 -0
  243. package/claude/skills/shadcn-components/SKILL.md +586 -0
  244. package/claude/skills/shadcn-theming/SKILL.md +446 -0
  245. package/claude/skills/suspense-loading/SKILL.md +280 -0
  246. package/claude/skills/tailwind-theming/SKILL.md +507 -0
  247. package/claude/skills/tanstack-query/SKILL.md +608 -0
  248. package/claude/skills/test-coverage/SKILL.md +239 -0
  249. package/claude/skills/web-design-guidelines/SKILL.md +39 -0
  250. package/claude/skills/zod-validation/SKILL.md +537 -0
  251. package/claude/templates/blocks/progress.md +86 -0
  252. package/claude/templates/iteration/changes.md +61 -0
  253. package/claude/templates/iteration/progress.md +55 -0
  254. package/claude/templates/log.md +31 -0
  255. package/claude/templates/story/context.md +77 -0
  256. package/claude/templates/story/pendings.md +37 -0
  257. package/claude/templates/story/plan.md +299 -0
  258. package/claude/templates/story/requirements.md +109 -0
  259. package/claude/templates/story/scope.json +10 -0
  260. package/claude/templates/story/tests.md +91 -0
  261. package/claude/templates/task/progress.md +58 -0
  262. package/claude/templates/task/requirements.md +54 -0
  263. package/claude/workflows/README.md +154 -0
  264. package/claude/workflows/blocks.md +614 -0
  265. package/claude/workflows/story.md +1207 -0
  266. package/claude/workflows/task.md +927 -0
  267. package/claude/workflows/tweak.md +527 -0
  268. package/cursor/.gitkeep +0 -0
  269. package/package.json +35 -0
  270. package/scripts/postinstall.mjs +198 -0
  271. package/scripts/setup.mjs +282 -0
  272. package/scripts/sync.mjs +209 -0
@@ -0,0 +1,575 @@
1
+ # /how-to:set-plans-and-permissions
2
+
3
+ Interactive guide to configure subscription plans, features, and billing in NextSpark.
4
+
5
+ ---
6
+
7
+ ## Required Skills
8
+
9
+ Before executing, these skills provide deeper context:
10
+ - `.claude/skills/billing-subscriptions/SKILL.md` - Stripe integration and billing patterns
11
+ - `.claude/skills/permissions-system/SKILL.md` - Three-layer permission model
12
+
13
+ ---
14
+
15
+ ## Syntax
16
+
17
+ ```
18
+ /how-to:set-plans-and-permissions
19
+ ```
20
+
21
+ ---
22
+
23
+ ## Behavior
24
+
25
+ Guides the user through configuring subscription plans with features, usage limits, and Stripe integration.
26
+
27
+ ---
28
+
29
+ ## Tutorial Structure
30
+
31
+ ```
32
+ STEPS OVERVIEW (6 steps)
33
+
34
+ Step 1: Understanding the Billing System
35
+ └── Three-layer model: RBAC + Features + Quotas
36
+
37
+ Step 2: Define Features
38
+ └── Feature flags for plan-gating
39
+
40
+ Step 3: Define Usage Limits (Quotas)
41
+ └── Track and limit resource usage
42
+
43
+ Step 4: Configure Plans
44
+ └── Create free, pro, enterprise plans
45
+
46
+ Step 5: Set Up Stripe
47
+ └── Create products and prices
48
+
49
+ Step 6: Test the Checkout Flow
50
+ └── Verify the complete flow
51
+ ```
52
+
53
+ ---
54
+
55
+ ## Step 1: Understanding the Billing System
56
+
57
+ ```
58
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
59
+ 📚 HOW TO: SET PLANS AND PERMISSIONS
60
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
61
+
62
+ STEP 1 OF 6: Understanding the Billing System
63
+
64
+ NextSpark uses a **three-layer permission model**:
65
+
66
+ ┌─────────────────────────────────────────────┐
67
+ │ Layer 1: RBAC (Team Roles) │
68
+ │ "Can this role perform this action?" │
69
+ │ → owner, admin, member, viewer │
70
+ ├─────────────────────────────────────────────┤
71
+ │ Layer 2: Features (Plan Gating) │
72
+ │ "Does this plan include this feature?" │
73
+ │ → advanced_analytics, api_access, etc. │
74
+ ├─────────────────────────────────────────────┤
75
+ │ Layer 3: Quotas (Usage Limits) │
76
+ │ "Has this team exceeded their limit?" │
77
+ │ → team_members: 5, projects: 10, etc. │
78
+ └─────────────────────────────────────────────┘
79
+
80
+ RESULT = Permission ✓ AND Feature ✓ AND Quota ✓
81
+
82
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
83
+
84
+ 📋 Example Check:
85
+
86
+ User wants to: Create a new project
87
+
88
+ Layer 1: Does user have "projects.create" permission? ✓
89
+ Layer 2: Does plan include "unlimited_projects" feature? ✓
90
+ Layer 3: Is team under the projects limit? ✓
91
+
92
+ → Action allowed!
93
+
94
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
95
+
96
+ What would you like to do?
97
+
98
+ [1] Continue to Step 2 (Define Features)
99
+ [2] I have a question about the model
100
+ [3] Show me how checks work in code
101
+ ```
102
+
103
+ ---
104
+
105
+ ## Step 2: Define Features
106
+
107
+ ```
108
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
109
+ STEP 2 OF 6: Define Features
110
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
111
+
112
+ Features are boolean flags that enable functionality per plan:
113
+
114
+ ```typescript
115
+ // contents/themes/default/config/billing.config.ts
116
+ import type { BillingConfig } from '@/core/lib/billing/config-types'
117
+
118
+ export const billingConfig: BillingConfig = {
119
+ provider: 'stripe',
120
+ currency: 'usd',
121
+ defaultPlan: 'free',
122
+
123
+ // Define available features
124
+ features: {
125
+ // Analytics features
126
+ basic_analytics: {
127
+ name: 'billing.features.basic_analytics',
128
+ description: 'billing.features.basic_analytics_description',
129
+ },
130
+ advanced_analytics: {
131
+ name: 'billing.features.advanced_analytics',
132
+ description: 'billing.features.advanced_analytics_description',
133
+ },
134
+
135
+ // API features
136
+ api_access: {
137
+ name: 'billing.features.api_access',
138
+ description: 'billing.features.api_access_description',
139
+ },
140
+ webhooks: {
141
+ name: 'billing.features.webhooks',
142
+ description: 'billing.features.webhooks_description',
143
+ },
144
+
145
+ // Support features
146
+ priority_support: {
147
+ name: 'billing.features.priority_support',
148
+ description: 'billing.features.priority_support_description',
149
+ },
150
+
151
+ // Advanced features
152
+ custom_branding: {
153
+ name: 'billing.features.custom_branding',
154
+ description: 'billing.features.custom_branding_description',
155
+ },
156
+ white_label: {
157
+ name: 'billing.features.white_label',
158
+ description: 'billing.features.white_label_description',
159
+ },
160
+ },
161
+
162
+ // ... rest of config
163
+ }
164
+ ```
165
+
166
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
167
+
168
+ 📋 Check Feature in Code:
169
+
170
+ ```typescript
171
+ // Server-side
172
+ const membership = await MembershipService.get(userId, teamId)
173
+
174
+ if (membership.hasFeature('advanced_analytics')) {
175
+ // Show advanced analytics dashboard
176
+ }
177
+
178
+ // Client-side (React)
179
+ import { useHasFeature } from '@/core/lib/billing/hooks'
180
+
181
+ function AnalyticsDashboard() {
182
+ const hasAdvanced = useHasFeature('advanced_analytics')
183
+
184
+ return hasAdvanced ? <AdvancedCharts /> : <BasicCharts />
185
+ }
186
+ ```
187
+
188
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
189
+
190
+ What would you like to do?
191
+
192
+ [1] Continue to Step 3 (Quotas)
193
+ [2] What features should I define?
194
+ [3] How do I show upgrade prompts?
195
+ ```
196
+
197
+ ---
198
+
199
+ ## Step 3: Define Usage Limits (Quotas)
200
+
201
+ ```
202
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
203
+ STEP 3 OF 6: Define Usage Limits (Quotas)
204
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
205
+
206
+ Quotas track and limit resource usage per team:
207
+
208
+ ```typescript
209
+ // contents/themes/default/config/billing.config.ts
210
+
211
+ export const billingConfig: BillingConfig = {
212
+ // ... features ...
213
+
214
+ // Define usage limits
215
+ limits: {
216
+ team_members: {
217
+ name: 'billing.limits.team_members',
218
+ unit: 'count',
219
+ resetPeriod: 'never', // Permanent limit
220
+ },
221
+ projects: {
222
+ name: 'billing.limits.projects',
223
+ unit: 'count',
224
+ resetPeriod: 'never',
225
+ },
226
+ storage_gb: {
227
+ name: 'billing.limits.storage',
228
+ unit: 'GB',
229
+ resetPeriod: 'never',
230
+ },
231
+ api_calls: {
232
+ name: 'billing.limits.api_calls',
233
+ unit: 'calls',
234
+ resetPeriod: 'monthly', // Resets each month
235
+ },
236
+ email_sends: {
237
+ name: 'billing.limits.email_sends',
238
+ unit: 'emails',
239
+ resetPeriod: 'monthly',
240
+ },
241
+ },
242
+
243
+ // Map actions to limits
244
+ actionMappings: {
245
+ limits: {
246
+ 'team.members.invite': 'team_members',
247
+ 'projects.create': 'projects',
248
+ 'api.call': 'api_calls',
249
+ 'email.send': 'email_sends',
250
+ },
251
+ },
252
+ }
253
+ ```
254
+
255
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
256
+
257
+ 📋 Reset Periods:
258
+
259
+ • 'never' - Permanent limit (team members, projects)
260
+ • 'monthly' - Resets on billing cycle (API calls)
261
+ • 'daily' - Resets daily (rate limiting)
262
+
263
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
264
+
265
+ 📋 Check Quota in Code:
266
+
267
+ ```typescript
268
+ // Server-side check
269
+ const membership = await MembershipService.get(userId, teamId)
270
+ const quota = membership.checkQuota('projects', 1) // +1 project
271
+
272
+ if (!quota.allowed) {
273
+ return Response.json({
274
+ error: 'Project limit reached',
275
+ current: quota.current,
276
+ limit: quota.limit,
277
+ }, { status: 403 })
278
+ }
279
+
280
+ // Track usage after successful operation
281
+ await UsageService.trackUsage(teamId, 'projects', 1)
282
+ ```
283
+
284
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
285
+
286
+ What would you like to do?
287
+
288
+ [1] Continue to Step 4 (Configure Plans)
289
+ [2] How does quota tracking work?
290
+ [3] Show me usage meter UI examples
291
+ ```
292
+
293
+ ---
294
+
295
+ ## Step 4: Configure Plans
296
+
297
+ ```
298
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
299
+ STEP 4 OF 6: Configure Plans
300
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
301
+
302
+ Define your subscription plans:
303
+
304
+ ```typescript
305
+ // contents/themes/default/config/billing.config.ts
306
+
307
+ export const billingConfig: BillingConfig = {
308
+ // ... features, limits ...
309
+
310
+ plans: [
311
+ // FREE PLAN
312
+ {
313
+ slug: 'free',
314
+ name: 'billing.plans.free.name',
315
+ description: 'billing.plans.free.description',
316
+ type: 'free',
317
+ visibility: 'public',
318
+ price: { monthly: 0, yearly: 0 }, // In cents
319
+ trialDays: 0,
320
+ features: [
321
+ 'basic_analytics',
322
+ ],
323
+ limits: {
324
+ team_members: 3,
325
+ projects: 5,
326
+ storage_gb: 1,
327
+ api_calls: 1000,
328
+ email_sends: 100,
329
+ },
330
+ stripePriceIdMonthly: null,
331
+ stripePriceIdYearly: null,
332
+ },
333
+
334
+ // PRO PLAN
335
+ {
336
+ slug: 'pro',
337
+ name: 'billing.plans.pro.name',
338
+ description: 'billing.plans.pro.description',
339
+ type: 'paid',
340
+ visibility: 'public',
341
+ price: {
342
+ monthly: 2900, // $29.00
343
+ yearly: 29000, // $290.00 (16% savings)
344
+ },
345
+ trialDays: 14,
346
+ features: [
347
+ 'basic_analytics',
348
+ 'advanced_analytics',
349
+ 'api_access',
350
+ 'webhooks',
351
+ 'priority_support',
352
+ ],
353
+ limits: {
354
+ team_members: 15,
355
+ projects: 50,
356
+ storage_gb: 50,
357
+ api_calls: 100000,
358
+ email_sends: 5000,
359
+ },
360
+ stripePriceIdMonthly: 'price_xxx_monthly', // From Stripe
361
+ stripePriceIdYearly: 'price_xxx_yearly',
362
+ },
363
+
364
+ // ENTERPRISE PLAN
365
+ {
366
+ slug: 'enterprise',
367
+ name: 'billing.plans.enterprise.name',
368
+ description: 'billing.plans.enterprise.description',
369
+ type: 'enterprise',
370
+ visibility: 'hidden', // Contact sales only
371
+ features: ['*'], // All features
372
+ limits: {
373
+ team_members: -1, // -1 = Unlimited
374
+ projects: -1,
375
+ storage_gb: -1,
376
+ api_calls: -1,
377
+ email_sends: -1,
378
+ },
379
+ },
380
+ ],
381
+ }
382
+ ```
383
+
384
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
385
+
386
+ 📋 Plan Types:
387
+
388
+ • 'free' - No payment required
389
+ • 'paid' - Requires Stripe subscription
390
+ • 'enterprise' - Custom pricing (contact sales)
391
+
392
+ 📋 Visibility:
393
+
394
+ • 'public' - Shows on pricing page
395
+ • 'hidden' - Only via direct link or sales
396
+
397
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
398
+
399
+ What would you like to do?
400
+
401
+ [1] Continue to Step 5 (Stripe Setup)
402
+ [2] How do I add more plan tiers?
403
+ [3] Show me the pricing page component
404
+ ```
405
+
406
+ ---
407
+
408
+ ## Step 5: Set Up Stripe
409
+
410
+ ```
411
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
412
+ STEP 5 OF 6: Set Up Stripe
413
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
414
+
415
+ 1️⃣ Create Stripe Products and Prices:
416
+
417
+ In Stripe Dashboard (dashboard.stripe.com):
418
+
419
+ • Products → Add Product → "Pro Plan"
420
+ • Add Price → $29/month → Copy price_xxx_monthly
421
+ • Add Price → $290/year → Copy price_xxx_yearly
422
+
423
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
424
+
425
+ 2️⃣ Configure Environment Variables:
426
+
427
+ ```env
428
+ # .env.local
429
+ STRIPE_SECRET_KEY=sk_test_xxx
430
+ STRIPE_PUBLISHABLE_KEY=pk_test_xxx
431
+ STRIPE_WEBHOOK_SECRET=whsec_xxx
432
+ ```
433
+
434
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
435
+
436
+ 3️⃣ Update Plan Price IDs:
437
+
438
+ ```typescript
439
+ // In billing.config.ts
440
+ {
441
+ slug: 'pro',
442
+ // ...
443
+ stripePriceIdMonthly: 'price_1xxx', // From Stripe
444
+ stripePriceIdYearly: 'price_1yyy',
445
+ }
446
+ ```
447
+
448
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
449
+
450
+ 4️⃣ Set Up Webhook:
451
+
452
+ In Stripe Dashboard → Webhooks → Add endpoint:
453
+
454
+ URL: https://your-domain.com/api/v1/billing/webhooks/stripe
455
+
456
+ Events to listen for:
457
+ • checkout.session.completed
458
+ • invoice.paid
459
+ • invoice.payment_failed
460
+ • customer.subscription.updated
461
+ • customer.subscription.deleted
462
+
463
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
464
+
465
+ 5️⃣ Test with Stripe CLI (development):
466
+
467
+ ```bash
468
+ # Install Stripe CLI
469
+ stripe listen --forward-to localhost:3000/api/v1/billing/webhooks/stripe
470
+ ```
471
+
472
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
473
+
474
+ What would you like to do?
475
+
476
+ [1] Continue to Step 6 (Test Checkout)
477
+ [2] I have questions about Stripe setup
478
+ [3] Help me set up webhook forwarding
479
+ ```
480
+
481
+ ---
482
+
483
+ ## Step 6: Test the Checkout Flow
484
+
485
+ ```
486
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
487
+ STEP 6 OF 6: Test the Checkout Flow
488
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
489
+
490
+ 1️⃣ Add Translations:
491
+
492
+ ```json
493
+ // contents/themes/default/messages/en.json
494
+ {
495
+ "billing": {
496
+ "plans": {
497
+ "free": {
498
+ "name": "Free",
499
+ "description": "Perfect for getting started"
500
+ },
501
+ "pro": {
502
+ "name": "Pro",
503
+ "description": "For growing teams and businesses"
504
+ },
505
+ "enterprise": {
506
+ "name": "Enterprise",
507
+ "description": "Custom solutions for large organizations"
508
+ }
509
+ },
510
+ "features": {
511
+ "basic_analytics": "Basic Analytics",
512
+ "advanced_analytics": "Advanced Analytics",
513
+ "api_access": "API Access",
514
+ "priority_support": "Priority Support"
515
+ },
516
+ "limits": {
517
+ "team_members": "Team Members",
518
+ "projects": "Projects",
519
+ "api_calls": "API Calls/month"
520
+ }
521
+ }
522
+ }
523
+ ```
524
+
525
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
526
+
527
+ 2️⃣ Rebuild Registry:
528
+
529
+ ```bash
530
+ node core/scripts/build/registry.mjs
531
+ ```
532
+
533
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
534
+
535
+ 3️⃣ Test the Complete Flow:
536
+
537
+ • Go to /pricing (or /dashboard/settings/billing)
538
+ • Click "Upgrade to Pro"
539
+ • Use Stripe test card: 4242 4242 4242 4242
540
+ • Complete checkout
541
+ • Verify webhook updates subscription
542
+ • Check features are now available
543
+
544
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
545
+
546
+ 📋 Test Cards:
547
+
548
+ • Success: 4242 4242 4242 4242
549
+ • Declined: 4000 0000 0000 0002
550
+ • 3D Secure: 4000 0027 6000 3184
551
+
552
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
553
+
554
+ ✅ TUTORIAL STORY!
555
+
556
+ You've configured:
557
+ • Feature flags for plan gating
558
+ • Usage limits and quotas
559
+ • Subscription plans with pricing
560
+ • Stripe integration
561
+
562
+ 📚 Related tutorials:
563
+ • /how-to:set-user-roles-and-permissions - RBAC configuration
564
+ • /how-to:create-api - Custom billing endpoints
565
+
566
+ 🔙 Back to menu: /how-to:start
567
+ ```
568
+
569
+ ---
570
+
571
+ ## Related Commands
572
+
573
+ | Command | Action |
574
+ |---------|--------|
575
+ | `/how-to:set-user-roles-and-permissions` | Configure team roles |