@react-spa-scaffold/mcp 2.2.0 → 2.4.0

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 (138) hide show
  1. package/dist/constants.d.ts +4 -0
  2. package/dist/constants.d.ts.map +1 -1
  3. package/dist/constants.js +4 -0
  4. package/dist/constants.js.map +1 -1
  5. package/dist/features/definitions/api.d.ts.map +1 -1
  6. package/dist/features/definitions/api.js +2 -1
  7. package/dist/features/definitions/api.js.map +1 -1
  8. package/dist/features/definitions/database.d.ts +3 -0
  9. package/dist/features/definitions/database.d.ts.map +1 -0
  10. package/dist/features/definitions/database.js +45 -0
  11. package/dist/features/definitions/database.js.map +1 -0
  12. package/dist/features/definitions/deployment.d.ts +3 -0
  13. package/dist/features/definitions/deployment.d.ts.map +1 -0
  14. package/dist/features/definitions/deployment.js +14 -0
  15. package/dist/features/definitions/deployment.js.map +1 -0
  16. package/dist/features/definitions/electron.d.ts +3 -0
  17. package/dist/features/definitions/electron.d.ts.map +1 -0
  18. package/dist/features/definitions/electron.js +23 -0
  19. package/dist/features/definitions/electron.js.map +1 -0
  20. package/dist/features/definitions/index.d.ts +3 -0
  21. package/dist/features/definitions/index.d.ts.map +1 -1
  22. package/dist/features/definitions/index.js +3 -0
  23. package/dist/features/definitions/index.js.map +1 -1
  24. package/dist/features/registry.d.ts.map +1 -1
  25. package/dist/features/registry.js +4 -1
  26. package/dist/features/registry.js.map +1 -1
  27. package/dist/features/types.d.ts +1 -0
  28. package/dist/features/types.d.ts.map +1 -1
  29. package/dist/features/types.test.js +5 -2
  30. package/dist/features/types.test.js.map +1 -1
  31. package/dist/resources/docs.d.ts.map +1 -1
  32. package/dist/resources/docs.js +5 -0
  33. package/dist/resources/docs.js.map +1 -1
  34. package/dist/tools/add-features.js +1 -1
  35. package/dist/tools/add-features.js.map +1 -1
  36. package/dist/tools/get-features.test.js +7 -0
  37. package/dist/tools/get-features.test.js.map +1 -1
  38. package/dist/tools/get-scaffold.d.ts +1 -0
  39. package/dist/tools/get-scaffold.d.ts.map +1 -1
  40. package/dist/tools/get-scaffold.js +4 -1
  41. package/dist/tools/get-scaffold.js.map +1 -1
  42. package/dist/tools/get-scaffold.test.js +50 -0
  43. package/dist/tools/get-scaffold.test.js.map +1 -1
  44. package/dist/utils/docs.d.ts.map +1 -1
  45. package/dist/utils/docs.js +2 -0
  46. package/dist/utils/docs.js.map +1 -1
  47. package/dist/utils/scaffold/claude-md/index.d.ts.map +1 -1
  48. package/dist/utils/scaffold/claude-md/index.js +4 -1
  49. package/dist/utils/scaffold/claude-md/index.js.map +1 -1
  50. package/dist/utils/scaffold/claude-md/sections.d.ts +3 -0
  51. package/dist/utils/scaffold/claude-md/sections.d.ts.map +1 -1
  52. package/dist/utils/scaffold/claude-md/sections.js +174 -2
  53. package/dist/utils/scaffold/claude-md/sections.js.map +1 -1
  54. package/dist/utils/scaffold/compute.d.ts.map +1 -1
  55. package/dist/utils/scaffold/compute.js +4 -2
  56. package/dist/utils/scaffold/compute.js.map +1 -1
  57. package/dist/utils/scaffold/generators.d.ts +7 -2
  58. package/dist/utils/scaffold/generators.d.ts.map +1 -1
  59. package/dist/utils/scaffold/generators.js +100 -22
  60. package/dist/utils/scaffold/generators.js.map +1 -1
  61. package/package.json +1 -1
  62. package/templates/.env.example +40 -12
  63. package/templates/.github/workflows/ci.yml +49 -2
  64. package/templates/.github/workflows/deploy.yml +46 -0
  65. package/templates/CLAUDE.md +180 -1
  66. package/templates/docs/AUTHENTICATION.md +325 -0
  67. package/templates/docs/DEPLOYMENT.md +296 -0
  68. package/templates/docs/E2E_TESTING.md +81 -4
  69. package/templates/docs/SUPABASE_INTEGRATION.md +310 -0
  70. package/templates/docs/TESTING.md +195 -77
  71. package/templates/e2e/auth/auth.setup.ts +60 -0
  72. package/templates/e2e/fixtures/index.ts +11 -0
  73. package/templates/e2e/tests/profile.auth.spec.ts +103 -0
  74. package/templates/e2e/tests/profile.spec.ts +64 -0
  75. package/templates/e2e/tests/register-form.spec.ts +38 -0
  76. package/templates/forge.config.js +53 -0
  77. package/templates/gitignore +5 -0
  78. package/templates/package.json +13 -1
  79. package/templates/playwright.config.ts +33 -3
  80. package/templates/src/App.tsx +32 -19
  81. package/templates/src/components/layout/Header.test.tsx +17 -1
  82. package/templates/src/components/layout/Header.tsx +11 -0
  83. package/templates/src/components/shared/AccountButton/AccountButton.test.tsx +3 -3
  84. package/templates/src/components/shared/ProfileSync/ProfileSync.test.tsx +44 -0
  85. package/templates/src/components/shared/ProfileSync/ProfileSync.tsx +104 -0
  86. package/templates/src/components/shared/ProfileSync/index.ts +1 -0
  87. package/templates/src/components/shared/ProtectedRoute/ProtectedRoute.test.tsx +3 -3
  88. package/templates/src/components/shared/index.ts +1 -0
  89. package/templates/src/contexts/performanceContext.tsx +3 -3
  90. package/templates/src/contexts/queryContext.tsx +9 -8
  91. package/templates/src/contexts/supabaseContext.test.tsx +59 -0
  92. package/templates/src/contexts/supabaseContext.tsx +87 -0
  93. package/templates/src/hooks/index.ts +17 -0
  94. package/templates/src/hooks/supabase/index.ts +12 -0
  95. package/templates/src/hooks/supabase/useProfiles.test.tsx +207 -0
  96. package/templates/src/hooks/supabase/useProfiles.ts +213 -0
  97. package/templates/src/hooks/supabase/useSupabaseQuery.test.tsx +150 -0
  98. package/templates/src/hooks/supabase/useSupabaseQuery.ts +91 -0
  99. package/templates/src/lib/api.test.ts +30 -38
  100. package/templates/src/lib/api.ts +1 -7
  101. package/templates/src/lib/config.ts +54 -4
  102. package/templates/src/lib/env.ts +36 -14
  103. package/templates/src/lib/index.ts +4 -2
  104. package/templates/src/lib/routes.ts +1 -0
  105. package/templates/src/lib/sentry.ts +13 -10
  106. package/templates/src/lib/supabase/client.ts +58 -0
  107. package/templates/src/lib/supabase/index.ts +5 -0
  108. package/templates/src/main.ts +227 -0
  109. package/templates/src/main.tsx +32 -42
  110. package/templates/src/mocks/constants.ts +31 -0
  111. package/templates/src/mocks/fixtures/index.ts +3 -1
  112. package/templates/src/mocks/fixtures/profiles.ts +55 -0
  113. package/templates/src/mocks/fixtures/users.ts +91 -0
  114. package/templates/src/mocks/handlers/index.ts +2 -1
  115. package/templates/src/mocks/handlers/supabase.ts +64 -0
  116. package/templates/src/mocks/handlers/todos.ts +1 -1
  117. package/templates/src/mocks/index.ts +6 -0
  118. package/templates/src/pages/Profile.test.tsx +263 -0
  119. package/templates/src/pages/Profile.tsx +171 -0
  120. package/templates/src/pages/index.ts +1 -0
  121. package/templates/src/preload.ts +26 -0
  122. package/templates/src/stores/preferencesStore.ts +2 -1
  123. package/templates/src/test/clerkMock.tsx +49 -9
  124. package/templates/src/test/fetchMock.ts +58 -0
  125. package/templates/src/test/index.ts +49 -3
  126. package/templates/src/test/mocks.ts +128 -1
  127. package/templates/src/test/providers.tsx +7 -4
  128. package/templates/src/test/supabaseMock.ts +112 -0
  129. package/templates/src/test-setup.ts +26 -0
  130. package/templates/src/types/database.ts +46 -0
  131. package/templates/src/types/global.d.ts +28 -0
  132. package/templates/src/types/index.ts +1 -0
  133. package/templates/src/types/supabase.ts +167 -0
  134. package/templates/src/vite-env.d.ts +6 -0
  135. package/templates/supabase/migrations/20260104000000_create_profiles_table.sql +67 -0
  136. package/templates/vite.main.config.mjs +20 -0
  137. package/templates/vite.preload.config.mjs +17 -0
  138. package/templates/vite.renderer.config.mjs +52 -0
@@ -23,6 +23,8 @@ const DOCS_CONFIG = {
23
23
  'docs/TESTING.md': { requiredFeatures: ['testing'] },
24
24
  'docs/E2E_TESTING.md': { requiredFeatures: ['testing'] },
25
25
  'docs/INTERNATIONALIZATION.md': { requiredFeatures: ['i18n'] },
26
+ 'docs/SUPABASE_INTEGRATION.md': { requiredFeatures: ['database'] },
27
+ 'docs/DEPLOYMENT.md': { requiredFeatures: ['deployment'] },
26
28
  };
27
29
  /**
28
30
  * Determine which docs to include based on selected features
@@ -1 +1 @@
1
- {"version":3,"file":"docs.js","sourceRoot":"","sources":["../../src/utils/docs.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEjD;;;;;;;GAOG;AACH,MAAM,WAAW,GAAoD;IACnE,8BAA8B;IAC9B,sBAAsB,EAAE,EAAE;IAC1B,0BAA0B,EAAE,EAAE;IAC9B,8BAA8B,EAAE,EAAE;IAClC,uBAAuB,EAAE,EAAE;IAE3B,mBAAmB;IACnB,iBAAiB,EAAE,EAAE,gBAAgB,EAAE,CAAC,SAAS,CAAC,EAAE;IACpD,qBAAqB,EAAE,EAAE,gBAAgB,EAAE,CAAC,SAAS,CAAC,EAAE;IACxD,8BAA8B,EAAE,EAAE,gBAAgB,EAAE,CAAC,MAAM,CAAC,EAAE;CAC/D,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,UAA6B;IAClE,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;IAEvC,OAAO,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC;SAC/B,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,EAAE;QACrB,IAAI,CAAC,MAAM,CAAC,gBAAgB;YAAE,OAAO,IAAI,CAAC,CAAC,YAAY;QACvD,OAAO,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAChE,CAAC,CAAC;SACD,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC;SACrB,IAAI,EAAE,CAAC;AACZ,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,OAAO,CAAC,OAAe;IACpC,MAAM,QAAQ,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAE9C,IAAI,CAAC;QACH,OAAO,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,wBAAwB,OAAO,yEAAyE,CAAC;IAClH,CAAC;AACH,CAAC;AAED,2EAA2E;AAC3E,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,UAA6B;IACpE,MAAM,QAAQ,GAAG,sBAAsB,CAAC,UAAU,CAAC,CAAC;IACpD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;IAC1D,OAAO,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5E,CAAC"}
1
+ {"version":3,"file":"docs.js","sourceRoot":"","sources":["../../src/utils/docs.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEjD;;;;;;;GAOG;AACH,MAAM,WAAW,GAAoD;IACnE,8BAA8B;IAC9B,sBAAsB,EAAE,EAAE;IAC1B,0BAA0B,EAAE,EAAE;IAC9B,8BAA8B,EAAE,EAAE;IAClC,uBAAuB,EAAE,EAAE;IAE3B,mBAAmB;IACnB,iBAAiB,EAAE,EAAE,gBAAgB,EAAE,CAAC,SAAS,CAAC,EAAE;IACpD,qBAAqB,EAAE,EAAE,gBAAgB,EAAE,CAAC,SAAS,CAAC,EAAE;IACxD,8BAA8B,EAAE,EAAE,gBAAgB,EAAE,CAAC,MAAM,CAAC,EAAE;IAC9D,8BAA8B,EAAE,EAAE,gBAAgB,EAAE,CAAC,UAAU,CAAC,EAAE;IAClE,oBAAoB,EAAE,EAAE,gBAAgB,EAAE,CAAC,YAAY,CAAC,EAAE;CAC3D,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,UAA6B;IAClE,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;IAEvC,OAAO,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC;SAC/B,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,EAAE;QACrB,IAAI,CAAC,MAAM,CAAC,gBAAgB;YAAE,OAAO,IAAI,CAAC,CAAC,YAAY;QACvD,OAAO,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAChE,CAAC,CAAC;SACD,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC;SACrB,IAAI,EAAE,CAAC;AACZ,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,OAAO,CAAC,OAAe;IACpC,MAAM,QAAQ,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAE9C,IAAI,CAAC;QACH,OAAO,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,wBAAwB,OAAO,yEAAyE,CAAC;IAClH,CAAC;AACH,CAAC;AAED,2EAA2E;AAC3E,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,UAA6B;IACpE,MAAM,QAAQ,GAAG,sBAAsB,CAAC,UAAU,CAAC,CAAC;IACpD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;IAC1D,OAAO,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5E,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/utils/scaffold/claude-md/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAe5D,8DAA8D;AAC9D,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,SAAS,EAAE,EACvB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC9B,MAAM,CAgBR"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/utils/scaffold/claude-md/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAkB5D,8DAA8D;AAC9D,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,SAAS,EAAE,EACvB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC9B,MAAM,CAmBR"}
@@ -2,7 +2,7 @@
2
2
  * CLAUDE.md generator - composes sections based on selected features.
3
3
  */
4
4
  import { FEATURE } from '../../../constants.js';
5
- import { generateHeader, generateCommandsSection, generateStructureSection, generateCodePatternsSection, generateUiSection, generateMobileSection, generateThemingSection, generateMcpSection, generateI18nSection, generateTestingSection, generateGotchasSection, } from './sections.js';
5
+ import { generateHeader, generateCommandsSection, generateStructureSection, generateCodePatternsSection, generateUiSection, generateMobileSection, generateThemingSection, generateAuthSection, generateDatabaseSection, generateElectronSection, generateMcpSection, generateI18nSection, generateTestingSection, generateGotchasSection, } from './sections.js';
6
6
  /** Generates CLAUDE.md content based on selected features. */
7
7
  export function generateClaudeMd(featureIds, projectName, scripts) {
8
8
  const sections = [
@@ -13,6 +13,9 @@ export function generateClaudeMd(featureIds, projectName, scripts) {
13
13
  featureIds.includes(FEATURE.UI) && generateUiSection(),
14
14
  featureIds.includes(FEATURE.MOBILE) && generateMobileSection(),
15
15
  featureIds.includes(FEATURE.THEMING) && generateThemingSection(),
16
+ featureIds.includes(FEATURE.AUTH) && generateAuthSection(),
17
+ featureIds.includes(FEATURE.DATABASE) && generateDatabaseSection(),
18
+ featureIds.includes(FEATURE.ELECTRON) && generateElectronSection(),
16
19
  generateMcpSection(featureIds),
17
20
  featureIds.includes(FEATURE.I18N) && generateI18nSection(),
18
21
  featureIds.includes(FEATURE.TESTING) && generateTestingSection(),
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/utils/scaffold/claude-md/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAEhD,OAAO,EACL,cAAc,EACd,uBAAuB,EACvB,wBAAwB,EACxB,2BAA2B,EAC3B,iBAAiB,EACjB,qBAAqB,EACrB,sBAAsB,EACtB,kBAAkB,EAClB,mBAAmB,EACnB,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,eAAe,CAAC;AAEvB,8DAA8D;AAC9D,MAAM,UAAU,gBAAgB,CAC9B,UAAuB,EACvB,WAAmB,EACnB,OAA+B;IAE/B,MAAM,QAAQ,GAAG;QACf,cAAc,CAAC,WAAW,CAAC;QAC3B,uBAAuB,CAAC,OAAO,CAAC;QAChC,wBAAwB,CAAC,UAAU,CAAC;QACpC,2BAA2B,CAAC,UAAU,CAAC;QACvC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,iBAAiB,EAAE;QACtD,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,qBAAqB,EAAE;QAC9D,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,sBAAsB,EAAE;QAChE,kBAAkB,CAAC,UAAU,CAAC;QAC9B,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,mBAAmB,EAAE;QAC1D,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,sBAAsB,EAAE;QAChE,sBAAsB,CAAC,UAAU,CAAC;KACnC,CAAC;IAEF,OAAO,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7C,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/utils/scaffold/claude-md/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAEhD,OAAO,EACL,cAAc,EACd,uBAAuB,EACvB,wBAAwB,EACxB,2BAA2B,EAC3B,iBAAiB,EACjB,qBAAqB,EACrB,sBAAsB,EACtB,mBAAmB,EACnB,uBAAuB,EACvB,uBAAuB,EACvB,kBAAkB,EAClB,mBAAmB,EACnB,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,eAAe,CAAC;AAEvB,8DAA8D;AAC9D,MAAM,UAAU,gBAAgB,CAC9B,UAAuB,EACvB,WAAmB,EACnB,OAA+B;IAE/B,MAAM,QAAQ,GAAG;QACf,cAAc,CAAC,WAAW,CAAC;QAC3B,uBAAuB,CAAC,OAAO,CAAC;QAChC,wBAAwB,CAAC,UAAU,CAAC;QACpC,2BAA2B,CAAC,UAAU,CAAC;QACvC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,iBAAiB,EAAE;QACtD,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,qBAAqB,EAAE;QAC9D,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,sBAAsB,EAAE;QAChE,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,mBAAmB,EAAE;QAC1D,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,uBAAuB,EAAE;QAClE,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,uBAAuB,EAAE;QAClE,kBAAkB,CAAC,UAAU,CAAC;QAC9B,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,mBAAmB,EAAE;QAC1D,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,sBAAsB,EAAE;QAChE,sBAAsB,CAAC,UAAU,CAAC;KACnC,CAAC;IAEF,OAAO,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7C,CAAC"}
@@ -9,8 +9,11 @@ export declare function generateCodePatternsSection(featureIds: FeatureId[]): st
9
9
  export declare function generateUiSection(): string;
10
10
  export declare function generateMobileSection(): string;
11
11
  export declare function generateThemingSection(): string;
12
+ export declare function generateAuthSection(): string;
13
+ export declare function generateDatabaseSection(): string;
12
14
  export declare function generateMcpSection(featureIds: FeatureId[]): string;
13
15
  export declare function generateI18nSection(): string;
14
16
  export declare function generateTestingSection(): string;
17
+ export declare function generateElectronSection(): string;
15
18
  export declare function generateGotchasSection(featureIds: FeatureId[]): string;
16
19
  //# sourceMappingURL=sections.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sections.d.ts","sourceRoot":"","sources":["../../../../src/utils/scaffold/claude-md/sections.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAqB5D,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAI1D;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAe/E;AAED,wBAAgB,wBAAwB,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,MAAM,CAuCxE;AAED,wBAAgB,2BAA2B,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,MAAM,CAkB3E;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAmB1C;AAED,wBAAgB,qBAAqB,IAAI,MAAM,CAoC9C;AAED,wBAAgB,sBAAsB,IAAI,MAAM,CAuB/C;AAED,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,MAAM,CAwClE;AAED,wBAAgB,mBAAmB,IAAI,MAAM,CAY5C;AAED,wBAAgB,sBAAsB,IAAI,MAAM,CAe/C;AAED,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,MAAM,CAoBtE"}
1
+ {"version":3,"file":"sections.d.ts","sourceRoot":"","sources":["../../../../src/utils/scaffold/claude-md/sections.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AA4B5D,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAI1D;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAe/E;AAED,wBAAgB,wBAAwB,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,MAAM,CA6CxE;AAED,wBAAgB,2BAA2B,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,MAAM,CAkB3E;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAmB1C;AAED,wBAAgB,qBAAqB,IAAI,MAAM,CAoC9C;AAED,wBAAgB,sBAAsB,IAAI,MAAM,CAuB/C;AAED,wBAAgB,mBAAmB,IAAI,MAAM,CAsC5C;AAED,wBAAgB,uBAAuB,IAAI,MAAM,CA0EhD;AAED,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,MAAM,CAwClE;AAED,wBAAgB,mBAAmB,IAAI,MAAM,CAY5C;AAED,wBAAgB,sBAAsB,IAAI,MAAM,CAe/C;AAED,wBAAgB,uBAAuB,IAAI,MAAM,CAmChD;AAED,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,MAAM,CA8BtE"}
@@ -19,6 +19,13 @@ const SCRIPT_DESCRIPTIONS = {
19
19
  'e2e:ui': 'Playwright UI mode',
20
20
  'i18n:extract': 'Extract translations to .po',
21
21
  prepare: 'Initialize Husky hooks',
22
+ 'db:types': 'Generate Supabase TypeScript types',
23
+ 'db:push': 'Push database migrations',
24
+ 'db:reset': 'Reset database (destructive)',
25
+ 'db:studio': 'Open Supabase Studio',
26
+ 'electron:dev': 'Start Electron in development',
27
+ 'electron:build': 'Package Electron app',
28
+ 'electron:make': 'Create distributable (DMG/ZIP)',
22
29
  };
23
30
  export function generateHeader(projectName) {
24
31
  return `# CLAUDE.md
@@ -42,7 +49,10 @@ ${commandLines.join('\n')}
42
49
  }
43
50
  export function generateStructureSection(featureIds) {
44
51
  const parts = ['src/', '├── components/ # ui/ (primitives), layout/, shared/ (features)'];
45
- if (featureIds.includes(FEATURE.API) || featureIds.includes(FEATURE.I18N) || featureIds.includes(FEATURE.MOBILE)) {
52
+ if (featureIds.includes(FEATURE.API) ||
53
+ featureIds.includes(FEATURE.I18N) ||
54
+ featureIds.includes(FEATURE.MOBILE) ||
55
+ featureIds.includes(FEATURE.DATABASE)) {
46
56
  parts.push('├── contexts/ # React Context providers');
47
57
  }
48
58
  parts.push('├── hooks/ # Custom hooks');
@@ -53,6 +63,8 @@ export function generateStructureSection(featureIds) {
53
63
  libParts.push('routes');
54
64
  if (featureIds.includes(FEATURE.STATE))
55
65
  libParts.push('storage');
66
+ if (featureIds.includes(FEATURE.DATABASE))
67
+ libParts.push('supabase');
56
68
  parts.push(`├── lib/ # ${libParts.join(', ')}`);
57
69
  if (featureIds.includes(FEATURE.ROUTING))
58
70
  parts.push('├── pages/ # Lazy-loaded route components');
@@ -180,6 +192,120 @@ const getResolvedTheme = usePreferencesStore((s) => s.getResolvedTheme);
180
192
  The \`useThemeEffect\` hook automatically applies the \`.dark\` class to the document.
181
193
  The ThemeToggle component provides a UI for switching between light, dark, and system themes.`;
182
194
  }
195
+ export function generateAuthSection() {
196
+ return `
197
+ ## Authentication (Clerk)
198
+
199
+ Clerk provides authentication with modal-based sign-in.
200
+
201
+ ### Setup
202
+
203
+ 1. Create an account at [clerk.com](https://clerk.com)
204
+ 2. Get your Publishable Key from the dashboard
205
+ 3. Set \`VITE_CLERK_PUBLISHABLE_KEY\` in \`.env\`
206
+
207
+ ### Usage
208
+
209
+ \`\`\`tsx
210
+ import { SignedIn, SignedOut, UserButton, SignInButton } from '@clerk/react-router';
211
+ import { ProtectedRoute } from '@/components/shared';
212
+
213
+ // Conditional rendering
214
+ <SignedIn><UserButton /></SignedIn>
215
+ <SignedOut><SignInButton mode="modal"><Button>Sign In</Button></SignInButton></SignedOut>
216
+
217
+ // Protected routes
218
+ <Route path="/dashboard" element={<ProtectedRoute><DashboardPage /></ProtectedRoute>} />
219
+ \`\`\`
220
+
221
+ ### Testing
222
+
223
+ \`\`\`tsx
224
+ import { setMockClerkSignedIn, resetClerkMocks } from '@/test';
225
+
226
+ beforeEach(() => resetClerkMocks());
227
+
228
+ it('shows sign-in when not authenticated', () => {
229
+ setMockClerkSignedIn(false);
230
+ // ...
231
+ });
232
+ \`\`\``;
233
+ }
234
+ export function generateDatabaseSection() {
235
+ return `
236
+ ## Database (Supabase)
237
+
238
+ Supabase provides PostgreSQL with Row Level Security (RLS), integrated with Clerk authentication.
239
+
240
+ ### Setup
241
+
242
+ 1. Create a project at [supabase.com](https://supabase.com)
243
+ 2. Configure Clerk as third-party auth provider in Supabase Dashboard
244
+ 3. Enable Supabase integration in Clerk Dashboard → Integrations
245
+ 4. Set environment variables in \`.env\`:
246
+ - \`VITE_SUPABASE_DATABASE_URL\` - Your project URL
247
+ - \`VITE_SUPABASE_ANON_KEY\` - Your anon/public key
248
+ - \`SUPABASE_PROJECT_ID\` - Project ID for CLI (subdomain from your URL)
249
+
250
+ ### Usage
251
+
252
+ \`\`\`tsx
253
+ import { useSupabase, useSupabaseQuery, useProfile } from '@/hooks';
254
+
255
+ // Direct client access
256
+ const supabase = useSupabase();
257
+ const { data } = await supabase.from('profiles').select();
258
+
259
+ // TanStack Query wrapper
260
+ const { data, isLoading } = useSupabaseQuery({
261
+ table: 'profiles',
262
+ queryKey: ['current'],
263
+ });
264
+
265
+ // Current user's profile
266
+ const { profile, isLoading, exists } = useProfile();
267
+ \`\`\`
268
+
269
+ ### Profile Mutations
270
+
271
+ \`\`\`tsx
272
+ import { useUpsertProfile, useUpdateProfile, useDeleteProfile } from '@/hooks';
273
+
274
+ const upsertProfile = useUpsertProfile();
275
+ await upsertProfile.mutateAsync({ id: userId, email: 'user@example.com' });
276
+ \`\`\`
277
+
278
+ ### Auto-Sync
279
+
280
+ \`\`\`tsx
281
+ import { ProfileSync } from '@/components/shared';
282
+
283
+ // Add to app to auto-sync Clerk user to Supabase
284
+ <ProfileSync />
285
+ \`\`\`
286
+
287
+ ### Testing
288
+
289
+ \`\`\`tsx
290
+ import { render, setMockSupabaseData, setMockSupabaseError, createProfile, resetSupabaseMocks } from '@/test';
291
+
292
+ beforeEach(() => resetSupabaseMocks());
293
+
294
+ it('displays profile data', async () => {
295
+ setMockSupabaseData([createProfile({ full_name: 'Test User' })]);
296
+ render(<ProfileCard />);
297
+ // Assert profile is displayed
298
+ });
299
+
300
+ it('handles error', async () => {
301
+ setMockSupabaseError({ message: 'Failed', code: 'ERROR' });
302
+ render(<ProfileCard />);
303
+ // Assert error state
304
+ });
305
+ \`\`\`
306
+
307
+ See [docs/SUPABASE_INTEGRATION.md](docs/SUPABASE_INTEGRATION.md) for full details.`;
308
+ }
183
309
  export function generateMcpSection(featureIds) {
184
310
  let section = `
185
311
  ## MCP Servers (PREFER OVER WebSearch)
@@ -247,6 +373,42 @@ import { render, mockMatchMedia, server } from '@/test';
247
373
 
248
374
  MSW handlers auto-reset after each test.`;
249
375
  }
376
+ export function generateElectronSection() {
377
+ return `
378
+ ## Electron Desktop
379
+
380
+ Electron wraps the React app as a native desktop application.
381
+
382
+ ### Architecture
383
+
384
+ - \`src/main.ts\` - Electron main process (window creation, IPC handlers)
385
+ - \`src/preload.ts\` - Context bridge (secure API exposure to renderer)
386
+ - \`src/types/global.d.ts\` - TypeScript types for \`window.electronAPI\`
387
+ - \`forge.config.js\` - Electron Forge configuration
388
+
389
+ ### Router Detection
390
+
391
+ The app automatically uses HashRouter when running in Electron (for \`file://\` protocol support):
392
+
393
+ \`\`\`tsx
394
+ const isElectron = window.electronAPI?.isElectron === true;
395
+ const Router = isElectron ? HashRouter : BrowserRouter;
396
+ \`\`\`
397
+
398
+ ### Adding IPC Handlers
399
+
400
+ 1. Add handler in \`src/main.ts\`: \`ipcMain.handle('channel', handler)\`
401
+ 2. Expose in \`src/preload.ts\` via \`contextBridge.exposeInMainWorld\`
402
+ 3. Update \`ElectronAPI\` interface in both \`preload.ts\` and \`global.d.ts\`
403
+ 4. Call from renderer: \`window.electronAPI?.yourMethod()\`
404
+
405
+ ### Security
406
+
407
+ - \`contextIsolation: true\` - Preload is isolated from page context
408
+ - \`nodeIntegration: false\` - No Node.js APIs in renderer
409
+ - \`sandbox: true\` - OS-level sandboxing enabled
410
+ `;
411
+ }
250
412
  export function generateGotchasSection(featureIds) {
251
413
  const gotchas = [];
252
414
  if (featureIds.includes(FEATURE.DEVTOOLS)) {
@@ -254,12 +416,22 @@ export function generateGotchasSection(featureIds) {
254
416
  gotchas.push('**Conventional commits** enforced by commitlint');
255
417
  }
256
418
  if (featureIds.includes(FEATURE.MOBILE)) {
257
- gotchas.push('**Context hooks throw** outside provider (e.g., `useMobileContext()`)');
419
+ gotchas.push('**Context hooks throw** outside provider (e.g., `useMobileContext()`, `useSupabase()`)');
258
420
  }
259
421
  gotchas.push('**Barrel exports** in each directory via `index.ts`');
260
422
  if (featureIds.includes(FEATURE.UI)) {
261
423
  gotchas.push('**UI components** import directly: `@/components/ui/button` (no barrel)');
262
424
  }
425
+ if (featureIds.includes(FEATURE.AUTH)) {
426
+ gotchas.push('**Clerk auth required** - set `VITE_CLERK_PUBLISHABLE_KEY` in `.env`');
427
+ }
428
+ if (featureIds.includes(FEATURE.DATABASE)) {
429
+ gotchas.push('**Supabase requires Clerk** - SupabaseProvider must be inside ClerkProvider');
430
+ gotchas.push('**RLS policies required** - All Supabase tables should have Row Level Security enabled');
431
+ }
432
+ if (featureIds.includes(FEATURE.ELECTRON)) {
433
+ gotchas.push('**Electron uses HashRouter** - file:// protocol requires hash-based routing');
434
+ }
263
435
  return `
264
436
  ## Common Gotchas
265
437
 
@@ -1 +1 @@
1
- {"version":3,"file":"sections.js","sourceRoot":"","sources":["../../../../src/utils/scaffold/claude-md/sections.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sections.js","sourceRoot":"","sources":["../../../../src/utils/scaffold/claude-md/sections.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAGhD,gDAAgD;AAChD,MAAM,mBAAmB,GAA2B;IAClD,GAAG,EAAE,8BAA8B;IACnC,KAAK,EAAE,uCAAuC;IAC9C,OAAO,EAAE,0BAA0B;IACnC,SAAS,EAAE,iBAAiB;IAC5B,IAAI,EAAE,cAAc;IACpB,UAAU,EAAE,iBAAiB;IAC7B,MAAM,EAAE,iBAAiB;IACzB,cAAc,EAAE,gBAAgB;IAChC,IAAI,EAAE,aAAa;IACnB,YAAY,EAAE,mBAAmB;IACjC,eAAe,EAAE,0BAA0B;IAC3C,GAAG,EAAE,gBAAgB;IACrB,QAAQ,EAAE,oBAAoB;IAC9B,cAAc,EAAE,6BAA6B;IAC7C,OAAO,EAAE,wBAAwB;IACjC,UAAU,EAAE,oCAAoC;IAChD,SAAS,EAAE,0BAA0B;IACrC,UAAU,EAAE,8BAA8B;IAC1C,WAAW,EAAE,sBAAsB;IACnC,cAAc,EAAE,+BAA+B;IAC/C,gBAAgB,EAAE,sBAAsB;IACxC,eAAe,EAAE,gCAAgC;CAClD,CAAC;AAEF,MAAM,UAAU,cAAc,CAAC,WAAmB;IAChD,OAAO;;8BAEqB,WAAW,iDAAiD,CAAC;AAC3F,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,OAA+B;IACrE,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;SACtC,IAAI,EAAE;SACN,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;QACd,MAAM,IAAI,GAAG,mBAAmB,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAC/C,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QAC5D,OAAO,WAAW,MAAM,GAAG,OAAO,KAAK,IAAI,EAAE,CAAC;IAChD,CAAC,CAAC,CAAC;IAEL,OAAO;;;;EAIP,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;OAClB,CAAC;AACR,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,UAAuB;IAC9D,MAAM,KAAK,GAAa,CAAC,MAAM,EAAE,oEAAoE,CAAC,CAAC;IAEvG,IACE,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC;QAChC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC;QACjC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC;QACnC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,EACrC,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;IAC7D,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;IAEhD,MAAM,QAAQ,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC/C,IAAI,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3D,IAAI,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAClE,IAAI,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACjE,IAAI,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC;QAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACrE,KAAK,CAAC,IAAI,CAAC,wBAAwB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAE1D,IAAI,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;IAC1G,IAAI,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;IAC1F,IAAI,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACtC,KAAK,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;QAChE,KAAK,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;IAC7D,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;IAE1D,IAAI,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACzC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,uDAAuD,CAAC,CAAC;QACxE,KAAK,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;QACnE,IAAI,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;YAC7C,KAAK,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IAED,OAAO;;;;;;EAMP,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;OACX,CAAC;AACR,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,UAAuB;IACjE,MAAM,cAAc,GAAa,EAAE,CAAC;IACpC,IAAI,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,cAAc,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IACnF,IAAI,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,cAAc,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;IACrF,cAAc,CAAC,IAAI,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;IAExD,OAAO;;;;;;;;;uBASc,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;;2HAE0E,CAAC;AAC5H,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,OAAO;;;;;;;;;;;;;;;;;OAiBF,CAAC;AACR,CAAC;AAED,MAAM,UAAU,qBAAqB;IACnC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAkCF,CAAC;AACR,CAAC;AAED,MAAM,UAAU,sBAAsB;IACpC,OAAO;;;;;;;;;;;;;;;;;;;;;8FAqBqF,CAAC;AAC/F,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAoCF,CAAC;AACR,CAAC;AAED,MAAM,UAAU,uBAAuB;IACrC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mFAwE0E,CAAC;AACpF,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,UAAuB;IACxD,IAAI,OAAO,GAAG;;;mHAGmG,CAAC;IAElH,IAAI,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;QACpC,OAAO,IAAI;;;;;;;;;6EAS8D,CAAC;IAC5E,CAAC;IAED,OAAO,IAAI;;;;;;;;;;;;;;;;;;OAkBN,CAAC;IAEN,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,OAAO;;;;;;;;;;kEAUyD,CAAC;AACnE,CAAC;AAED,MAAM,UAAU,sBAAsB;IACpC,OAAO;;;;;;;;;;;;;yCAagC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,uBAAuB;IACrC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiCR,CAAC;AACF,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,UAAuB;IAC5D,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,IAAI,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1C,OAAO,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;QAChE,OAAO,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;IAClE,CAAC;IACD,IAAI,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACxC,OAAO,CAAC,IAAI,CAAC,wFAAwF,CAAC,CAAC;IACzG,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;IACpE,IAAI,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;QACpC,OAAO,CAAC,IAAI,CAAC,yEAAyE,CAAC,CAAC;IAC1F,CAAC;IACD,IAAI,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACtC,OAAO,CAAC,IAAI,CAAC,sEAAsE,CAAC,CAAC;IACvF,CAAC;IACD,IAAI,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1C,OAAO,CAAC,IAAI,CAAC,6EAA6E,CAAC,CAAC;QAC5F,OAAO,CAAC,IAAI,CAAC,wFAAwF,CAAC,CAAC;IACzG,CAAC;IACD,IAAI,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1C,OAAO,CAAC,IAAI,CAAC,6EAA6E,CAAC,CAAC;IAC9F,CAAC;IAED,OAAO;;;EAGP,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;CACnD,CAAC;AACF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"compute.d.ts","sourceRoot":"","sources":["../../../src/utils/scaffold/compute.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAe9D;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,gBAAgB,EAAE,MAAM,EAAE,EAC1B,WAAW,GAAE,MAAiB,GAC7B,OAAO,CAAC,cAAc,CAAC,CA8CzB"}
1
+ {"version":3,"file":"compute.d.ts","sourceRoot":"","sources":["../../../src/utils/scaffold/compute.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAqB9D;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,gBAAgB,EAAE,MAAM,EAAE,EAC1B,WAAW,GAAE,MAAiB,GAC7B,OAAO,CAAC,cAAc,CAAC,CAgDzB"}
@@ -11,7 +11,7 @@ import { resolveTemplatePath } from '../paths.js';
11
11
  import { resolveFeatureDependencies, mergeDependencies, mergeScripts } from './dependencies.js';
12
12
  import { computeFileStructure, getConfigFiles } from './file-structure.js';
13
13
  import { getSetupCommands } from './commands.js';
14
- import { generateClaudeMd, generateViteEnvDts, generateEnvTs, generateRoutesTs } from './generators.js';
14
+ import { generateClaudeMd, generateViteEnvDts, generateEnvTs, generateRoutesTs, generateGlobalDts, } from './generators.js';
15
15
  async function readSourcePackageJson() {
16
16
  const path = resolveTemplatePath('package.json');
17
17
  const content = await readFile(path, 'utf-8');
@@ -49,7 +49,8 @@ export async function computeScaffold(selectedFeatures, projectName = 'my-app')
49
49
  const claudeMd = generateClaudeMd(resolvedFeatures, projectName, scripts);
50
50
  const viteEnvDts = generateViteEnvDts(resolvedFeatures);
51
51
  const envTs = generateEnvTs(resolvedFeatures);
52
- const routesTs = resolvedFeatures.includes(FEATURE.ROUTING) ? generateRoutesTs() : undefined;
52
+ const routesTs = resolvedFeatures.includes(FEATURE.ROUTING) ? generateRoutesTs(resolvedFeatures) : undefined;
53
+ const globalDts = generateGlobalDts(resolvedFeatures);
53
54
  return {
54
55
  packageJson: { name: projectName, dependencies, devDependencies, scripts, engines },
55
56
  structure,
@@ -59,6 +60,7 @@ export async function computeScaffold(selectedFeatures, projectName = 'my-app')
59
60
  viteEnvDts,
60
61
  envTs,
61
62
  routesTs,
63
+ globalDts,
62
64
  docs,
63
65
  };
64
66
  }
@@ -1 +1 @@
1
- {"version":3,"file":"compute.js","sourceRoot":"","sources":["../../../src/utils/scaffold/compute.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"compute.js","sourceRoot":"","sources":["../../../src/utils/scaffold/compute.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,11 @@ export { generateClaudeMd } from './claude-md/index.js';
4
4
  export declare function generateViteEnvDts(featureIds: FeatureId[]): string;
5
5
  /** Generate env.ts content based on selected features. */
6
6
  export declare function generateEnvTs(featureIds: FeatureId[]): string;
7
- /** Generates routes.ts content. */
8
- export declare function generateRoutesTs(): string;
7
+ /** Generates routes.ts content based on selected features. */
8
+ export declare function generateRoutesTs(featureIds: FeatureId[]): string;
9
+ /**
10
+ * Generates global.d.ts content based on selected features.
11
+ * Currently only includes ElectronAPI types when electron feature is selected.
12
+ */
13
+ export declare function generateGlobalDts(featureIds: FeatureId[]): string | undefined;
9
14
  //# sourceMappingURL=generators.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"generators.d.ts","sourceRoot":"","sources":["../../../src/utils/scaffold/generators.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD,iEAAiE;AACjE,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,MAAM,CAgDlE;AAED,0DAA0D;AAC1D,wBAAgB,aAAa,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,MAAM,CA6E7D;AAED,mCAAmC;AACnC,wBAAgB,gBAAgB,IAAI,MAAM,CAazC"}
1
+ {"version":3,"file":"generators.d.ts","sourceRoot":"","sources":["../../../src/utils/scaffold/generators.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD,iEAAiE;AACjE,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,MAAM,CAqDlE;AAED,0DAA0D;AAC1D,wBAAgB,aAAa,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,MAAM,CA2G7D;AAED,8DAA8D;AAC9D,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,MAAM,CAqBhE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,MAAM,GAAG,SAAS,CAyC7E"}
@@ -30,6 +30,10 @@ export function generateViteEnvDts(featureIds) {
30
30
  if (featureIds.includes(FEATURE.AUTH)) {
31
31
  envVars.push(' readonly VITE_CLERK_PUBLISHABLE_KEY: string;');
32
32
  }
33
+ if (featureIds.includes(FEATURE.DATABASE)) {
34
+ envVars.push(' readonly VITE_SUPABASE_DATABASE_URL: string;');
35
+ envVars.push(' readonly VITE_SUPABASE_ANON_KEY: string;');
36
+ }
33
37
  // Vite built-in env vars (always required for TypeScript)
34
38
  envVars.push(" readonly MODE: 'development' | 'production' | 'test';");
35
39
  envVars.push(' readonly DEV: boolean;');
@@ -48,21 +52,20 @@ interface ImportMeta {
48
52
  }
49
53
  /** Generate env.ts content based on selected features. */
50
54
  export function generateEnvTs(featureIds) {
51
- const schemaFields = [
52
- ' VITE_APP_NAME: z.string().min(1).optional(),',
53
- ' VITE_APP_URL: z.string().url().optional(),',
54
- ];
55
+ // Check if we need the booleanEnv helper
56
+ const needsBooleanEnv = featureIds.includes(FEATURE.OBSERVABILITY) || featureIds.includes(FEATURE.PERFORMANCE);
57
+ const schemaFields = [' VITE_APP_NAME: z.string().min(1),', ' VITE_APP_URL: z.string().url(),'];
55
58
  const envFields = [
56
59
  ' VITE_APP_NAME: import.meta.env.VITE_APP_NAME,',
57
60
  ' VITE_APP_URL: import.meta.env.VITE_APP_URL,',
58
61
  ];
59
62
  if (featureIds.includes(FEATURE.API)) {
60
- schemaFields.push(' VITE_API_URL: z.string().url().optional(),');
63
+ schemaFields.push(' VITE_API_URL: z.string().url(),');
61
64
  envFields.push(' VITE_API_URL: import.meta.env.VITE_API_URL,');
62
65
  }
63
66
  if (featureIds.includes(FEATURE.OBSERVABILITY)) {
64
- schemaFields.push(' VITE_SENTRY_DSN: z.string().url().optional(),');
65
- schemaFields.push(' VITE_SENTRY_ENABLED: z.string().optional(),');
67
+ schemaFields.push(' VITE_SENTRY_DSN: z.string().url(),');
68
+ schemaFields.push(' VITE_SENTRY_ENABLED: booleanEnv,');
66
69
  envFields.push(' VITE_SENTRY_DSN: import.meta.env.VITE_SENTRY_DSN,');
67
70
  envFields.push(' VITE_SENTRY_ENABLED: import.meta.env.VITE_SENTRY_ENABLED,');
68
71
  }
@@ -70,20 +73,45 @@ export function generateEnvTs(featureIds) {
70
73
  schemaFields.push(' VITE_CLERK_PUBLISHABLE_KEY: z.string().min(1),');
71
74
  envFields.push(' VITE_CLERK_PUBLISHABLE_KEY: import.meta.env.VITE_CLERK_PUBLISHABLE_KEY,');
72
75
  }
76
+ if (featureIds.includes(FEATURE.DATABASE)) {
77
+ schemaFields.push(' VITE_SUPABASE_DATABASE_URL: z.string().url(),');
78
+ schemaFields.push(' VITE_SUPABASE_ANON_KEY: z.string().min(1),');
79
+ envFields.push(' VITE_SUPABASE_DATABASE_URL: import.meta.env.VITE_SUPABASE_DATABASE_URL,');
80
+ envFields.push(' VITE_SUPABASE_ANON_KEY: import.meta.env.VITE_SUPABASE_ANON_KEY,');
81
+ }
82
+ if (featureIds.includes(FEATURE.PERFORMANCE)) {
83
+ schemaFields.push(' VITE_PERF_TEST: booleanEnv,');
84
+ envFields.push(' VITE_PERF_TEST: import.meta.env.VITE_PERF_TEST,');
85
+ }
73
86
  // Vite built-in env vars (always included)
74
- schemaFields.push(" MODE: z.enum(['development', 'production', 'test']).default('development'),");
75
- schemaFields.push(' DEV: z.boolean().default(false),');
76
- schemaFields.push(' PROD: z.boolean().default(false),');
87
+ schemaFields.push(" MODE: z.enum(['development', 'production', 'test']),");
88
+ schemaFields.push(' DEV: z.boolean(),');
89
+ schemaFields.push(' PROD: z.boolean(),');
77
90
  envFields.push(' MODE: import.meta.env.MODE,');
78
91
  envFields.push(' DEV: import.meta.env.DEV,');
79
92
  envFields.push(' PROD: import.meta.env.PROD,');
93
+ // Build the booleanEnv helper if needed
94
+ const booleanEnvHelper = needsBooleanEnv
95
+ ? `
96
+ /**
97
+ * Transforms string env var to boolean.
98
+ * - 'true', '1' → true
99
+ * - 'false', '0' → false
100
+ */
101
+ const booleanEnv = z.enum(['true', 'false', '1', '0']).transform((val) => val === 'true' || val === '1');
102
+
103
+ `
104
+ : '';
80
105
  return `/**
81
106
  * Environment variable validation using Zod.
82
107
  * Validates at runtime to catch missing/invalid env vars early.
108
+ *
109
+ * All env vars are REQUIRED. The MCP scaffold tool strips unused vars
110
+ * when scaffolding builds without certain features.
83
111
  */
84
112
 
85
113
  import { z } from 'zod';
86
-
114
+ ${booleanEnvHelper}
87
115
  const envSchema = z.object({
88
116
  ${schemaFields.join('\n')}
89
117
  });
@@ -92,7 +120,7 @@ export type Env = z.infer<typeof envSchema>;
92
120
 
93
121
  /**
94
122
  * Validate environment variables and return typed env object.
95
- * Throws if validation fails in production.
123
+ * Throws if any required env var is missing or invalid.
96
124
  */
97
125
  export function validateEnv(): Env {
98
126
  const env = {
@@ -102,15 +130,17 @@ ${envFields.join('\n')}
102
130
  const result = envSchema.safeParse(env);
103
131
 
104
132
  if (!result.success) {
105
- const errors = result.error.format();
106
- console.error('Environment validation failed:', errors);
133
+ const errors = result.error.flatten();
134
+ const fieldErrors = Object.entries(errors.fieldErrors)
135
+ .map(([key, msgs]) => \`\${key}: \${(msgs as string[]).join(', ')}\`)
136
+ .join('; ');
137
+ const formErrors = errors.formErrors.join('; ');
138
+ const allErrors = [fieldErrors, formErrors].filter(Boolean).join('; ');
107
139
 
108
- if (import.meta.env.PROD) {
109
- throw new Error('Invalid environment configuration');
110
- }
140
+ throw new Error(\`Environment validation failed: \${allErrors}\`);
111
141
  }
112
142
 
113
- return result.data
143
+ return result.data;
114
144
  }
115
145
 
116
146
  /**
@@ -120,19 +150,67 @@ ${envFields.join('\n')}
120
150
  export const env = validateEnv();
121
151
  `;
122
152
  }
123
- /** Generates routes.ts content. */
124
- export function generateRoutesTs() {
153
+ /** Generates routes.ts content based on selected features. */
154
+ export function generateRoutesTs(featureIds) {
155
+ const routes = [" HOME: '/',"];
156
+ // Add PROFILE route when database feature is selected
157
+ if (featureIds.includes(FEATURE.DATABASE)) {
158
+ routes.push(" PROFILE: '/profile',");
159
+ }
160
+ routes.push(" NOT_FOUND: '*',");
125
161
  return `/**
126
162
  * Typed route constants.
127
163
  * Use these instead of hardcoded strings for type-safe navigation.
128
164
  */
129
165
 
130
166
  export const ROUTES = {
131
- HOME: '/',
132
- NOT_FOUND: '*',
167
+ ${routes.join('\n')}
133
168
  } as const;
134
169
 
135
170
  export type AppRoute = (typeof ROUTES)[keyof typeof ROUTES];
136
171
  `;
137
172
  }
173
+ /**
174
+ * Generates global.d.ts content based on selected features.
175
+ * Currently only includes ElectronAPI types when electron feature is selected.
176
+ */
177
+ export function generateGlobalDts(featureIds) {
178
+ const sections = [];
179
+ // Electron API types
180
+ if (featureIds.includes(FEATURE.ELECTRON)) {
181
+ sections.push(`/**
182
+ * Global type declarations for Electron integration.
183
+ * These types are automatically available in the renderer process
184
+ * when running inside Electron.
185
+ */
186
+
187
+ interface ElectronWindowAPI {
188
+ setAlwaysOnTop: (enable: boolean) => Promise<boolean>;
189
+ setContentProtection: (enable: boolean) => Promise<boolean>;
190
+ getState: () => Promise<{
191
+ alwaysOnTop: boolean;
192
+ contentProtection: boolean;
193
+ }>;
194
+ }
195
+
196
+ interface ElectronAPI {
197
+ window: ElectronWindowAPI;
198
+ platform: NodeJS.Platform;
199
+ isElectron: true;
200
+ }
201
+
202
+ declare global {
203
+ interface Window {
204
+ electronAPI?: ElectronAPI;
205
+ }
206
+ }
207
+
208
+ export {};`);
209
+ }
210
+ // Return undefined if no content needed
211
+ if (sections.length === 0) {
212
+ return undefined;
213
+ }
214
+ return sections.join('\n\n') + '\n';
215
+ }
138
216
  //# sourceMappingURL=generators.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"generators.js","sourceRoot":"","sources":["../../../src/utils/scaffold/generators.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generators.js","sourceRoot":"","sources":["../../../src/utils/scaffold/generators.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@react-spa-scaffold/mcp",
3
- "version": "2.2.0",
3
+ "version": "2.4.0",
4
4
  "description": "MCP server for scaffolding projects based on react-spa-scaffold template",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",