create-nextblock 0.16.4 → 0.17.1

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 (203) hide show
  1. package/CLAUDE.md +22 -0
  2. package/docker-template/.env.docker.example +69 -69
  3. package/docker-template/docker/db/init/99-jwt.sql +6 -6
  4. package/docker-template/docker/db/init/99-roles.sql +25 -25
  5. package/docker-template/docker/kong/kong.yml +112 -112
  6. package/docker-template/scripts/docker-setup.mjs +310 -310
  7. package/package.json +1 -1
  8. package/templates/nextblock-template/.browserslistrc +11 -11
  9. package/templates/nextblock-template/.swcrc +30 -30
  10. package/templates/nextblock-template/CLAUDE.md +26 -0
  11. package/templates/nextblock-template/app/(auth-pages)/sign-up/page.tsx +46 -46
  12. package/templates/nextblock-template/app/(auth-pages)/two-factor/page.tsx +51 -51
  13. package/templates/nextblock-template/app/.well-known/ucp/route.ts +16 -16
  14. package/templates/nextblock-template/app/actions/consent.ts +57 -57
  15. package/templates/nextblock-template/app/actions/twoFactorEmail.ts +22 -22
  16. package/templates/nextblock-template/app/api/ai/cortex/build-widget/route.ts +153 -153
  17. package/templates/nextblock-template/app/api/ai/generate-blocks/route.ts +96 -96
  18. package/templates/nextblock-template/app/api/brand/email-logo/route.ts +48 -48
  19. package/templates/nextblock-template/app/api/checkout/freemius/sync/route.ts +29 -29
  20. package/templates/nextblock-template/app/api/cms/check-updates/route.ts +44 -44
  21. package/templates/nextblock-template/app/api/cms/full-backup/export/route.ts +33 -33
  22. package/templates/nextblock-template/app/api/cms/full-backup/restore/route.ts +63 -63
  23. package/templates/nextblock-template/app/api/cron/reset-sandbox/route.ts +272 -205
  24. package/templates/nextblock-template/app/api/cron/reset-sandbox/sandboxResetSql.ts +10473 -8467
  25. package/templates/nextblock-template/app/api/cron/sync-currencies/route.ts +39 -39
  26. package/templates/nextblock-template/app/api/custom-blocks/db-relations/route.ts +92 -92
  27. package/templates/nextblock-template/app/api/custom-blocks/editor-definitions/route.ts +43 -43
  28. package/templates/nextblock-template/app/api/media/library/route.ts +69 -69
  29. package/templates/nextblock-template/app/api/media/r2-presigned/route.ts +53 -53
  30. package/templates/nextblock-template/app/api/visual-editing/block-draft/route.ts +47 -47
  31. package/templates/nextblock-template/app/api/visual-editing/product-draft/route.ts +47 -47
  32. package/templates/nextblock-template/app/article/[slug]/PostClientContent.tsx +442 -441
  33. package/templates/nextblock-template/app/article/[slug]/page.utils.ts +4 -1
  34. package/templates/nextblock-template/app/checkout/UcpCartHydrator.tsx +20 -20
  35. package/templates/nextblock-template/app/cms/blocks/components/BlockEditorModal.tsx +241 -241
  36. package/templates/nextblock-template/app/cms/blocks/components/CustomBlockEditorPreview.tsx +160 -160
  37. package/templates/nextblock-template/app/cms/blocks/editors/DynamicCustomBlockEditor.tsx +167 -167
  38. package/templates/nextblock-template/app/cms/components/ConnectGitHubButton.tsx +122 -122
  39. package/templates/nextblock-template/app/cms/components/CortexAiActiveContext.tsx +23 -23
  40. package/templates/nextblock-template/app/cms/components/SeoScoreBadge.tsx +3 -3
  41. package/templates/nextblock-template/app/cms/components/SystemAlertsBanner.tsx +112 -112
  42. package/templates/nextblock-template/app/cms/components/TablePagination.tsx +136 -136
  43. package/templates/nextblock-template/app/cms/components/TwoFactorReminderBanner.tsx +45 -45
  44. package/templates/nextblock-template/app/cms/components/github-connect-actions.ts +102 -102
  45. package/templates/nextblock-template/app/cms/components/system-alerts-actions.ts +31 -31
  46. package/templates/nextblock-template/app/cms/coupons/[id]/edit/page.tsx +16 -16
  47. package/templates/nextblock-template/app/cms/coupons/page.tsx +16 -16
  48. package/templates/nextblock-template/app/cms/custom-blocks/[id]/edit/page.tsx +66 -66
  49. package/templates/nextblock-template/app/cms/custom-blocks/actions.ts +519 -519
  50. package/templates/nextblock-template/app/cms/custom-blocks/components/BlocksLibraryTransferControls.tsx +256 -256
  51. package/templates/nextblock-template/app/cms/custom-blocks/components/DBRelationSelect.tsx +384 -384
  52. package/templates/nextblock-template/app/cms/custom-blocks/components/ImageR2Picker.tsx +221 -221
  53. package/templates/nextblock-template/app/cms/custom-blocks/new/page.tsx +12 -12
  54. package/templates/nextblock-template/app/cms/custom-blocks/page.tsx +438 -438
  55. package/templates/nextblock-template/app/cms/dashboard/components/DashboardComponents.tsx +200 -200
  56. package/templates/nextblock-template/app/cms/dashboard/components/DashboardOnboarding.tsx +130 -130
  57. package/templates/nextblock-template/app/cms/import-export/actions.ts +226 -226
  58. package/templates/nextblock-template/app/cms/pages/page.tsx +273 -273
  59. package/templates/nextblock-template/app/cms/posts/page.tsx +251 -251
  60. package/templates/nextblock-template/app/cms/products/categories/page.tsx +12 -12
  61. package/templates/nextblock-template/app/cms/products/new/page.tsx +135 -135
  62. package/templates/nextblock-template/app/cms/promotions/PromotionsWorkspace.tsx +456 -456
  63. package/templates/nextblock-template/app/cms/promotions/actions.ts +115 -115
  64. package/templates/nextblock-template/app/cms/promotions/page.tsx +31 -31
  65. package/templates/nextblock-template/app/cms/settings/backup-restore/BackupRestoreWorkspace.tsx +1004 -1004
  66. package/templates/nextblock-template/app/cms/settings/backup-restore/page.tsx +29 -29
  67. package/templates/nextblock-template/app/cms/settings/bot-protection/page.tsx +24 -24
  68. package/templates/nextblock-template/app/cms/settings/email/page.tsx +28 -28
  69. package/templates/nextblock-template/app/cms/settings/extra-translations/actions.ts +276 -276
  70. package/templates/nextblock-template/app/cms/settings/google-analytics/page.tsx +26 -26
  71. package/templates/nextblock-template/app/cms/settings/logos/components/DeleteLogoButton.tsx +21 -21
  72. package/templates/nextblock-template/app/cms/settings/logos/components/SetActiveLogoButton.tsx +42 -42
  73. package/templates/nextblock-template/app/cms/settings/logos/components/SiteSeoSettingsForm.tsx +133 -133
  74. package/templates/nextblock-template/app/cms/settings/privacy/page.tsx +27 -27
  75. package/templates/nextblock-template/app/cms/settings/registration/page.tsx +27 -27
  76. package/templates/nextblock-template/app/cms/settings/security/page.tsx +33 -33
  77. package/templates/nextblock-template/app/lib/site-settings.ts +105 -105
  78. package/templates/nextblock-template/app/lib/ucp/protocol.ts +190 -190
  79. package/templates/nextblock-template/app/lib/ucp/server.test.ts +56 -56
  80. package/templates/nextblock-template/app/setup/SetupWizard.tsx +678 -678
  81. package/templates/nextblock-template/app/setup/layout.tsx +13 -13
  82. package/templates/nextblock-template/app/setup/page.tsx +111 -111
  83. package/templates/nextblock-template/app/ucp/v1/carts/[id]/cancel/route.ts +38 -38
  84. package/templates/nextblock-template/app/ucp/v1/carts/[id]/route.ts +68 -68
  85. package/templates/nextblock-template/app/ucp/v1/carts/route.ts +35 -35
  86. package/templates/nextblock-template/app/ucp/v1/catalog/lookup/route.ts +35 -35
  87. package/templates/nextblock-template/app/ucp/v1/catalog/product/route.ts +35 -35
  88. package/templates/nextblock-template/app/ucp/v1/catalog/search/route.ts +34 -34
  89. package/templates/nextblock-template/components/CartTranslator.tsx +210 -210
  90. package/templates/nextblock-template/components/DeferredCartTranslator.tsx +51 -51
  91. package/templates/nextblock-template/components/DeferredGlobalSearch.tsx +68 -68
  92. package/templates/nextblock-template/components/DeferredGoogleAnalytics.tsx +70 -70
  93. package/templates/nextblock-template/components/FeatureImageHero.tsx +47 -47
  94. package/templates/nextblock-template/components/GlobalSearch.tsx +557 -557
  95. package/templates/nextblock-template/components/Header.tsx +38 -38
  96. package/templates/nextblock-template/components/PublicEnvBootstrap.tsx +30 -30
  97. package/templates/nextblock-template/components/ResponsiveNav.tsx +14 -14
  98. package/templates/nextblock-template/components/auth/AuthBotProtection.tsx +182 -182
  99. package/templates/nextblock-template/components/blocks/PostsGridClient.tsx +48 -48
  100. package/templates/nextblock-template/components/blocks/TestimonialBlock.tsx +9 -9
  101. package/templates/nextblock-template/components/blocks/publicRendererLoaders.ts +25 -25
  102. package/templates/nextblock-template/components/blocks/renderers/ButtonBlockRenderer.tsx +92 -92
  103. package/templates/nextblock-template/components/blocks/renderers/ClientTextBlockRenderer.tsx +11 -0
  104. package/templates/nextblock-template/components/blocks/renderers/PostsGridBlockRenderer.tsx +24 -24
  105. package/templates/nextblock-template/components/blocks/renderers/TestimonialBlockRenderer.tsx +57 -57
  106. package/templates/nextblock-template/components/blocks/renderers/inline/AlertWidgetRenderer.tsx +2 -2
  107. package/templates/nextblock-template/components/blocks/renderers/inline/CtaWidgetRenderer.tsx +2 -2
  108. package/templates/nextblock-template/components/media/YouTubeFacade.tsx +105 -105
  109. package/templates/nextblock-template/components/media/youtube-embed-replace.tsx +32 -32
  110. package/templates/nextblock-template/components/privacy/ConsentBanner.tsx +170 -170
  111. package/templates/nextblock-template/components/privacy/ConsentGatedAnalytics.tsx +70 -70
  112. package/templates/nextblock-template/components/renderers/CachedDynamicLayoutEngine.tsx +28 -28
  113. package/templates/nextblock-template/components/renderers/DynamicLayoutEngine.test.tsx +166 -166
  114. package/templates/nextblock-template/components/renderers/DynamicLayoutEngine.tsx +471 -471
  115. package/templates/nextblock-template/components/visual-editing/DeferredVisualEditing.tsx +21 -21
  116. package/templates/nextblock-template/context/language-rest-client.ts +32 -32
  117. package/templates/nextblock-template/docker/db/init/99-jwt.sql +6 -6
  118. package/templates/nextblock-template/docker/db/init/99-roles.sql +25 -25
  119. package/templates/nextblock-template/docker/kong/kong.yml +112 -112
  120. package/templates/nextblock-template/docs/02-ECOMMERCE-CAPABILITIES.md +364 -364
  121. package/templates/nextblock-template/docs/03-CMS-AND-EDITOR.md +1 -1
  122. package/templates/nextblock-template/docs/04-DATABASE-AND-AUTH.md +402 -282
  123. package/templates/nextblock-template/docs/05-DEVELOPER-GUIDE.md +15 -8
  124. package/templates/nextblock-template/docs/07-BLOCK-SDK-AND-EXTENSIBILITY.md +146 -146
  125. package/templates/nextblock-template/docs/08-NEXTBLOCK-CORTEX-AI-ARCHITECTURE.md +23 -4
  126. package/templates/nextblock-template/docs/10-CUSTOM-BLOCKS.md +222 -222
  127. package/templates/nextblock-template/docs/11-SELF-HOSTED-DOCKER.md +4 -1
  128. package/templates/nextblock-template/docs/13-STAYING-UP-TO-DATE.md +8 -0
  129. package/templates/nextblock-template/docs/14-MESSAGES-INBOX.md +2 -2
  130. package/templates/nextblock-template/docs/TECHNICAL_SPECIFICATION.md +95 -104
  131. package/templates/nextblock-template/lib/app-secrets.ts +39 -39
  132. package/templates/nextblock-template/lib/auth/cookies.ts +47 -47
  133. package/templates/nextblock-template/lib/auth/crypto.ts +45 -45
  134. package/templates/nextblock-template/lib/auth/trustedDevices.ts +92 -92
  135. package/templates/nextblock-template/lib/blocks/README.md +13 -13
  136. package/templates/nextblock-template/lib/botProtection/verify.ts +134 -134
  137. package/templates/nextblock-template/lib/cms/payments-reminder.test.ts +135 -135
  138. package/templates/nextblock-template/lib/cms/payments-reminder.ts +105 -105
  139. package/templates/nextblock-template/lib/cms-transfer/types.ts +145 -145
  140. package/templates/nextblock-template/lib/custom-block-definitions.ts +87 -87
  141. package/templates/nextblock-template/lib/custom-block-r2-upload-shared.ts +178 -178
  142. package/templates/nextblock-template/lib/custom-block-r2-upload.test.ts +140 -140
  143. package/templates/nextblock-template/lib/custom-block-r2-upload.ts +88 -88
  144. package/templates/nextblock-template/lib/custom-block-relations.test.ts +227 -227
  145. package/templates/nextblock-template/lib/custom-block-relations.ts +279 -279
  146. package/templates/nextblock-template/lib/custom-block-safelist.ts +14 -14
  147. package/templates/nextblock-template/lib/editor/dynamic-extension-core.test.ts +172 -172
  148. package/templates/nextblock-template/lib/editor/dynamic-extension-core.ts +213 -213
  149. package/templates/nextblock-template/lib/editor/dynamic-extension-loader.ts +22 -22
  150. package/templates/nextblock-template/lib/editor/dynamic-extensions.tsx +193 -193
  151. package/templates/nextblock-template/lib/email/branding-format.test.ts +133 -133
  152. package/templates/nextblock-template/lib/email/branding-format.ts +123 -123
  153. package/templates/nextblock-template/lib/email/branding.ts +76 -76
  154. package/templates/nextblock-template/lib/full-backup/manifest.test.ts +121 -121
  155. package/templates/nextblock-template/lib/full-backup/manifest.ts +206 -206
  156. package/templates/nextblock-template/lib/logos/active-logo.ts +53 -53
  157. package/templates/nextblock-template/lib/media/resolveMediaUrl.ts +56 -54
  158. package/templates/nextblock-template/lib/media/youtube.ts +99 -99
  159. package/templates/nextblock-template/lib/onboarding/actions.ts +31 -31
  160. package/templates/nextblock-template/lib/privacy/consent-client.ts +57 -57
  161. package/templates/nextblock-template/lib/privacy/contact-emails.ts +64 -64
  162. package/templates/nextblock-template/lib/privacy/settings.ts +115 -115
  163. package/templates/nextblock-template/lib/privacy/types.ts +69 -69
  164. package/templates/nextblock-template/lib/promotions/server.test.ts +74 -74
  165. package/templates/nextblock-template/lib/promotions/server.ts +741 -741
  166. package/templates/nextblock-template/lib/resolve-block-relations.test.ts +142 -142
  167. package/templates/nextblock-template/lib/resolve-block-relations.ts +255 -255
  168. package/templates/nextblock-template/lib/seo/page-document.ts +4 -4
  169. package/templates/nextblock-template/lib/seo/redirect-store.ts +3 -2
  170. package/templates/nextblock-template/lib/setup/actions.ts +460 -460
  171. package/templates/nextblock-template/lib/setup/env-status.ts +125 -125
  172. package/templates/nextblock-template/lib/setup/env-write.ts +111 -111
  173. package/templates/nextblock-template/lib/setup/migrations-bundle.ts +15 -175
  174. package/templates/nextblock-template/lib/setup/provisioning.ts +59 -59
  175. package/templates/nextblock-template/lib/setup/schema-apply.ts +408 -408
  176. package/templates/nextblock-template/lib/setup/system-config.ts +105 -105
  177. package/templates/nextblock-template/lib/setup/types.ts +18 -18
  178. package/templates/nextblock-template/lib/storage/provider.ts +66 -66
  179. package/templates/nextblock-template/lib/storage/supabase-storage.ts +103 -103
  180. package/templates/nextblock-template/lib/updates/github-device.ts +206 -206
  181. package/templates/nextblock-template/lib/updates/repo-identity.ts +56 -56
  182. package/templates/nextblock-template/lib/visual-editing/draft-content.test.ts +105 -105
  183. package/templates/nextblock-template/lib/visual-editing/draft-route.test.ts +42 -42
  184. package/templates/nextblock-template/lib/visual-editing/edit-info.test.ts +143 -143
  185. package/templates/nextblock-template/lib/visual-editing/edit-info.ts +94 -94
  186. package/templates/nextblock-template/lib/visual-editing/product-drafts.test.ts +81 -81
  187. package/templates/nextblock-template/lib/zod-config.ts +5 -5
  188. package/templates/nextblock-template/next-env.d.ts +1 -0
  189. package/templates/nextblock-template/package.json +1 -1
  190. package/templates/nextblock-template/public/images/cortex_post.webp +0 -0
  191. package/templates/nextblock-template/public/images/update_nextblock.webp +0 -0
  192. package/templates/nextblock-template/scripts/docker-setup.mjs +310 -310
  193. package/templates/nextblock-template/scripts/validate-editor-block-schema.ts +112 -112
  194. package/templates/nextblock-template/scripts/verify-cortex-ai-build-widget.tsx +98 -98
  195. package/templates/nextblock-template/scripts/verify-cortex-ai-generate-blocks.ts +62 -62
  196. package/templates/nextblock-template/scripts/verify-cortex-ai-global-tools.ts +537 -537
  197. package/templates/nextblock-template/scripts/verify-cortex-ai-routing.ts +58 -58
  198. package/templates/nextblock-template/scripts/verify-custom-block-definitions.ts +188 -188
  199. package/templates/nextblock-template/scripts/verify-dynamic-custom-block-extensions.ts +123 -123
  200. package/templates/nextblock-template/scripts/verify-dynamic-layout-engine.tsx +133 -133
  201. package/templates/nextblock-template/scripts/verify-milestone-2-custom-blocks.ts +65 -65
  202. package/templates/nextblock-template/tools/deploy-supabase.js +159 -159
  203. package/templates/nextblock-template/types/jsdom.d.ts +6 -6
package/CLAUDE.md ADDED
@@ -0,0 +1,22 @@
1
+ # apps/create-nextblock — scaffolding CLI
2
+
3
+ Plain-JavaScript ESM CLI published as `create-nextblock` (`npm create nextblock`). No build
4
+ step, no tests; `lint` is its only `project.json` target.
5
+
6
+ - `bin/create-nextblock.js`: `create [dir]` (cloud or Docker profile; `--yes` = cloud + default
7
+ name) and `activate ecommerce`. At scaffold time it writes `next.config.js` and
8
+ `tailwind.config.js` from string templates (`tsconfig.json` and `package.json` are patched in
9
+ place), so changes to those two files in `apps/nextblock` must be mirrored here.
10
+ - `scripts/sync-template.js` (`npm run sync:create-nextblock`) empties and regenerates
11
+ `templates/nextblock-template/` from `apps/nextblock`, root `docs/`,
12
+ `libs/ui/src/styles/globals.css`, and `docker-template/`; it copies `CLAUDE.md`/`AGENTS.md`
13
+ verbatim and rewrites `@nextblock-cms/ui/<sub>` imports to the barrel.
14
+ - `templates/nextblock-template/**` is generated output: committed, shipped, and the update
15
+ source for `apps/nextblock/tools/update.mjs`. Never edit it.
16
+ - `prepack` runs the sync, so `npm pack` / `npm publish` regenerate the template from the working
17
+ tree; inspect with `npm pack --dry-run --ignore-scripts`.
18
+
19
+ Gotchas: from source the CLI reads lib `^versions` and root overrides; the published tarball
20
+ falls back to `latest` and baked-in overrides, so `npm run test-create` and `npm create nextblock`
21
+ take different paths. `runSetupWizard` in `bin` is dead code; setup happens in the browser
22
+ `/setup` wizard or `docker-template/scripts/docker-setup.mjs`.
@@ -1,69 +1,69 @@
1
- # ──────────────────────────────────────────────────────────────────────────────
2
- # Reference for the Docker (self-hosted) .env that `npm run docker:setup` generates.
3
- # You normally do NOT edit this by hand — run `npm run docker:setup` and it writes a
4
- # `.env` with secure random secrets. This file documents every key the stack reads.
5
- # ──────────────────────────────────────────────────────────────────────────────
6
-
7
- # --- Auto-generated secrets (crypto-random) --------------------------------------------------
8
- POSTGRES_PASSWORD=replace-me-generated
9
- JWT_SECRET=replace-me-at-least-32-chars
10
- JWT_EXP=3600
11
- # anon + service_role keys are HS256 JWTs SIGNED with JWT_SECRET (generated for you):
12
- ANON_KEY=replace-me-anon-jwt
13
- SERVICE_ROLE_KEY=replace-me-service-role-jwt
14
- CRON_SECRET=replace-me-generated
15
- DRAFT_MODE_SECRET=replace-me-generated
16
- REVALIDATE_SECRET_TOKEN=replace-me-generated
17
-
18
- # --- Host port mappings ----------------------------------------------------------------------
19
- # The published host ports for each service. docker:setup auto-picks a FREE port when a default
20
- # is taken or reserved by the OS (common on Windows, e.g. Postgres 54322), then keeps the URLs
21
- # below and LOOPBACK_PROXIES in lockstep. Change a port here only if you also update its URL.
22
- APP_PORT=3000
23
- KONG_HTTP_PORT=8000
24
- MINIO_S3_PORT=9000
25
- MINIO_CONSOLE_PORT=9001
26
- POSTGRES_PORT_EXTERNAL=54322
27
- # In-container loopback (socat): maps the localhost:<port> server code derives from the public
28
- # URLs to the real service. Left-hand ports MUST match NEXT_PUBLIC_SUPABASE_URL / R2_S3_PUBLIC_ENDPOINT.
29
- LOOPBACK_PROXIES=8000:kong:8000 9000:minio:9000
30
-
31
- # --- Supabase wiring (internal container network vs browser) ---------------------------------
32
- NEXT_PUBLIC_SUPABASE_URL=http://localhost:8000
33
- NEXT_PUBLIC_SUPABASE_ANON_KEY=${ANON_KEY}
34
- SUPABASE_SERVICE_ROLE_KEY=${SERVICE_ROLE_KEY}
35
- API_EXTERNAL_URL=http://localhost:8000
36
- SITE_URL=http://localhost:3000
37
- POSTGRES_DB=postgres
38
-
39
- # --- App ------------------------------------------------------------------------------------
40
- NEXT_PUBLIC_URL=http://localhost:3000
41
- NEXT_PUBLIC_IS_SANDBOX=true
42
- CORTEX_AI_ENCRYPTION_KEY=
43
-
44
- # --- MinIO object storage (S3-compatible) ----------------------------------------------------
45
- MINIO_ROOT_USER=nextblock
46
- MINIO_ROOT_PASSWORD=replace-me-generated
47
- STORAGE_BUCKET=nextblock
48
- R2_ACCOUNT_ID=minio
49
- R2_REGION=us-east-1
50
- R2_S3_ENDPOINT=http://minio:9000
51
- # 127.0.0.1 (not localhost) so the browser never sends the app's localhost cookies to MinIO,
52
- # which would otherwise 400 (MetadataTooLarge) once the Supabase auth cookies grow.
53
- R2_S3_PUBLIC_ENDPOINT=http://127.0.0.1:9000
54
- R2_FORCE_PATH_STYLE=true
55
- NEXT_PUBLIC_R2_BASE_URL=http://127.0.0.1:9000/nextblock
56
- NEXT_PUBLIC_R2_PUBLIC_URL=http://127.0.0.1:9000/nextblock
57
-
58
- # --- Cloudflare Turnstile (optional). Press Enter at setup to skip and use the dev sandbox. ---
59
- NEXT_PUBLIC_TURNSTILE_SITE_KEY=
60
- TURNSTILE_SECRET_KEY=
61
-
62
- # --- SMTP (optional). Blank => GoTrue auto-confirms sign-ups (loopback mode). -----------------
63
- GOTRUE_MAILER_AUTOCONFIRM=true
64
- SMTP_HOST=
65
- SMTP_PORT=
66
- SMTP_USER=
67
- SMTP_PASS=
68
- SMTP_FROM_EMAIL=
69
- SMTP_FROM_NAME=
1
+ # ──────────────────────────────────────────────────────────────────────────────
2
+ # Reference for the Docker (self-hosted) .env that `npm run docker:setup` generates.
3
+ # You normally do NOT edit this by hand — run `npm run docker:setup` and it writes a
4
+ # `.env` with secure random secrets. This file documents every key the stack reads.
5
+ # ──────────────────────────────────────────────────────────────────────────────
6
+
7
+ # --- Auto-generated secrets (crypto-random) --------------------------------------------------
8
+ POSTGRES_PASSWORD=replace-me-generated
9
+ JWT_SECRET=replace-me-at-least-32-chars
10
+ JWT_EXP=3600
11
+ # anon + service_role keys are HS256 JWTs SIGNED with JWT_SECRET (generated for you):
12
+ ANON_KEY=replace-me-anon-jwt
13
+ SERVICE_ROLE_KEY=replace-me-service-role-jwt
14
+ CRON_SECRET=replace-me-generated
15
+ DRAFT_MODE_SECRET=replace-me-generated
16
+ REVALIDATE_SECRET_TOKEN=replace-me-generated
17
+
18
+ # --- Host port mappings ----------------------------------------------------------------------
19
+ # The published host ports for each service. docker:setup auto-picks a FREE port when a default
20
+ # is taken or reserved by the OS (common on Windows, e.g. Postgres 54322), then keeps the URLs
21
+ # below and LOOPBACK_PROXIES in lockstep. Change a port here only if you also update its URL.
22
+ APP_PORT=3000
23
+ KONG_HTTP_PORT=8000
24
+ MINIO_S3_PORT=9000
25
+ MINIO_CONSOLE_PORT=9001
26
+ POSTGRES_PORT_EXTERNAL=54322
27
+ # In-container loopback (socat): maps the localhost:<port> server code derives from the public
28
+ # URLs to the real service. Left-hand ports MUST match NEXT_PUBLIC_SUPABASE_URL / R2_S3_PUBLIC_ENDPOINT.
29
+ LOOPBACK_PROXIES=8000:kong:8000 9000:minio:9000
30
+
31
+ # --- Supabase wiring (internal container network vs browser) ---------------------------------
32
+ NEXT_PUBLIC_SUPABASE_URL=http://localhost:8000
33
+ NEXT_PUBLIC_SUPABASE_ANON_KEY=${ANON_KEY}
34
+ SUPABASE_SERVICE_ROLE_KEY=${SERVICE_ROLE_KEY}
35
+ API_EXTERNAL_URL=http://localhost:8000
36
+ SITE_URL=http://localhost:3000
37
+ POSTGRES_DB=postgres
38
+
39
+ # --- App ------------------------------------------------------------------------------------
40
+ NEXT_PUBLIC_URL=http://localhost:3000
41
+ NEXT_PUBLIC_IS_SANDBOX=true
42
+ CORTEX_AI_ENCRYPTION_KEY=
43
+
44
+ # --- MinIO object storage (S3-compatible) ----------------------------------------------------
45
+ MINIO_ROOT_USER=nextblock
46
+ MINIO_ROOT_PASSWORD=replace-me-generated
47
+ STORAGE_BUCKET=nextblock
48
+ R2_ACCOUNT_ID=minio
49
+ R2_REGION=us-east-1
50
+ R2_S3_ENDPOINT=http://minio:9000
51
+ # 127.0.0.1 (not localhost) so the browser never sends the app's localhost cookies to MinIO,
52
+ # which would otherwise 400 (MetadataTooLarge) once the Supabase auth cookies grow.
53
+ R2_S3_PUBLIC_ENDPOINT=http://127.0.0.1:9000
54
+ R2_FORCE_PATH_STYLE=true
55
+ NEXT_PUBLIC_R2_BASE_URL=http://127.0.0.1:9000/nextblock
56
+ NEXT_PUBLIC_R2_PUBLIC_URL=http://127.0.0.1:9000/nextblock
57
+
58
+ # --- Cloudflare Turnstile (optional). Press Enter at setup to skip and use the dev sandbox. ---
59
+ NEXT_PUBLIC_TURNSTILE_SITE_KEY=
60
+ TURNSTILE_SECRET_KEY=
61
+
62
+ # --- SMTP (optional). Blank => GoTrue auto-confirms sign-ups (loopback mode). -----------------
63
+ GOTRUE_MAILER_AUTOCONFIRM=true
64
+ SMTP_HOST=
65
+ SMTP_PORT=
66
+ SMTP_USER=
67
+ SMTP_PASS=
68
+ SMTP_FROM_EMAIL=
69
+ SMTP_FROM_NAME=
@@ -1,6 +1,6 @@
1
- -- Expose the JWT secret to Postgres as a database GUC, matching Supabase's setup. Runs once.
2
- \set jwt_secret `echo "$JWT_SECRET"`
3
- \set jwt_exp `echo "$JWT_EXP"`
4
-
5
- alter database postgres set "app.settings.jwt_secret" to :'jwt_secret';
6
- alter database postgres set "app.settings.jwt_exp" to :'jwt_exp';
1
+ -- Expose the JWT secret to Postgres as a database GUC, matching Supabase's setup. Runs once.
2
+ \set jwt_secret `echo "$JWT_SECRET"`
3
+ \set jwt_exp `echo "$JWT_EXP"`
4
+
5
+ alter database postgres set "app.settings.jwt_secret" to :'jwt_secret';
6
+ alter database postgres set "app.settings.jwt_exp" to :'jwt_exp';
@@ -1,25 +1,25 @@
1
- -- Self-hosted Supabase role passwords. The supabase/postgres image creates the platform roles;
2
- -- GoTrue logs in as supabase_auth_admin and PostgREST as authenticator. Give the roles that exist
3
- -- the generated POSTGRES_PASSWORD (the set varies by image tag, so each is guarded; the password
4
- -- is passed via a session GUC because psql variables aren't interpolated inside a dollar block).
5
- -- Runs once on first init.
6
- \set pgpass `echo "$POSTGRES_PASSWORD"`
7
- select set_config('nextblock.pgpass', :'pgpass', false);
8
-
9
- do $$
10
- declare
11
- role_name text;
12
- begin
13
- foreach role_name in array array[
14
- 'authenticator',
15
- 'pgbouncer',
16
- 'supabase_auth_admin',
17
- 'supabase_storage_admin',
18
- 'supabase_functions_admin',
19
- 'supabase_read_only_user'
20
- ] loop
21
- if exists (select 1 from pg_roles where rolname = role_name) then
22
- execute format('alter role %I with password %L', role_name, current_setting('nextblock.pgpass'));
23
- end if;
24
- end loop;
25
- end $$;
1
+ -- Self-hosted Supabase role passwords. The supabase/postgres image creates the platform roles;
2
+ -- GoTrue logs in as supabase_auth_admin and PostgREST as authenticator. Give the roles that exist
3
+ -- the generated POSTGRES_PASSWORD (the set varies by image tag, so each is guarded; the password
4
+ -- is passed via a session GUC because psql variables aren't interpolated inside a dollar block).
5
+ -- Runs once on first init.
6
+ \set pgpass `echo "$POSTGRES_PASSWORD"`
7
+ select set_config('nextblock.pgpass', :'pgpass', false);
8
+
9
+ do $$
10
+ declare
11
+ role_name text;
12
+ begin
13
+ foreach role_name in array array[
14
+ 'authenticator',
15
+ 'pgbouncer',
16
+ 'supabase_auth_admin',
17
+ 'supabase_storage_admin',
18
+ 'supabase_functions_admin',
19
+ 'supabase_read_only_user'
20
+ ] loop
21
+ if exists (select 1 from pg_roles where rolname = role_name) then
22
+ execute format('alter role %I with password %L', role_name, current_setting('nextblock.pgpass'));
23
+ end if;
24
+ end loop;
25
+ end $$;
@@ -1,112 +1,112 @@
1
- # Kong declarative (DB-less) gateway config for the NextBlock self-hosted stack.
2
- #
3
- # $SUPABASE_ANON_KEY and $SUPABASE_SERVICE_KEY are substituted at container start by the kong
4
- # service entrypoint (docker-compose.yml) from the generated ANON_KEY / SERVICE_ROLE_KEY env.
5
- # Trimmed to just the Auth (GoTrue) and PostgREST routes the app uses.
6
- _format_version: '2.1'
7
- _transform: true
8
-
9
- consumers:
10
- - username: anon
11
- keyauth_credentials:
12
- - key: $SUPABASE_ANON_KEY
13
- - username: service_role
14
- keyauth_credentials:
15
- - key: $SUPABASE_SERVICE_KEY
16
-
17
- acls:
18
- - consumer: anon
19
- group: anon
20
- - consumer: service_role
21
- group: admin
22
-
23
- services:
24
- - name: auth-v1-open
25
- url: http://auth:9999/verify
26
- routes:
27
- - name: auth-v1-open
28
- strip_path: true
29
- paths:
30
- - /auth/v1/verify
31
- plugins:
32
- - name: cors
33
- - name: auth-v1-open-callback
34
- url: http://auth:9999/callback
35
- routes:
36
- - name: auth-v1-open-callback
37
- strip_path: true
38
- paths:
39
- - /auth/v1/callback
40
- plugins:
41
- - name: cors
42
- - name: auth-v1-open-authorize
43
- url: http://auth:9999/authorize
44
- routes:
45
- - name: auth-v1-open-authorize
46
- strip_path: true
47
- paths:
48
- - /auth/v1/authorize
49
- plugins:
50
- - name: cors
51
-
52
- - name: auth-v1
53
- url: http://auth:9999/
54
- routes:
55
- - name: auth-v1-all
56
- strip_path: true
57
- paths:
58
- - /auth/v1/
59
- plugins:
60
- - name: cors
61
- - name: key-auth
62
- config:
63
- hide_credentials: false
64
- - name: acl
65
- config:
66
- hide_groups_header: true
67
- allow:
68
- - admin
69
- - anon
70
-
71
- - name: rest-v1
72
- url: http://rest:3000/
73
- routes:
74
- - name: rest-v1-all
75
- strip_path: true
76
- paths:
77
- - /rest/v1/
78
- plugins:
79
- - name: cors
80
- - name: key-auth
81
- config:
82
- hide_credentials: true
83
- - name: acl
84
- config:
85
- hide_groups_header: true
86
- allow:
87
- - admin
88
- - anon
89
-
90
- - name: graphql-v1
91
- url: http://rest:3000/rpc/graphql
92
- routes:
93
- - name: graphql-v1-all
94
- strip_path: true
95
- paths:
96
- - /graphql/v1
97
- plugins:
98
- - name: cors
99
- - name: key-auth
100
- config:
101
- hide_credentials: false
102
- - name: request-transformer
103
- config:
104
- add:
105
- headers:
106
- - 'Content-Profile: graphql_public'
107
- - name: acl
108
- config:
109
- hide_groups_header: true
110
- allow:
111
- - admin
112
- - anon
1
+ # Kong declarative (DB-less) gateway config for the NextBlock self-hosted stack.
2
+ #
3
+ # $SUPABASE_ANON_KEY and $SUPABASE_SERVICE_KEY are substituted at container start by the kong
4
+ # service entrypoint (docker-compose.yml) from the generated ANON_KEY / SERVICE_ROLE_KEY env.
5
+ # Trimmed to just the Auth (GoTrue) and PostgREST routes the app uses.
6
+ _format_version: '2.1'
7
+ _transform: true
8
+
9
+ consumers:
10
+ - username: anon
11
+ keyauth_credentials:
12
+ - key: $SUPABASE_ANON_KEY
13
+ - username: service_role
14
+ keyauth_credentials:
15
+ - key: $SUPABASE_SERVICE_KEY
16
+
17
+ acls:
18
+ - consumer: anon
19
+ group: anon
20
+ - consumer: service_role
21
+ group: admin
22
+
23
+ services:
24
+ - name: auth-v1-open
25
+ url: http://auth:9999/verify
26
+ routes:
27
+ - name: auth-v1-open
28
+ strip_path: true
29
+ paths:
30
+ - /auth/v1/verify
31
+ plugins:
32
+ - name: cors
33
+ - name: auth-v1-open-callback
34
+ url: http://auth:9999/callback
35
+ routes:
36
+ - name: auth-v1-open-callback
37
+ strip_path: true
38
+ paths:
39
+ - /auth/v1/callback
40
+ plugins:
41
+ - name: cors
42
+ - name: auth-v1-open-authorize
43
+ url: http://auth:9999/authorize
44
+ routes:
45
+ - name: auth-v1-open-authorize
46
+ strip_path: true
47
+ paths:
48
+ - /auth/v1/authorize
49
+ plugins:
50
+ - name: cors
51
+
52
+ - name: auth-v1
53
+ url: http://auth:9999/
54
+ routes:
55
+ - name: auth-v1-all
56
+ strip_path: true
57
+ paths:
58
+ - /auth/v1/
59
+ plugins:
60
+ - name: cors
61
+ - name: key-auth
62
+ config:
63
+ hide_credentials: false
64
+ - name: acl
65
+ config:
66
+ hide_groups_header: true
67
+ allow:
68
+ - admin
69
+ - anon
70
+
71
+ - name: rest-v1
72
+ url: http://rest:3000/
73
+ routes:
74
+ - name: rest-v1-all
75
+ strip_path: true
76
+ paths:
77
+ - /rest/v1/
78
+ plugins:
79
+ - name: cors
80
+ - name: key-auth
81
+ config:
82
+ hide_credentials: true
83
+ - name: acl
84
+ config:
85
+ hide_groups_header: true
86
+ allow:
87
+ - admin
88
+ - anon
89
+
90
+ - name: graphql-v1
91
+ url: http://rest:3000/rpc/graphql
92
+ routes:
93
+ - name: graphql-v1-all
94
+ strip_path: true
95
+ paths:
96
+ - /graphql/v1
97
+ plugins:
98
+ - name: cors
99
+ - name: key-auth
100
+ config:
101
+ hide_credentials: false
102
+ - name: request-transformer
103
+ config:
104
+ add:
105
+ headers:
106
+ - 'Content-Profile: graphql_public'
107
+ - name: acl
108
+ config:
109
+ hide_groups_header: true
110
+ allow:
111
+ - admin
112
+ - anon