create-nextblock 0.12.9 → 0.12.12

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 (293) hide show
  1. package/docker-template/.dockerignore +23 -23
  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/libs/db/tsconfig.lib.json +3 -3
  8. package/libs/editor/tsconfig.lib.json +3 -3
  9. package/libs/ui/tsconfig.lib.json +3 -3
  10. package/libs/utils/tsconfig.json +3 -3
  11. package/package.json +1 -1
  12. package/project.json +19 -19
  13. package/templates/nextblock-template/.browserslistrc +11 -11
  14. package/templates/nextblock-template/.dockerignore +23 -23
  15. package/templates/nextblock-template/README.md +34 -34
  16. package/templates/nextblock-template/app/(auth-pages)/layout.tsx +9 -9
  17. package/templates/nextblock-template/app/(auth-pages)/post-sign-in/page.tsx +27 -27
  18. package/templates/nextblock-template/app/(auth-pages)/sign-up/SignUpForm.tsx +141 -141
  19. package/templates/nextblock-template/app/(auth-pages)/sign-up/page.tsx +46 -46
  20. package/templates/nextblock-template/app/(auth-pages)/two-factor/actions.ts +91 -91
  21. package/templates/nextblock-template/app/(auth-pages)/two-factor/components/TwoFactorForm.tsx +123 -123
  22. package/templates/nextblock-template/app/(auth-pages)/two-factor/page.tsx +51 -51
  23. package/templates/nextblock-template/app/ToasterProvider.tsx +17 -17
  24. package/templates/nextblock-template/app/[slug]/pageClientActions.ts +7 -7
  25. package/templates/nextblock-template/app/actions/consent.ts +57 -57
  26. package/templates/nextblock-template/app/actions/interactions.test.ts +301 -301
  27. package/templates/nextblock-template/app/actions/interactions.ts +373 -373
  28. package/templates/nextblock-template/app/actions/postActions.ts +146 -146
  29. package/templates/nextblock-template/app/actions/twoFactorEmail.ts +22 -22
  30. package/templates/nextblock-template/app/api/ai/cortex/build-widget/route.ts +153 -153
  31. package/templates/nextblock-template/app/api/ai/generate-blocks/route.ts +96 -96
  32. package/templates/nextblock-template/app/api/ai/global-agent/route.ts +964 -964
  33. package/templates/nextblock-template/app/api/brand/email-logo/route.ts +48 -48
  34. package/templates/nextblock-template/app/api/cms/check-updates/route.ts +44 -44
  35. package/templates/nextblock-template/app/api/cms/full-backup/export/route.ts +33 -33
  36. package/templates/nextblock-template/app/api/cms/full-backup/restore/route.ts +63 -63
  37. package/templates/nextblock-template/app/api/cron/reset-sandbox/route.ts +3490 -3490
  38. package/templates/nextblock-template/app/api/cron/reset-sandbox/sandboxResetSql.ts +5597 -5597
  39. package/templates/nextblock-template/app/api/cron/sync-currencies/route.ts +39 -39
  40. package/templates/nextblock-template/app/api/custom-blocks/db-relations/route.ts +92 -92
  41. package/templates/nextblock-template/app/api/custom-blocks/editor-definitions/route.ts +43 -43
  42. package/templates/nextblock-template/app/api/media/library/route.ts +69 -69
  43. package/templates/nextblock-template/app/api/media/r2-presigned/route.ts +53 -53
  44. package/templates/nextblock-template/app/api/media/record/route.ts +160 -160
  45. package/templates/nextblock-template/app/api/search/route.ts +43 -43
  46. package/templates/nextblock-template/app/article/[slug]/PostClientContent.tsx +441 -441
  47. package/templates/nextblock-template/app/auth/callback/route.ts +31 -31
  48. package/templates/nextblock-template/app/cart/page.tsx +7 -7
  49. package/templates/nextblock-template/app/cms/blocks/components/CustomBlockEditorPreview.tsx +160 -160
  50. package/templates/nextblock-template/app/cms/blocks/components/MediaLibraryModal.tsx +149 -149
  51. package/templates/nextblock-template/app/cms/blocks/editors/DynamicCustomBlockEditor.tsx +167 -167
  52. package/templates/nextblock-template/app/cms/blocks/editors/ImageBlockEditor.tsx +29 -29
  53. package/templates/nextblock-template/app/cms/blocks/editors/TextBlockEditor.tsx +90 -90
  54. package/templates/nextblock-template/app/cms/components/ConnectGitHubButton.tsx +122 -122
  55. package/templates/nextblock-template/app/cms/components/CortexAiPageContext.tsx +58 -58
  56. package/templates/nextblock-template/app/cms/components/FeatureImageField.tsx +244 -244
  57. package/templates/nextblock-template/app/cms/components/FeedbackModal.tsx +36 -36
  58. package/templates/nextblock-template/app/cms/components/SystemAlertsBanner.tsx +112 -112
  59. package/templates/nextblock-template/app/cms/components/TwoFactorReminderBanner.tsx +45 -45
  60. package/templates/nextblock-template/app/cms/components/github-connect-actions.ts +102 -102
  61. package/templates/nextblock-template/app/cms/components/system-alerts-actions.ts +31 -31
  62. package/templates/nextblock-template/app/cms/custom-blocks/[id]/edit/page.tsx +66 -66
  63. package/templates/nextblock-template/app/cms/custom-blocks/actions.ts +519 -519
  64. package/templates/nextblock-template/app/cms/custom-blocks/components/BlockComposer.tsx +1522 -1522
  65. package/templates/nextblock-template/app/cms/custom-blocks/components/BlocksLibraryTransferControls.tsx +256 -256
  66. package/templates/nextblock-template/app/cms/custom-blocks/components/DBRelationSelect.tsx +384 -384
  67. package/templates/nextblock-template/app/cms/custom-blocks/components/ImageR2Picker.tsx +221 -221
  68. package/templates/nextblock-template/app/cms/custom-blocks/new/page.tsx +12 -12
  69. package/templates/nextblock-template/app/cms/custom-blocks/page.tsx +438 -438
  70. package/templates/nextblock-template/app/cms/dashboard/actions.ts +228 -228
  71. package/templates/nextblock-template/app/cms/dashboard/components/DashboardOnboarding.tsx +130 -130
  72. package/templates/nextblock-template/app/cms/import-export/ContentTransferControls.tsx +431 -391
  73. package/templates/nextblock-template/app/cms/import-export/actions.ts +226 -226
  74. package/templates/nextblock-template/app/cms/interactions/InteractionsModerationClient.tsx +408 -408
  75. package/templates/nextblock-template/app/cms/interactions/page.tsx +51 -51
  76. package/templates/nextblock-template/app/cms/layout.tsx +73 -73
  77. package/templates/nextblock-template/app/cms/media/components/FolderNavigator.tsx +273 -273
  78. package/templates/nextblock-template/app/cms/media/components/FolderTree.tsx +122 -122
  79. package/templates/nextblock-template/app/cms/media/components/MediaEditForm.tsx +26 -26
  80. package/templates/nextblock-template/app/cms/media/components/MediaGridClient.tsx +69 -69
  81. package/templates/nextblock-template/app/cms/media/components/MediaPickerDialog.tsx +149 -158
  82. package/templates/nextblock-template/app/cms/media/components/MediaUploadForm.tsx +101 -101
  83. package/templates/nextblock-template/app/cms/navigation/components/NavigationMenuDnd.tsx +3 -3
  84. package/templates/nextblock-template/app/cms/pages/page.tsx +18 -17
  85. package/templates/nextblock-template/app/cms/posts/page.tsx +19 -18
  86. package/templates/nextblock-template/app/cms/products/[id]/edit/page.tsx +12 -0
  87. package/templates/nextblock-template/app/cms/products/attributes/page.tsx +12 -12
  88. package/templates/nextblock-template/app/cms/products/categories/page.tsx +12 -12
  89. package/templates/nextblock-template/app/cms/products/inventory/page.tsx +13 -13
  90. package/templates/nextblock-template/app/cms/products/new/page.tsx +135 -135
  91. package/templates/nextblock-template/app/cms/products/page.tsx +39 -27
  92. package/templates/nextblock-template/app/cms/products/productFormData.ts +133 -133
  93. package/templates/nextblock-template/app/cms/products/settings/page.tsx +5 -5
  94. package/templates/nextblock-template/app/cms/promotions/PromotionsWorkspace.tsx +456 -456
  95. package/templates/nextblock-template/app/cms/promotions/actions.ts +115 -115
  96. package/templates/nextblock-template/app/cms/promotions/page.tsx +31 -31
  97. package/templates/nextblock-template/app/cms/revisions/service.ts +19 -19
  98. package/templates/nextblock-template/app/cms/revisions/utils.ts +132 -132
  99. package/templates/nextblock-template/app/cms/settings/backup-restore/BackupRestoreWorkspace.tsx +1004 -1004
  100. package/templates/nextblock-template/app/cms/settings/backup-restore/page.tsx +29 -29
  101. package/templates/nextblock-template/app/cms/settings/bot-protection/actions.ts +93 -93
  102. package/templates/nextblock-template/app/cms/settings/bot-protection/components/BotProtectionForm.tsx +129 -129
  103. package/templates/nextblock-template/app/cms/settings/bot-protection/page.tsx +24 -24
  104. package/templates/nextblock-template/app/cms/settings/cortex-ai/SandboxCortexAiSettingsClient.tsx +497 -497
  105. package/templates/nextblock-template/app/cms/settings/cortex-ai/StoredCortexAiSettingsClient.tsx +410 -410
  106. package/templates/nextblock-template/app/cms/settings/cortex-ai/actions.ts +246 -246
  107. package/templates/nextblock-template/app/cms/settings/cortex-ai/page.tsx +80 -80
  108. package/templates/nextblock-template/app/cms/settings/currencies/actions.ts +331 -331
  109. package/templates/nextblock-template/app/cms/settings/currencies/page.tsx +494 -494
  110. package/templates/nextblock-template/app/cms/settings/email/actions.ts +64 -64
  111. package/templates/nextblock-template/app/cms/settings/email/components/EmailForm.tsx +181 -181
  112. package/templates/nextblock-template/app/cms/settings/email/page.tsx +28 -28
  113. package/templates/nextblock-template/app/cms/settings/extra-translations/ExtraTranslationsWorkspace.tsx +767 -767
  114. package/templates/nextblock-template/app/cms/settings/extra-translations/page.tsx +93 -93
  115. package/templates/nextblock-template/app/cms/settings/google-analytics/actions.ts +60 -60
  116. package/templates/nextblock-template/app/cms/settings/google-analytics/components/GoogleAnalyticsForm.tsx +129 -129
  117. package/templates/nextblock-template/app/cms/settings/google-analytics/page.tsx +26 -26
  118. package/templates/nextblock-template/app/cms/settings/languages/actions.ts +16 -16
  119. package/templates/nextblock-template/app/cms/settings/logos/[id]/edit/page.tsx +7 -7
  120. package/templates/nextblock-template/app/cms/settings/logos/components/BrandingSettingsForm.tsx +339 -339
  121. package/templates/nextblock-template/app/cms/settings/logos/components/DeleteLogoButton.tsx +21 -21
  122. package/templates/nextblock-template/app/cms/settings/logos/components/LogoForm.tsx +20 -20
  123. package/templates/nextblock-template/app/cms/settings/logos/components/SetActiveLogoButton.tsx +42 -42
  124. package/templates/nextblock-template/app/cms/settings/logos/components/SiteSeoSettingsForm.tsx +133 -133
  125. package/templates/nextblock-template/app/cms/settings/logos/new/page.tsx +8 -8
  126. package/templates/nextblock-template/app/cms/settings/packages/package-card.tsx +122 -122
  127. package/templates/nextblock-template/app/cms/settings/privacy/actions.ts +52 -52
  128. package/templates/nextblock-template/app/cms/settings/privacy/components/PrivacyForm.tsx +148 -148
  129. package/templates/nextblock-template/app/cms/settings/privacy/page.tsx +27 -27
  130. package/templates/nextblock-template/app/cms/settings/registration/actions.ts +44 -44
  131. package/templates/nextblock-template/app/cms/settings/registration/components/RegistrationForm.tsx +65 -65
  132. package/templates/nextblock-template/app/cms/settings/registration/page.tsx +27 -27
  133. package/templates/nextblock-template/app/cms/settings/security/actions.ts +284 -284
  134. package/templates/nextblock-template/app/cms/settings/security/components/SecurityPanel.tsx +522 -522
  135. package/templates/nextblock-template/app/cms/settings/security/page.tsx +33 -33
  136. package/templates/nextblock-template/app/cms/settings/taxes/page.tsx +21 -21
  137. package/templates/nextblock-template/app/cms/shipping/page.tsx +20 -20
  138. package/templates/nextblock-template/app/cms/users/actions.ts +222 -222
  139. package/templates/nextblock-template/app/cms/users/components/DeleteUserButton.tsx +12 -12
  140. package/templates/nextblock-template/app/cms/users/components/UserForm.tsx +44 -44
  141. package/templates/nextblock-template/app/lib/site-settings.ts +105 -105
  142. package/templates/nextblock-template/app/lib/sitemap-utils.ts +253 -253
  143. package/templates/nextblock-template/app/profile/ProfileAccountSidebar.tsx +73 -73
  144. package/templates/nextblock-template/app/profile/ProfilePageHeader.tsx +16 -16
  145. package/templates/nextblock-template/app/profile/ProfilePageMissingState.tsx +9 -9
  146. package/templates/nextblock-template/app/profile/account-data.ts +37 -37
  147. package/templates/nextblock-template/app/profile/account-links.ts +22 -22
  148. package/templates/nextblock-template/app/profile/account-types.ts +11 -11
  149. package/templates/nextblock-template/app/profile/orders/CustomerOrdersPageClient.tsx +124 -124
  150. package/templates/nextblock-template/app/profile/orders/[id]/CustomerOrderDetailPageClient.tsx +79 -79
  151. package/templates/nextblock-template/app/profile/orders/[id]/page.tsx +32 -32
  152. package/templates/nextblock-template/app/profile/orders/page.tsx +19 -19
  153. package/templates/nextblock-template/app/profile/page.tsx +42 -42
  154. package/templates/nextblock-template/app/profile/password/PasswordSettingsPageClient.tsx +128 -128
  155. package/templates/nextblock-template/app/profile/password/actions.ts +59 -59
  156. package/templates/nextblock-template/app/profile/password/page.tsx +27 -27
  157. package/templates/nextblock-template/app/setup/SetupWizard.tsx +678 -678
  158. package/templates/nextblock-template/app/setup/layout.tsx +13 -13
  159. package/templates/nextblock-template/app/setup/page.tsx +111 -111
  160. package/templates/nextblock-template/app/sitemap.ts +130 -130
  161. package/templates/nextblock-template/components/CartDrawerLoader.tsx +7 -7
  162. package/templates/nextblock-template/components/DeferredCartDrawer.tsx +23 -23
  163. package/templates/nextblock-template/components/DeferredGoogleAnalytics.tsx +70 -70
  164. package/templates/nextblock-template/components/DeferredGoogleTagManager.tsx +70 -70
  165. package/templates/nextblock-template/components/DeferredSpeedInsights.tsx +69 -69
  166. package/templates/nextblock-template/components/FeatureImageHero.tsx +47 -47
  167. package/templates/nextblock-template/components/FooterNavigation.tsx +32 -32
  168. package/templates/nextblock-template/components/GitHubLoginButton.tsx +15 -15
  169. package/templates/nextblock-template/components/HtmlScriptExecutor.tsx +47 -47
  170. package/templates/nextblock-template/components/LanguageSwitcher.tsx +2 -2
  171. package/templates/nextblock-template/components/PostCommentsSection.tsx +369 -369
  172. package/templates/nextblock-template/components/ProductReviewsSection.tsx +419 -419
  173. package/templates/nextblock-template/components/PublicEnvBootstrap.tsx +30 -30
  174. package/templates/nextblock-template/components/ResponsiveNav.tsx +14 -14
  175. package/templates/nextblock-template/components/auth/AuthBotProtection.tsx +182 -182
  176. package/templates/nextblock-template/components/blocks/PostCardSkeleton.tsx +12 -12
  177. package/templates/nextblock-template/components/blocks/PostsGridBlock.tsx +12 -12
  178. package/templates/nextblock-template/components/blocks/ecommerceRendererLoaders.ts +23 -23
  179. package/templates/nextblock-template/components/blocks/renderers/FormBlockRenderer.tsx +249 -249
  180. package/templates/nextblock-template/components/blocks/types.ts +7 -7
  181. package/templates/nextblock-template/components/env-var-warning.tsx +3 -3
  182. package/templates/nextblock-template/components/form-message.tsx +32 -32
  183. package/templates/nextblock-template/components/privacy/ConsentBanner.tsx +170 -170
  184. package/templates/nextblock-template/components/privacy/ConsentGatedAnalytics.tsx +70 -70
  185. package/templates/nextblock-template/components/renderers/CachedDynamicLayoutEngine.tsx +28 -28
  186. package/templates/nextblock-template/components/renderers/DynamicLayoutEngine.test.tsx +166 -166
  187. package/templates/nextblock-template/components/renderers/DynamicLayoutEngine.tsx +464 -464
  188. package/templates/nextblock-template/components/submit-button.tsx +23 -23
  189. package/templates/nextblock-template/components/theme-switcher.tsx +8 -8
  190. package/templates/nextblock-template/components/visual-editing/DeferredVisualEditing.tsx +21 -21
  191. package/templates/nextblock-template/context/AuthContext.tsx +23 -23
  192. package/templates/nextblock-template/context/LanguageContext.tsx +16 -16
  193. package/templates/nextblock-template/context/language-rest-client.ts +32 -32
  194. package/templates/nextblock-template/docker/db/init/99-jwt.sql +6 -6
  195. package/templates/nextblock-template/docker/db/init/99-roles.sql +25 -25
  196. package/templates/nextblock-template/docker/kong/kong.yml +112 -112
  197. package/templates/nextblock-template/docs/01-PROJECT-OVERVIEW.md +94 -94
  198. package/templates/nextblock-template/docs/02-ECOMMERCE-CAPABILITIES.md +364 -364
  199. package/templates/nextblock-template/docs/03-CMS-AND-EDITOR.md +202 -202
  200. package/templates/nextblock-template/docs/04-DATABASE-AND-AUTH.md +246 -246
  201. package/templates/nextblock-template/docs/06-CLI-AND-SCAFFOLDING.md +176 -176
  202. package/templates/nextblock-template/docs/07-BLOCK-SDK-AND-EXTENSIBILITY.md +146 -146
  203. package/templates/nextblock-template/docs/08-NEXTBLOCK-CORTEX-AI-ARCHITECTURE.md +1319 -1319
  204. package/templates/nextblock-template/docs/10-CUSTOM-BLOCKS.md +222 -222
  205. package/templates/nextblock-template/docs/11-SELF-HOSTED-DOCKER.md +173 -173
  206. package/templates/nextblock-template/docs/12-VERCEL-DEPLOYMENT.md +170 -170
  207. package/templates/nextblock-template/docs/13-STAYING-UP-TO-DATE.md +151 -151
  208. package/templates/nextblock-template/docs/README.md +39 -39
  209. package/templates/nextblock-template/docs/TECHNICAL_SPECIFICATION.md +12505 -12505
  210. package/templates/nextblock-template/hooks/use-hotkeys.ts +21 -21
  211. package/templates/nextblock-template/hooks/useGlobalSearch.ts +101 -101
  212. package/templates/nextblock-template/index.d.ts +7 -7
  213. package/templates/nextblock-template/lib/app-secrets.ts +39 -39
  214. package/templates/nextblock-template/lib/auth/cookies.ts +47 -47
  215. package/templates/nextblock-template/lib/auth/crypto.ts +45 -45
  216. package/templates/nextblock-template/lib/auth/trustedDevices.ts +92 -92
  217. package/templates/nextblock-template/lib/auth/twoFactor.ts +208 -208
  218. package/templates/nextblock-template/lib/auth-redirects.ts +46 -46
  219. package/templates/nextblock-template/lib/blocks/README.md +13 -13
  220. package/templates/nextblock-template/lib/blocks/blockRegistry.ts +6 -6
  221. package/templates/nextblock-template/lib/blocks/blockTypes.ts +18 -18
  222. package/templates/nextblock-template/lib/botProtection/verify.ts +134 -134
  223. package/templates/nextblock-template/lib/cms-transfer/csv.test.ts +100 -77
  224. package/templates/nextblock-template/lib/cms-transfer/csv.ts +403 -399
  225. package/templates/nextblock-template/lib/cms-transfer/server.ts +2243 -2243
  226. package/templates/nextblock-template/lib/cms-transfer/types.ts +145 -145
  227. package/templates/nextblock-template/lib/config/email-settings.ts +217 -217
  228. package/templates/nextblock-template/lib/custom-block-definitions.ts +87 -87
  229. package/templates/nextblock-template/lib/custom-block-r2-upload-shared.ts +178 -178
  230. package/templates/nextblock-template/lib/custom-block-r2-upload.test.ts +140 -140
  231. package/templates/nextblock-template/lib/custom-block-r2-upload.ts +88 -88
  232. package/templates/nextblock-template/lib/custom-block-relation-registry.ts +256 -256
  233. package/templates/nextblock-template/lib/custom-block-relations.test.ts +227 -227
  234. package/templates/nextblock-template/lib/custom-block-relations.ts +279 -279
  235. package/templates/nextblock-template/lib/custom-block-safelist.ts +14 -14
  236. package/templates/nextblock-template/lib/editor/dynamic-extension-core.test.ts +172 -172
  237. package/templates/nextblock-template/lib/editor/dynamic-extension-core.ts +213 -213
  238. package/templates/nextblock-template/lib/editor/dynamic-extension-loader.ts +22 -22
  239. package/templates/nextblock-template/lib/editor/dynamic-extensions.tsx +193 -193
  240. package/templates/nextblock-template/lib/email/branding-format.test.ts +133 -133
  241. package/templates/nextblock-template/lib/email/branding-format.ts +123 -123
  242. package/templates/nextblock-template/lib/email/branding.ts +76 -76
  243. package/templates/nextblock-template/lib/full-backup/manifest.test.ts +121 -121
  244. package/templates/nextblock-template/lib/full-backup/manifest.ts +206 -206
  245. package/templates/nextblock-template/lib/full-backup/server.ts +743 -743
  246. package/templates/nextblock-template/lib/logos/active-logo.ts +53 -53
  247. package/templates/nextblock-template/lib/media/resolveMediaUrl.ts +54 -54
  248. package/templates/nextblock-template/lib/onboarding/actions.ts +31 -31
  249. package/templates/nextblock-template/lib/onboarding/status.ts +222 -222
  250. package/templates/nextblock-template/lib/posts/readTime.ts +60 -60
  251. package/templates/nextblock-template/lib/privacy/consent-client.ts +57 -57
  252. package/templates/nextblock-template/lib/privacy/contact-emails.ts +64 -64
  253. package/templates/nextblock-template/lib/privacy/settings.ts +115 -115
  254. package/templates/nextblock-template/lib/privacy/types.ts +69 -69
  255. package/templates/nextblock-template/lib/promotions/server.test.ts +74 -74
  256. package/templates/nextblock-template/lib/promotions/server.ts +741 -741
  257. package/templates/nextblock-template/lib/resolve-block-relations.test.ts +142 -142
  258. package/templates/nextblock-template/lib/resolve-block-relations.ts +255 -255
  259. package/templates/nextblock-template/lib/search/server.ts +585 -585
  260. package/templates/nextblock-template/lib/search/types.ts +27 -27
  261. package/templates/nextblock-template/lib/setup/actions.ts +460 -460
  262. package/templates/nextblock-template/lib/setup/env-status.ts +125 -125
  263. package/templates/nextblock-template/lib/setup/env-write.ts +111 -111
  264. package/templates/nextblock-template/lib/setup/migrations-bundle.ts +37 -37
  265. package/templates/nextblock-template/lib/setup/provisioning.ts +59 -59
  266. package/templates/nextblock-template/lib/setup/schema-apply.ts +408 -408
  267. package/templates/nextblock-template/lib/setup/system-config.ts +105 -105
  268. package/templates/nextblock-template/lib/setup/types.ts +18 -18
  269. package/templates/nextblock-template/lib/site-url.ts +48 -48
  270. package/templates/nextblock-template/lib/storage/provider.ts +66 -66
  271. package/templates/nextblock-template/lib/storage/supabase-storage.ts +103 -103
  272. package/templates/nextblock-template/lib/updates/check-upstream.ts +441 -441
  273. package/templates/nextblock-template/lib/updates/github-device.ts +206 -206
  274. package/templates/nextblock-template/lib/updates/repo-identity.ts +56 -56
  275. package/templates/nextblock-template/package.json +1 -1
  276. package/templates/nextblock-template/postcss.config.js +6 -6
  277. package/templates/nextblock-template/scripts/backup.js +115 -115
  278. package/templates/nextblock-template/scripts/docker-setup.mjs +310 -310
  279. package/templates/nextblock-template/scripts/restore.js +385 -385
  280. package/templates/nextblock-template/scripts/verify-cortex-ai-build-widget.tsx +98 -98
  281. package/templates/nextblock-template/scripts/verify-cortex-ai-generate-blocks.ts +62 -62
  282. package/templates/nextblock-template/scripts/verify-cortex-ai-global-tools.ts +537 -537
  283. package/templates/nextblock-template/scripts/verify-cortex-ai-routing.ts +58 -58
  284. package/templates/nextblock-template/scripts/verify-custom-block-definitions.ts +188 -188
  285. package/templates/nextblock-template/scripts/verify-dynamic-custom-block-extensions.ts +123 -123
  286. package/templates/nextblock-template/scripts/verify-dynamic-layout-engine.tsx +133 -133
  287. package/templates/nextblock-template/scripts/verify-milestone-2-custom-blocks.ts +65 -65
  288. package/templates/nextblock-template/tailwind.config.js +25 -25
  289. package/templates/nextblock-template/tools/build-migrate.mjs +209 -209
  290. package/templates/nextblock-template/tools/configure-supabase-auth.js +282 -282
  291. package/templates/nextblock-template/types/jsdom.d.ts +6 -6
  292. package/tsconfig.base.json +3 -3
  293. package/templates/nextblock-template/tsconfig.tsbuildinfo +0 -1
@@ -1,151 +1,151 @@
1
- # 13 · Staying Up to Date (Automated Upstream Updates)
2
-
3
- NextBlock keeps your instance in sync with the upstream project
4
- (`nextblock-cms/nextblock`) with **as little manual work as possible**. How updates
5
- arrive depends on how you deployed, and the system auto-detects which path applies:
6
-
7
- | Install type | Track | How updates arrive |
8
- | :--- | :--- | :--- |
9
- | Vercel 1-click / GitHub fork (git-backed) | **A** | A daily GitHub Action merges upstream and pushes to your deploy branch (→ Vercel CD). |
10
- | `npm create nextblock` / local clone / Docker image (standalone) | **B** | The CMS checks GitHub Releases and shows a "download the new version" banner. |
11
-
12
- Both tracks surface their status in the CMS through a dashboard banner backed by the
13
- `system_alerts` table (migration `00000000000036`). Reads are ADMIN-only (RLS).
14
-
15
- ---
16
-
17
- ## Track A — Git-backed installs (Vercel 1-click, GitHub forks)
18
-
19
- The workflow lives at [`.github/workflows/nextblock-sync.yml`](../.github/workflows/nextblock-sync.yml).
20
- It runs **daily at 00:00 UTC** and on demand (**Actions → NextBlock Upstream Sync → Run
21
- workflow**). Each run:
22
-
23
- 1. Merges the upstream release branch into your deploy branch.
24
- 2. **Clean merge** → commits and pushes to your branch, which triggers a normal Vercel
25
- deployment. Any open conflict issue is auto-closed.
26
- 3. **Conflict** → aborts the merge and opens (or updates) a GitHub Issue labeled
27
- `nextblock-sync-conflict`. The CMS mirrors that issue into an **amber banner** on the
28
- dashboard with a link to resolve it. Once you resolve and **close the issue**, the
29
- banner clears automatically.
30
-
31
- ### One-click install (Connect GitHub)
32
-
33
- Vercel's 1-click deploy creates your repo through an integration whose token lacks the
34
- GitHub **`workflow`** scope, so GitHub **strips `.github/workflows/`** from the copy — your
35
- new repo won't have the sync workflow even though the template ships it. To fix that with no
36
- token to create, the dashboard onboarding step shows a **Connect GitHub** button:
37
-
38
- 1. Click **Connect GitHub** — a short code appears.
39
- 2. Click **Authorize on GitHub**, enter the code, approve.
40
- 3. NextBlock installs `.github/workflows/nextblock-sync.yml` into your repo for you, and the
41
- step turns green.
42
-
43
- This uses GitHub's **device flow** — no token to create, no per-site callback, nothing to
44
- configure (the public client id ships with NextBlock). The authorization requests the
45
- `repo` + `workflow` scopes because GitHub requires them to write a workflow file; NextBlock
46
- uses the grant once to install the file and does **not** store it. Revoke it anytime at
47
- GitHub → **Settings → Applications**.
48
-
49
- ### Do you need to enable GitHub Actions?
50
-
51
- It depends on how the repository was created:
52
-
53
- - **Vercel 1-click deploy** creates a **new repository you own** (a copy, *not* a GitHub
54
- fork). GitHub **enables Actions by default** on repos you own — **there's nothing to turn
55
- on**. The sync workflow runs automatically once it lands on your repo's **default branch**.
56
- - **A manual GitHub _fork_** (the "Fork" button) has Actions **disabled** by default. Enable
57
- them once: your repo → **Actions** tab → **"I understand my workflows, go ahead and enable
58
- them."**
59
-
60
- > **Seeing GitHub's "Get started with Actions / choose a workflow" page?** That only means
61
- > your Actions tab is **empty** — `.github/workflows/nextblock-sync.yml` isn't on your
62
- > **default branch** yet (scheduled workflows only run from the default branch). Once it is,
63
- > the tab shows **NextBlock Upstream Sync** with a **Run workflow** button. There is no
64
- > separate "enable" button on an owned repo because Actions are already on.
65
-
66
- The dashboard onboarding step ("Automatic updates (GitHub Actions)") links to **Settings →
67
- Actions** — where you can confirm Actions are allowed — and completes itself once GitHub
68
- reports the sync workflow as active.
69
-
70
- ### No GitHub secrets required (public forks)
71
-
72
- The conflict signal uses the **`GITHUB_TOKEN` that GitHub provides to every workflow
73
- automatically** — you do **not** add any Supabase secret to GitHub. The app writes the
74
- dashboard alert itself using the Supabase key it already has, and reads your repo's
75
- conflict issues over the public GitHub API.
76
-
77
- > **We recommend forking to a _public_ repository** — it's fully zero-config.
78
-
79
- ### Private forks
80
-
81
- If your fork is **private**, the public GitHub API can't read its issues, so add **one**
82
- environment variable to your deployment (Vercel project → Settings → Environment
83
- Variables, or your `.env`):
84
-
85
- | Variable | Value |
86
- | :--- | :--- |
87
- | `NEXTBLOCK_GITHUB_TOKEN` | A GitHub token with **read access to issues** on your fork (a fine-grained PAT scoped to the repo, or a classic token with `repo`). |
88
-
89
- With that set, the dashboard conflict banner works on private forks too. (The workflow
90
- itself still needs no extra secret — `GITHUB_TOKEN` covers it either way.)
91
-
92
- > **⚠️ Vercel Hobby (free) plan + a private repo blocks auto-deploys.** On Hobby, Vercel only
93
- > deploys **private**-repo commits authored by the project owner and rejects automated
94
- > (bot/collaborator) commits — so the auto-merge push won't deploy (*"Hobby Plan does not
95
- > support collaboration for private repositories"*). Either **make the repo public**
96
- > (recommended — it also makes the conflict banner tokenless) or upgrade to **Vercel Pro**.
97
- > Public repos have no such restriction on Hobby.
98
-
99
- ### How the dashboard stays current (no cron)
100
-
101
- The CMS refreshes update/conflict status **in the background after a dashboard page
102
- loads** (throttled to ~6 hours), so it works on Vercel's Hobby plan without consuming a
103
- cron slot. Admins can also force a check immediately:
104
-
105
- ```
106
- POST /api/cms/check-updates # admin-only; returns the version + conflict status
107
- ```
108
-
109
- ---
110
-
111
- ## Track B — Standalone installs (npm create / local / Docker)
112
-
113
- These installs aren't wired to a GitHub Action, so NextBlock checks the **GitHub Releases
114
- API** and, when a newer release exists, records a `runtime_update_available` alert — an
115
- **indigo banner** on the dashboard with a direct **download link** to the release tarball.
116
- Updating is manual by design: download the archive, replace your files, and update
117
- dependencies (`npm install`). The same admin check endpoint above triggers a check on
118
- demand.
119
-
120
- ---
121
-
122
- ## Schema stays in step with deploys (build-time migrations)
123
-
124
- So a new version's code never runs against an old schema, a build-time hook
125
- ([`apps/nextblock/tools/build-migrate.mjs`](../apps/nextblock/tools/build-migrate.mjs))
126
- applies pending, forward-only migrations **before** `next build`:
127
-
128
- - **Vercel:** runs automatically when `VERCEL_ENV=production`; **preview/development
129
- builds are skipped** so they never touch live data.
130
- - **Standalone / local / Docker:** gated on `NEXTBLOCK_BUILD_MIGRATE=1`, which the
131
- `/setup` wizard and the create/Docker setup scripts write into your env automatically.
132
-
133
- It is **non-destructive and never breaks the build** — if the database is unreachable it
134
- logs a warning and continues. Migrations are tracked in `supabase_migrations.schema_migrations`,
135
- identically to the Supabase CLI.
136
-
137
- > **Edge case:** if your project's migration history is empty/inconsistent, the hook skips
138
- > rather than risk misapplying. Run `npm run db:migrate:repair-history` then
139
- > `npm run db:migrate` once to reconcile (see [docs/04](./04-DATABASE-AND-AUTH.md)).
140
-
141
- ---
142
-
143
- ## Quick reference
144
-
145
- | You want… | Do this |
146
- | :--- | :--- |
147
- | Fully hands-off updates | Fork **public**, deploy on Vercel, **enable Actions** once. |
148
- | Conflict banners on a **private** fork | Also set `NEXTBLOCK_GITHUB_TOKEN`. |
149
- | To update a **standalone** install | Watch for the dashboard banner → download → replace → `npm install`. |
150
- | To force an update check now | Dashboard (admin) → it polls in the background; or `POST /api/cms/check-updates`. |
151
- | To resolve a sync conflict | Open the linked GitHub issue, merge upstream locally, fix, push, close the issue. |
1
+ # 13 · Staying Up to Date (Automated Upstream Updates)
2
+
3
+ NextBlock keeps your instance in sync with the upstream project
4
+ (`nextblock-cms/nextblock`) with **as little manual work as possible**. How updates
5
+ arrive depends on how you deployed, and the system auto-detects which path applies:
6
+
7
+ | Install type | Track | How updates arrive |
8
+ | :--- | :--- | :--- |
9
+ | Vercel 1-click / GitHub fork (git-backed) | **A** | A daily GitHub Action merges upstream and pushes to your deploy branch (→ Vercel CD). |
10
+ | `npm create nextblock` / local clone / Docker image (standalone) | **B** | The CMS checks GitHub Releases and shows a "download the new version" banner. |
11
+
12
+ Both tracks surface their status in the CMS through a dashboard banner backed by the
13
+ `system_alerts` table (migration `00000000000036`). Reads are ADMIN-only (RLS).
14
+
15
+ ---
16
+
17
+ ## Track A — Git-backed installs (Vercel 1-click, GitHub forks)
18
+
19
+ The workflow lives at [`.github/workflows/nextblock-sync.yml`](../.github/workflows/nextblock-sync.yml).
20
+ It runs **daily at 00:00 UTC** and on demand (**Actions → NextBlock Upstream Sync → Run
21
+ workflow**). Each run:
22
+
23
+ 1. Merges the upstream release branch into your deploy branch.
24
+ 2. **Clean merge** → commits and pushes to your branch, which triggers a normal Vercel
25
+ deployment. Any open conflict issue is auto-closed.
26
+ 3. **Conflict** → aborts the merge and opens (or updates) a GitHub Issue labeled
27
+ `nextblock-sync-conflict`. The CMS mirrors that issue into an **amber banner** on the
28
+ dashboard with a link to resolve it. Once you resolve and **close the issue**, the
29
+ banner clears automatically.
30
+
31
+ ### One-click install (Connect GitHub)
32
+
33
+ Vercel's 1-click deploy creates your repo through an integration whose token lacks the
34
+ GitHub **`workflow`** scope, so GitHub **strips `.github/workflows/`** from the copy — your
35
+ new repo won't have the sync workflow even though the template ships it. To fix that with no
36
+ token to create, the dashboard onboarding step shows a **Connect GitHub** button:
37
+
38
+ 1. Click **Connect GitHub** — a short code appears.
39
+ 2. Click **Authorize on GitHub**, enter the code, approve.
40
+ 3. NextBlock installs `.github/workflows/nextblock-sync.yml` into your repo for you, and the
41
+ step turns green.
42
+
43
+ This uses GitHub's **device flow** — no token to create, no per-site callback, nothing to
44
+ configure (the public client id ships with NextBlock). The authorization requests the
45
+ `repo` + `workflow` scopes because GitHub requires them to write a workflow file; NextBlock
46
+ uses the grant once to install the file and does **not** store it. Revoke it anytime at
47
+ GitHub → **Settings → Applications**.
48
+
49
+ ### Do you need to enable GitHub Actions?
50
+
51
+ It depends on how the repository was created:
52
+
53
+ - **Vercel 1-click deploy** creates a **new repository you own** (a copy, *not* a GitHub
54
+ fork). GitHub **enables Actions by default** on repos you own — **there's nothing to turn
55
+ on**. The sync workflow runs automatically once it lands on your repo's **default branch**.
56
+ - **A manual GitHub _fork_** (the "Fork" button) has Actions **disabled** by default. Enable
57
+ them once: your repo → **Actions** tab → **"I understand my workflows, go ahead and enable
58
+ them."**
59
+
60
+ > **Seeing GitHub's "Get started with Actions / choose a workflow" page?** That only means
61
+ > your Actions tab is **empty** — `.github/workflows/nextblock-sync.yml` isn't on your
62
+ > **default branch** yet (scheduled workflows only run from the default branch). Once it is,
63
+ > the tab shows **NextBlock Upstream Sync** with a **Run workflow** button. There is no
64
+ > separate "enable" button on an owned repo because Actions are already on.
65
+
66
+ The dashboard onboarding step ("Automatic updates (GitHub Actions)") links to **Settings →
67
+ Actions** — where you can confirm Actions are allowed — and completes itself once GitHub
68
+ reports the sync workflow as active.
69
+
70
+ ### No GitHub secrets required (public forks)
71
+
72
+ The conflict signal uses the **`GITHUB_TOKEN` that GitHub provides to every workflow
73
+ automatically** — you do **not** add any Supabase secret to GitHub. The app writes the
74
+ dashboard alert itself using the Supabase key it already has, and reads your repo's
75
+ conflict issues over the public GitHub API.
76
+
77
+ > **We recommend forking to a _public_ repository** — it's fully zero-config.
78
+
79
+ ### Private forks
80
+
81
+ If your fork is **private**, the public GitHub API can't read its issues, so add **one**
82
+ environment variable to your deployment (Vercel project → Settings → Environment
83
+ Variables, or your `.env`):
84
+
85
+ | Variable | Value |
86
+ | :--- | :--- |
87
+ | `NEXTBLOCK_GITHUB_TOKEN` | A GitHub token with **read access to issues** on your fork (a fine-grained PAT scoped to the repo, or a classic token with `repo`). |
88
+
89
+ With that set, the dashboard conflict banner works on private forks too. (The workflow
90
+ itself still needs no extra secret — `GITHUB_TOKEN` covers it either way.)
91
+
92
+ > **⚠️ Vercel Hobby (free) plan + a private repo blocks auto-deploys.** On Hobby, Vercel only
93
+ > deploys **private**-repo commits authored by the project owner and rejects automated
94
+ > (bot/collaborator) commits — so the auto-merge push won't deploy (*"Hobby Plan does not
95
+ > support collaboration for private repositories"*). Either **make the repo public**
96
+ > (recommended — it also makes the conflict banner tokenless) or upgrade to **Vercel Pro**.
97
+ > Public repos have no such restriction on Hobby.
98
+
99
+ ### How the dashboard stays current (no cron)
100
+
101
+ The CMS refreshes update/conflict status **in the background after a dashboard page
102
+ loads** (throttled to ~6 hours), so it works on Vercel's Hobby plan without consuming a
103
+ cron slot. Admins can also force a check immediately:
104
+
105
+ ```
106
+ POST /api/cms/check-updates # admin-only; returns the version + conflict status
107
+ ```
108
+
109
+ ---
110
+
111
+ ## Track B — Standalone installs (npm create / local / Docker)
112
+
113
+ These installs aren't wired to a GitHub Action, so NextBlock checks the **GitHub Releases
114
+ API** and, when a newer release exists, records a `runtime_update_available` alert — an
115
+ **indigo banner** on the dashboard with a direct **download link** to the release tarball.
116
+ Updating is manual by design: download the archive, replace your files, and update
117
+ dependencies (`npm install`). The same admin check endpoint above triggers a check on
118
+ demand.
119
+
120
+ ---
121
+
122
+ ## Schema stays in step with deploys (build-time migrations)
123
+
124
+ So a new version's code never runs against an old schema, a build-time hook
125
+ ([`apps/nextblock/tools/build-migrate.mjs`](../apps/nextblock/tools/build-migrate.mjs))
126
+ applies pending, forward-only migrations **before** `next build`:
127
+
128
+ - **Vercel:** runs automatically when `VERCEL_ENV=production`; **preview/development
129
+ builds are skipped** so they never touch live data.
130
+ - **Standalone / local / Docker:** gated on `NEXTBLOCK_BUILD_MIGRATE=1`, which the
131
+ `/setup` wizard and the create/Docker setup scripts write into your env automatically.
132
+
133
+ It is **non-destructive and never breaks the build** — if the database is unreachable it
134
+ logs a warning and continues. Migrations are tracked in `supabase_migrations.schema_migrations`,
135
+ identically to the Supabase CLI.
136
+
137
+ > **Edge case:** if your project's migration history is empty/inconsistent, the hook skips
138
+ > rather than risk misapplying. Run `npm run db:migrate:repair-history` then
139
+ > `npm run db:migrate` once to reconcile (see [docs/04](./04-DATABASE-AND-AUTH.md)).
140
+
141
+ ---
142
+
143
+ ## Quick reference
144
+
145
+ | You want… | Do this |
146
+ | :--- | :--- |
147
+ | Fully hands-off updates | Fork **public**, deploy on Vercel, **enable Actions** once. |
148
+ | Conflict banners on a **private** fork | Also set `NEXTBLOCK_GITHUB_TOKEN`. |
149
+ | To update a **standalone** install | Watch for the dashboard banner → download → replace → `npm install`. |
150
+ | To force an update check now | Dashboard (admin) → it polls in the background; or `POST /api/cms/check-updates`. |
151
+ | To resolve a sync conflict | Open the linked GitHub issue, merge upstream locally, fix, push, close the issue. |
@@ -1,39 +1,39 @@
1
- # NextBlock CMS Documentation
2
-
3
- This folder is the source-of-truth reference set for the NextBlock monorepo.
4
- The numbered files are written from live code, routes, migrations, and shipped
5
- library surfaces rather than historical planning notes.
6
-
7
- ## Start Here
8
-
9
- - Product and architecture overview: [01-PROJECT-OVERVIEW.md](./01-PROJECT-OVERVIEW.md)
10
- - Commerce capabilities: [02-ECOMMERCE-CAPABILITIES.md](./02-ECOMMERCE-CAPABILITIES.md)
11
- - CMS editor and block system: [03-CMS-AND-EDITOR.md](./03-CMS-AND-EDITOR.md)
12
- - Database, auth, and migrations: [04-DATABASE-AND-AUTH.md](./04-DATABASE-AND-AUTH.md)
13
- - Contributor workflow and local operations: [05-DEVELOPER-GUIDE.md](./05-DEVELOPER-GUIDE.md)
14
- - CLI and scaffolded project flow: [06-CLI-AND-SCAFFOLDING.md](./06-CLI-AND-SCAFFOLDING.md)
15
- - Block SDK and extensibility surface: [07-BLOCK-SDK-AND-EXTENSIBILITY.md](./07-BLOCK-SDK-AND-EXTENSIBILITY.md)
16
- - Cortex AI architecture: [08-NEXTBLOCK-CORTEX-AI-ARCHITECTURE.md](./08-NEXTBLOCK-CORTEX-AI-ARCHITECTURE.md)
17
- - Live draft (visual editing) mode: [09-LIVE-DRAFT-MODE.md](./09-LIVE-DRAFT-MODE.md)
18
- - Custom blocks (data-driven CRUD): [10-CUSTOM-BLOCKS.md](./10-CUSTOM-BLOCKS.md)
19
- - Self-hosted local Docker stack: [11-SELF-HOSTED-DOCKER.md](./11-SELF-HOSTED-DOCKER.md)
20
- - One-click cloud deploy (Deploy to Vercel): [12-VERCEL-DEPLOYMENT.md](./12-VERCEL-DEPLOYMENT.md)
21
-
22
- ## Audience Guide
23
-
24
- - New contributors: read `01`, then `04`, then `05`.
25
- - Commerce work: read `02`, then `04`.
26
- - Editor or page-builder work: read `03`, then `07`.
27
- - Custom block work: read `03`, then `10`.
28
- - AI / Cortex work: read `08`.
29
- - CLI or template work: read `06`.
30
- - Publishing the libraries / scaffold CLI: read `06`.
31
- - Running everything locally without cloud accounts: read `11`.
32
- - One-click cloud deploy and the browser setup wizard: read `12`.
33
- - AI agents: start with this index, then move directly to the subsystem file that
34
- matches the task. Treat `apps/nextblock`, `libs/*`, and
35
- `libs/db/src/supabase/migrations` as the final authority if a doc and code ever
36
- disagree.
37
- - AI agents touching migrations must also read the root `AGENTS.md` note:
38
- production/shared database changes are append-only and non-destructive by
39
- default.
1
+ # NextBlock CMS Documentation
2
+
3
+ This folder is the source-of-truth reference set for the NextBlock monorepo.
4
+ The numbered files are written from live code, routes, migrations, and shipped
5
+ library surfaces rather than historical planning notes.
6
+
7
+ ## Start Here
8
+
9
+ - Product and architecture overview: [01-PROJECT-OVERVIEW.md](./01-PROJECT-OVERVIEW.md)
10
+ - Commerce capabilities: [02-ECOMMERCE-CAPABILITIES.md](./02-ECOMMERCE-CAPABILITIES.md)
11
+ - CMS editor and block system: [03-CMS-AND-EDITOR.md](./03-CMS-AND-EDITOR.md)
12
+ - Database, auth, and migrations: [04-DATABASE-AND-AUTH.md](./04-DATABASE-AND-AUTH.md)
13
+ - Contributor workflow and local operations: [05-DEVELOPER-GUIDE.md](./05-DEVELOPER-GUIDE.md)
14
+ - CLI and scaffolded project flow: [06-CLI-AND-SCAFFOLDING.md](./06-CLI-AND-SCAFFOLDING.md)
15
+ - Block SDK and extensibility surface: [07-BLOCK-SDK-AND-EXTENSIBILITY.md](./07-BLOCK-SDK-AND-EXTENSIBILITY.md)
16
+ - Cortex AI architecture: [08-NEXTBLOCK-CORTEX-AI-ARCHITECTURE.md](./08-NEXTBLOCK-CORTEX-AI-ARCHITECTURE.md)
17
+ - Live draft (visual editing) mode: [09-LIVE-DRAFT-MODE.md](./09-LIVE-DRAFT-MODE.md)
18
+ - Custom blocks (data-driven CRUD): [10-CUSTOM-BLOCKS.md](./10-CUSTOM-BLOCKS.md)
19
+ - Self-hosted local Docker stack: [11-SELF-HOSTED-DOCKER.md](./11-SELF-HOSTED-DOCKER.md)
20
+ - One-click cloud deploy (Deploy to Vercel): [12-VERCEL-DEPLOYMENT.md](./12-VERCEL-DEPLOYMENT.md)
21
+
22
+ ## Audience Guide
23
+
24
+ - New contributors: read `01`, then `04`, then `05`.
25
+ - Commerce work: read `02`, then `04`.
26
+ - Editor or page-builder work: read `03`, then `07`.
27
+ - Custom block work: read `03`, then `10`.
28
+ - AI / Cortex work: read `08`.
29
+ - CLI or template work: read `06`.
30
+ - Publishing the libraries / scaffold CLI: read `06`.
31
+ - Running everything locally without cloud accounts: read `11`.
32
+ - One-click cloud deploy and the browser setup wizard: read `12`.
33
+ - AI agents: start with this index, then move directly to the subsystem file that
34
+ matches the task. Treat `apps/nextblock`, `libs/*`, and
35
+ `libs/db/src/supabase/migrations` as the final authority if a doc and code ever
36
+ disagree.
37
+ - AI agents touching migrations must also read the root `AGENTS.md` note:
38
+ production/shared database changes are append-only and non-destructive by
39
+ default.