@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.
- package/LICENSE +21 -0
- package/README.md +115 -0
- package/claude/_docs/workflows-optimizations.md +359 -0
- package/claude/agents/api-tester.md +634 -0
- package/claude/agents/architecture-supervisor.md +1351 -0
- package/claude/agents/backend-developer.md +997 -0
- package/claude/agents/backend-validator.md +417 -0
- package/claude/agents/bdd-docs-writer.md +737 -0
- package/claude/agents/block-developer.md +677 -0
- package/claude/agents/code-reviewer.md +1432 -0
- package/claude/agents/db-developer.md +721 -0
- package/claude/agents/db-validator.md +407 -0
- package/claude/agents/demo-video-generator.md +493 -0
- package/claude/agents/documentation-writer.md +1268 -0
- package/claude/agents/frontend-developer.md +1234 -0
- package/claude/agents/frontend-validator.md +777 -0
- package/claude/agents/functional-validator.md +630 -0
- package/claude/agents/mock-analyst.md +387 -0
- package/claude/agents/product-manager.md +963 -0
- package/claude/agents/qa-automation.md +1762 -0
- package/claude/agents/release-manager.md +634 -0
- package/claude/agents/selectors-translator.md +262 -0
- package/claude/agents/unit-test-writer.md +785 -0
- package/claude/agents/visual-comparator.md +329 -0
- package/claude/agents/workflow-maintainer.md +352 -0
- package/claude/commands/do/README.md +88 -0
- package/claude/commands/do/create-api.md +64 -0
- package/claude/commands/do/create-entity.md +66 -0
- package/claude/commands/do/create-migration.md +64 -0
- package/claude/commands/do/create-plugin.md +56 -0
- package/claude/commands/do/create-theme.md +70 -0
- package/claude/commands/do/mock-data.md +67 -0
- package/claude/commands/do/reset-db.md +71 -0
- package/claude/commands/do/setup-scheduled-action.md +75 -0
- package/claude/commands/do/sync-code-review.md +117 -0
- package/claude/commands/do/update-selectors.md +112 -0
- package/claude/commands/do/use-skills.md +90 -0
- package/claude/commands/do/validate-blocks.md +69 -0
- package/claude/commands/how-to/README.md +261 -0
- package/claude/commands/how-to/add-metadata.md +692 -0
- package/claude/commands/how-to/add-taxonomies.md +806 -0
- package/claude/commands/how-to/add-translations.md +571 -0
- package/claude/commands/how-to/create-api.md +577 -0
- package/claude/commands/how-to/create-block.md +575 -0
- package/claude/commands/how-to/create-child-entities.md +771 -0
- package/claude/commands/how-to/create-entity.md +597 -0
- package/claude/commands/how-to/create-migrations.md +605 -0
- package/claude/commands/how-to/create-plugin.md +654 -0
- package/claude/commands/how-to/customize-app.md +481 -0
- package/claude/commands/how-to/customize-dashboard.md +553 -0
- package/claude/commands/how-to/customize-theme.md +438 -0
- package/claude/commands/how-to/define-features-flows.md +632 -0
- package/claude/commands/how-to/deploy.md +507 -0
- package/claude/commands/how-to/handle-file-uploads.md +746 -0
- package/claude/commands/how-to/implement-search.md +1001 -0
- package/claude/commands/how-to/install-plugins.md +352 -0
- package/claude/commands/how-to/manage-test-coverage.md +984 -0
- package/claude/commands/how-to/run-tests.md +400 -0
- package/claude/commands/how-to/set-app-languages.md +601 -0
- package/claude/commands/how-to/set-plans-and-permissions.md +575 -0
- package/claude/commands/how-to/set-scheduled-actions.md +527 -0
- package/claude/commands/how-to/set-user-roles-and-permissions.md +550 -0
- package/claude/commands/how-to/setup-authentication.md +388 -0
- package/claude/commands/how-to/setup-claude-code.md +440 -0
- package/claude/commands/how-to/setup-database.md +274 -0
- package/claude/commands/how-to/setup-email-providers.md +598 -0
- package/claude/commands/how-to/setup-mobile-dev.md +627 -0
- package/claude/commands/how-to/start.md +500 -0
- package/claude/commands/how-to/use-devtools.md +639 -0
- package/claude/commands/how-to/use-superadmin.md +622 -0
- package/claude/commands/session/README.md +193 -0
- package/claude/commands/session/block-create.md +190 -0
- package/claude/commands/session/block-list.md +203 -0
- package/claude/commands/session/block-update.md +192 -0
- package/claude/commands/session/block-validate.md +218 -0
- package/claude/commands/session/changelog.md +115 -0
- package/claude/commands/session/close.md +225 -0
- package/claude/commands/session/commit.md +174 -0
- package/claude/commands/session/db-entity.md +206 -0
- package/claude/commands/session/db-fix.md +212 -0
- package/claude/commands/session/db-sample.md +206 -0
- package/claude/commands/session/demo.md +178 -0
- package/claude/commands/session/doc-bdd.md +207 -0
- package/claude/commands/session/doc-feature.md +218 -0
- package/claude/commands/session/doc-read.md +225 -0
- package/claude/commands/session/execute.md +204 -0
- package/claude/commands/session/explain.md +202 -0
- package/claude/commands/session/fix-bug.md +210 -0
- package/claude/commands/session/fix-build.md +182 -0
- package/claude/commands/session/fix-test.md +189 -0
- package/claude/commands/session/pending.md +232 -0
- package/claude/commands/session/refine.md +188 -0
- package/claude/commands/session/resume.md +192 -0
- package/claude/commands/session/review.md +192 -0
- package/claude/commands/session/scope-change.md +181 -0
- package/claude/commands/session/start-blocks.md +347 -0
- package/claude/commands/session/start.md +604 -0
- package/claude/commands/session/status.md +169 -0
- package/claude/commands/session/test-fix.md +221 -0
- package/claude/commands/session/test-run.md +203 -0
- package/claude/commands/session/test-write.md +242 -0
- package/claude/commands/session/validate.md +162 -0
- package/claude/config/context.json +40 -0
- package/claude/config/github.json +69 -0
- package/claude/config/github.schema.json +106 -0
- package/claude/config/team.json +46 -0
- package/claude/config/team.schema.json +106 -0
- package/claude/config/workspace.json +43 -0
- package/claude/config/workspace.schema.json +75 -0
- package/claude/skills/README.md +228 -0
- package/claude/skills/accessibility/SKILL.md +573 -0
- package/claude/skills/api-bypass-layers/SKILL.md +550 -0
- package/claude/skills/asana-integration/SKILL.md +499 -0
- package/claude/skills/better-auth/SKILL.md +666 -0
- package/claude/skills/billing-subscriptions/SKILL.md +660 -0
- package/claude/skills/block-decision-matrix/SKILL.md +359 -0
- package/claude/skills/clickup-integration/SKILL.md +434 -0
- package/claude/skills/core-theme-responsibilities/SKILL.md +485 -0
- package/claude/skills/create-plugin/SKILL.md +425 -0
- package/claude/skills/create-theme/SKILL.md +331 -0
- package/claude/skills/cypress-api/SKILL.md +511 -0
- package/claude/skills/cypress-api/scripts/generate-api-controller.py +329 -0
- package/claude/skills/cypress-api/scripts/generate-api-test.py +930 -0
- package/claude/skills/cypress-e2e/SKILL.md +526 -0
- package/claude/skills/cypress-e2e/scripts/extract-selectors.py +383 -0
- package/claude/skills/cypress-e2e/scripts/generate-uat-test.py +788 -0
- package/claude/skills/cypress-selectors/SKILL.md +309 -0
- package/claude/skills/cypress-selectors/scripts/extract-missing.py +243 -0
- package/claude/skills/cypress-selectors/scripts/generate-block-selectors.py +283 -0
- package/claude/skills/cypress-selectors/scripts/validate-selectors.py +145 -0
- package/claude/skills/database-migrations/SKILL.md +335 -0
- package/claude/skills/database-migrations/scripts/generate-sample-data.py +284 -0
- package/claude/skills/database-migrations/scripts/validate-migration.py +323 -0
- package/claude/skills/design-system/SKILL.md +682 -0
- package/claude/skills/documentation/SKILL.md +540 -0
- package/claude/skills/entity-api/SKILL.md +482 -0
- package/claude/skills/entity-system/SKILL.md +635 -0
- package/claude/skills/entity-system/scripts/generate-child-migration.py +298 -0
- package/claude/skills/entity-system/scripts/generate-metas-migration.py +233 -0
- package/claude/skills/entity-system/scripts/generate-migration.py +382 -0
- package/claude/skills/entity-system/scripts/generate-sample-data.py +418 -0
- package/claude/skills/entity-system/scripts/scaffold-entity.py +661 -0
- package/claude/skills/github/SKILL.md +467 -0
- package/claude/skills/i18n-nextintl/SKILL.md +302 -0
- package/claude/skills/i18n-nextintl/scripts/add-translation.py +243 -0
- package/claude/skills/i18n-nextintl/scripts/extract-hardcoded.py +246 -0
- package/claude/skills/i18n-nextintl/scripts/validate-translations.py +260 -0
- package/claude/skills/impact-analysis/SKILL.md +203 -0
- package/claude/skills/jest-unit/SKILL.md +306 -0
- package/claude/skills/jest-unit/references/component-testing.md +371 -0
- package/claude/skills/jest-unit/references/mocking-patterns.md +380 -0
- package/claude/skills/jest-unit/references/service-hook-testing.md +454 -0
- package/claude/skills/jira-integration/SKILL.md +539 -0
- package/claude/skills/media-library/SKILL.md +743 -0
- package/claude/skills/mock-analysis/SKILL.md +276 -0
- package/claude/skills/monorepo-architecture/SKILL.md +162 -0
- package/claude/skills/nextjs-api-development/SKILL.md +364 -0
- package/claude/skills/nextjs-api-development/scripts/generate-crud-tests.py +456 -0
- package/claude/skills/nextjs-api-development/scripts/scaffold-endpoint.py +481 -0
- package/claude/skills/nextjs-api-development/scripts/validate-api.py +283 -0
- package/claude/skills/notion-integration/SKILL.md +641 -0
- package/claude/skills/npm-development-workflow/SKILL.md +480 -0
- package/claude/skills/page-builder-blocks/SKILL.md +530 -0
- package/claude/skills/page-builder-blocks/scripts/scaffold-block.py +444 -0
- package/claude/skills/permissions-system/SKILL.md +619 -0
- package/claude/skills/plugins/SKILL.md +340 -0
- package/claude/skills/plugins/references/plugin-templates.md +414 -0
- package/claude/skills/plugins/references/plugin-testing.md +353 -0
- package/claude/skills/plugins/references/plugin-types.md +198 -0
- package/claude/skills/plugins/scripts/scaffold-plugin.py +443 -0
- package/claude/skills/pom-patterns/SKILL.md +452 -0
- package/claude/skills/pom-patterns/scripts/generate-pom.py +392 -0
- package/claude/skills/rate-limiting/SKILL.md +342 -0
- package/claude/skills/react-best-practices/AGENTS.md +2410 -0
- package/claude/skills/react-best-practices/README.md +123 -0
- package/claude/skills/react-best-practices/SKILL.md +125 -0
- package/claude/skills/react-best-practices/metadata.json +15 -0
- package/claude/skills/react-best-practices/rules/_sections.md +46 -0
- package/claude/skills/react-best-practices/rules/_template.md +28 -0
- package/claude/skills/react-best-practices/rules/advanced-event-handler-refs.md +55 -0
- package/claude/skills/react-best-practices/rules/advanced-use-latest.md +49 -0
- package/claude/skills/react-best-practices/rules/async-api-routes.md +38 -0
- package/claude/skills/react-best-practices/rules/async-defer-await.md +80 -0
- package/claude/skills/react-best-practices/rules/async-dependencies.md +36 -0
- package/claude/skills/react-best-practices/rules/async-parallel.md +28 -0
- package/claude/skills/react-best-practices/rules/async-suspense-boundaries.md +99 -0
- package/claude/skills/react-best-practices/rules/bundle-barrel-imports.md +59 -0
- package/claude/skills/react-best-practices/rules/bundle-conditional.md +31 -0
- package/claude/skills/react-best-practices/rules/bundle-defer-third-party.md +49 -0
- package/claude/skills/react-best-practices/rules/bundle-dynamic-imports.md +35 -0
- package/claude/skills/react-best-practices/rules/bundle-preload.md +50 -0
- package/claude/skills/react-best-practices/rules/client-event-listeners.md +74 -0
- package/claude/skills/react-best-practices/rules/client-localstorage-schema.md +71 -0
- package/claude/skills/react-best-practices/rules/client-passive-event-listeners.md +48 -0
- package/claude/skills/react-best-practices/rules/client-swr-dedup.md +56 -0
- package/claude/skills/react-best-practices/rules/js-batch-dom-css.md +82 -0
- package/claude/skills/react-best-practices/rules/js-cache-function-results.md +80 -0
- package/claude/skills/react-best-practices/rules/js-cache-property-access.md +28 -0
- package/claude/skills/react-best-practices/rules/js-cache-storage.md +70 -0
- package/claude/skills/react-best-practices/rules/js-combine-iterations.md +32 -0
- package/claude/skills/react-best-practices/rules/js-early-exit.md +50 -0
- package/claude/skills/react-best-practices/rules/js-hoist-regexp.md +45 -0
- package/claude/skills/react-best-practices/rules/js-index-maps.md +37 -0
- package/claude/skills/react-best-practices/rules/js-length-check-first.md +49 -0
- package/claude/skills/react-best-practices/rules/js-min-max-loop.md +82 -0
- package/claude/skills/react-best-practices/rules/js-set-map-lookups.md +24 -0
- package/claude/skills/react-best-practices/rules/js-tosorted-immutable.md +57 -0
- package/claude/skills/react-best-practices/rules/rendering-activity.md +26 -0
- package/claude/skills/react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
- package/claude/skills/react-best-practices/rules/rendering-conditional-render.md +40 -0
- package/claude/skills/react-best-practices/rules/rendering-content-visibility.md +38 -0
- package/claude/skills/react-best-practices/rules/rendering-hoist-jsx.md +46 -0
- package/claude/skills/react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
- package/claude/skills/react-best-practices/rules/rendering-svg-precision.md +28 -0
- package/claude/skills/react-best-practices/rules/rerender-defer-reads.md +39 -0
- package/claude/skills/react-best-practices/rules/rerender-dependencies.md +45 -0
- package/claude/skills/react-best-practices/rules/rerender-derived-state.md +29 -0
- package/claude/skills/react-best-practices/rules/rerender-functional-setstate.md +74 -0
- package/claude/skills/react-best-practices/rules/rerender-lazy-state-init.md +58 -0
- package/claude/skills/react-best-practices/rules/rerender-memo.md +44 -0
- package/claude/skills/react-best-practices/rules/rerender-transitions.md +40 -0
- package/claude/skills/react-best-practices/rules/server-after-nonblocking.md +73 -0
- package/claude/skills/react-best-practices/rules/server-cache-lru.md +41 -0
- package/claude/skills/react-best-practices/rules/server-cache-react.md +76 -0
- package/claude/skills/react-best-practices/rules/server-parallel-fetching.md +83 -0
- package/claude/skills/react-best-practices/rules/server-serialization.md +38 -0
- package/claude/skills/react-patterns/SKILL.md +688 -0
- package/claude/skills/registry-system/SKILL.md +331 -0
- package/claude/skills/scheduled-actions/SKILL.md +671 -0
- package/claude/skills/scope-enforcement/SKILL.md +542 -0
- package/claude/skills/scope-enforcement/scripts/validate-scope.py +357 -0
- package/claude/skills/server-actions/SKILL.md +493 -0
- package/claude/skills/service-layer/SKILL.md +587 -0
- package/claude/skills/session-management/SKILL.md +266 -0
- package/claude/skills/session-management/scripts/create-session.py +166 -0
- package/claude/skills/session-management/scripts/iteration-close.sh +105 -0
- package/claude/skills/session-management/scripts/iteration-init.sh +180 -0
- package/claude/skills/session-management/scripts/session-archive.sh +87 -0
- package/claude/skills/session-management/scripts/session-close.sh +133 -0
- package/claude/skills/session-management/scripts/session-init.sh +225 -0
- package/claude/skills/session-management/scripts/session-list.sh +163 -0
- package/claude/skills/session-management/scripts/split-plan.sh +116 -0
- package/claude/skills/shadcn-components/SKILL.md +586 -0
- package/claude/skills/shadcn-theming/SKILL.md +446 -0
- package/claude/skills/suspense-loading/SKILL.md +280 -0
- package/claude/skills/tailwind-theming/SKILL.md +507 -0
- package/claude/skills/tanstack-query/SKILL.md +608 -0
- package/claude/skills/test-coverage/SKILL.md +239 -0
- package/claude/skills/web-design-guidelines/SKILL.md +39 -0
- package/claude/skills/zod-validation/SKILL.md +537 -0
- package/claude/templates/blocks/progress.md +86 -0
- package/claude/templates/iteration/changes.md +61 -0
- package/claude/templates/iteration/progress.md +55 -0
- package/claude/templates/log.md +31 -0
- package/claude/templates/story/context.md +77 -0
- package/claude/templates/story/pendings.md +37 -0
- package/claude/templates/story/plan.md +299 -0
- package/claude/templates/story/requirements.md +109 -0
- package/claude/templates/story/scope.json +10 -0
- package/claude/templates/story/tests.md +91 -0
- package/claude/templates/task/progress.md +58 -0
- package/claude/templates/task/requirements.md +54 -0
- package/claude/workflows/README.md +154 -0
- package/claude/workflows/blocks.md +614 -0
- package/claude/workflows/story.md +1207 -0
- package/claude/workflows/task.md +927 -0
- package/claude/workflows/tweak.md +527 -0
- package/cursor/.gitkeep +0 -0
- package/package.json +35 -0
- package/scripts/postinstall.mjs +198 -0
- package/scripts/setup.mjs +282 -0
- package/scripts/sync.mjs +209 -0
|
@@ -0,0 +1,481 @@
|
|
|
1
|
+
# /how-to:customize-app
|
|
2
|
+
|
|
3
|
+
Interactive guide to configure application-level settings in NextSpark.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Syntax
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
/how-to:customize-app
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Behavior
|
|
16
|
+
|
|
17
|
+
Guides the user through configuring app-level settings like authentication, email, storage, and environment.
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## Tutorial Structure
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
STEPS OVERVIEW (4 steps)
|
|
25
|
+
|
|
26
|
+
Step 1: Understanding App Configuration
|
|
27
|
+
└── Configuration layers
|
|
28
|
+
|
|
29
|
+
Step 2: Configure app.config.ts
|
|
30
|
+
└── Core application settings
|
|
31
|
+
|
|
32
|
+
Step 3: Configure Environment
|
|
33
|
+
└── Environment variables
|
|
34
|
+
|
|
35
|
+
Step 4: Advanced Settings
|
|
36
|
+
└── Team mode, onboarding, etc.
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## Step 1: Understanding App Configuration
|
|
42
|
+
|
|
43
|
+
```
|
|
44
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
45
|
+
📚 HOW TO: CUSTOMIZE APP
|
|
46
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
47
|
+
|
|
48
|
+
STEP 1 OF 4: Understanding App Configuration
|
|
49
|
+
|
|
50
|
+
NextSpark uses layered configuration:
|
|
51
|
+
|
|
52
|
+
┌─────────────────────────────────────────────┐
|
|
53
|
+
│ CONFIGURATION LAYERS │
|
|
54
|
+
│ ───────────────────────────────────────── │
|
|
55
|
+
│ │
|
|
56
|
+
│ 1. CORE DEFAULTS │
|
|
57
|
+
│ core/config/*.ts │
|
|
58
|
+
│ → Base settings, always available │
|
|
59
|
+
│ │
|
|
60
|
+
│ 2. THEME OVERRIDES │
|
|
61
|
+
│ themes/{theme}/config/*.ts │
|
|
62
|
+
│ → Theme-specific customizations │
|
|
63
|
+
│ │
|
|
64
|
+
│ 3. ENVIRONMENT │
|
|
65
|
+
│ .env / .env.local │
|
|
66
|
+
│ → Secrets and environment-specific │
|
|
67
|
+
│ │
|
|
68
|
+
└─────────────────────────────────────────────┘
|
|
69
|
+
|
|
70
|
+
Theme config overrides core. Env overrides both.
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
**📂 Configuration Files:**
|
|
74
|
+
|
|
75
|
+
```
|
|
76
|
+
contents/themes/your-theme/config/
|
|
77
|
+
├── app.config.ts # Core app settings
|
|
78
|
+
├── auth.config.ts # Authentication settings
|
|
79
|
+
├── dashboard.config.ts # Dashboard layout
|
|
80
|
+
├── navigation.config.ts # Navigation menus
|
|
81
|
+
├── billing.config.ts # Plans and billing
|
|
82
|
+
├── permissions.config.ts # RBAC permissions
|
|
83
|
+
└── theme.config.ts # Theme appearance
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
```
|
|
87
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
88
|
+
|
|
89
|
+
What would you like to do?
|
|
90
|
+
|
|
91
|
+
[1] Continue to Step 2 (App Config)
|
|
92
|
+
[2] Show me the full config structure
|
|
93
|
+
[3] How do I access config in code?
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
## Step 2: Configure app.config.ts
|
|
99
|
+
|
|
100
|
+
```
|
|
101
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
102
|
+
STEP 2 OF 4: Configure app.config.ts
|
|
103
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
104
|
+
|
|
105
|
+
Core application settings:
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
**📋 app.config.ts Example:**
|
|
109
|
+
|
|
110
|
+
```typescript
|
|
111
|
+
// contents/themes/your-theme/config/app.config.ts
|
|
112
|
+
import type { AppConfig } from '@/core/types/app'
|
|
113
|
+
|
|
114
|
+
export const appConfig: AppConfig = {
|
|
115
|
+
// App Identity
|
|
116
|
+
name: 'My SaaS App',
|
|
117
|
+
description: 'The best SaaS for managing your business',
|
|
118
|
+
version: '1.0.0',
|
|
119
|
+
|
|
120
|
+
// URLs
|
|
121
|
+
url: process.env.NEXT_PUBLIC_APP_URL || 'http://localhost:3000',
|
|
122
|
+
apiUrl: process.env.NEXT_PUBLIC_API_URL,
|
|
123
|
+
|
|
124
|
+
// Internationalization
|
|
125
|
+
defaultLocale: 'en',
|
|
126
|
+
locales: ['en', 'es', 'pt'],
|
|
127
|
+
localeLabels: {
|
|
128
|
+
en: 'English',
|
|
129
|
+
es: 'Español',
|
|
130
|
+
pt: 'Português',
|
|
131
|
+
},
|
|
132
|
+
|
|
133
|
+
// Team Mode (multi-tenant)
|
|
134
|
+
teamMode: {
|
|
135
|
+
enabled: true,
|
|
136
|
+
createOnSignup: true, // Auto-create team on signup
|
|
137
|
+
allowMultipleTeams: true, // User can join multiple teams
|
|
138
|
+
requireTeamForAccess: true, // Must have team to use dashboard
|
|
139
|
+
defaultTeamName: '{userName}\'s Team',
|
|
140
|
+
},
|
|
141
|
+
|
|
142
|
+
// User Settings
|
|
143
|
+
user: {
|
|
144
|
+
allowNameChange: true,
|
|
145
|
+
allowEmailChange: false, // Usually false for security
|
|
146
|
+
allowAvatarUpload: true,
|
|
147
|
+
requireEmailVerification: true,
|
|
148
|
+
deleteAccountEnabled: true,
|
|
149
|
+
},
|
|
150
|
+
|
|
151
|
+
// Registration Settings
|
|
152
|
+
registration: {
|
|
153
|
+
enabled: true,
|
|
154
|
+
requireInvite: false, // Only invited users can register
|
|
155
|
+
allowedDomains: [], // ['mycompany.com'] to restrict
|
|
156
|
+
defaultRole: 'member',
|
|
157
|
+
},
|
|
158
|
+
|
|
159
|
+
// Session Settings
|
|
160
|
+
session: {
|
|
161
|
+
maxAge: 7 * 24 * 60 * 60, // 7 days in seconds
|
|
162
|
+
updateAge: 24 * 60 * 60, // Refresh every 24 hours
|
|
163
|
+
},
|
|
164
|
+
|
|
165
|
+
// Feature Flags
|
|
166
|
+
features: {
|
|
167
|
+
pageBuilder: true,
|
|
168
|
+
apiKeys: true,
|
|
169
|
+
webhooks: true,
|
|
170
|
+
activityLog: true,
|
|
171
|
+
dataExport: true,
|
|
172
|
+
},
|
|
173
|
+
|
|
174
|
+
// Onboarding
|
|
175
|
+
onboarding: {
|
|
176
|
+
enabled: true,
|
|
177
|
+
steps: [
|
|
178
|
+
'profile',
|
|
179
|
+
'team',
|
|
180
|
+
'invite-members',
|
|
181
|
+
'preferences',
|
|
182
|
+
],
|
|
183
|
+
skipEnabled: true, // Allow skipping onboarding
|
|
184
|
+
},
|
|
185
|
+
|
|
186
|
+
// Support
|
|
187
|
+
support: {
|
|
188
|
+
email: 'support@myapp.com',
|
|
189
|
+
docsUrl: 'https://docs.myapp.com',
|
|
190
|
+
chatEnabled: true,
|
|
191
|
+
},
|
|
192
|
+
|
|
193
|
+
// Legal
|
|
194
|
+
legal: {
|
|
195
|
+
termsUrl: '/terms',
|
|
196
|
+
privacyUrl: '/privacy',
|
|
197
|
+
cookiePolicyUrl: '/cookies',
|
|
198
|
+
},
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
export default appConfig
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
**📋 Access Config in Code:**
|
|
205
|
+
|
|
206
|
+
```typescript
|
|
207
|
+
// Server-side
|
|
208
|
+
import { getAppConfig } from '@/core/lib/config'
|
|
209
|
+
|
|
210
|
+
const config = getAppConfig()
|
|
211
|
+
if (config.teamMode.enabled) {
|
|
212
|
+
// Team mode logic
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
// Client-side
|
|
216
|
+
import { useAppConfig } from '@/core/lib/hooks/useAppConfig'
|
|
217
|
+
|
|
218
|
+
function MyComponent() {
|
|
219
|
+
const config = useAppConfig()
|
|
220
|
+
return <div>{config.name}</div>
|
|
221
|
+
}
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
```
|
|
225
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
226
|
+
|
|
227
|
+
What would you like to do?
|
|
228
|
+
|
|
229
|
+
[1] Continue to Step 3 (Environment)
|
|
230
|
+
[2] Show me auth.config.ts options
|
|
231
|
+
[3] What is Team Mode?
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
---
|
|
235
|
+
|
|
236
|
+
## Step 3: Configure Environment
|
|
237
|
+
|
|
238
|
+
```
|
|
239
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
240
|
+
STEP 3 OF 4: Configure Environment
|
|
241
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
242
|
+
|
|
243
|
+
Essential environment variables:
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
**📋 Environment Variables (.env.local):**
|
|
247
|
+
|
|
248
|
+
```env
|
|
249
|
+
# .env.local (development)
|
|
250
|
+
# .env.production (production)
|
|
251
|
+
|
|
252
|
+
# ============================================
|
|
253
|
+
# DATABASE
|
|
254
|
+
# ============================================
|
|
255
|
+
DATABASE_URL="postgresql://user:pass@localhost:5432/myapp"
|
|
256
|
+
|
|
257
|
+
# ============================================
|
|
258
|
+
# AUTHENTICATION (Better Auth)
|
|
259
|
+
# ============================================
|
|
260
|
+
BETTER_AUTH_SECRET="your-secret-at-least-32-characters"
|
|
261
|
+
BETTER_AUTH_URL="http://localhost:3000"
|
|
262
|
+
|
|
263
|
+
# OAuth Providers (optional)
|
|
264
|
+
GOOGLE_CLIENT_ID=""
|
|
265
|
+
GOOGLE_CLIENT_SECRET=""
|
|
266
|
+
GITHUB_CLIENT_ID=""
|
|
267
|
+
GITHUB_CLIENT_SECRET=""
|
|
268
|
+
|
|
269
|
+
# ============================================
|
|
270
|
+
# APPLICATION
|
|
271
|
+
# ============================================
|
|
272
|
+
NEXT_PUBLIC_APP_URL="http://localhost:3000"
|
|
273
|
+
NEXT_PUBLIC_APP_NAME="My SaaS App"
|
|
274
|
+
|
|
275
|
+
# Active theme
|
|
276
|
+
NEXT_PUBLIC_ACTIVE_THEME="default"
|
|
277
|
+
|
|
278
|
+
# ============================================
|
|
279
|
+
# EMAIL (Resend)
|
|
280
|
+
# ============================================
|
|
281
|
+
RESEND_API_KEY=""
|
|
282
|
+
EMAIL_FROM="noreply@myapp.com"
|
|
283
|
+
|
|
284
|
+
# ============================================
|
|
285
|
+
# FILE STORAGE (S3/R2)
|
|
286
|
+
# ============================================
|
|
287
|
+
S3_BUCKET=""
|
|
288
|
+
S3_REGION=""
|
|
289
|
+
S3_ACCESS_KEY_ID=""
|
|
290
|
+
S3_SECRET_ACCESS_KEY=""
|
|
291
|
+
S3_ENDPOINT="" # For Cloudflare R2
|
|
292
|
+
|
|
293
|
+
# ============================================
|
|
294
|
+
# PAYMENTS (Stripe)
|
|
295
|
+
# ============================================
|
|
296
|
+
STRIPE_SECRET_KEY=""
|
|
297
|
+
STRIPE_PUBLISHABLE_KEY=""
|
|
298
|
+
STRIPE_WEBHOOK_SECRET=""
|
|
299
|
+
|
|
300
|
+
# ============================================
|
|
301
|
+
# BACKGROUND JOBS
|
|
302
|
+
# ============================================
|
|
303
|
+
CRON_SECRET="your-cron-secret"
|
|
304
|
+
|
|
305
|
+
# ============================================
|
|
306
|
+
# DEVELOPMENT
|
|
307
|
+
# ============================================
|
|
308
|
+
# Dev mode for superadmin bypass
|
|
309
|
+
DEV_USER_ID=""
|
|
310
|
+
DEV_TEAM_ID=""
|
|
311
|
+
```
|
|
312
|
+
|
|
313
|
+
**📋 Environment Files:**
|
|
314
|
+
|
|
315
|
+
| File | Purpose | Git |
|
|
316
|
+
|------|---------|-----|
|
|
317
|
+
| `.env.example` | Template with all vars | ✓ Committed |
|
|
318
|
+
| `.env` | Default values | ✗ Ignored |
|
|
319
|
+
| `.env.local` | Local development | ✗ Ignored |
|
|
320
|
+
| `.env.production` | Production values | ✗ Ignored |
|
|
321
|
+
|
|
322
|
+
**📋 Validate Environment:**
|
|
323
|
+
|
|
324
|
+
```bash
|
|
325
|
+
# Check for missing required variables
|
|
326
|
+
pnpm run env:check
|
|
327
|
+
|
|
328
|
+
# Generate new secrets
|
|
329
|
+
openssl rand -base64 32 # For BETTER_AUTH_SECRET
|
|
330
|
+
openssl rand -hex 16 # For CRON_SECRET
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
```
|
|
334
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
335
|
+
|
|
336
|
+
What would you like to do?
|
|
337
|
+
|
|
338
|
+
[1] Continue to Step 4 (Advanced)
|
|
339
|
+
[2] How do I set up OAuth providers?
|
|
340
|
+
[3] Show me production deployment env
|
|
341
|
+
```
|
|
342
|
+
|
|
343
|
+
---
|
|
344
|
+
|
|
345
|
+
## Step 4: Advanced Settings
|
|
346
|
+
|
|
347
|
+
```
|
|
348
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
349
|
+
STEP 4 OF 4: Advanced Settings
|
|
350
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
**📋 Team Mode Configuration:**
|
|
354
|
+
|
|
355
|
+
```typescript
|
|
356
|
+
// For single-user apps (no teams)
|
|
357
|
+
teamMode: {
|
|
358
|
+
enabled: false,
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
// For personal workspaces (one team per user)
|
|
362
|
+
teamMode: {
|
|
363
|
+
enabled: true,
|
|
364
|
+
createOnSignup: true,
|
|
365
|
+
allowMultipleTeams: false,
|
|
366
|
+
requireTeamForAccess: true,
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
// For collaborative SaaS (multiple teams)
|
|
370
|
+
teamMode: {
|
|
371
|
+
enabled: true,
|
|
372
|
+
createOnSignup: true,
|
|
373
|
+
allowMultipleTeams: true,
|
|
374
|
+
requireTeamForAccess: true,
|
|
375
|
+
}
|
|
376
|
+
```
|
|
377
|
+
|
|
378
|
+
**📋 Custom Onboarding Flow:**
|
|
379
|
+
|
|
380
|
+
```typescript
|
|
381
|
+
// contents/themes/your-theme/config/onboarding.config.ts
|
|
382
|
+
export const onboardingConfig = {
|
|
383
|
+
enabled: true,
|
|
384
|
+
|
|
385
|
+
steps: [
|
|
386
|
+
{
|
|
387
|
+
id: 'profile',
|
|
388
|
+
title: 'Complete Your Profile',
|
|
389
|
+
description: 'Tell us a bit about yourself',
|
|
390
|
+
component: 'ProfileStep',
|
|
391
|
+
required: true,
|
|
392
|
+
},
|
|
393
|
+
{
|
|
394
|
+
id: 'team',
|
|
395
|
+
title: 'Create Your Team',
|
|
396
|
+
description: 'Set up your workspace',
|
|
397
|
+
component: 'TeamStep',
|
|
398
|
+
required: true,
|
|
399
|
+
},
|
|
400
|
+
{
|
|
401
|
+
id: 'invite',
|
|
402
|
+
title: 'Invite Team Members',
|
|
403
|
+
description: 'Collaborate with your team',
|
|
404
|
+
component: 'InviteStep',
|
|
405
|
+
required: false,
|
|
406
|
+
skippable: true,
|
|
407
|
+
},
|
|
408
|
+
{
|
|
409
|
+
id: 'preferences',
|
|
410
|
+
title: 'Set Preferences',
|
|
411
|
+
description: 'Customize your experience',
|
|
412
|
+
component: 'PreferencesStep',
|
|
413
|
+
required: false,
|
|
414
|
+
},
|
|
415
|
+
],
|
|
416
|
+
|
|
417
|
+
// Redirect after completion
|
|
418
|
+
completedRedirect: '/dashboard',
|
|
419
|
+
|
|
420
|
+
// Allow skipping entire onboarding
|
|
421
|
+
skipEnabled: true,
|
|
422
|
+
}
|
|
423
|
+
```
|
|
424
|
+
|
|
425
|
+
**📋 Maintenance Mode:**
|
|
426
|
+
|
|
427
|
+
```typescript
|
|
428
|
+
// app.config.ts
|
|
429
|
+
export const appConfig: AppConfig = {
|
|
430
|
+
maintenance: {
|
|
431
|
+
enabled: false,
|
|
432
|
+
message: 'We are performing scheduled maintenance.',
|
|
433
|
+
allowedIPs: ['127.0.0.1'], // IPs that can access
|
|
434
|
+
estimatedEnd: '2024-01-15T10:00:00Z',
|
|
435
|
+
},
|
|
436
|
+
}
|
|
437
|
+
```
|
|
438
|
+
|
|
439
|
+
**📋 Rate Limiting:**
|
|
440
|
+
|
|
441
|
+
```typescript
|
|
442
|
+
// app.config.ts
|
|
443
|
+
export const appConfig: AppConfig = {
|
|
444
|
+
rateLimiting: {
|
|
445
|
+
enabled: true,
|
|
446
|
+
window: 60, // Seconds
|
|
447
|
+
maxRequests: 100, // Per window
|
|
448
|
+
byIP: true,
|
|
449
|
+
byUser: true,
|
|
450
|
+
excludePaths: ['/api/health', '/api/webhooks'],
|
|
451
|
+
},
|
|
452
|
+
}
|
|
453
|
+
```
|
|
454
|
+
|
|
455
|
+
```
|
|
456
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
457
|
+
|
|
458
|
+
✅ TUTORIAL STORY!
|
|
459
|
+
|
|
460
|
+
You've configured:
|
|
461
|
+
• Core application settings
|
|
462
|
+
• Environment variables
|
|
463
|
+
• Team mode options
|
|
464
|
+
• Advanced features
|
|
465
|
+
|
|
466
|
+
📚 Related tutorials:
|
|
467
|
+
• /how-to:setup-authentication - Auth configuration
|
|
468
|
+
• /how-to:customize-dashboard - Dashboard settings
|
|
469
|
+
• /how-to:customize-theme - Visual customization
|
|
470
|
+
|
|
471
|
+
🔙 Back to menu: /how-to:start
|
|
472
|
+
```
|
|
473
|
+
|
|
474
|
+
---
|
|
475
|
+
|
|
476
|
+
## Related Commands
|
|
477
|
+
|
|
478
|
+
| Command | Action |
|
|
479
|
+
|---------|--------|
|
|
480
|
+
| `/how-to:setup-authentication` | Auth setup |
|
|
481
|
+
| `/how-to:customize-theme` | Theme customization |
|