@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,507 @@
|
|
|
1
|
+
# /how-to:deploy
|
|
2
|
+
|
|
3
|
+
Interactive guide to deploy NextSpark to production.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Syntax
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
/how-to:deploy
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Behavior
|
|
16
|
+
|
|
17
|
+
Guides the user through deploying to Vercel, managing environment variables, and configuring production settings.
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## Tutorial Overview
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
STEPS OVERVIEW (4 steps)
|
|
25
|
+
|
|
26
|
+
Step 1: Prepare for Deployment
|
|
27
|
+
└── Pre-deployment checklist
|
|
28
|
+
|
|
29
|
+
Step 2: Deploy to Vercel
|
|
30
|
+
└── Connect and deploy
|
|
31
|
+
|
|
32
|
+
Step 3: Configure Environment
|
|
33
|
+
└── Production variables
|
|
34
|
+
|
|
35
|
+
Step 4: Post-Deployment Setup
|
|
36
|
+
└── Database, domains, monitoring
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## Step 1: Prepare for Deployment
|
|
42
|
+
|
|
43
|
+
```
|
|
44
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
45
|
+
📚 HOW TO: DEPLOY
|
|
46
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
47
|
+
|
|
48
|
+
STEP 1 OF 4: Prepare for Deployment
|
|
49
|
+
|
|
50
|
+
Complete this checklist before deploying:
|
|
51
|
+
|
|
52
|
+
┌─────────────────────────────────────────────┐
|
|
53
|
+
│ PRE-DEPLOYMENT CHECKLIST │
|
|
54
|
+
│ ───────────────────────────────────────── │
|
|
55
|
+
│ │
|
|
56
|
+
│ [ ] Build passes locally │
|
|
57
|
+
│ pnpm build │
|
|
58
|
+
│ │
|
|
59
|
+
│ [ ] Tests pass │
|
|
60
|
+
│ pnpm test │
|
|
61
|
+
│ │
|
|
62
|
+
│ [ ] Environment variables documented │
|
|
63
|
+
│ All required vars in .env.example │
|
|
64
|
+
│ │
|
|
65
|
+
│ [ ] Database migrations ready │
|
|
66
|
+
│ pnpm db:migrate works │
|
|
67
|
+
│ │
|
|
68
|
+
│ [ ] No console.log statements │
|
|
69
|
+
│ Remove debug logs │
|
|
70
|
+
│ │
|
|
71
|
+
│ [ ] Images optimized │
|
|
72
|
+
│ Use next/image for all images │
|
|
73
|
+
│ │
|
|
74
|
+
└─────────────────────────────────────────────┘
|
|
75
|
+
|
|
76
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
77
|
+
|
|
78
|
+
📋 Verify Build:
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
# Clean build
|
|
82
|
+
rm -rf .next
|
|
83
|
+
pnpm build
|
|
84
|
+
|
|
85
|
+
# Expected output:
|
|
86
|
+
# ✓ Compiled successfully
|
|
87
|
+
# ✓ Linting and checking validity of types
|
|
88
|
+
# ✓ Collecting page data
|
|
89
|
+
# ✓ Generating static pages
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
93
|
+
|
|
94
|
+
📋 Check Bundle Size:
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
# Analyze bundle
|
|
98
|
+
pnpm build:analyze
|
|
99
|
+
|
|
100
|
+
# Should see:
|
|
101
|
+
# - No packages > 500KB
|
|
102
|
+
# - Proper code splitting
|
|
103
|
+
# - Tree shaking working
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
107
|
+
|
|
108
|
+
📋 Required Services:
|
|
109
|
+
|
|
110
|
+
Before deployment, ensure you have:
|
|
111
|
+
|
|
112
|
+
| Service | Purpose | Provider |
|
|
113
|
+
|---------|---------|----------|
|
|
114
|
+
| Database | PostgreSQL | Supabase, Neon, AWS RDS |
|
|
115
|
+
| Email | Transactional | Resend, SendGrid |
|
|
116
|
+
| Storage | File uploads | S3, R2, Supabase Storage |
|
|
117
|
+
| Payments | Billing | Stripe |
|
|
118
|
+
| Hosting | App hosting | Vercel |
|
|
119
|
+
|
|
120
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
121
|
+
|
|
122
|
+
What would you like to do?
|
|
123
|
+
|
|
124
|
+
[1] Continue to Step 2 (Deploy to Vercel)
|
|
125
|
+
[2] Show me how to set up Supabase
|
|
126
|
+
[3] How do I fix build errors?
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
## Step 2: Deploy to Vercel
|
|
132
|
+
|
|
133
|
+
```
|
|
134
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
135
|
+
STEP 2 OF 4: Deploy to Vercel
|
|
136
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
137
|
+
|
|
138
|
+
📋 Option A: Deploy via CLI
|
|
139
|
+
|
|
140
|
+
```bash
|
|
141
|
+
# Install Vercel CLI
|
|
142
|
+
npm i -g vercel
|
|
143
|
+
|
|
144
|
+
# Login to Vercel
|
|
145
|
+
vercel login
|
|
146
|
+
|
|
147
|
+
# Deploy (first time - will prompt for config)
|
|
148
|
+
vercel
|
|
149
|
+
|
|
150
|
+
# Deploy to production
|
|
151
|
+
vercel --prod
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
155
|
+
|
|
156
|
+
📋 Option B: Deploy via GitHub
|
|
157
|
+
|
|
158
|
+
1. Push your code to GitHub:
|
|
159
|
+
```bash
|
|
160
|
+
git push origin main
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
2. Go to vercel.com/new
|
|
164
|
+
|
|
165
|
+
3. Import your repository
|
|
166
|
+
|
|
167
|
+
4. Configure project:
|
|
168
|
+
- Framework Preset: Next.js
|
|
169
|
+
- Root Directory: ./
|
|
170
|
+
- Build Command: pnpm build
|
|
171
|
+
- Install Command: pnpm install
|
|
172
|
+
|
|
173
|
+
5. Click "Deploy"
|
|
174
|
+
|
|
175
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
176
|
+
|
|
177
|
+
📋 Vercel Project Settings:
|
|
178
|
+
|
|
179
|
+
```
|
|
180
|
+
Project Settings > General
|
|
181
|
+
├── Framework Preset: Next.js
|
|
182
|
+
├── Build Command: pnpm build
|
|
183
|
+
├── Output Directory: .next
|
|
184
|
+
├── Install Command: pnpm install
|
|
185
|
+
└── Node.js Version: 20.x
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
189
|
+
|
|
190
|
+
📋 vercel.json Configuration:
|
|
191
|
+
|
|
192
|
+
```json
|
|
193
|
+
{
|
|
194
|
+
"buildCommand": "pnpm build",
|
|
195
|
+
"installCommand": "pnpm install",
|
|
196
|
+
"framework": "nextjs",
|
|
197
|
+
"regions": ["iad1"],
|
|
198
|
+
"functions": {
|
|
199
|
+
"app/api/**/*.ts": {
|
|
200
|
+
"maxDuration": 30
|
|
201
|
+
}
|
|
202
|
+
},
|
|
203
|
+
"crons": [
|
|
204
|
+
{
|
|
205
|
+
"path": "/api/cron/process-scheduled-actions",
|
|
206
|
+
"schedule": "*/5 * * * *"
|
|
207
|
+
}
|
|
208
|
+
]
|
|
209
|
+
}
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
213
|
+
|
|
214
|
+
📋 Automatic Deployments:
|
|
215
|
+
|
|
216
|
+
Vercel automatically deploys:
|
|
217
|
+
- **Production**: Push to `main` branch
|
|
218
|
+
- **Preview**: Push to any other branch
|
|
219
|
+
- **PR Previews**: Open pull request
|
|
220
|
+
|
|
221
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
222
|
+
|
|
223
|
+
What would you like to do?
|
|
224
|
+
|
|
225
|
+
[1] Continue to Step 3 (Environment)
|
|
226
|
+
[2] Deploy to other platforms (Railway, Render)
|
|
227
|
+
[3] Set up custom domain
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
---
|
|
231
|
+
|
|
232
|
+
## Step 3: Configure Environment
|
|
233
|
+
|
|
234
|
+
```
|
|
235
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
236
|
+
STEP 3 OF 4: Configure Production Environment
|
|
237
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
238
|
+
|
|
239
|
+
Set environment variables in Vercel dashboard:
|
|
240
|
+
|
|
241
|
+
📋 Required Variables:
|
|
242
|
+
|
|
243
|
+
```env
|
|
244
|
+
# ============================================
|
|
245
|
+
# DATABASE (Supabase/Neon)
|
|
246
|
+
# ============================================
|
|
247
|
+
DATABASE_URL="postgresql://..."
|
|
248
|
+
|
|
249
|
+
# ============================================
|
|
250
|
+
# AUTHENTICATION
|
|
251
|
+
# ============================================
|
|
252
|
+
# Generate: openssl rand -base64 32
|
|
253
|
+
BETTER_AUTH_SECRET="production-secret-min-32-chars"
|
|
254
|
+
BETTER_AUTH_URL="https://your-domain.com"
|
|
255
|
+
BETTER_AUTH_TRUST_HOST="true"
|
|
256
|
+
|
|
257
|
+
# ============================================
|
|
258
|
+
# APPLICATION
|
|
259
|
+
# ============================================
|
|
260
|
+
NEXT_PUBLIC_APP_URL="https://your-domain.com"
|
|
261
|
+
NEXT_PUBLIC_APP_NAME="Your App Name"
|
|
262
|
+
NEXT_PUBLIC_ACTIVE_THEME="your-theme"
|
|
263
|
+
|
|
264
|
+
# ============================================
|
|
265
|
+
# EMAIL (Resend)
|
|
266
|
+
# ============================================
|
|
267
|
+
RESEND_API_KEY="re_xxxx"
|
|
268
|
+
EMAIL_FROM="noreply@your-domain.com"
|
|
269
|
+
|
|
270
|
+
# ============================================
|
|
271
|
+
# PAYMENTS (Stripe)
|
|
272
|
+
# ============================================
|
|
273
|
+
STRIPE_SECRET_KEY="sk_live_xxxx"
|
|
274
|
+
STRIPE_PUBLISHABLE_KEY="pk_live_xxxx"
|
|
275
|
+
STRIPE_WEBHOOK_SECRET="whsec_xxxx"
|
|
276
|
+
|
|
277
|
+
# ============================================
|
|
278
|
+
# FILE STORAGE (S3/R2)
|
|
279
|
+
# ============================================
|
|
280
|
+
S3_BUCKET="your-bucket"
|
|
281
|
+
S3_REGION="auto"
|
|
282
|
+
S3_ACCESS_KEY_ID="xxxx"
|
|
283
|
+
S3_SECRET_ACCESS_KEY="xxxx"
|
|
284
|
+
S3_ENDPOINT="https://xxx.r2.cloudflarestorage.com"
|
|
285
|
+
|
|
286
|
+
# ============================================
|
|
287
|
+
# BACKGROUND JOBS
|
|
288
|
+
# ============================================
|
|
289
|
+
# Generate: openssl rand -hex 16
|
|
290
|
+
CRON_SECRET="your-cron-secret"
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
294
|
+
|
|
295
|
+
📋 Add Variables in Vercel:
|
|
296
|
+
|
|
297
|
+
1. Go to Project Settings > Environment Variables
|
|
298
|
+
|
|
299
|
+
2. Add each variable:
|
|
300
|
+
- Name: DATABASE_URL
|
|
301
|
+
- Value: postgresql://...
|
|
302
|
+
- Environment: Production (and Preview if needed)
|
|
303
|
+
|
|
304
|
+
3. Click "Save"
|
|
305
|
+
|
|
306
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
307
|
+
|
|
308
|
+
📋 Using Vercel CLI:
|
|
309
|
+
|
|
310
|
+
```bash
|
|
311
|
+
# Add single variable
|
|
312
|
+
vercel env add DATABASE_URL production
|
|
313
|
+
|
|
314
|
+
# Pull all env vars locally
|
|
315
|
+
vercel env pull .env.local
|
|
316
|
+
|
|
317
|
+
# List all variables
|
|
318
|
+
vercel env ls
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
322
|
+
|
|
323
|
+
📋 Environment-Specific Variables:
|
|
324
|
+
|
|
325
|
+
| Variable | Development | Production |
|
|
326
|
+
|----------|-------------|------------|
|
|
327
|
+
| DATABASE_URL | Local PostgreSQL | Supabase/Neon |
|
|
328
|
+
| BETTER_AUTH_URL | localhost:3000 | your-domain.com |
|
|
329
|
+
| STRIPE_* | sk_test_xxx | sk_live_xxx |
|
|
330
|
+
| Email | Console output | Resend API |
|
|
331
|
+
|
|
332
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
333
|
+
|
|
334
|
+
⚠️ SECURITY NOTES:
|
|
335
|
+
|
|
336
|
+
- Never commit .env files to git
|
|
337
|
+
- Use different secrets for production
|
|
338
|
+
- Rotate secrets periodically
|
|
339
|
+
- Use Vercel's secret storage for sensitive values
|
|
340
|
+
|
|
341
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
342
|
+
|
|
343
|
+
What would you like to do?
|
|
344
|
+
|
|
345
|
+
[1] Continue to Step 4 (Post-Deployment)
|
|
346
|
+
[2] How do I set up Stripe webhooks?
|
|
347
|
+
[3] Configure OAuth for production
|
|
348
|
+
```
|
|
349
|
+
|
|
350
|
+
---
|
|
351
|
+
|
|
352
|
+
## Step 4: Post-Deployment Setup
|
|
353
|
+
|
|
354
|
+
```
|
|
355
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
356
|
+
STEP 4 OF 4: Post-Deployment Setup
|
|
357
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
358
|
+
|
|
359
|
+
📋 1. Run Database Migrations:
|
|
360
|
+
|
|
361
|
+
```bash
|
|
362
|
+
# Option A: Via Vercel Function
|
|
363
|
+
# Create: app/api/migrate/route.ts (temporary)
|
|
364
|
+
|
|
365
|
+
# Option B: Direct connection
|
|
366
|
+
DATABASE_URL="production-url" pnpm db:migrate
|
|
367
|
+
|
|
368
|
+
# Option C: Via Supabase SQL Editor
|
|
369
|
+
# Paste migration SQL directly
|
|
370
|
+
```
|
|
371
|
+
|
|
372
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
373
|
+
|
|
374
|
+
📋 2. Configure Custom Domain:
|
|
375
|
+
|
|
376
|
+
1. Go to Project Settings > Domains
|
|
377
|
+
2. Add your domain: your-domain.com
|
|
378
|
+
3. Add DNS records as shown
|
|
379
|
+
4. Wait for SSL certificate (automatic)
|
|
380
|
+
|
|
381
|
+
```
|
|
382
|
+
DNS Records to add:
|
|
383
|
+
A @ 76.76.21.21
|
|
384
|
+
CNAME www cname.vercel-dns.com
|
|
385
|
+
```
|
|
386
|
+
|
|
387
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
388
|
+
|
|
389
|
+
📋 3. Set Up Stripe Webhooks:
|
|
390
|
+
|
|
391
|
+
1. Go to Stripe Dashboard > Developers > Webhooks
|
|
392
|
+
2. Add endpoint: https://your-domain.com/api/webhooks/stripe
|
|
393
|
+
3. Select events:
|
|
394
|
+
- checkout.session.completed
|
|
395
|
+
- customer.subscription.updated
|
|
396
|
+
- customer.subscription.deleted
|
|
397
|
+
- invoice.payment_failed
|
|
398
|
+
4. Copy webhook secret to STRIPE_WEBHOOK_SECRET
|
|
399
|
+
|
|
400
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
401
|
+
|
|
402
|
+
📋 4. Configure OAuth Callbacks:
|
|
403
|
+
|
|
404
|
+
Update OAuth provider settings with production URLs:
|
|
405
|
+
|
|
406
|
+
Google Cloud Console:
|
|
407
|
+
- Authorized redirect URI: https://your-domain.com/api/auth/callback/google
|
|
408
|
+
|
|
409
|
+
GitHub Developer Settings:
|
|
410
|
+
- Authorization callback URL: https://your-domain.com/api/auth/callback/github
|
|
411
|
+
|
|
412
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
413
|
+
|
|
414
|
+
📋 5. Set Up Monitoring:
|
|
415
|
+
|
|
416
|
+
```typescript
|
|
417
|
+
// Vercel Analytics (built-in)
|
|
418
|
+
// Add to app/layout.tsx:
|
|
419
|
+
import { Analytics } from '@vercel/analytics/react'
|
|
420
|
+
|
|
421
|
+
export default function RootLayout({ children }) {
|
|
422
|
+
return (
|
|
423
|
+
<html>
|
|
424
|
+
<body>
|
|
425
|
+
{children}
|
|
426
|
+
<Analytics />
|
|
427
|
+
</body>
|
|
428
|
+
</html>
|
|
429
|
+
)
|
|
430
|
+
}
|
|
431
|
+
```
|
|
432
|
+
|
|
433
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
434
|
+
|
|
435
|
+
📋 6. Configure Cron Jobs:
|
|
436
|
+
|
|
437
|
+
In vercel.json:
|
|
438
|
+
```json
|
|
439
|
+
{
|
|
440
|
+
"crons": [
|
|
441
|
+
{
|
|
442
|
+
"path": "/api/cron/process-scheduled-actions",
|
|
443
|
+
"schedule": "*/5 * * * *"
|
|
444
|
+
},
|
|
445
|
+
{
|
|
446
|
+
"path": "/api/cron/cleanup-sessions",
|
|
447
|
+
"schedule": "0 0 * * *"
|
|
448
|
+
}
|
|
449
|
+
]
|
|
450
|
+
}
|
|
451
|
+
```
|
|
452
|
+
|
|
453
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
454
|
+
|
|
455
|
+
📋 Post-Deployment Checklist:
|
|
456
|
+
|
|
457
|
+
[ ] Database migrations ran successfully
|
|
458
|
+
[ ] Custom domain configured with SSL
|
|
459
|
+
[ ] Stripe webhooks set up
|
|
460
|
+
[ ] OAuth callbacks updated
|
|
461
|
+
[ ] Cron jobs configured
|
|
462
|
+
[ ] Analytics enabled
|
|
463
|
+
[ ] Error tracking set up (Sentry optional)
|
|
464
|
+
[ ] First user can sign up
|
|
465
|
+
[ ] Email sending works
|
|
466
|
+
[ ] File uploads work
|
|
467
|
+
|
|
468
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
469
|
+
|
|
470
|
+
📋 Test Production:
|
|
471
|
+
|
|
472
|
+
```bash
|
|
473
|
+
# Test signup
|
|
474
|
+
curl -X POST https://your-domain.com/api/auth/sign-up \
|
|
475
|
+
-H "Content-Type: application/json" \
|
|
476
|
+
-d '{"email":"test@example.com","password":"Test1234","name":"Test"}'
|
|
477
|
+
|
|
478
|
+
# Test API
|
|
479
|
+
curl https://your-domain.com/api/health
|
|
480
|
+
```
|
|
481
|
+
|
|
482
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
483
|
+
|
|
484
|
+
✅ TUTORIAL STORY!
|
|
485
|
+
|
|
486
|
+
Your app is deployed with:
|
|
487
|
+
• Vercel hosting
|
|
488
|
+
• Production environment
|
|
489
|
+
• Custom domain
|
|
490
|
+
• Stripe webhooks
|
|
491
|
+
• Monitoring
|
|
492
|
+
|
|
493
|
+
📚 Related tutorials:
|
|
494
|
+
• /how-to:setup-authentication - Auth configuration
|
|
495
|
+
• /how-to:customize-app - App settings
|
|
496
|
+
|
|
497
|
+
🔙 Back to menu: /how-to:start
|
|
498
|
+
```
|
|
499
|
+
|
|
500
|
+
---
|
|
501
|
+
|
|
502
|
+
## Related Commands
|
|
503
|
+
|
|
504
|
+
| Command | Action |
|
|
505
|
+
|---------|--------|
|
|
506
|
+
| `/how-to:setup-authentication` | Auth setup |
|
|
507
|
+
| `/how-to:setup-database` | Database setup |
|