tanstack_start_ts 1.0.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 (336) hide show
  1. package/.wrangler/deploy/config.json +1 -0
  2. package/bunfig.toml +6 -0
  3. package/components.json +22 -0
  4. package/config.json +0 -0
  5. package/dist/client/.assetsignore +2 -0
  6. package/dist/client/assets/ProductCard-DbIkJAE-.js +1 -0
  7. package/dist/client/assets/about-AskxOruL.js +1 -0
  8. package/dist/client/assets/admin-BZVcAQM3.js +1 -0
  9. package/dist/client/assets/admin.functions--RdVcuBx.js +1 -0
  10. package/dist/client/assets/admin.login-QgrF_9Fp.js +1 -0
  11. package/dist/client/assets/affiliate-disclosure-BIAsA-HO.js +1 -0
  12. package/dist/client/assets/categories-D0N418mK.js +1 -0
  13. package/dist/client/assets/category._slug-aCaQm14E.js +1 -0
  14. package/dist/client/assets/contact-PhvO-V15.js +1 -0
  15. package/dist/client/assets/faq-BsiHWPM8.js +1 -0
  16. package/dist/client/assets/hero-bg-BP2eVUIX.jpg +0 -0
  17. package/dist/client/assets/index-BU9rnkF3.js +1 -0
  18. package/dist/client/assets/index-BpJWZkva.js +1 -0
  19. package/dist/client/assets/index-vRX-zAyq.js +1 -0
  20. package/dist/client/assets/login-DteE0ZGp.js +1 -0
  21. package/dist/client/assets/logo-pSNfLJQk.png +0 -0
  22. package/dist/client/assets/privacy-B_Pu7040.js +1 -0
  23. package/dist/client/assets/product-links-BkZ41Gv3.js +1 -0
  24. package/dist/client/assets/product._id-BVUysCW-.js +1 -0
  25. package/dist/client/assets/products.functions-cGzRziKO.js +1 -0
  26. package/dist/client/assets/profile-CveRcKq2.js +1 -0
  27. package/dist/client/assets/reset-password-ySEjItX_.js +1 -0
  28. package/dist/client/assets/saved-CHtdQDJF.js +1 -0
  29. package/dist/client/assets/search-CXWfET1y.js +1 -0
  30. package/dist/client/assets/signup-CEx90iuV.js +1 -0
  31. package/dist/client/assets/styles-DrNJG0BO.css +1 -0
  32. package/dist/client/assets/terms-VqJ9kX9b.js +1 -0
  33. package/dist/client/assets/update-password-C-d0ix5e.js +1 -0
  34. package/dist/client/assets/vendor-aria-hidden-DvXkyWUv.js +1 -0
  35. package/dist/client/assets/vendor-class-variance-authority-5VPnzWs2.js +1 -0
  36. package/dist/client/assets/vendor-clsx-B-dksMZM.js +1 -0
  37. package/dist/client/assets/vendor-cookie-es-CS0aJGDi.js +1 -0
  38. package/dist/client/assets/vendor-detect-node-es-l0sNRNKZ.js +1 -0
  39. package/dist/client/assets/vendor-floating-ui-core-BlUy28sp.js +1 -0
  40. package/dist/client/assets/vendor-floating-ui-dom-BxK0hn2R.js +1 -0
  41. package/dist/client/assets/vendor-floating-ui-react-dom-Bas3975S.js +1 -0
  42. package/dist/client/assets/vendor-floating-ui-utils-BfYUAVcw.js +1 -0
  43. package/dist/client/assets/vendor-framer-motion-BMdL-cuX.js +9 -0
  44. package/dist/client/assets/vendor-get-nonce-C-Z93AgS.js +1 -0
  45. package/dist/client/assets/vendor-iceberg-js-tWD4K6Lg.js +1 -0
  46. package/dist/client/assets/vendor-lovable.dev-cloud-auth-js-VuzqtJVg.js +1 -0
  47. package/dist/client/assets/vendor-lucide-react-b5K2fehp.js +1 -0
  48. package/dist/client/assets/vendor-motion-dom-BETJamZt.js +1 -0
  49. package/dist/client/assets/vendor-motion-utils-BuWewJbj.js +1 -0
  50. package/dist/client/assets/vendor-radix-ui-primitive-Dc_FVRD7.js +1 -0
  51. package/dist/client/assets/vendor-radix-ui-react-accordion-C22Rgxe9.js +1 -0
  52. package/dist/client/assets/vendor-radix-ui-react-arrow-DMHj2mKI.js +1 -0
  53. package/dist/client/assets/vendor-radix-ui-react-avatar-CVPBkFXg.js +1 -0
  54. package/dist/client/assets/vendor-radix-ui-react-collapsible-BvM-4sKX.js +1 -0
  55. package/dist/client/assets/vendor-radix-ui-react-collection-D9KtqmHm.js +1 -0
  56. package/dist/client/assets/vendor-radix-ui-react-compose-refs-Cvq0AS8Z.js +1 -0
  57. package/dist/client/assets/vendor-radix-ui-react-context-CAqqn5Nx.js +1 -0
  58. package/dist/client/assets/vendor-radix-ui-react-dialog-DZ01vOLq.js +5 -0
  59. package/dist/client/assets/vendor-radix-ui-react-direction-DxZwNuei.js +1 -0
  60. package/dist/client/assets/vendor-radix-ui-react-dismissable-layer-Dqgrs55Y.js +1 -0
  61. package/dist/client/assets/vendor-radix-ui-react-dropdown-menu-0uzvrqkn.js +1 -0
  62. package/dist/client/assets/vendor-radix-ui-react-focus-guards-DgWoZ-fP.js +1 -0
  63. package/dist/client/assets/vendor-radix-ui-react-focus-scope-BLIu5QaL.js +1 -0
  64. package/dist/client/assets/vendor-radix-ui-react-id-bpga_rLa.js +1 -0
  65. package/dist/client/assets/vendor-radix-ui-react-menu-D0qf2r6_.js +1 -0
  66. package/dist/client/assets/vendor-radix-ui-react-popper-BafIylxU.js +1 -0
  67. package/dist/client/assets/vendor-radix-ui-react-portal-BnAsfNCS.js +1 -0
  68. package/dist/client/assets/vendor-radix-ui-react-presence-C-f3UKQ2.js +1 -0
  69. package/dist/client/assets/vendor-radix-ui-react-primitive-zTHwXNoz.js +1 -0
  70. package/dist/client/assets/vendor-radix-ui-react-roving-focus-jyJB8K2E.js +1 -0
  71. package/dist/client/assets/vendor-radix-ui-react-slot-6LXHJrHl.js +1 -0
  72. package/dist/client/assets/vendor-radix-ui-react-use-callback-ref-E91aPc6s.js +1 -0
  73. package/dist/client/assets/vendor-radix-ui-react-use-controllable-state-Ca3eMtxa.js +1 -0
  74. package/dist/client/assets/vendor-radix-ui-react-use-effect-event-CPeX4A3c.js +1 -0
  75. package/dist/client/assets/vendor-radix-ui-react-use-escape-keydown-7n3YsXFo.js +1 -0
  76. package/dist/client/assets/vendor-radix-ui-react-use-is-hydrated-C1PY1qNv.js +1 -0
  77. package/dist/client/assets/vendor-radix-ui-react-use-layout-effect-B3AcGWPy.js +1 -0
  78. package/dist/client/assets/vendor-radix-ui-react-use-size-CXS04sct.js +1 -0
  79. package/dist/client/assets/vendor-react-dom-BnNs-kzm.js +9 -0
  80. package/dist/client/assets/vendor-react-gJPiVnX5.js +1 -0
  81. package/dist/client/assets/vendor-react-remove-scroll-DHKl-IMP.js +4 -0
  82. package/dist/client/assets/vendor-react-remove-scroll-bar-CSjdInc2.js +38 -0
  83. package/dist/client/assets/vendor-react-style-singleton-BqHpkgXn.js +1 -0
  84. package/dist/client/assets/vendor-scheduler-7OC5HNn7.js +1 -0
  85. package/dist/client/assets/vendor-seroval-B_Fur-nl.js +3 -0
  86. package/dist/client/assets/vendor-seroval-plugins-CBHnPkZJ.js +1 -0
  87. package/dist/client/assets/vendor-sonner-71-LdGG1.js +1 -0
  88. package/dist/client/assets/vendor-supabase-auth-js-DWrN-bIx.js +18 -0
  89. package/dist/client/assets/vendor-supabase-functions-js-uY_V-TxC.js +1 -0
  90. package/dist/client/assets/vendor-supabase-phoenix-BzEf37Ve.js +2 -0
  91. package/dist/client/assets/vendor-supabase-postgrest-js-C4rBWbCx.js +4 -0
  92. package/dist/client/assets/vendor-supabase-realtime-js-D6BlOYKE.js +23 -0
  93. package/dist/client/assets/vendor-supabase-storage-js-BG98L3Zz.js +1 -0
  94. package/dist/client/assets/vendor-supabase-supabase-js-DCCzdwBJ.js +1 -0
  95. package/dist/client/assets/vendor-tailwind-merge-Ct12j0u0.js +1 -0
  96. package/dist/client/assets/vendor-tanstack-history-C617CaxG.js +1 -0
  97. package/dist/client/assets/vendor-tanstack-query-core-7wuJJ5ZL.js +1 -0
  98. package/dist/client/assets/vendor-tanstack-react-query-HImzo8sX.js +1 -0
  99. package/dist/client/assets/vendor-tanstack-react-router-sIZLK-LU.js +1 -0
  100. package/dist/client/assets/vendor-tanstack-react-start-client-GiYCfWmf.js +1 -0
  101. package/dist/client/assets/vendor-tanstack-react-store-EvTi3ahh.js +1 -0
  102. package/dist/client/assets/vendor-tanstack-router-core-Cr7bYUZv.js +1 -0
  103. package/dist/client/assets/vendor-tanstack-start-client-core-C-00BBOu.js +2 -0
  104. package/dist/client/assets/vendor-tanstack-start-fn-stubs-l0sNRNKZ.js +1 -0
  105. package/dist/client/assets/vendor-tanstack-store-BC7mA7pq.js +1 -0
  106. package/dist/client/assets/vendor-tslib-Du-meQkk.js +1 -0
  107. package/dist/client/assets/vendor-use-callback-ref-C_fIAtot.js +1 -0
  108. package/dist/client/assets/vendor-use-sidecar-Bh0DDN6h.js +1 -0
  109. package/dist/client/assets/vendor-use-sync-external-store-ZvKHXaIn.js +1 -0
  110. package/dist/client/assets/vendor-vercel-analytics-DwPM5BWs.js +1 -0
  111. package/dist/client/assets/vendor-zod-By9teAtI.js +1 -0
  112. package/dist/client/robots.txt +2 -0
  113. package/dist/server/.dev.vars +5 -0
  114. package/dist/server/.vite/manifest.json +2528 -0
  115. package/dist/server/assets/ProductCard-CUPXy5Eo.js +149 -0
  116. package/dist/server/assets/_tanstack-start-manifest_v-do7vTWFD.js +4 -0
  117. package/dist/server/assets/about-TfKQw0Ga.js +28 -0
  118. package/dist/server/assets/admin-DspfJOJk.js +578 -0
  119. package/dist/server/assets/admin.functions-B78ppWLR.js +645 -0
  120. package/dist/server/assets/admin.functions-BWlKBoTL.js +93 -0
  121. package/dist/server/assets/admin.login-CV7QfeA6.js +139 -0
  122. package/dist/server/assets/affiliate-disclosure-B1wI1cDb.js +86 -0
  123. package/dist/server/assets/auth-middleware-Cn49MidW.js +62 -0
  124. package/dist/server/assets/categories-Z7jnAYZP.js +108 -0
  125. package/dist/server/assets/category._slug-D0XY3FGK.js +112 -0
  126. package/dist/server/assets/contact-IzyONsXs.js +104 -0
  127. package/dist/server/assets/faq-aRhB_CR3.js +133 -0
  128. package/dist/server/assets/hero-bg-BP2eVUIX.jpg +0 -0
  129. package/dist/server/assets/index-BTPHbXw9.js +221 -0
  130. package/dist/server/assets/index-ByJkHkrU.js +30 -0
  131. package/dist/server/assets/login-Dvy5Dm0f.js +175 -0
  132. package/dist/server/assets/logo-pSNfLJQk.png +0 -0
  133. package/dist/server/assets/privacy-B6Wiez1P.js +93 -0
  134. package/dist/server/assets/product-links-CGYEPP56.js +16 -0
  135. package/dist/server/assets/product._id-BpRa-1z0.js +231 -0
  136. package/dist/server/assets/products.functions-DSlmibYN.js +209 -0
  137. package/dist/server/assets/products.functions-DlHkRiqi.js +24 -0
  138. package/dist/server/assets/profile-B0NWzVAZ.js +314 -0
  139. package/dist/server/assets/reset-password-CY-rmqMr.js +115 -0
  140. package/dist/server/assets/saved-7FA6Dbom.js +126 -0
  141. package/dist/server/assets/search-Yw5c_fZa.js +329 -0
  142. package/dist/server/assets/signup-UPzgZo4i.js +143 -0
  143. package/dist/server/assets/styles-DrNJG0BO.css +1 -0
  144. package/dist/server/assets/terms-CMnX95bP.js +89 -0
  145. package/dist/server/assets/update-password-Cr94ea8n.js +131 -0
  146. package/dist/server/assets/vendor-aria-hidden-DPa16MWu.js +122 -0
  147. package/dist/server/assets/vendor-class-variance-authority-0YxJPB9Y.js +44 -0
  148. package/dist/server/assets/vendor-cloudflare-unenv-preset-ya0VEFBz.js +250 -0
  149. package/dist/server/assets/vendor-clsx-DgYk2OaC.js +16 -0
  150. package/dist/server/assets/vendor-cookie-es-DAoofYiI.js +44 -0
  151. package/dist/server/assets/vendor-detect-node-es-l0sNRNKZ.js +1 -0
  152. package/dist/server/assets/vendor-floating-ui-core-3tkK0THV.js +726 -0
  153. package/dist/server/assets/vendor-floating-ui-dom-C-cPtgJv.js +626 -0
  154. package/dist/server/assets/vendor-floating-ui-react-dom-CRG6gBpH.js +319 -0
  155. package/dist/server/assets/vendor-floating-ui-utils-DmXANH-E.js +320 -0
  156. package/dist/server/assets/vendor-framer-motion-X4zAkX3J.js +1979 -0
  157. package/dist/server/assets/vendor-get-nonce-DiSj3EHl.js +9 -0
  158. package/dist/server/assets/vendor-h3-v2-CCobnLY5.js +287 -0
  159. package/dist/server/assets/vendor-iceberg-js-bHCkXyJn.js +534 -0
  160. package/dist/server/assets/vendor-isbot-CZ7WjwVs.js +21 -0
  161. package/dist/server/assets/vendor-lovable.dev-cloud-auth-js-BE03njZw.js +180 -0
  162. package/dist/server/assets/vendor-lucide-react-Ddew6HYb.js +458 -0
  163. package/dist/server/assets/vendor-motion-dom-D2MTwGIG.js +5983 -0
  164. package/dist/server/assets/vendor-motion-utils-LJlIFN6m.js +161 -0
  165. package/dist/server/assets/vendor-radix-ui-primitive-B-mNdDrH.js +11 -0
  166. package/dist/server/assets/vendor-radix-ui-react-accordion-1Izf6x00.js +308 -0
  167. package/dist/server/assets/vendor-radix-ui-react-arrow-B882lnFK.js +23 -0
  168. package/dist/server/assets/vendor-radix-ui-react-avatar-BVgZt2Ab.js +209 -0
  169. package/dist/server/assets/vendor-radix-ui-react-collapsible-DCBbMZiS.js +147 -0
  170. package/dist/server/assets/vendor-radix-ui-react-collection-BZ2srfgU.js +150 -0
  171. package/dist/server/assets/vendor-radix-ui-react-compose-refs-D3qsKVk1.js +39 -0
  172. package/dist/server/assets/vendor-radix-ui-react-context-BVoNDLue.js +78 -0
  173. package/dist/server/assets/vendor-radix-ui-react-dialog-DlxMaNYK.js +406 -0
  174. package/dist/server/assets/vendor-radix-ui-react-direction-Dt_WDL1t.js +9 -0
  175. package/dist/server/assets/vendor-radix-ui-react-dismissable-layer-CjsuPohV.js +210 -0
  176. package/dist/server/assets/vendor-radix-ui-react-dropdown-menu-DVxKumY8.js +263 -0
  177. package/dist/server/assets/vendor-radix-ui-react-focus-guards-D_6NoePE.js +29 -0
  178. package/dist/server/assets/vendor-radix-ui-react-focus-scope-DEIhTJJH.js +206 -0
  179. package/dist/server/assets/vendor-radix-ui-react-id-DFFpgh6m.js +14 -0
  180. package/dist/server/assets/vendor-radix-ui-react-menu-CiTMLwjT.js +893 -0
  181. package/dist/server/assets/vendor-radix-ui-react-popper-23Ye2Vyc.js +286 -0
  182. package/dist/server/assets/vendor-radix-ui-react-portal-CZCH5uPk.js +16 -0
  183. package/dist/server/assets/vendor-radix-ui-react-presence-CaAULlDU.js +128 -0
  184. package/dist/server/assets/vendor-radix-ui-react-primitive-BeOk3UYa.js +124 -0
  185. package/dist/server/assets/vendor-radix-ui-react-roving-focus-DES9GR8l.js +224 -0
  186. package/dist/server/assets/vendor-radix-ui-react-slot-DUhZbzoH.js +103 -0
  187. package/dist/server/assets/vendor-radix-ui-react-use-callback-ref-BynBgohw.js +11 -0
  188. package/dist/server/assets/vendor-radix-ui-react-use-controllable-state-C9KpT6DG.js +69 -0
  189. package/dist/server/assets/vendor-radix-ui-react-use-effect-event-gpNY2xjS.js +1 -0
  190. package/dist/server/assets/vendor-radix-ui-react-use-escape-keydown-CcYRQ2pp.js +17 -0
  191. package/dist/server/assets/vendor-radix-ui-react-use-is-hydrated-D_LcBPXY.js +15 -0
  192. package/dist/server/assets/vendor-radix-ui-react-use-layout-effect-1LNLXAjr.js +6 -0
  193. package/dist/server/assets/vendor-radix-ui-react-use-size-D6fiKJQo.js +39 -0
  194. package/dist/server/assets/vendor-react-DvBrY0qp.js +511 -0
  195. package/dist/server/assets/vendor-react-dom-yvMLPM0j.js +10484 -0
  196. package/dist/server/assets/vendor-react-remove-scroll-BNtiEvVN.js +328 -0
  197. package/dist/server/assets/vendor-react-remove-scroll-bar-hLqRASRk.js +82 -0
  198. package/dist/server/assets/vendor-react-style-singleton-BXjcXskB.js +69 -0
  199. package/dist/server/assets/vendor-rou3-3NaGPdI8.js +8 -0
  200. package/dist/server/assets/vendor-seroval-dJyC-Zhz.js +1775 -0
  201. package/dist/server/assets/vendor-seroval-plugins-Pq_U2meB.js +58 -0
  202. package/dist/server/assets/vendor-sonner-CqbjhsRh.js +1086 -0
  203. package/dist/server/assets/vendor-srvx-BA-baEX9.js +6 -0
  204. package/dist/server/assets/vendor-supabase-auth-js-D4xjVprw.js +7602 -0
  205. package/dist/server/assets/vendor-supabase-functions-js-sWy4UYn1.js +322 -0
  206. package/dist/server/assets/vendor-supabase-phoenix-Bw3Uh2Nn.js +1777 -0
  207. package/dist/server/assets/vendor-supabase-postgrest-js-AO-BXa7I.js +4938 -0
  208. package/dist/server/assets/vendor-supabase-realtime-js-BtdNgJbm.js +2111 -0
  209. package/dist/server/assets/vendor-supabase-storage-js-Dk_MrPYO.js +2679 -0
  210. package/dist/server/assets/vendor-supabase-supabase-js-D1EEtG3j.js +697 -0
  211. package/dist/server/assets/vendor-tailwind-merge-BHb_obmC.js +3255 -0
  212. package/dist/server/assets/vendor-tanstack-history-C4pKJmkt.js +204 -0
  213. package/dist/server/assets/vendor-tanstack-query-core-PwwTR5ld.js +2552 -0
  214. package/dist/server/assets/vendor-tanstack-react-query-hhHzXAK1.js +190 -0
  215. package/dist/server/assets/vendor-tanstack-react-router-XzqpA65A.js +1120 -0
  216. package/dist/server/assets/vendor-tanstack-react-start-RvWUpvat.js +37 -0
  217. package/dist/server/assets/vendor-tanstack-react-start-client-gpNY2xjS.js +1 -0
  218. package/dist/server/assets/vendor-tanstack-react-start-server-uj_Y9pEN.js +15 -0
  219. package/dist/server/assets/vendor-tanstack-react-store-gpNY2xjS.js +1 -0
  220. package/dist/server/assets/vendor-tanstack-router-core-6wywV3KN.js +4252 -0
  221. package/dist/server/assets/vendor-tanstack-start-client-core-DoOKV2pA.js +1741 -0
  222. package/dist/server/assets/vendor-tanstack-start-fn-stubs-l0sNRNKZ.js +1 -0
  223. package/dist/server/assets/vendor-tanstack-start-server-core-CsAstXv7.js +1421 -0
  224. package/dist/server/assets/vendor-tanstack-start-storage-context-DgH9hIJT.js +17 -0
  225. package/dist/server/assets/vendor-tanstack-store-l0sNRNKZ.js +1 -0
  226. package/dist/server/assets/vendor-tslib-_8ICaZ64.js +67 -0
  227. package/dist/server/assets/vendor-unenv-DUvF4YIF.js +544 -0
  228. package/dist/server/assets/vendor-use-callback-ref-DMFDRvmi.js +66 -0
  229. package/dist/server/assets/vendor-use-sidecar-DG1tHua4.js +106 -0
  230. package/dist/server/assets/vendor-use-sync-external-store-rZ8vi0It.js +64 -0
  231. package/dist/server/assets/vendor-vercel-analytics-oP8BDp0L.js +168 -0
  232. package/dist/server/assets/vendor-zod-BRyQdbC-.js +3580 -0
  233. package/dist/server/index.js +158 -0
  234. package/dist/server/wrangler.json +1 -0
  235. package/enable-powershell.ps1 +7 -0
  236. package/eslint.config.js +41 -0
  237. package/lint.bat +4 -0
  238. package/package.json +95 -0
  239. package/public/robots.txt +2 -0
  240. package/run-npm-build.cjs +20 -0
  241. package/run-npm-build.js +20 -0
  242. package/src/assets/hero-bg.jpg +0 -0
  243. package/src/assets/logo.png +0 -0
  244. package/src/components/scrollsy/Footer.tsx +68 -0
  245. package/src/components/scrollsy/LiveTicker.tsx +31 -0
  246. package/src/components/scrollsy/Logo.tsx +28 -0
  247. package/src/components/scrollsy/Nav.tsx +255 -0
  248. package/src/components/scrollsy/ProductCard.tsx +190 -0
  249. package/src/components/scrollsy/ProductFilters.tsx +226 -0
  250. package/src/components/scrollsy/SupportWidget.tsx +197 -0
  251. package/src/components/ui/accordion.tsx +51 -0
  252. package/src/components/ui/alert-dialog.tsx +115 -0
  253. package/src/components/ui/alert.tsx +49 -0
  254. package/src/components/ui/aspect-ratio.tsx +5 -0
  255. package/src/components/ui/avatar.tsx +47 -0
  256. package/src/components/ui/badge.tsx +32 -0
  257. package/src/components/ui/breadcrumb.tsx +101 -0
  258. package/src/components/ui/button.tsx +49 -0
  259. package/src/components/ui/calendar.tsx +177 -0
  260. package/src/components/ui/card.tsx +55 -0
  261. package/src/components/ui/carousel.tsx +240 -0
  262. package/src/components/ui/chart.tsx +331 -0
  263. package/src/components/ui/checkbox.tsx +26 -0
  264. package/src/components/ui/collapsible.tsx +11 -0
  265. package/src/components/ui/command.tsx +143 -0
  266. package/src/components/ui/context-menu.tsx +187 -0
  267. package/src/components/ui/dialog.tsx +104 -0
  268. package/src/components/ui/drawer.tsx +98 -0
  269. package/src/components/ui/dropdown-menu.tsx +188 -0
  270. package/src/components/ui/form.tsx +171 -0
  271. package/src/components/ui/hover-card.tsx +27 -0
  272. package/src/components/ui/input-otp.tsx +69 -0
  273. package/src/components/ui/input.tsx +22 -0
  274. package/src/components/ui/label.tsx +21 -0
  275. package/src/components/ui/menubar.tsx +229 -0
  276. package/src/components/ui/navigation-menu.tsx +120 -0
  277. package/src/components/ui/pagination.tsx +98 -0
  278. package/src/components/ui/popover.tsx +31 -0
  279. package/src/components/ui/progress.tsx +25 -0
  280. package/src/components/ui/radio-group.tsx +36 -0
  281. package/src/components/ui/resizable.tsx +37 -0
  282. package/src/components/ui/scroll-area.tsx +44 -0
  283. package/src/components/ui/select.tsx +152 -0
  284. package/src/components/ui/separator.tsx +24 -0
  285. package/src/components/ui/sheet.tsx +122 -0
  286. package/src/components/ui/sidebar.tsx +744 -0
  287. package/src/components/ui/skeleton.tsx +7 -0
  288. package/src/components/ui/slider.tsx +23 -0
  289. package/src/components/ui/sonner.tsx +23 -0
  290. package/src/components/ui/switch.tsx +27 -0
  291. package/src/components/ui/table.tsx +94 -0
  292. package/src/components/ui/tabs.tsx +53 -0
  293. package/src/components/ui/textarea.tsx +21 -0
  294. package/src/components/ui/toggle-group.tsx +57 -0
  295. package/src/components/ui/toggle.tsx +42 -0
  296. package/src/components/ui/tooltip.tsx +32 -0
  297. package/src/hooks/use-auth.ts +26 -0
  298. package/src/hooks/use-mobile.tsx +19 -0
  299. package/src/integrations/lovable/index.ts +41 -0
  300. package/src/lib/admin.functions.ts +564 -0
  301. package/src/lib/error-capture.ts +27 -0
  302. package/src/lib/error-page.ts +30 -0
  303. package/src/lib/product-links.ts +39 -0
  304. package/src/lib/products.functions.ts +101 -0
  305. package/src/lib/utils.ts +6 -0
  306. package/src/routeTree.gen.ts +480 -0
  307. package/src/router.tsx +16 -0
  308. package/src/routes/__root.tsx +177 -0
  309. package/src/routes/about.tsx +66 -0
  310. package/src/routes/admin.login.tsx +95 -0
  311. package/src/routes/admin.tsx +811 -0
  312. package/src/routes/affiliate-disclosure.tsx +35 -0
  313. package/src/routes/categories.tsx +57 -0
  314. package/src/routes/category.$slug.tsx +51 -0
  315. package/src/routes/contact.tsx +69 -0
  316. package/src/routes/faq.tsx +63 -0
  317. package/src/routes/index.tsx +269 -0
  318. package/src/routes/login.tsx +160 -0
  319. package/src/routes/privacy.tsx +39 -0
  320. package/src/routes/product.$id.tsx +212 -0
  321. package/src/routes/profile.tsx +393 -0
  322. package/src/routes/reset-password.tsx +71 -0
  323. package/src/routes/saved.tsx +83 -0
  324. package/src/routes/search.tsx +136 -0
  325. package/src/routes/signup.tsx +108 -0
  326. package/src/routes/sitemap[.]xml.ts +34 -0
  327. package/src/routes/terms.tsx +40 -0
  328. package/src/routes/update-password.tsx +91 -0
  329. package/src/server.ts +80 -0
  330. package/src/start.ts +24 -0
  331. package/src/styles.css +333 -0
  332. package/terminal-test-output.txt +1 -0
  333. package/tsconfig.json +27 -0
  334. package/vercel.json +26 -0
  335. package/vite.config.ts +38 -0
  336. package/wrangler.jsonc +7 -0
@@ -0,0 +1,177 @@
1
+ import { QueryClient, QueryClientProvider, useQueryClient } from "@tanstack/react-query";
2
+ import {
3
+ Outlet,
4
+ Link,
5
+ createRootRouteWithContext,
6
+ useRouter,
7
+ HeadContent,
8
+ Scripts,
9
+ } from "@tanstack/react-router";
10
+ import { useEffect } from "react";
11
+ import { Analytics } from "@vercel/analytics/react";
12
+
13
+ import appCss from "../styles.css?url";
14
+ import { Nav } from "@/components/scrollsy/Nav";
15
+ import { Footer } from "@/components/scrollsy/Footer";
16
+ import { SupportWidget } from "@/components/scrollsy/SupportWidget";
17
+ import { Toaster } from "@/components/ui/sonner";
18
+ import { supabase } from "@/integrations/supabase/client";
19
+
20
+ function NotFoundComponent() {
21
+ return (
22
+ <div className="flex min-h-screen items-center justify-center px-4">
23
+ <div className="max-w-md text-center">
24
+ <h1 className="text-8xl font-display font-bold text-gradient">404</h1>
25
+ <h2 className="mt-4 text-2xl font-semibold">Page not found</h2>
26
+ <p className="mt-2 text-sm text-muted-foreground">
27
+ This deal might have scrolled off the page.
28
+ </p>
29
+ <div className="mt-6">
30
+ <Link
31
+ to="/"
32
+ className="btn-glow inline-flex items-center justify-center rounded-full px-5 py-2.5 text-sm font-semibold"
33
+ >
34
+ Back to discovery
35
+ </Link>
36
+ </div>
37
+ </div>
38
+ </div>
39
+ );
40
+ }
41
+
42
+ function ErrorComponent({ error, reset }: { error: Error; reset: () => void }) {
43
+ console.error(error);
44
+ const router = useRouter();
45
+ return (
46
+ <div className="flex min-h-screen items-center justify-center px-4">
47
+ <div className="max-w-md text-center glass-strong rounded-3xl p-8">
48
+ <h1 className="text-xl font-semibold">Something went wrong</h1>
49
+ <p className="mt-2 text-sm text-muted-foreground">Try again or head home.</p>
50
+ <div className="mt-6 flex flex-wrap justify-center gap-2">
51
+ <button
52
+ onClick={() => {
53
+ router.invalidate();
54
+ reset();
55
+ }}
56
+ className="btn-glow rounded-full px-4 py-2 text-sm font-semibold"
57
+ >
58
+ Try again
59
+ </button>
60
+ <a
61
+ href="/"
62
+ className="rounded-full border border-white/10 px-4 py-2 text-sm hover:bg-white/5"
63
+ >
64
+ Go home
65
+ </a>
66
+ </div>
67
+ </div>
68
+ </div>
69
+ );
70
+ }
71
+
72
+ export const Route = createRootRouteWithContext<{ queryClient: QueryClient }>()({
73
+ head: () => ({
74
+ meta: [
75
+ { charSet: "utf-8" },
76
+ { name: "viewport", content: "width=device-width, initial-scale=1" },
77
+ { title: "Scrollsy — Scroll. Discover. Save." },
78
+ {
79
+ name: "description",
80
+ content:
81
+ "Scrollsy is the visual marketplace for viral gadgets, hidden gems, and trending finds. Scroll, discover, and save deals from across the web.",
82
+ },
83
+ { name: "author", content: "Scrollsy" },
84
+ { name: "theme-color", content: "#0a0a14" },
85
+ { property: "og:title", content: "Scrollsy — Scroll. Discover. Save." },
86
+ {
87
+ property: "og:description",
88
+ content:
89
+ "Scrollsy is the visual marketplace for viral gadgets, hidden gems, and trending finds. Scroll, discover, and save deals from across the web.",
90
+ },
91
+ { property: "og:type", content: "website" },
92
+ { name: "twitter:card", content: "summary_large_image" },
93
+ { name: "twitter:site", content: "@scrollsy" },
94
+ { name: "twitter:title", content: "Scrollsy — Scroll. Discover. Save." },
95
+ {
96
+ name: "twitter:description",
97
+ content:
98
+ "Scrollsy is the visual marketplace for viral gadgets, hidden gems, and trending finds. Scroll, discover, and save deals from across the web.",
99
+ },
100
+ {
101
+ property: "og:image",
102
+ content:
103
+ "https://storage.googleapis.com/gpt-engineer-file-uploads/attachments/og-images/65d9820e-6b8c-4ad9-8991-3bc47757ff5e",
104
+ },
105
+ {
106
+ name: "twitter:image",
107
+ content:
108
+ "https://storage.googleapis.com/gpt-engineer-file-uploads/attachments/og-images/65d9820e-6b8c-4ad9-8991-3bc47757ff5e",
109
+ },
110
+ ],
111
+ links: [{ rel: "stylesheet", href: appCss }],
112
+ }),
113
+ shellComponent: RootShell,
114
+ component: RootComponent,
115
+ notFoundComponent: NotFoundComponent,
116
+ errorComponent: ErrorComponent,
117
+ });
118
+
119
+ function RootShell({ children }: { children: React.ReactNode }) {
120
+ useEffect(() => {
121
+ if (typeof window === "undefined" || !("serviceWorker" in navigator)) return;
122
+ navigator.serviceWorker.register("/sw.js").catch(() => undefined);
123
+ }, []);
124
+
125
+ return (
126
+ <html lang="en" className="dark">
127
+ <head>
128
+ <HeadContent />
129
+ <link
130
+ rel="stylesheet"
131
+ href="https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;600;700&family=DM+Sans:wght@400;500;600;700&display=swap"
132
+ />
133
+ <link rel="manifest" href="/manifest.webmanifest" />
134
+ <meta name="apple-mobile-web-app-capable" content="yes" />
135
+ <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
136
+ </head>
137
+ <body>
138
+ {children}
139
+ <Scripts />
140
+ </body>
141
+ </html>
142
+ );
143
+ }
144
+
145
+ function AuthInvalidator() {
146
+ const router = useRouter();
147
+ const qc = useQueryClient();
148
+ useEffect(() => {
149
+ const {
150
+ data: { subscription },
151
+ } = supabase.auth.onAuthStateChange(() => {
152
+ router.invalidate();
153
+ qc.invalidateQueries();
154
+ });
155
+ return () => subscription.unsubscribe();
156
+ }, [router, qc]);
157
+ return null;
158
+ }
159
+
160
+ function RootComponent() {
161
+ const { queryClient } = Route.useRouteContext();
162
+ return (
163
+ <QueryClientProvider client={queryClient}>
164
+ <AuthInvalidator />
165
+ <div className="min-h-screen flex flex-col">
166
+ <Nav />
167
+ <main className="flex-1">
168
+ <Outlet />
169
+ </main>
170
+ <Footer />
171
+ </div>
172
+ <SupportWidget />
173
+ <Toaster theme="dark" position="bottom-right" />
174
+ <Analytics />
175
+ </QueryClientProvider>
176
+ );
177
+ }
@@ -0,0 +1,66 @@
1
+ import { createFileRoute } from "@tanstack/react-router";
2
+
3
+ export const Route = createFileRoute("/about")({
4
+ head: () => ({
5
+ meta: [
6
+ { title: "About · Scrollsy" },
7
+ {
8
+ name: "description",
9
+ content:
10
+ "Scrollsy is the visual marketplace for trending products, viral finds and smart shopping discoveries.",
11
+ },
12
+ ],
13
+ links: [{ rel: "canonical", href: "/about" }],
14
+ }),
15
+ component: () => (
16
+ <Prose
17
+ title="The Scrollsy story"
18
+ subtitle="Built for the way Gen Z actually discovers products."
19
+ >
20
+ <p>
21
+ Scrollsy is a visual product discovery platform. We curate viral gadgets, smart shopping
22
+ finds and hidden deals from across the web — and present them in a feed that's built for
23
+ endless, addictive scrolling.
24
+ </p>
25
+ <p>
26
+ We started Scrollsy because online shopping was broken. Marketplaces feel like spreadsheets.
27
+ Social feeds bury the good stuff between ads. We wanted a place where the products feel like
28
+ the content — beautiful, surprising, share-worthy.
29
+ </p>
30
+ <h2>What we believe</h2>
31
+ <ul>
32
+ <li>Great product discovery feels like inspiration, not advertising.</li>
33
+ <li>Affordable doesn't have to mean cheap.</li>
34
+ <li>Trends move fast — the feed should too.</li>
35
+ </ul>
36
+ <h2>How it works</h2>
37
+ <p>
38
+ Every product on Scrollsy links out to a trusted retailer through an affiliate link. You buy
39
+ directly from the store, and Scrollsy may earn a small commission. It costs you nothing
40
+ extra and helps keep the platform free.
41
+ </p>
42
+ </Prose>
43
+ ),
44
+ });
45
+
46
+ export function Prose({
47
+ title,
48
+ subtitle,
49
+ children,
50
+ }: {
51
+ title: string;
52
+ subtitle?: string;
53
+ children: React.ReactNode;
54
+ }) {
55
+ return (
56
+ <div className="max-w-3xl mx-auto px-4 pt-12">
57
+ <h1 className="font-display text-4xl md:text-5xl font-bold tracking-tight">
58
+ <span className="text-gradient">{title}</span>
59
+ </h1>
60
+ {subtitle && <p className="text-lg text-muted-foreground mt-3">{subtitle}</p>}
61
+ <div className="prose prose-invert mt-8 space-y-4 [&_h2]:font-display [&_h2]:text-2xl [&_h2]:font-bold [&_h2]:mt-10 [&_h2]:mb-2 [&_ul]:list-disc [&_ul]:pl-5 [&_ul]:space-y-1 [&_p]:text-muted-foreground [&_li]:text-muted-foreground">
62
+ {children}
63
+ </div>
64
+ </div>
65
+ );
66
+ }
@@ -0,0 +1,95 @@
1
+ import { createFileRoute, Link, useNavigate } from "@tanstack/react-router";
2
+ import { useState } from "react";
3
+ import { useServerFn } from "@tanstack/react-start";
4
+ import { supabase } from "@/integrations/supabase/client";
5
+ import { verifyAdminId } from "@/lib/admin.functions";
6
+ import { Logo } from "@/components/scrollsy/Logo";
7
+ import { Field } from "@/routes/login";
8
+ import { Mail, Lock, Shield, KeyRound } from "lucide-react";
9
+ import { toast } from "sonner";
10
+
11
+ export const Route = createFileRoute("/admin/login")({
12
+ head: () => ({
13
+ meta: [{ title: "Admin sign-in · Scrollsy" }, { name: "robots", content: "noindex" }],
14
+ }),
15
+ component: AdminLogin,
16
+ });
17
+
18
+ function AdminLogin() {
19
+ const nav = useNavigate();
20
+ const verifyFn = useServerFn(verifyAdminId);
21
+ const [adminId, setAdminId] = useState("");
22
+ const [email, setEmail] = useState("");
23
+ const [password, setPassword] = useState("");
24
+ const [loading, setLoading] = useState(false);
25
+
26
+ const onSubmit = async (e: React.FormEvent) => {
27
+ e.preventDefault();
28
+ setLoading(true);
29
+ try {
30
+ const { error } = await supabase.auth.signInWithPassword({ email, password });
31
+ if (error) throw new Error(error.message);
32
+ await verifyFn({ data: { admin_id: adminId.trim() } });
33
+ toast.success("Welcome, admin");
34
+ nav({ to: "/admin" });
35
+ } catch (err: any) {
36
+ await supabase.auth.signOut();
37
+ toast.error(err.message ?? "Sign-in failed");
38
+ } finally {
39
+ setLoading(false);
40
+ }
41
+ };
42
+
43
+ return (
44
+ <div className="min-h-[80vh] flex items-center justify-center px-4 py-16">
45
+ <div className="w-full max-w-md glass-strong rounded-3xl p-8 shadow-elevated animate-scale-in">
46
+ <div className="flex justify-center mb-2">
47
+ <Logo size={40} />
48
+ </div>
49
+ <div className="inline-flex items-center gap-2 mx-auto mt-4 px-3 py-1 rounded-full bg-brand-magenta/15 text-brand-magenta text-xs font-semibold w-fit block">
50
+ <Shield className="w-3.5 h-3.5" /> Restricted area
51
+ </div>
52
+ <h1 className="font-display text-3xl font-bold text-center mt-3">Admin sign-in</h1>
53
+ <p className="text-center text-sm text-muted-foreground mt-1">
54
+ Enter your assigned Admin ID along with your email and password.
55
+ </p>
56
+
57
+ <form onSubmit={onSubmit} className="space-y-3 mt-6">
58
+ <Field
59
+ icon={<KeyRound className="w-4 h-4" />}
60
+ value={adminId}
61
+ onChange={setAdminId}
62
+ placeholder="Admin ID"
63
+ />
64
+ <Field
65
+ icon={<Mail className="w-4 h-4" />}
66
+ type="email"
67
+ value={email}
68
+ onChange={setEmail}
69
+ placeholder="Admin email"
70
+ />
71
+ <Field
72
+ icon={<Lock className="w-4 h-4" />}
73
+ type="password"
74
+ value={password}
75
+ onChange={setPassword}
76
+ placeholder="Password"
77
+ />
78
+ <button
79
+ disabled={loading || !adminId || !email || !password}
80
+ className="btn-glow w-full rounded-full py-3 font-semibold text-sm disabled:opacity-60"
81
+ >
82
+ {loading ? "Verifying…" : "Sign in as admin"}
83
+ </button>
84
+ </form>
85
+
86
+ <p className="mt-6 text-xs text-center text-muted-foreground">
87
+ Not an admin?{" "}
88
+ <Link to="/login" className="text-foreground font-semibold">
89
+ Regular sign-in
90
+ </Link>
91
+ </p>
92
+ </div>
93
+ </div>
94
+ );
95
+ }