@digilogiclabs/create-saas-app 2.11.0 → 2.12.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 (358) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/cli/index.js +1 -1
  4. package/dist/cli/index.js.map +1 -1
  5. package/dist/generators/template-generator.d.ts.map +1 -1
  6. package/dist/generators/template-generator.js +15 -8
  7. package/dist/generators/template-generator.js.map +1 -1
  8. package/dist/templates/shared/admin/web/src/components/admin-nav.tsx +3 -3
  9. package/dist/templates/shared/auth/supabase/web/src/lib/auth-session.ts +36 -16
  10. package/dist/templates/shared/auth/supabase/web/src/middleware.ts +6 -0
  11. package/dist/templates/shared/cookie-consent/web/components/cookie-consent.tsx +5 -5
  12. package/dist/templates/shared/design/web/src/components/ui/button.tsx +56 -0
  13. package/dist/templates/shared/email/web/src/lib/email/client.ts +1 -1
  14. package/dist/templates/shared/error-pages/web/src/app/error.tsx +13 -11
  15. package/dist/templates/shared/error-pages/web/src/app/global-error.tsx +2 -0
  16. package/dist/templates/shared/error-pages/web/src/app/not-found.tsx +6 -6
  17. package/dist/templates/shared/legal/web/src/app/(legal)/privacy/page.tsx +4 -4
  18. package/dist/templates/shared/legal/web/src/app/(legal)/terms/page.tsx +4 -4
  19. package/dist/templates/shared/loading/web/components/skeleton.tsx +4 -4
  20. package/dist/templates/shared/mock/web/.env.local +55 -0
  21. package/dist/templates/shared/mock/web/src/components/mock-auth-provider.tsx +72 -0
  22. package/dist/templates/shared/mock/web/src/components/mock-banner.tsx +29 -0
  23. package/dist/templates/shared/mock/web/src/lib/mock.ts +147 -0
  24. package/dist/templates/shared/payments/web/src/app/api/webhooks/stripe/route.ts +10 -4
  25. package/dist/templates/shared/redis/web/src/lib/redis.ts +1 -1
  26. package/dist/templates/web/base/template/eslint.config.mjs +14 -0
  27. package/dist/templates/web/base/template/src/app/auth/callback/route.ts +1 -1
  28. package/dist/templates/web/base/template/src/app/checkout/page.tsx +76 -103
  29. package/dist/templates/web/base/template/src/app/dashboard/page.tsx +145 -329
  30. package/dist/templates/web/base/template/src/app/layout.tsx +40 -38
  31. package/dist/templates/web/base/template/src/app/login/page.tsx +116 -66
  32. package/dist/templates/web/base/template/src/app/page.tsx +97 -193
  33. package/dist/templates/web/base/template/src/app/settings/page.tsx +154 -0
  34. package/dist/templates/web/base/template/src/app/signup/page.tsx +117 -66
  35. package/dist/templates/web/base/template/src/components/providers/app-providers.tsx +8 -3
  36. package/dist/templates/web/base/template/src/components/shared/header.tsx +229 -63
  37. package/dist/templates/web/ui-auth/template/eslint.config.mjs +14 -0
  38. package/dist/templates/web/ui-auth/template/src/app/checkout/page.tsx +3 -3
  39. package/dist/templates/web/ui-auth/template/src/app/dev-setup/page.tsx +81 -91
  40. package/dist/templates/web/ui-auth/template/src/app/layout.tsx +38 -36
  41. package/dist/templates/web/ui-auth/template/src/app/login/page.tsx +22 -45
  42. package/dist/templates/web/ui-auth/template/src/app/page.tsx +106 -306
  43. package/dist/templates/web/ui-auth/template/src/app/setup/page.tsx +387 -402
  44. package/dist/templates/web/ui-auth/template/src/app/signup/page.tsx +24 -47
  45. package/dist/templates/web/ui-auth/template/src/components/providers/app-providers.tsx +8 -3
  46. package/dist/templates/web/ui-auth/template/src/components/shared/header.tsx +229 -94
  47. package/dist/templates/web/ui-auth-ai/template/src/app/layout.tsx +38 -45
  48. package/dist/templates/web/ui-auth-ai/template/src/app/login/page.tsx +86 -0
  49. package/dist/templates/web/ui-auth-ai/template/src/app/page.tsx +107 -193
  50. package/dist/templates/web/ui-auth-ai/template/src/app/signup/page.tsx +105 -0
  51. package/dist/templates/web/ui-auth-ai/template/src/components/ai/audio-generator.tsx +144 -140
  52. package/dist/templates/web/ui-auth-ai/template/src/components/ai/video-generator.tsx +156 -157
  53. package/dist/templates/web/ui-auth-ai/template/src/components/auth/login-form.tsx +7 -3
  54. package/dist/templates/web/ui-auth-ai/template/src/components/providers/app-providers.tsx +25 -0
  55. package/dist/templates/web/ui-auth-ai/template/src/components/shared/footer.tsx +36 -0
  56. package/dist/templates/web/ui-auth-ai/template/src/components/shared/header.tsx +228 -0
  57. package/dist/templates/web/ui-auth-ai/template/src/components/ui/button.tsx +5 -5
  58. package/dist/templates/web/ui-auth-ai/template/src/components/ui/input.tsx +1 -1
  59. package/dist/templates/web/ui-auth-ai/template/src/components/ui/select.tsx +1 -1
  60. package/dist/templates/web/ui-auth-ai/template/src/components/ui/textarea.tsx +1 -1
  61. package/dist/templates/web/ui-auth-ai/template/src/components/ui/theme-toggle.tsx +34 -0
  62. package/dist/templates/web/ui-auth-ai/template/src/lib/supabase.ts +6 -4
  63. package/dist/templates/web/ui-auth-ai/template/src/providers/auth-provider.tsx +7 -5
  64. package/dist/templates/web/ui-auth-payments/template/src/app/billing/page.tsx +63 -192
  65. package/dist/templates/web/ui-auth-payments/template/src/app/checkout/page.tsx +104 -296
  66. package/dist/templates/web/ui-auth-payments/template/src/app/dashboard/page.tsx +27 -27
  67. package/dist/templates/web/ui-auth-payments/template/src/app/dev-setup/page.tsx +70 -81
  68. package/dist/templates/web/ui-auth-payments/template/src/app/layout.tsx +38 -36
  69. package/dist/templates/web/ui-auth-payments/template/src/app/login/loading.tsx +9 -9
  70. package/dist/templates/web/ui-auth-payments/template/src/app/login/page.tsx +4 -104
  71. package/dist/templates/web/ui-auth-payments/template/src/app/page.tsx +69 -337
  72. package/dist/templates/web/ui-auth-payments/template/src/app/setup/page.tsx +55 -68
  73. package/dist/templates/web/ui-auth-payments/template/src/app/signup/loading.tsx +13 -13
  74. package/dist/templates/web/ui-auth-payments/template/src/app/signup/page.tsx +4 -123
  75. package/dist/templates/web/ui-auth-payments/template/src/components/client/auth-status.tsx +37 -52
  76. package/dist/templates/web/ui-auth-payments/template/src/components/client/login-form.tsx +49 -103
  77. package/dist/templates/web/ui-auth-payments/template/src/components/client/newsletter-signup.tsx +4 -4
  78. package/dist/templates/web/ui-auth-payments/template/src/components/client/signup-form.tsx +60 -140
  79. package/dist/templates/web/ui-auth-payments/template/src/components/providers/app-providers.tsx +25 -28
  80. package/dist/templates/web/ui-auth-payments/template/src/components/shared/header.tsx +229 -230
  81. package/dist/templates/web/ui-auth-payments/template/src/lib/actions/auth.ts +245 -245
  82. package/dist/templates/web/ui-auth-payments/template/src/lib/actions/index.ts +339 -339
  83. package/dist/templates/web/ui-auth-payments-ai/template/src/app/ai/page.tsx +305 -309
  84. package/dist/templates/web/ui-auth-payments-ai/template/src/app/billing/page.tsx +62 -312
  85. package/dist/templates/web/ui-auth-payments-ai/template/src/app/checkout/page.tsx +109 -125
  86. package/dist/templates/web/ui-auth-payments-ai/template/src/app/dashboard/page.tsx +27 -27
  87. package/dist/templates/web/ui-auth-payments-ai/template/src/app/dev-setup/page.tsx +68 -83
  88. package/dist/templates/web/ui-auth-payments-ai/template/src/app/layout.tsx +40 -38
  89. package/dist/templates/web/ui-auth-payments-ai/template/src/app/onboarding/page.tsx +20 -20
  90. package/dist/templates/web/ui-auth-payments-ai/template/src/app/page.tsx +140 -394
  91. package/dist/templates/web/ui-auth-payments-ai/template/src/app/settings/page.tsx +28 -27
  92. package/dist/templates/web/ui-auth-payments-ai/template/src/app/setup/page.tsx +51 -66
  93. package/dist/templates/web/ui-auth-payments-ai/template/src/components/client/auth-status.tsx +37 -52
  94. package/dist/templates/web/ui-auth-payments-ai/template/src/components/client/login-form.tsx +50 -79
  95. package/dist/templates/web/ui-auth-payments-ai/template/src/components/client/signup-form.tsx +58 -111
  96. package/dist/templates/web/ui-auth-payments-ai/template/src/components/providers/app-providers.tsx +8 -3
  97. package/dist/templates/web/ui-auth-payments-ai/template/src/components/shared/header.tsx +229 -252
  98. package/dist/templates/web/ui-auth-payments-ai/template/src/lib/actions/auth.ts +245 -245
  99. package/dist/templates/web/ui-auth-payments-audio/template/src/app/billing/page.tsx +63 -192
  100. package/dist/templates/web/ui-auth-payments-audio/template/src/app/checkout/page.tsx +109 -125
  101. package/dist/templates/web/ui-auth-payments-audio/template/src/app/dashboard/page.tsx +27 -27
  102. package/dist/templates/web/ui-auth-payments-audio/template/src/app/layout.tsx +40 -38
  103. package/dist/templates/web/ui-auth-payments-audio/template/src/app/page.tsx +122 -385
  104. package/dist/templates/web/ui-auth-payments-audio/template/src/app/setup/page.tsx +340 -344
  105. package/dist/templates/web/ui-auth-payments-audio/template/src/components/client/auth-status.tsx +37 -52
  106. package/dist/templates/web/ui-auth-payments-audio/template/src/components/client/login-form.tsx +49 -103
  107. package/dist/templates/web/ui-auth-payments-audio/template/src/components/client/signup-form.tsx +60 -140
  108. package/dist/templates/web/ui-auth-payments-audio/template/src/components/providers/app-providers.tsx +8 -3
  109. package/dist/templates/web/ui-auth-payments-audio/template/src/components/shared/header.tsx +229 -252
  110. package/dist/templates/web/ui-auth-payments-audio/template/src/lib/actions/auth.ts +3 -3
  111. package/dist/templates/web/ui-auth-payments-video/template/src/app/billing/page.tsx +63 -192
  112. package/dist/templates/web/ui-auth-payments-video/template/src/app/checkout/page.tsx +109 -125
  113. package/dist/templates/web/ui-auth-payments-video/template/src/app/layout.tsx +38 -36
  114. package/dist/templates/web/ui-auth-payments-video/template/src/app/login/page.tsx +9 -109
  115. package/dist/templates/web/ui-auth-payments-video/template/src/app/page.tsx +132 -392
  116. package/dist/templates/web/ui-auth-payments-video/template/src/app/setup/page.tsx +346 -350
  117. package/dist/templates/web/ui-auth-payments-video/template/src/app/signup/page.tsx +9 -128
  118. package/dist/templates/web/ui-auth-payments-video/template/src/components/client/login-form.tsx +90 -0
  119. package/dist/templates/web/ui-auth-payments-video/template/src/components/client/signup-form.tsx +105 -0
  120. package/dist/templates/web/ui-auth-payments-video/template/src/components/providers/app-providers.tsx +8 -3
  121. package/dist/templates/web/ui-auth-payments-video/template/src/components/shared/header.tsx +229 -246
  122. package/dist/templates/web/ui-only/template/eslint.config.mjs +14 -0
  123. package/dist/templates/web/ui-only/template/src/app/checkout/page.tsx +2 -2
  124. package/dist/templates/web/ui-only/template/src/app/login/page.tsx +69 -63
  125. package/dist/templates/web/ui-only/template/src/app/page.tsx +69 -91
  126. package/dist/templates/web/ui-only/template/src/app/signup/page.tsx +94 -79
  127. package/dist/templates/web/ui-only/template/src/components/providers/app-providers.tsx +1 -6
  128. package/dist/templates/web/ui-only/template/src/components/shared/header.tsx +90 -53
  129. package/dist/templates/web/ui-package-test/template/package.json +19 -23
  130. package/dist/templates/web/ui-package-test/template/postcss.config.mjs +8 -0
  131. package/dist/templates/web/ui-package-test/template/src/app/globals.css +88 -0
  132. package/dist/templates/web/ui-package-test/template/src/app/layout.tsx +27 -0
  133. package/dist/templates/web/ui-package-test/template/src/app/page.tsx +46 -106
  134. package/package.json +1 -1
  135. package/src/templates/shared/admin/web/src/components/admin-nav.tsx +3 -3
  136. package/src/templates/shared/auth/supabase/web/src/lib/auth-session.ts +36 -16
  137. package/src/templates/shared/auth/supabase/web/src/middleware.ts +6 -0
  138. package/src/templates/shared/cookie-consent/web/components/cookie-consent.tsx +5 -5
  139. package/src/templates/shared/design/web/src/components/ui/button.tsx +56 -0
  140. package/src/templates/shared/email/web/src/lib/email/client.ts +1 -1
  141. package/src/templates/shared/error-pages/web/src/app/error.tsx +13 -11
  142. package/src/templates/shared/error-pages/web/src/app/global-error.tsx +2 -0
  143. package/src/templates/shared/error-pages/web/src/app/not-found.tsx +6 -6
  144. package/src/templates/shared/legal/web/src/app/(legal)/privacy/page.tsx +4 -4
  145. package/src/templates/shared/legal/web/src/app/(legal)/terms/page.tsx +4 -4
  146. package/src/templates/shared/loading/web/components/skeleton.tsx +4 -4
  147. package/src/templates/shared/mock/web/.env.local +55 -0
  148. package/src/templates/shared/mock/web/src/components/mock-auth-provider.tsx +72 -0
  149. package/src/templates/shared/mock/web/src/components/mock-banner.tsx +29 -0
  150. package/src/templates/shared/mock/web/src/lib/mock.ts +147 -0
  151. package/src/templates/shared/payments/web/src/app/api/webhooks/stripe/route.ts +10 -4
  152. package/src/templates/shared/redis/web/src/lib/redis.ts +1 -1
  153. package/src/templates/web/base/template/eslint.config.mjs +14 -0
  154. package/src/templates/web/base/template/src/app/auth/callback/route.ts +1 -1
  155. package/src/templates/web/base/template/src/app/checkout/page.tsx +76 -103
  156. package/src/templates/web/base/template/src/app/dashboard/page.tsx +145 -329
  157. package/src/templates/web/base/template/src/app/layout.tsx +40 -38
  158. package/src/templates/web/base/template/src/app/login/page.tsx +116 -66
  159. package/src/templates/web/base/template/src/app/page.tsx +97 -193
  160. package/src/templates/web/base/template/src/app/settings/page.tsx +154 -0
  161. package/src/templates/web/base/template/src/app/signup/page.tsx +117 -66
  162. package/src/templates/web/base/template/src/components/providers/app-providers.tsx +8 -3
  163. package/src/templates/web/base/template/src/components/shared/header.tsx +229 -63
  164. package/src/templates/web/ui-auth/template/eslint.config.mjs +14 -0
  165. package/src/templates/web/ui-auth/template/src/app/checkout/page.tsx +3 -3
  166. package/src/templates/web/ui-auth/template/src/app/dev-setup/page.tsx +81 -91
  167. package/src/templates/web/ui-auth/template/src/app/layout.tsx +38 -36
  168. package/src/templates/web/ui-auth/template/src/app/login/page.tsx +22 -45
  169. package/src/templates/web/ui-auth/template/src/app/page.tsx +106 -306
  170. package/src/templates/web/ui-auth/template/src/app/setup/page.tsx +387 -402
  171. package/src/templates/web/ui-auth/template/src/app/signup/page.tsx +24 -47
  172. package/src/templates/web/ui-auth/template/src/components/providers/app-providers.tsx +8 -3
  173. package/src/templates/web/ui-auth/template/src/components/shared/header.tsx +229 -94
  174. package/src/templates/web/ui-auth-ai/template/src/app/layout.tsx +38 -45
  175. package/src/templates/web/ui-auth-ai/template/src/app/login/page.tsx +86 -0
  176. package/src/templates/web/ui-auth-ai/template/src/app/page.tsx +107 -193
  177. package/src/templates/web/ui-auth-ai/template/src/app/signup/page.tsx +105 -0
  178. package/src/templates/web/ui-auth-ai/template/src/components/ai/audio-generator.tsx +144 -140
  179. package/src/templates/web/ui-auth-ai/template/src/components/ai/video-generator.tsx +156 -157
  180. package/src/templates/web/ui-auth-ai/template/src/components/auth/login-form.tsx +7 -3
  181. package/src/templates/web/ui-auth-ai/template/src/components/providers/app-providers.tsx +25 -0
  182. package/src/templates/web/ui-auth-ai/template/src/components/shared/footer.tsx +36 -0
  183. package/src/templates/web/ui-auth-ai/template/src/components/shared/header.tsx +228 -0
  184. package/src/templates/web/ui-auth-ai/template/src/components/ui/button.tsx +5 -5
  185. package/src/templates/web/ui-auth-ai/template/src/components/ui/input.tsx +1 -1
  186. package/src/templates/web/ui-auth-ai/template/src/components/ui/select.tsx +1 -1
  187. package/src/templates/web/ui-auth-ai/template/src/components/ui/textarea.tsx +1 -1
  188. package/src/templates/web/ui-auth-ai/template/src/components/ui/theme-toggle.tsx +34 -0
  189. package/src/templates/web/ui-auth-ai/template/src/lib/supabase.ts +6 -4
  190. package/src/templates/web/ui-auth-ai/template/src/providers/auth-provider.tsx +7 -5
  191. package/src/templates/web/ui-auth-payments/template/src/app/billing/page.tsx +63 -192
  192. package/src/templates/web/ui-auth-payments/template/src/app/checkout/page.tsx +104 -296
  193. package/src/templates/web/ui-auth-payments/template/src/app/dashboard/page.tsx +27 -27
  194. package/src/templates/web/ui-auth-payments/template/src/app/dev-setup/page.tsx +70 -81
  195. package/src/templates/web/ui-auth-payments/template/src/app/layout.tsx +38 -36
  196. package/src/templates/web/ui-auth-payments/template/src/app/login/loading.tsx +9 -9
  197. package/src/templates/web/ui-auth-payments/template/src/app/login/page.tsx +4 -104
  198. package/src/templates/web/ui-auth-payments/template/src/app/page.tsx +69 -337
  199. package/src/templates/web/ui-auth-payments/template/src/app/setup/page.tsx +55 -68
  200. package/src/templates/web/ui-auth-payments/template/src/app/signup/loading.tsx +13 -13
  201. package/src/templates/web/ui-auth-payments/template/src/app/signup/page.tsx +4 -123
  202. package/src/templates/web/ui-auth-payments/template/src/components/client/auth-status.tsx +37 -52
  203. package/src/templates/web/ui-auth-payments/template/src/components/client/login-form.tsx +49 -103
  204. package/src/templates/web/ui-auth-payments/template/src/components/client/newsletter-signup.tsx +4 -4
  205. package/src/templates/web/ui-auth-payments/template/src/components/client/signup-form.tsx +60 -140
  206. package/src/templates/web/ui-auth-payments/template/src/components/providers/app-providers.tsx +25 -28
  207. package/src/templates/web/ui-auth-payments/template/src/components/shared/header.tsx +229 -230
  208. package/src/templates/web/ui-auth-payments/template/src/lib/actions/auth.ts +245 -245
  209. package/src/templates/web/ui-auth-payments/template/src/lib/actions/index.ts +339 -339
  210. package/src/templates/web/ui-auth-payments-ai/template/src/app/ai/page.tsx +305 -309
  211. package/src/templates/web/ui-auth-payments-ai/template/src/app/billing/page.tsx +62 -312
  212. package/src/templates/web/ui-auth-payments-ai/template/src/app/checkout/page.tsx +109 -125
  213. package/src/templates/web/ui-auth-payments-ai/template/src/app/dashboard/page.tsx +27 -27
  214. package/src/templates/web/ui-auth-payments-ai/template/src/app/dev-setup/page.tsx +68 -83
  215. package/src/templates/web/ui-auth-payments-ai/template/src/app/layout.tsx +40 -38
  216. package/src/templates/web/ui-auth-payments-ai/template/src/app/onboarding/page.tsx +20 -20
  217. package/src/templates/web/ui-auth-payments-ai/template/src/app/page.tsx +140 -394
  218. package/src/templates/web/ui-auth-payments-ai/template/src/app/settings/page.tsx +28 -27
  219. package/src/templates/web/ui-auth-payments-ai/template/src/app/setup/page.tsx +51 -66
  220. package/src/templates/web/ui-auth-payments-ai/template/src/components/client/auth-status.tsx +37 -52
  221. package/src/templates/web/ui-auth-payments-ai/template/src/components/client/login-form.tsx +50 -79
  222. package/src/templates/web/ui-auth-payments-ai/template/src/components/client/signup-form.tsx +58 -111
  223. package/src/templates/web/ui-auth-payments-ai/template/src/components/providers/app-providers.tsx +8 -3
  224. package/src/templates/web/ui-auth-payments-ai/template/src/components/shared/header.tsx +229 -252
  225. package/src/templates/web/ui-auth-payments-ai/template/src/lib/actions/auth.ts +245 -245
  226. package/src/templates/web/ui-auth-payments-audio/template/src/app/billing/page.tsx +63 -192
  227. package/src/templates/web/ui-auth-payments-audio/template/src/app/checkout/page.tsx +109 -125
  228. package/src/templates/web/ui-auth-payments-audio/template/src/app/dashboard/page.tsx +27 -27
  229. package/src/templates/web/ui-auth-payments-audio/template/src/app/layout.tsx +40 -38
  230. package/src/templates/web/ui-auth-payments-audio/template/src/app/page.tsx +122 -385
  231. package/src/templates/web/ui-auth-payments-audio/template/src/app/setup/page.tsx +340 -344
  232. package/src/templates/web/ui-auth-payments-audio/template/src/components/client/auth-status.tsx +37 -52
  233. package/src/templates/web/ui-auth-payments-audio/template/src/components/client/login-form.tsx +49 -103
  234. package/src/templates/web/ui-auth-payments-audio/template/src/components/client/signup-form.tsx +60 -140
  235. package/src/templates/web/ui-auth-payments-audio/template/src/components/providers/app-providers.tsx +8 -3
  236. package/src/templates/web/ui-auth-payments-audio/template/src/components/shared/header.tsx +229 -252
  237. package/src/templates/web/ui-auth-payments-audio/template/src/lib/actions/auth.ts +3 -3
  238. package/src/templates/web/ui-auth-payments-video/template/src/app/billing/page.tsx +63 -192
  239. package/src/templates/web/ui-auth-payments-video/template/src/app/checkout/page.tsx +109 -125
  240. package/src/templates/web/ui-auth-payments-video/template/src/app/layout.tsx +38 -36
  241. package/src/templates/web/ui-auth-payments-video/template/src/app/login/page.tsx +9 -109
  242. package/src/templates/web/ui-auth-payments-video/template/src/app/page.tsx +132 -392
  243. package/src/templates/web/ui-auth-payments-video/template/src/app/setup/page.tsx +346 -350
  244. package/src/templates/web/ui-auth-payments-video/template/src/app/signup/page.tsx +9 -128
  245. package/src/templates/web/ui-auth-payments-video/template/src/components/client/login-form.tsx +90 -0
  246. package/src/templates/web/ui-auth-payments-video/template/src/components/client/signup-form.tsx +105 -0
  247. package/src/templates/web/ui-auth-payments-video/template/src/components/providers/app-providers.tsx +8 -3
  248. package/src/templates/web/ui-auth-payments-video/template/src/components/shared/header.tsx +229 -246
  249. package/src/templates/web/ui-only/template/eslint.config.mjs +14 -0
  250. package/src/templates/web/ui-only/template/src/app/checkout/page.tsx +2 -2
  251. package/src/templates/web/ui-only/template/src/app/login/page.tsx +69 -63
  252. package/src/templates/web/ui-only/template/src/app/page.tsx +69 -91
  253. package/src/templates/web/ui-only/template/src/app/signup/page.tsx +94 -79
  254. package/src/templates/web/ui-only/template/src/components/providers/app-providers.tsx +1 -6
  255. package/src/templates/web/ui-only/template/src/components/shared/header.tsx +90 -53
  256. package/src/templates/web/ui-package-test/template/package.json +19 -23
  257. package/src/templates/web/ui-package-test/template/postcss.config.mjs +8 -0
  258. package/src/templates/web/ui-package-test/template/src/app/globals.css +88 -0
  259. package/src/templates/web/ui-package-test/template/src/app/layout.tsx +27 -0
  260. package/src/templates/web/ui-package-test/template/src/app/page.tsx +46 -106
  261. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/README.md +0 -655
  262. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/app/(tabs)/ai.tsx +0 -683
  263. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/app/_layout.tsx +0 -124
  264. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/app.json +0 -74
  265. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/babel.config.js +0 -25
  266. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/docs/MOBILE-SETUP.md +0 -787
  267. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/eas.json +0 -25
  268. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/expo-env.d.ts +0 -3
  269. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/hooks/useRAGSystem.ts +0 -346
  270. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/jest-setup.ts +0 -37
  271. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/lib/rag/config.ts +0 -180
  272. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/metro.config.js +0 -11
  273. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/package.json +0 -122
  274. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/scripts/setup-rag.js +0 -599
  275. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/tsconfig.json +0 -32
  276. package/dist/templates/web/base/template/.eslintrc.js +0 -8
  277. package/dist/templates/web/base/template/src/components/__tests__/example.test.tsx +0 -49
  278. package/dist/templates/web/base/template/src/test/setup.ts +0 -74
  279. package/dist/templates/web/base/template/vitest.config.ts +0 -17
  280. package/dist/templates/web/ui-auth/template/.eslintrc.js +0 -8
  281. package/dist/templates/web/ui-auth/template/src/components/__tests__/example.test.tsx +0 -49
  282. package/dist/templates/web/ui-auth/template/src/test/setup.ts +0 -74
  283. package/dist/templates/web/ui-auth/template/vitest.config.ts +0 -17
  284. package/dist/templates/web/ui-auth-payments/template/src/components/__tests__/example.test.tsx +0 -49
  285. package/dist/templates/web/ui-auth-payments/template/src/test/setup.ts +0 -74
  286. package/dist/templates/web/ui-auth-payments/template/vitest.config.ts +0 -17
  287. package/dist/templates/web/ui-auth-payments-ai/template/src/components/__tests__/example.test.tsx +0 -49
  288. package/dist/templates/web/ui-auth-payments-ai/template/src/test/setup.ts +0 -74
  289. package/dist/templates/web/ui-auth-payments-ai/template/vitest.config.ts +0 -17
  290. package/dist/templates/web/ui-auth-payments-ai-rag/template/README.md +0 -434
  291. package/dist/templates/web/ui-auth-payments-ai-rag/template/components/rag/KnowledgeManager.tsx +0 -642
  292. package/dist/templates/web/ui-auth-payments-ai-rag/template/components/rag/RAGAnalytics.tsx +0 -466
  293. package/dist/templates/web/ui-auth-payments-ai-rag/template/components/rag/RAGChatInterface.tsx +0 -393
  294. package/dist/templates/web/ui-auth-payments-ai-rag/template/docs/GETTING-STARTED.md +0 -457
  295. package/dist/templates/web/ui-auth-payments-ai-rag/template/hooks/useRAGSystem.ts +0 -478
  296. package/dist/templates/web/ui-auth-payments-ai-rag/template/lib/rag/config.ts +0 -250
  297. package/dist/templates/web/ui-auth-payments-ai-rag/template/package.json +0 -73
  298. package/dist/templates/web/ui-auth-payments-ai-rag/template/scripts/setup-rag.js +0 -622
  299. package/dist/templates/web/ui-auth-payments-ai-rag/template/src/app/ai/page.tsx +0 -396
  300. package/dist/templates/web/ui-auth-payments-audio/template/src/components/__tests__/example.test.tsx +0 -49
  301. package/dist/templates/web/ui-auth-payments-audio/template/src/test/setup.ts +0 -74
  302. package/dist/templates/web/ui-auth-payments-audio/template/vitest.config.ts +0 -17
  303. package/dist/templates/web/ui-auth-payments-video/template/src/components/__tests__/example.test.tsx +0 -49
  304. package/dist/templates/web/ui-auth-payments-video/template/src/test/setup.ts +0 -74
  305. package/dist/templates/web/ui-auth-payments-video/template/vitest.config.ts +0 -17
  306. package/dist/templates/web/ui-only/template/.eslintrc.js +0 -8
  307. package/dist/templates/web/ui-only/template/src/components/__tests__/example.test.tsx +0 -49
  308. package/dist/templates/web/ui-only/template/src/test/setup.ts +0 -74
  309. package/dist/templates/web/ui-only/template/vitest.config.ts +0 -17
  310. package/src/templates/mobile/ui-auth-payments-ai-rag/template/README.md +0 -655
  311. package/src/templates/mobile/ui-auth-payments-ai-rag/template/app/(tabs)/ai.tsx +0 -683
  312. package/src/templates/mobile/ui-auth-payments-ai-rag/template/app/_layout.tsx +0 -124
  313. package/src/templates/mobile/ui-auth-payments-ai-rag/template/app.json +0 -74
  314. package/src/templates/mobile/ui-auth-payments-ai-rag/template/babel.config.js +0 -25
  315. package/src/templates/mobile/ui-auth-payments-ai-rag/template/docs/MOBILE-SETUP.md +0 -787
  316. package/src/templates/mobile/ui-auth-payments-ai-rag/template/eas.json +0 -25
  317. package/src/templates/mobile/ui-auth-payments-ai-rag/template/expo-env.d.ts +0 -3
  318. package/src/templates/mobile/ui-auth-payments-ai-rag/template/hooks/useRAGSystem.ts +0 -346
  319. package/src/templates/mobile/ui-auth-payments-ai-rag/template/jest-setup.ts +0 -37
  320. package/src/templates/mobile/ui-auth-payments-ai-rag/template/lib/rag/config.ts +0 -180
  321. package/src/templates/mobile/ui-auth-payments-ai-rag/template/metro.config.js +0 -11
  322. package/src/templates/mobile/ui-auth-payments-ai-rag/template/package.json +0 -122
  323. package/src/templates/mobile/ui-auth-payments-ai-rag/template/scripts/setup-rag.js +0 -599
  324. package/src/templates/mobile/ui-auth-payments-ai-rag/template/tsconfig.json +0 -32
  325. package/src/templates/web/base/template/.eslintrc.js +0 -8
  326. package/src/templates/web/base/template/src/components/__tests__/example.test.tsx +0 -49
  327. package/src/templates/web/base/template/src/test/setup.ts +0 -74
  328. package/src/templates/web/base/template/vitest.config.ts +0 -17
  329. package/src/templates/web/ui-auth/template/.eslintrc.js +0 -8
  330. package/src/templates/web/ui-auth/template/src/components/__tests__/example.test.tsx +0 -49
  331. package/src/templates/web/ui-auth/template/src/test/setup.ts +0 -74
  332. package/src/templates/web/ui-auth/template/vitest.config.ts +0 -17
  333. package/src/templates/web/ui-auth-payments/template/src/components/__tests__/example.test.tsx +0 -49
  334. package/src/templates/web/ui-auth-payments/template/src/test/setup.ts +0 -74
  335. package/src/templates/web/ui-auth-payments/template/vitest.config.ts +0 -17
  336. package/src/templates/web/ui-auth-payments-ai/template/src/components/__tests__/example.test.tsx +0 -49
  337. package/src/templates/web/ui-auth-payments-ai/template/src/test/setup.ts +0 -74
  338. package/src/templates/web/ui-auth-payments-ai/template/vitest.config.ts +0 -17
  339. package/src/templates/web/ui-auth-payments-ai-rag/template/README.md +0 -434
  340. package/src/templates/web/ui-auth-payments-ai-rag/template/components/rag/KnowledgeManager.tsx +0 -642
  341. package/src/templates/web/ui-auth-payments-ai-rag/template/components/rag/RAGAnalytics.tsx +0 -466
  342. package/src/templates/web/ui-auth-payments-ai-rag/template/components/rag/RAGChatInterface.tsx +0 -393
  343. package/src/templates/web/ui-auth-payments-ai-rag/template/docs/GETTING-STARTED.md +0 -457
  344. package/src/templates/web/ui-auth-payments-ai-rag/template/hooks/useRAGSystem.ts +0 -478
  345. package/src/templates/web/ui-auth-payments-ai-rag/template/lib/rag/config.ts +0 -250
  346. package/src/templates/web/ui-auth-payments-ai-rag/template/package.json +0 -73
  347. package/src/templates/web/ui-auth-payments-ai-rag/template/scripts/setup-rag.js +0 -622
  348. package/src/templates/web/ui-auth-payments-ai-rag/template/src/app/ai/page.tsx +0 -396
  349. package/src/templates/web/ui-auth-payments-audio/template/src/components/__tests__/example.test.tsx +0 -49
  350. package/src/templates/web/ui-auth-payments-audio/template/src/test/setup.ts +0 -74
  351. package/src/templates/web/ui-auth-payments-audio/template/vitest.config.ts +0 -17
  352. package/src/templates/web/ui-auth-payments-video/template/src/components/__tests__/example.test.tsx +0 -49
  353. package/src/templates/web/ui-auth-payments-video/template/src/test/setup.ts +0 -74
  354. package/src/templates/web/ui-auth-payments-video/template/vitest.config.ts +0 -17
  355. package/src/templates/web/ui-only/template/.eslintrc.js +0 -8
  356. package/src/templates/web/ui-only/template/src/components/__tests__/example.test.tsx +0 -49
  357. package/src/templates/web/ui-only/template/src/test/setup.ts +0 -74
  358. package/src/templates/web/ui-only/template/vitest.config.ts +0 -17
@@ -1,599 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- const fs = require('fs')
4
- const path = require('path')
5
- const { execSync } = require('child_process')
6
-
7
- console.log('šŸš€ Setting up RAG Knowledge System for React Native...\n')
8
-
9
- // Colors for console output
10
- const colors = {
11
- red: '\x1b[31m',
12
- green: '\x1b[32m',
13
- yellow: '\x1b[33m',
14
- blue: '\x1b[34m',
15
- magenta: '\x1b[35m',
16
- cyan: '\x1b[36m',
17
- white: '\x1b[37m',
18
- reset: '\x1b[0m'
19
- }
20
-
21
- function log(message, color = 'white') {
22
- console.log(`${colors[color]}${message}${colors.reset}`)
23
- }
24
-
25
- function step(number, message) {
26
- log(`\nšŸ“‹ Step ${number}: ${message}`, 'cyan')
27
- }
28
-
29
- function success(message) {
30
- log(`āœ… ${message}`, 'green')
31
- }
32
-
33
- function warning(message) {
34
- log(`āš ļø ${message}`, 'yellow')
35
- }
36
-
37
- function error(message) {
38
- log(`āŒ ${message}`, 'red')
39
- }
40
-
41
- function checkRequirements() {
42
- step(1, 'Checking React Native requirements')
43
-
44
- try {
45
- // Check if we're in an Expo project
46
- if (!fs.existsSync('package.json')) {
47
- throw new Error('package.json not found. Please run this script from your project root.')
48
- }
49
-
50
- const packageJson = JSON.parse(fs.readFileSync('package.json', 'utf8'))
51
-
52
- if (!packageJson.dependencies?.expo && !packageJson.dependencies?.['react-native']) {
53
- throw new Error('This appears to be not a React Native/Expo project.')
54
- }
55
-
56
- if (packageJson.dependencies?.expo) {
57
- success('Expo project detected')
58
- } else {
59
- success('React Native project detected')
60
- }
61
-
62
- // Check for required dependencies
63
- const requiredDeps = [
64
- '@digilogiclabs/saas-factory-ai',
65
- '@digilogiclabs/saas-factory-ai-types',
66
- '@supabase/supabase-js',
67
- '@react-native-async-storage/async-storage',
68
- '@react-native-community/netinfo'
69
- ]
70
-
71
- const missingDeps = requiredDeps.filter(dep =>
72
- !packageJson.dependencies?.[dep] && !packageJson.devDependencies?.[dep]
73
- )
74
-
75
- if (missingDeps.length > 0) {
76
- warning(`Missing dependencies: ${missingDeps.join(', ')}`)
77
- log('Installing missing dependencies...')
78
-
79
- if (packageJson.dependencies?.expo) {
80
- execSync(`npx expo install ${missingDeps.join(' ')}`, { stdio: 'inherit' })
81
- } else {
82
- execSync(`npm install ${missingDeps.join(' ')}`, { stdio: 'inherit' })
83
- }
84
- success('Dependencies installed')
85
- } else {
86
- success('All required dependencies found')
87
- }
88
-
89
- } catch (err) {
90
- error(err.message)
91
- process.exit(1)
92
- }
93
- }
94
-
95
- function setupEnvironmentVariables() {
96
- step(2, 'Setting up environment variables')
97
-
98
- const requiredEnvVars = [
99
- 'EXPO_PUBLIC_SUPABASE_URL',
100
- 'EXPO_PUBLIC_SUPABASE_ANON_KEY',
101
- 'EXPO_PUBLIC_OPENAI_API_KEY'
102
- ]
103
-
104
- // Check app.config.js/ts or expo config
105
- const configFiles = ['app.config.js', 'app.config.ts', 'expo.json']
106
- let configFile = null
107
-
108
- for (const file of configFiles) {
109
- if (fs.existsSync(file)) {
110
- configFile = file
111
- break
112
- }
113
- }
114
-
115
- if (!configFile) {
116
- // Create basic app.config.js
117
- const configContent = `const IS_DEV = process.env.APP_VARIANT === 'development'
118
- const IS_PREVIEW = process.env.APP_VARIANT === 'preview'
119
-
120
- const getUniqueIdentifier = () => {
121
- if (IS_DEV) {
122
- return '{{bundleId}}.dev'
123
- }
124
-
125
- if (IS_PREVIEW) {
126
- return '{{bundleId}}.preview'
127
- }
128
-
129
- return '{{bundleId}}'
130
- }
131
-
132
- const getAppName = () => {
133
- if (IS_DEV) {
134
- return '{{displayName}} (Dev)'
135
- }
136
-
137
- if (IS_PREVIEW) {
138
- return '{{displayName}} (Preview)'
139
- }
140
-
141
- return '{{displayName}}'
142
- }
143
-
144
- export default {
145
- expo: {
146
- name: getAppName(),
147
- slug: '{{slug}}',
148
- version: '1.0.0',
149
- orientation: 'portrait',
150
- icon: './assets/icon.png',
151
- userInterfaceStyle: 'automatic',
152
- splash: {
153
- image: './assets/splash.png',
154
- resizeMode: 'contain',
155
- backgroundColor: '#ffffff'
156
- },
157
- assetBundlePatterns: ['**/*'],
158
- ios: {
159
- supportsTablet: true,
160
- bundleIdentifier: getUniqueIdentifier()
161
- },
162
- android: {
163
- adaptiveIcon: {
164
- foregroundImage: './assets/adaptive-icon.png',
165
- backgroundColor: '#ffffff'
166
- },
167
- package: getUniqueIdentifier()
168
- },
169
- web: {
170
- favicon: './assets/favicon.png',
171
- bundler: 'metro'
172
- },
173
- extra: {
174
- supabaseUrl: process.env.EXPO_PUBLIC_SUPABASE_URL,
175
- supabaseAnonKey: process.env.EXPO_PUBLIC_SUPABASE_ANON_KEY,
176
- openaiApiKey: process.env.EXPO_PUBLIC_OPENAI_API_KEY,
177
- eas: {
178
- projectId: '{{easProjectId}}'
179
- }
180
- },
181
- owner: '{{expoUsername}}'
182
- }
183
- }
184
- `
185
- fs.writeFileSync('app.config.js', configContent)
186
- success('Created app.config.js')
187
- configFile = 'app.config.js'
188
- }
189
-
190
- // Check .env files
191
- const envFiles = ['.env.local', '.env']
192
- let envFileExists = false
193
-
194
- for (const envFile of envFiles) {
195
- if (fs.existsSync(envFile)) {
196
- envFileExists = true
197
- success(`Found ${envFile}`)
198
- break
199
- }
200
- }
201
-
202
- if (!envFileExists) {
203
- warning('No environment file found. Creating .env.local...')
204
-
205
- const envTemplate = `# RAG Knowledge System Configuration for React Native
206
- EXPO_PUBLIC_SUPABASE_URL=your_supabase_url_here
207
- EXPO_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key_here
208
-
209
- # OpenAI Configuration (exposed to client - use with caution)
210
- EXPO_PUBLIC_OPENAI_API_KEY=your_openai_api_key_here
211
-
212
- # Server-only keys (for API routes if using Expo Router API routes)
213
- SUPABASE_SERVICE_ROLE_KEY=your_supabase_service_role_key_here
214
- OPENAI_API_KEY=your_openai_api_key_here
215
-
216
- # App Configuration
217
- APP_VARIANT=development
218
- EAS_PROJECT_ID=your_eas_project_id_here
219
- `
220
-
221
- fs.writeFileSync('.env.local', envTemplate)
222
- success('Created .env.local template')
223
- warning('Please update .env.local with your actual API keys before proceeding')
224
- warning('Note: In React Native, environment variables are embedded in the build!')
225
- } else {
226
- success('Environment configuration found')
227
- }
228
- }
229
-
230
- function createMobileSpecificConfig() {
231
- step(3, 'Creating mobile-specific RAG configuration')
232
-
233
- // Create lib directory structure
234
- const dirs = ['lib/rag', 'hooks', 'components/rag', 'scripts']
235
- dirs.forEach(dir => {
236
- if (!fs.existsSync(dir)) {
237
- fs.mkdirSync(dir, { recursive: true })
238
- success(`Created directory: ${dir}`)
239
- }
240
- })
241
-
242
- // Create mobile-specific Supabase configuration
243
- const supabaseConfig = `import AsyncStorage from '@react-native-async-storage/async-storage'
244
- import { createClient } from '@supabase/supabase-js'
245
- import Constants from 'expo-constants'
246
- import type { Database } from '../types/supabase'
247
-
248
- const supabaseUrl = Constants.expoConfig?.extra?.supabaseUrl || process.env.EXPO_PUBLIC_SUPABASE_URL
249
- const supabaseAnonKey = Constants.expoConfig?.extra?.supabaseAnonKey || process.env.EXPO_PUBLIC_SUPABASE_ANON_KEY
250
-
251
- if (!supabaseUrl || !supabaseAnonKey) {
252
- throw new Error(
253
- 'Supabase URL and Anon Key are required. Please check your environment configuration.'
254
- )
255
- }
256
-
257
- export const supabase = createClient<Database>(supabaseUrl, supabaseAnonKey, {
258
- auth: {
259
- storage: AsyncStorage,
260
- autoRefreshToken: true,
261
- persistSession: true,
262
- detectSessionInUrl: false,
263
- },
264
- })
265
-
266
- export default supabase
267
- `
268
-
269
- fs.writeFileSync('lib/supabase.ts', supabaseConfig)
270
- success('Created Supabase configuration for React Native')
271
- }
272
-
273
- function createSeedScript() {
274
- step(4, 'Creating knowledge seeding script')
275
-
276
- const seedScript = `#!/usr/bin/env node
277
-
278
- const { createClient } = require('@supabase/supabase-js')
279
- require('dotenv').config({ path: '.env.local' })
280
-
281
- const supabase = createClient(
282
- process.env.EXPO_PUBLIC_SUPABASE_URL,
283
- process.env.SUPABASE_SERVICE_ROLE_KEY || process.env.EXPO_PUBLIC_SUPABASE_ANON_KEY
284
- )
285
-
286
- const sampleMobileDocuments = [
287
- {
288
- namespace: '{{packageName}}-mobile',
289
- category: 'getting-started',
290
- content: 'Welcome to your mobile AI-powered knowledge app! This React Native app uses RAG to provide intelligent responses based on your knowledge base. Swipe through tabs to explore different features.',
291
- fields: {
292
- title: 'Mobile App Welcome',
293
- difficulty: 'beginner',
294
- platform: 'mobile'
295
- },
296
- metadata: {
297
- featured: true,
298
- priority: 1,
299
- mobileOptimized: true
300
- },
301
- source: { type: 'seed', version: '1.0', platform: 'react-native' }
302
- },
303
- {
304
- namespace: '{{packageName}}-mobile',
305
- category: 'features',
306
- content: 'Mobile features include: Voice input for queries, offline caching, push notifications for new knowledge, touch-optimized interface, and seamless sync across devices.',
307
- fields: {
308
- title: 'Mobile Platform Features',
309
- difficulty: 'beginner',
310
- platform: 'mobile'
311
- },
312
- metadata: {
313
- featured: true,
314
- priority: 2,
315
- mobileOptimized: true
316
- },
317
- source: { type: 'seed', version: '1.0', platform: 'react-native' }
318
- },
319
- {
320
- namespace: '{{packageName}}-mobile',
321
- category: 'tutorials',
322
- content: 'To use voice input: 1. Tap the microphone icon in the chat, 2. Speak your question clearly, 3. The app will convert speech to text and process your query, 4. Get AI responses with relevant sources.',
323
- fields: {
324
- title: 'Voice Input Tutorial',
325
- difficulty: 'intermediate',
326
- platform: 'mobile'
327
- },
328
- metadata: {
329
- tutorial: true,
330
- priority: 3,
331
- mobileOptimized: true
332
- },
333
- source: { type: 'seed', version: '1.0', platform: 'react-native' }
334
- },
335
- {
336
- namespace: '{{packageName}}-mobile',
337
- category: 'offline',
338
- content: 'Offline mode: The app caches recent queries and responses for offline access. When offline, you can still browse cached content and queue new queries that will be processed when connection is restored.',
339
- fields: {
340
- title: 'Offline Mode Guide',
341
- difficulty: 'intermediate',
342
- platform: 'mobile'
343
- },
344
- metadata: {
345
- featured: true,
346
- priority: 4,
347
- mobileOptimized: true,
348
- offlineCapable: true
349
- },
350
- source: { type: 'seed', version: '1.0', platform: 'react-native' }
351
- }
352
- ]
353
-
354
- async function seedMobileKnowledge() {
355
- console.log('🌱 Seeding mobile knowledge base...')
356
-
357
- try {
358
- for (const doc of sampleMobileDocuments) {
359
- const { data, error } = await supabase
360
- .from('rag_knowledge_base')
361
- .insert(doc)
362
-
363
- if (error) {
364
- console.error('Error inserting document:', error)
365
- } else {
366
- console.log('āœ… Inserted:', doc.fields.title)
367
- }
368
- }
369
-
370
- console.log('šŸŽ‰ Mobile knowledge base seeded successfully!')
371
- console.log('šŸ“± Next steps for React Native:')
372
- console.log(' 1. Run: npm start or npx expo start')
373
- console.log(' 2. Open in Expo Go or simulator')
374
- console.log(' 3. Navigate to the AI tab')
375
- console.log(' 4. Start chatting with your knowledge base!')
376
- console.log(' 5. Test offline mode by disabling network')
377
-
378
- } catch (error) {
379
- console.error('āŒ Mobile seeding failed:', error)
380
- process.exit(1)
381
- }
382
- }
383
-
384
- seedMobileKnowledge()
385
- `
386
-
387
- fs.writeFileSync('scripts/seed-mobile-knowledge.js', seedScript)
388
- fs.chmodSync('scripts/seed-mobile-knowledge.js', 0o755)
389
- success('Created mobile seed script')
390
- }
391
-
392
- function setupTypeScript() {
393
- step(5, 'Setting up TypeScript types')
394
-
395
- // Create types directory
396
- if (!fs.existsSync('types')) {
397
- fs.mkdirSync('types', { recursive: true })
398
- }
399
-
400
- // Create basic RAG types for mobile
401
- const ragTypes = `// RAG System Types for React Native
402
- export interface MobileRAGConfig {
403
- domain: string
404
- enableOffline: boolean
405
- cacheSize: number
406
- syncStrategy: 'immediate' | 'batch' | 'manual'
407
- voiceInput?: boolean
408
- hapticFeedback?: boolean
409
- }
410
-
411
- export interface OfflineQuery {
412
- id: string
413
- query: string
414
- timestamp: Date
415
- synced: boolean
416
- }
417
-
418
- export interface CachedResponse {
419
- query: string
420
- response: string
421
- sources: any[]
422
- confidence: number
423
- timestamp: Date
424
- expiresAt: Date
425
- }
426
-
427
- export interface MobileRAGState {
428
- isOnline: boolean
429
- isLoading: boolean
430
- cacheSize: number
431
- offlineQueueSize: number
432
- lastSync: Date | null
433
- }
434
- `
435
-
436
- fs.writeFileSync('types/rag.ts', ragTypes)
437
- success('Created mobile RAG types')
438
-
439
- // Create Supabase types placeholder
440
- const supabaseTypes = `// Basic Supabase types for RAG system
441
- // Replace with generated types: supabase gen types --local > types/supabase.ts
442
-
443
- export interface Database {
444
- public: {
445
- Tables: {
446
- rag_knowledge_base: {
447
- Row: {
448
- id: string
449
- namespace: string
450
- category: string
451
- content: string
452
- fields: Record<string, any>
453
- metadata: Record<string, any>
454
- source: Record<string, any>
455
- embedding: number[] | null
456
- created_at: string
457
- updated_at: string
458
- version: number
459
- }
460
- Insert: {
461
- id?: string
462
- namespace?: string
463
- category?: string
464
- content: string
465
- fields?: Record<string, any>
466
- metadata?: Record<string, any>
467
- source?: Record<string, any>
468
- embedding?: number[] | null
469
- created_at?: string
470
- updated_at?: string
471
- version?: number
472
- }
473
- Update: {
474
- id?: string
475
- namespace?: string
476
- category?: string
477
- content?: string
478
- fields?: Record<string, any>
479
- metadata?: Record<string, any>
480
- source?: Record<string, any>
481
- embedding?: number[] | null
482
- created_at?: string
483
- updated_at?: string
484
- version?: number
485
- }
486
- }
487
- }
488
- Views: {
489
- [_ in never]: never
490
- }
491
- Functions: {
492
- rag_similarity_search: {
493
- Args: {
494
- query_embedding: number[]
495
- search_namespace?: string
496
- search_category?: string
497
- similarity_threshold?: number
498
- max_results?: number
499
- }
500
- Returns: {
501
- id: string
502
- content: string
503
- category: string
504
- fields: Record<string, any>
505
- metadata: Record<string, any>
506
- similarity: number
507
- }[]
508
- }
509
- }
510
- Enums: {
511
- [_ in never]: never
512
- }
513
- }
514
- }
515
- `
516
-
517
- fs.writeFileSync('types/supabase.ts', supabaseTypes)
518
- success('Created basic Supabase types')
519
- }
520
-
521
- function updatePackageJson() {
522
- step(6, 'Updating package.json scripts')
523
-
524
- const packageJsonPath = 'package.json'
525
- if (fs.existsSync(packageJsonPath)) {
526
- const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'))
527
-
528
- packageJson.scripts = {
529
- ...packageJson.scripts,
530
- 'setup:rag': 'node scripts/setup-rag.js',
531
- 'seed:knowledge': 'node scripts/seed-mobile-knowledge.js',
532
- 'db:types': 'supabase gen types --local > types/supabase.ts'
533
- }
534
-
535
- fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2))
536
- success('Updated package.json scripts')
537
- }
538
- }
539
-
540
- function displayMobileNextSteps() {
541
- step(7, 'Setup complete! Mobile-specific next steps')
542
-
543
- log('\nšŸŽ‰ Mobile RAG Knowledge System setup complete!\n', 'green')
544
-
545
- log('šŸ“± Mobile-specific next steps:', 'cyan')
546
- log(' 1. Update your .env.local with actual API keys')
547
- log(' 2. Ensure your Supabase database has the RAG tables')
548
- log(' 3. Run the mobile seed script: npm run seed:knowledge')
549
- log(' 4. Start Expo: npx expo start')
550
- log(' 5. Open in simulator or Expo Go app')
551
- log(' 6. Test the AI tab with voice input and offline mode')
552
-
553
- log('\nšŸ”§ Available commands:', 'cyan')
554
- log(' npm run setup:rag - Run this setup script')
555
- log(' npm run seed:knowledge - Add mobile-optimized knowledge')
556
- log(' npm run db:types - Generate TypeScript types')
557
- log(' npx expo start - Start development server')
558
- log(' npx expo start --offline - Start in offline mode')
559
-
560
- log('\nšŸ“š Mobile-specific files:', 'cyan')
561
- log(' • RAG Hook: hooks/useRAGSystem.ts')
562
- log(' • AI Screen: app/(tabs)/ai.tsx')
563
- log(' • Config: lib/rag/config.ts')
564
- log(' • Supabase: lib/supabase.ts')
565
- log(' • Types: types/rag.ts, types/supabase.ts')
566
-
567
- log('\nšŸ’” Mobile tips:', 'yellow')
568
- log(' • Test offline functionality by disabling network')
569
- log(' • Voice input works in simulator with computer microphone')
570
- log(' • Haptic feedback enhances user experience')
571
- log(' • Cache settings can be adjusted in config')
572
- log(' • Consider push notifications for knowledge updates')
573
-
574
- log('\nšŸ“Š Performance considerations:', 'yellow')
575
- log(' • Embeddings are computed server-side to save battery')
576
- log(' • Responses are cached locally for offline access')
577
- log(' • Background sync keeps knowledge base updated')
578
- log(' • Network requests are debounced to reduce API calls')
579
-
580
- log('\nšŸš€ Happy building with Mobile RAG!', 'green')
581
- }
582
-
583
- // Main execution
584
- async function main() {
585
- try {
586
- checkRequirements()
587
- setupEnvironmentVariables()
588
- createMobileSpecificConfig()
589
- createSeedScript()
590
- setupTypeScript()
591
- updatePackageJson()
592
- displayMobileNextSteps()
593
- } catch (err) {
594
- error(`Mobile setup failed: ${err.message}`)
595
- process.exit(1)
596
- }
597
- }
598
-
599
- main()
@@ -1,32 +0,0 @@
1
- {
2
- "extends": "expo/tsconfig.base",
3
- "compilerOptions": {
4
- "strict": true,
5
- "baseUrl": "./",
6
- "paths": {
7
- "@/*": ["./*"],
8
- "@/components/*": ["./components/*"],
9
- "@/hooks/*": ["./hooks/*"],
10
- "@/utils/*": ["./utils/*"],
11
- "@/types/*": ["./types/*"],
12
- "@/constants/*": ["./constants/*"],
13
- "@/lib/*": ["./lib/*"]
14
- },
15
- "skipLibCheck": true,
16
- "allowSyntheticDefaultImports": true,
17
- "esModuleInterop": true,
18
- "moduleResolution": "bundler",
19
- "resolveJsonModule": true,
20
- "noEmit": true,
21
- "jsx": "react-jsx"
22
- },
23
- "include": [
24
- "**/*.ts",
25
- "**/*.tsx",
26
- ".expo/types/**/*.ts",
27
- "expo-env.d.ts"
28
- ],
29
- "exclude": [
30
- "node_modules"
31
- ]
32
- }
@@ -1,8 +0,0 @@
1
- /** @type {import('eslint').Linter.Config} */
2
- module.exports = {
3
- extends: ['next/core-web-vitals'],
4
- rules: {
5
- // Add any custom rules here
6
- },
7
- }
8
-
@@ -1,49 +0,0 @@
1
- /**
2
- * Example test file demonstrating testing patterns for SaaS Factory components
3
- *
4
- * This is optional and serves as a reference for testing your components.
5
- * You can delete this file if you don't need example tests.
6
- */
7
-
8
- import { render, screen } from '@testing-library/react'
9
- import { Button } from '@digilogiclabs/saas-factory-ui'
10
-
11
- // Example: Testing UI components
12
- describe('UI Components', () => {
13
- it('renders button with correct text', () => {
14
- render(<Button>Click me</Button>)
15
- expect(screen.getByRole('button', { name: /click me/i })).toBeInTheDocument()
16
- })
17
-
18
- it('button can be disabled', () => {
19
- render(<Button disabled>Disabled button</Button>)
20
- expect(screen.getByRole('button')).toBeDisabled()
21
- })
22
- })
23
-
24
- // Example: Testing custom components
25
- function MockComponent({ title }: { title: string }) {
26
- return <h1>{title}</h1>
27
- }
28
-
29
- describe('Custom Components', () => {
30
- it('renders with correct title', () => {
31
- render(<MockComponent title="Test Title" />)
32
- expect(screen.getByRole('heading', { level: 1 })).toHaveTextContent('Test Title')
33
- })
34
- })
35
-
36
- // Example: Testing utilities
37
- function formatCurrency(amount: number): string {
38
- return new Intl.NumberFormat('en-US', {
39
- style: 'currency',
40
- currency: 'USD',
41
- }).format(amount)
42
- }
43
-
44
- describe('Utilities', () => {
45
- it('formats currency correctly', () => {
46
- expect(formatCurrency(1000)).toBe('$1,000.00')
47
- expect(formatCurrency(0)).toBe('$0.00')
48
- })
49
- })