virastack 0.0.1 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (447) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +94 -18
  3. package/bin/virastack.js +7 -0
  4. package/package.json +43 -9
  5. package/src/commands/add.js +64 -0
  6. package/src/commands/init.js +286 -0
  7. package/src/i18n.js +231 -0
  8. package/src/index.js +64 -0
  9. package/src/utils/args.js +60 -0
  10. package/src/utils/copy-template.js +81 -0
  11. package/src/utils/exec.js +29 -0
  12. package/src/utils/git.js +38 -0
  13. package/src/utils/is-online.js +14 -0
  14. package/src/utils/package-info.js +12 -0
  15. package/src/utils/package-manager.js +33 -0
  16. package/src/utils/setup-env.js +25 -0
  17. package/src/utils/telemetry.js +86 -0
  18. package/src/utils/tools.js +48 -0
  19. package/src/utils/update-package-json.js +44 -0
  20. package/src/utils/update-readme.js +25 -0
  21. package/src/utils/validate-project-name.js +26 -0
  22. package/templates/nextjs/.changeset/README.md +8 -0
  23. package/templates/nextjs/.changeset/config.json +11 -0
  24. package/templates/nextjs/.env.example +6 -0
  25. package/templates/nextjs/.env.local +6 -0
  26. package/templates/nextjs/.eslintcache +1 -0
  27. package/templates/nextjs/.github/workflows/ci.yml +41 -0
  28. package/templates/nextjs/.husky/commit-msg +1 -0
  29. package/templates/nextjs/.husky/pre-commit +1 -0
  30. package/templates/nextjs/.husky/pre-push +1 -0
  31. package/templates/nextjs/.prettierignore +6 -0
  32. package/templates/nextjs/.prettierrc +42 -0
  33. package/templates/nextjs/.vscode/extensions.json +7 -0
  34. package/templates/nextjs/.vscode/settings.json +20 -0
  35. package/templates/nextjs/LICENSE +21 -0
  36. package/templates/nextjs/README.md +202 -0
  37. package/templates/nextjs/_gitignore +45 -0
  38. package/templates/nextjs/commitlint.config.js +6 -0
  39. package/templates/nextjs/eslint.config.mjs +27 -0
  40. package/templates/nextjs/knip.config.js +25 -0
  41. package/templates/nextjs/next-env.d.ts +6 -0
  42. package/templates/nextjs/next.config.ts +39 -0
  43. package/templates/nextjs/package.json +115 -0
  44. package/templates/nextjs/pnpm-lock.yaml +6467 -0
  45. package/templates/nextjs/pnpm-workspace.yaml +3 -0
  46. package/templates/nextjs/postcss.config.mjs +7 -0
  47. package/templates/nextjs/public/favicon.ico +0 -0
  48. package/templates/nextjs/public/llms.txt +96 -0
  49. package/templates/nextjs/public/logo.png +0 -0
  50. package/templates/nextjs/public/logo.webp +0 -0
  51. package/templates/nextjs/public/og.png +0 -0
  52. package/templates/nextjs/src/app/error.tsx +34 -0
  53. package/templates/nextjs/src/app/favicon.ico +0 -0
  54. package/templates/nextjs/src/app/global-error.tsx +32 -0
  55. package/templates/nextjs/src/app/layout.tsx +37 -0
  56. package/templates/nextjs/src/app/loading.tsx +12 -0
  57. package/templates/nextjs/src/app/manifest.ts +22 -0
  58. package/templates/nextjs/src/app/not-found.tsx +18 -0
  59. package/templates/nextjs/src/app/page.tsx +5 -0
  60. package/templates/nextjs/src/app/robots.ts +13 -0
  61. package/templates/nextjs/src/app/sitemap.ts +14 -0
  62. package/templates/nextjs/src/components/shared/ThemeToggle.tsx +30 -0
  63. package/templates/nextjs/src/components/ui/avatar.tsx +54 -0
  64. package/templates/nextjs/src/components/ui/button.tsx +46 -0
  65. package/templates/nextjs/src/components/ui/dialog.tsx +107 -0
  66. package/templates/nextjs/src/components/ui/field.tsx +24 -0
  67. package/templates/nextjs/src/components/ui/index.ts +27 -0
  68. package/templates/nextjs/src/components/ui/input.tsx +23 -0
  69. package/templates/nextjs/src/components/ui/label.tsx +17 -0
  70. package/templates/nextjs/src/components/ui/skeleton.tsx +13 -0
  71. package/templates/nextjs/src/components/ui/table.tsx +94 -0
  72. package/templates/nextjs/src/components/ui/tabs.tsx +46 -0
  73. package/templates/nextjs/src/config/seo.config.ts +37 -0
  74. package/templates/nextjs/src/config/site.config.ts +15 -0
  75. package/templates/nextjs/src/constants/index.ts +5 -0
  76. package/templates/nextjs/src/env.ts +41 -0
  77. package/templates/nextjs/src/features/landing/api/get-users.api.ts +7 -0
  78. package/templates/nextjs/src/features/landing/api/index.ts +2 -0
  79. package/templates/nextjs/src/features/landing/api/query-keys.ts +7 -0
  80. package/templates/nextjs/src/features/landing/components/CartDemo.tsx +66 -0
  81. package/templates/nextjs/src/features/landing/components/Features.tsx +39 -0
  82. package/templates/nextjs/src/features/landing/components/Hero.tsx +65 -0
  83. package/templates/nextjs/src/features/landing/components/LandingPage.tsx +17 -0
  84. package/templates/nextjs/src/features/landing/components/ProjectFormDemo.tsx +62 -0
  85. package/templates/nextjs/src/features/landing/components/Reveal.tsx +83 -0
  86. package/templates/nextjs/src/features/landing/components/Showcase.tsx +66 -0
  87. package/templates/nextjs/src/features/landing/components/UsersDemo.tsx +188 -0
  88. package/templates/nextjs/src/features/landing/data/features.data.tsx +47 -0
  89. package/templates/nextjs/src/features/landing/data/index.ts +1 -0
  90. package/templates/nextjs/src/features/landing/helpers/get-initials.ts +15 -0
  91. package/templates/nextjs/src/features/landing/helpers/index.ts +7 -0
  92. package/templates/nextjs/src/features/landing/helpers/motion.ts +21 -0
  93. package/templates/nextjs/src/features/landing/hooks/index.ts +1 -0
  94. package/templates/nextjs/src/features/landing/hooks/use-users.ts +16 -0
  95. package/templates/nextjs/src/features/landing/icons/index.ts +6 -0
  96. package/templates/nextjs/src/features/landing/icons/nextjs.tsx +68 -0
  97. package/templates/nextjs/src/features/landing/icons/react-hook-form.tsx +18 -0
  98. package/templates/nextjs/src/features/landing/icons/react.tsx +20 -0
  99. package/templates/nextjs/src/features/landing/icons/tailwind.tsx +14 -0
  100. package/templates/nextjs/src/features/landing/icons/tanstack.tsx +321 -0
  101. package/templates/nextjs/src/features/landing/icons/typescript.tsx +16 -0
  102. package/templates/nextjs/src/features/landing/index.ts +1 -0
  103. package/templates/nextjs/src/features/landing/schemas/index.ts +1 -0
  104. package/templates/nextjs/src/features/landing/schemas/project.schema.ts +7 -0
  105. package/templates/nextjs/src/features/landing/stores/counter.store.ts +18 -0
  106. package/templates/nextjs/src/features/landing/stores/index.ts +1 -0
  107. package/templates/nextjs/src/features/landing/types/index.ts +1 -0
  108. package/templates/nextjs/src/features/landing/types/user.types.ts +9 -0
  109. package/templates/nextjs/src/helpers/format-date.ts +13 -0
  110. package/templates/nextjs/src/helpers/index.ts +1 -0
  111. package/templates/nextjs/src/hooks/index.ts +5 -0
  112. package/templates/nextjs/src/lib/api.ts +97 -0
  113. package/templates/nextjs/src/lib/query-client.ts +18 -0
  114. package/templates/nextjs/src/lib/utils.ts +12 -0
  115. package/templates/nextjs/src/providers/Providers.tsx +15 -0
  116. package/templates/nextjs/src/providers/QueryProvider.tsx +19 -0
  117. package/templates/nextjs/src/providers/ThemeProvider.tsx +9 -0
  118. package/templates/nextjs/src/providers/index.ts +1 -0
  119. package/templates/nextjs/src/proxy.ts +6 -0
  120. package/templates/nextjs/src/schemas/index.ts +5 -0
  121. package/templates/nextjs/src/stores/index.ts +5 -0
  122. package/templates/nextjs/src/styles/tailwind.css +122 -0
  123. package/templates/nextjs/src/types/site-config.types.ts +10 -0
  124. package/templates/nextjs/tsconfig.json +45 -0
  125. package/templates/nextjs/tsconfig.tsbuildinfo +1 -0
  126. package/templates/tanstack/.changeset/README.md +8 -0
  127. package/templates/tanstack/.changeset/config.json +11 -0
  128. package/templates/tanstack/.env.example +6 -0
  129. package/templates/tanstack/.env.local +6 -0
  130. package/templates/tanstack/.eslintcache +1 -0
  131. package/templates/tanstack/.github/workflows/ci.yml +41 -0
  132. package/templates/tanstack/.husky/commit-msg +1 -0
  133. package/templates/tanstack/.husky/pre-commit +1 -0
  134. package/templates/tanstack/.husky/pre-push +1 -0
  135. package/templates/tanstack/.prettierignore +7 -0
  136. package/templates/tanstack/.prettierrc +41 -0
  137. package/templates/tanstack/.vscode/extensions.json +7 -0
  138. package/templates/tanstack/.vscode/settings.json +22 -0
  139. package/templates/tanstack/LICENSE +21 -0
  140. package/templates/tanstack/README.md +204 -0
  141. package/templates/tanstack/_gitignore +52 -0
  142. package/templates/tanstack/commitlint.config.js +6 -0
  143. package/templates/tanstack/eslint.config.js +28 -0
  144. package/templates/tanstack/knip.config.js +22 -0
  145. package/templates/tanstack/package.json +130 -0
  146. package/templates/tanstack/pnpm-lock.yaml +5835 -0
  147. package/templates/tanstack/pnpm-workspace.yaml +3 -0
  148. package/templates/tanstack/public/favicon.ico +0 -0
  149. package/templates/tanstack/public/llms.txt +86 -0
  150. package/templates/tanstack/public/logo.png +0 -0
  151. package/templates/tanstack/public/logo.webp +0 -0
  152. package/templates/tanstack/public/og.png +0 -0
  153. package/templates/tanstack/src/components/shared/DefaultCatchBoundary.tsx +36 -0
  154. package/templates/tanstack/src/components/shared/NotFound.tsx +18 -0
  155. package/templates/tanstack/src/components/shared/Pending.tsx +13 -0
  156. package/templates/tanstack/src/components/shared/ThemeToggle.tsx +31 -0
  157. package/templates/tanstack/src/components/ui/avatar.tsx +52 -0
  158. package/templates/tanstack/src/components/ui/button.tsx +47 -0
  159. package/templates/tanstack/src/components/ui/dialog.tsx +107 -0
  160. package/templates/tanstack/src/components/ui/field.tsx +24 -0
  161. package/templates/tanstack/src/components/ui/index.ts +27 -0
  162. package/templates/tanstack/src/components/ui/input.tsx +23 -0
  163. package/templates/tanstack/src/components/ui/label.tsx +17 -0
  164. package/templates/tanstack/src/components/ui/skeleton.tsx +13 -0
  165. package/templates/tanstack/src/components/ui/table.tsx +94 -0
  166. package/templates/tanstack/src/components/ui/tabs.tsx +46 -0
  167. package/templates/tanstack/src/config/seo.config.ts +52 -0
  168. package/templates/tanstack/src/config/site.config.ts +15 -0
  169. package/templates/tanstack/src/constants/index.ts +5 -0
  170. package/templates/tanstack/src/env.ts +47 -0
  171. package/templates/tanstack/src/features/landing/api/get-users.api.ts +7 -0
  172. package/templates/tanstack/src/features/landing/api/index.ts +2 -0
  173. package/templates/tanstack/src/features/landing/api/query-keys.ts +7 -0
  174. package/templates/tanstack/src/features/landing/components/CartDemo.tsx +66 -0
  175. package/templates/tanstack/src/features/landing/components/Features.tsx +39 -0
  176. package/templates/tanstack/src/features/landing/components/Hero.tsx +63 -0
  177. package/templates/tanstack/src/features/landing/components/LandingPage.tsx +17 -0
  178. package/templates/tanstack/src/features/landing/components/ProjectFormDemo.tsx +63 -0
  179. package/templates/tanstack/src/features/landing/components/Reveal.tsx +83 -0
  180. package/templates/tanstack/src/features/landing/components/Showcase.tsx +66 -0
  181. package/templates/tanstack/src/features/landing/components/UsersDemo.tsx +191 -0
  182. package/templates/tanstack/src/features/landing/data/features.data.tsx +45 -0
  183. package/templates/tanstack/src/features/landing/data/index.ts +1 -0
  184. package/templates/tanstack/src/features/landing/helpers/get-initials.ts +15 -0
  185. package/templates/tanstack/src/features/landing/helpers/index.ts +7 -0
  186. package/templates/tanstack/src/features/landing/helpers/motion.ts +21 -0
  187. package/templates/tanstack/src/features/landing/hooks/index.ts +1 -0
  188. package/templates/tanstack/src/features/landing/hooks/use-users.ts +19 -0
  189. package/templates/tanstack/src/features/landing/icons/index.ts +5 -0
  190. package/templates/tanstack/src/features/landing/icons/react-hook-form.tsx +18 -0
  191. package/templates/tanstack/src/features/landing/icons/react.tsx +20 -0
  192. package/templates/tanstack/src/features/landing/icons/tailwind.tsx +14 -0
  193. package/templates/tanstack/src/features/landing/icons/tanstack.tsx +321 -0
  194. package/templates/tanstack/src/features/landing/icons/typescript.tsx +16 -0
  195. package/templates/tanstack/src/features/landing/index.ts +1 -0
  196. package/templates/tanstack/src/features/landing/schemas/index.ts +1 -0
  197. package/templates/tanstack/src/features/landing/schemas/project.schema.ts +7 -0
  198. package/templates/tanstack/src/features/landing/stores/counter.store.ts +18 -0
  199. package/templates/tanstack/src/features/landing/stores/index.ts +1 -0
  200. package/templates/tanstack/src/features/landing/types/index.ts +1 -0
  201. package/templates/tanstack/src/features/landing/types/user.types.ts +9 -0
  202. package/templates/tanstack/src/helpers/format-date.ts +13 -0
  203. package/templates/tanstack/src/helpers/index.ts +1 -0
  204. package/templates/tanstack/src/hooks/index.ts +5 -0
  205. package/templates/tanstack/src/lib/api.ts +97 -0
  206. package/templates/tanstack/src/lib/query-client.ts +18 -0
  207. package/templates/tanstack/src/lib/utils.ts +13 -0
  208. package/templates/tanstack/src/providers/Providers.tsx +12 -0
  209. package/templates/tanstack/src/providers/ThemeProvider.tsx +98 -0
  210. package/templates/tanstack/src/providers/devtools.tsx +6 -0
  211. package/templates/tanstack/src/providers/index.ts +1 -0
  212. package/templates/tanstack/src/providers/root-provider.ts +9 -0
  213. package/templates/tanstack/src/routeTree.gen.ts +123 -0
  214. package/templates/tanstack/src/router.tsx +27 -0
  215. package/templates/tanstack/src/routes/__root.tsx +78 -0
  216. package/templates/tanstack/src/routes/index.tsx +13 -0
  217. package/templates/tanstack/src/routes/robots[.]txt.ts +21 -0
  218. package/templates/tanstack/src/routes/site[.]webmanifest.ts +32 -0
  219. package/templates/tanstack/src/routes/sitemap[.]xml.ts +27 -0
  220. package/templates/tanstack/src/schemas/index.ts +5 -0
  221. package/templates/tanstack/src/start.ts +20 -0
  222. package/templates/tanstack/src/stores/index.ts +5 -0
  223. package/templates/tanstack/src/styles/tailwind.css +123 -0
  224. package/templates/tanstack/src/types/site-config.types.ts +10 -0
  225. package/templates/tanstack/tsconfig.json +25 -0
  226. package/templates/tanstack/tsr.config.json +3 -0
  227. package/templates/tanstack/vite.config.ts +12 -0
  228. package/templates-i18n/nextjs/.changeset/README.md +8 -0
  229. package/templates-i18n/nextjs/.changeset/config.json +11 -0
  230. package/templates-i18n/nextjs/.env.example +6 -0
  231. package/templates-i18n/nextjs/.eslintcache +1 -0
  232. package/templates-i18n/nextjs/.github/workflows/ci.yml +41 -0
  233. package/templates-i18n/nextjs/.husky/commit-msg +1 -0
  234. package/templates-i18n/nextjs/.husky/pre-commit +1 -0
  235. package/templates-i18n/nextjs/.husky/pre-push +1 -0
  236. package/templates-i18n/nextjs/.prettierignore +6 -0
  237. package/templates-i18n/nextjs/.prettierrc +42 -0
  238. package/templates-i18n/nextjs/.vscode/extensions.json +7 -0
  239. package/templates-i18n/nextjs/.vscode/settings.json +20 -0
  240. package/templates-i18n/nextjs/LICENSE +21 -0
  241. package/templates-i18n/nextjs/README.md +202 -0
  242. package/templates-i18n/nextjs/_gitignore +45 -0
  243. package/templates-i18n/nextjs/commitlint.config.js +6 -0
  244. package/templates-i18n/nextjs/eslint.config.mjs +27 -0
  245. package/templates-i18n/nextjs/knip.config.js +29 -0
  246. package/templates-i18n/nextjs/next-env.d.ts +6 -0
  247. package/templates-i18n/nextjs/next.config.ts +42 -0
  248. package/templates-i18n/nextjs/package.json +117 -0
  249. package/templates-i18n/nextjs/pnpm-lock.yaml +6854 -0
  250. package/templates-i18n/nextjs/pnpm-workspace.yaml +3 -0
  251. package/templates-i18n/nextjs/postcss.config.mjs +7 -0
  252. package/templates-i18n/nextjs/public/favicon.ico +0 -0
  253. package/templates-i18n/nextjs/public/llms.txt +96 -0
  254. package/templates-i18n/nextjs/public/logo.png +0 -0
  255. package/templates-i18n/nextjs/public/logo.webp +0 -0
  256. package/templates-i18n/nextjs/public/og.png +0 -0
  257. package/templates-i18n/nextjs/src/app/[locale]/error.tsx +34 -0
  258. package/templates-i18n/nextjs/src/app/[locale]/layout.tsx +60 -0
  259. package/templates-i18n/nextjs/src/app/[locale]/loading.tsx +12 -0
  260. package/templates-i18n/nextjs/src/app/[locale]/not-found.tsx +18 -0
  261. package/templates-i18n/nextjs/src/app/[locale]/page.tsx +10 -0
  262. package/templates-i18n/nextjs/src/app/favicon.ico +0 -0
  263. package/templates-i18n/nextjs/src/app/global-error.tsx +32 -0
  264. package/templates-i18n/nextjs/src/app/manifest.ts +22 -0
  265. package/templates-i18n/nextjs/src/app/robots.ts +13 -0
  266. package/templates-i18n/nextjs/src/app/sitemap.ts +14 -0
  267. package/templates-i18n/nextjs/src/components/shared/LanguageSwitcher.tsx +48 -0
  268. package/templates-i18n/nextjs/src/components/shared/ThemeToggle.tsx +30 -0
  269. package/templates-i18n/nextjs/src/components/ui/avatar.tsx +54 -0
  270. package/templates-i18n/nextjs/src/components/ui/button.tsx +46 -0
  271. package/templates-i18n/nextjs/src/components/ui/dialog.tsx +107 -0
  272. package/templates-i18n/nextjs/src/components/ui/field.tsx +24 -0
  273. package/templates-i18n/nextjs/src/components/ui/index.ts +27 -0
  274. package/templates-i18n/nextjs/src/components/ui/input.tsx +23 -0
  275. package/templates-i18n/nextjs/src/components/ui/label.tsx +17 -0
  276. package/templates-i18n/nextjs/src/components/ui/skeleton.tsx +13 -0
  277. package/templates-i18n/nextjs/src/components/ui/table.tsx +94 -0
  278. package/templates-i18n/nextjs/src/components/ui/tabs.tsx +46 -0
  279. package/templates-i18n/nextjs/src/config/seo.config.ts +37 -0
  280. package/templates-i18n/nextjs/src/config/site.config.ts +15 -0
  281. package/templates-i18n/nextjs/src/constants/index.ts +5 -0
  282. package/templates-i18n/nextjs/src/env.ts +41 -0
  283. package/templates-i18n/nextjs/src/features/landing/api/get-users.api.ts +7 -0
  284. package/templates-i18n/nextjs/src/features/landing/api/index.ts +2 -0
  285. package/templates-i18n/nextjs/src/features/landing/api/query-keys.ts +7 -0
  286. package/templates-i18n/nextjs/src/features/landing/components/CartDemo.tsx +68 -0
  287. package/templates-i18n/nextjs/src/features/landing/components/Features.tsx +84 -0
  288. package/templates-i18n/nextjs/src/features/landing/components/Hero.tsx +76 -0
  289. package/templates-i18n/nextjs/src/features/landing/components/LandingPage.tsx +17 -0
  290. package/templates-i18n/nextjs/src/features/landing/components/ProjectFormDemo.tsx +64 -0
  291. package/templates-i18n/nextjs/src/features/landing/components/Reveal.tsx +83 -0
  292. package/templates-i18n/nextjs/src/features/landing/components/Showcase.tsx +83 -0
  293. package/templates-i18n/nextjs/src/features/landing/components/UsersDemo.tsx +191 -0
  294. package/templates-i18n/nextjs/src/features/landing/data/features.data.tsx +47 -0
  295. package/templates-i18n/nextjs/src/features/landing/data/index.ts +1 -0
  296. package/templates-i18n/nextjs/src/features/landing/helpers/get-initials.ts +15 -0
  297. package/templates-i18n/nextjs/src/features/landing/helpers/index.ts +7 -0
  298. package/templates-i18n/nextjs/src/features/landing/helpers/motion.ts +21 -0
  299. package/templates-i18n/nextjs/src/features/landing/hooks/index.ts +1 -0
  300. package/templates-i18n/nextjs/src/features/landing/hooks/use-users.ts +16 -0
  301. package/templates-i18n/nextjs/src/features/landing/icons/index.ts +6 -0
  302. package/templates-i18n/nextjs/src/features/landing/icons/nextjs.tsx +68 -0
  303. package/templates-i18n/nextjs/src/features/landing/icons/react-hook-form.tsx +18 -0
  304. package/templates-i18n/nextjs/src/features/landing/icons/react.tsx +20 -0
  305. package/templates-i18n/nextjs/src/features/landing/icons/tailwind.tsx +14 -0
  306. package/templates-i18n/nextjs/src/features/landing/icons/tanstack.tsx +321 -0
  307. package/templates-i18n/nextjs/src/features/landing/icons/typescript.tsx +16 -0
  308. package/templates-i18n/nextjs/src/features/landing/index.ts +1 -0
  309. package/templates-i18n/nextjs/src/features/landing/schemas/index.ts +1 -0
  310. package/templates-i18n/nextjs/src/features/landing/schemas/project.schema.ts +9 -0
  311. package/templates-i18n/nextjs/src/features/landing/stores/counter.store.ts +18 -0
  312. package/templates-i18n/nextjs/src/features/landing/stores/index.ts +1 -0
  313. package/templates-i18n/nextjs/src/features/landing/types/index.ts +1 -0
  314. package/templates-i18n/nextjs/src/features/landing/types/user.types.ts +9 -0
  315. package/templates-i18n/nextjs/src/helpers/format-date.ts +13 -0
  316. package/templates-i18n/nextjs/src/helpers/index.ts +1 -0
  317. package/templates-i18n/nextjs/src/hooks/index.ts +5 -0
  318. package/templates-i18n/nextjs/src/i18n/request.ts +16 -0
  319. package/templates-i18n/nextjs/src/i18n/routing.ts +11 -0
  320. package/templates-i18n/nextjs/src/lib/api.ts +97 -0
  321. package/templates-i18n/nextjs/src/lib/query-client.ts +18 -0
  322. package/templates-i18n/nextjs/src/lib/utils.ts +12 -0
  323. package/templates-i18n/nextjs/src/messages/en.json +55 -0
  324. package/templates-i18n/nextjs/src/messages/tr.json +55 -0
  325. package/templates-i18n/nextjs/src/providers/Providers.tsx +15 -0
  326. package/templates-i18n/nextjs/src/providers/QueryProvider.tsx +19 -0
  327. package/templates-i18n/nextjs/src/providers/ThemeProvider.tsx +9 -0
  328. package/templates-i18n/nextjs/src/providers/index.ts +1 -0
  329. package/templates-i18n/nextjs/src/proxy.ts +16 -0
  330. package/templates-i18n/nextjs/src/schemas/index.ts +5 -0
  331. package/templates-i18n/nextjs/src/stores/index.ts +5 -0
  332. package/templates-i18n/nextjs/src/styles/tailwind.css +122 -0
  333. package/templates-i18n/nextjs/src/types/site-config.types.ts +10 -0
  334. package/templates-i18n/nextjs/tsconfig.json +45 -0
  335. package/templates-i18n/nextjs/tsconfig.tsbuildinfo +1 -0
  336. package/templates-i18n/tanstack/.changeset/README.md +8 -0
  337. package/templates-i18n/tanstack/.changeset/config.json +11 -0
  338. package/templates-i18n/tanstack/.env.example +6 -0
  339. package/templates-i18n/tanstack/.eslintcache +1 -0
  340. package/templates-i18n/tanstack/.github/workflows/ci.yml +41 -0
  341. package/templates-i18n/tanstack/.husky/commit-msg +1 -0
  342. package/templates-i18n/tanstack/.husky/pre-commit +1 -0
  343. package/templates-i18n/tanstack/.husky/pre-push +1 -0
  344. package/templates-i18n/tanstack/.prettierignore +7 -0
  345. package/templates-i18n/tanstack/.prettierrc +41 -0
  346. package/templates-i18n/tanstack/.vscode/extensions.json +7 -0
  347. package/templates-i18n/tanstack/.vscode/settings.json +22 -0
  348. package/templates-i18n/tanstack/LICENSE +21 -0
  349. package/templates-i18n/tanstack/README.md +204 -0
  350. package/templates-i18n/tanstack/_gitignore +52 -0
  351. package/templates-i18n/tanstack/commitlint.config.js +6 -0
  352. package/templates-i18n/tanstack/eslint.config.js +29 -0
  353. package/templates-i18n/tanstack/knip.config.js +26 -0
  354. package/templates-i18n/tanstack/messages/en.json +65 -0
  355. package/templates-i18n/tanstack/messages/tr.json +65 -0
  356. package/templates-i18n/tanstack/package.json +132 -0
  357. package/templates-i18n/tanstack/pnpm-lock.yaml +5998 -0
  358. package/templates-i18n/tanstack/pnpm-workspace.yaml +3 -0
  359. package/templates-i18n/tanstack/project.inlang/README.md +157 -0
  360. package/templates-i18n/tanstack/project.inlang/settings.json +9 -0
  361. package/templates-i18n/tanstack/public/favicon.ico +0 -0
  362. package/templates-i18n/tanstack/public/llms.txt +86 -0
  363. package/templates-i18n/tanstack/public/logo.png +0 -0
  364. package/templates-i18n/tanstack/public/logo.webp +0 -0
  365. package/templates-i18n/tanstack/public/og.png +0 -0
  366. package/templates-i18n/tanstack/src/components/shared/DefaultCatchBoundary.tsx +36 -0
  367. package/templates-i18n/tanstack/src/components/shared/LanguageSwitcher.tsx +57 -0
  368. package/templates-i18n/tanstack/src/components/shared/NotFound.tsx +18 -0
  369. package/templates-i18n/tanstack/src/components/shared/Pending.tsx +13 -0
  370. package/templates-i18n/tanstack/src/components/shared/ThemeToggle.tsx +31 -0
  371. package/templates-i18n/tanstack/src/components/ui/avatar.tsx +52 -0
  372. package/templates-i18n/tanstack/src/components/ui/button.tsx +47 -0
  373. package/templates-i18n/tanstack/src/components/ui/dialog.tsx +107 -0
  374. package/templates-i18n/tanstack/src/components/ui/field.tsx +24 -0
  375. package/templates-i18n/tanstack/src/components/ui/index.ts +27 -0
  376. package/templates-i18n/tanstack/src/components/ui/input.tsx +23 -0
  377. package/templates-i18n/tanstack/src/components/ui/label.tsx +17 -0
  378. package/templates-i18n/tanstack/src/components/ui/skeleton.tsx +13 -0
  379. package/templates-i18n/tanstack/src/components/ui/table.tsx +94 -0
  380. package/templates-i18n/tanstack/src/components/ui/tabs.tsx +46 -0
  381. package/templates-i18n/tanstack/src/config/seo.config.ts +52 -0
  382. package/templates-i18n/tanstack/src/config/site.config.ts +15 -0
  383. package/templates-i18n/tanstack/src/constants/index.ts +5 -0
  384. package/templates-i18n/tanstack/src/env.ts +47 -0
  385. package/templates-i18n/tanstack/src/features/landing/api/get-users.api.ts +7 -0
  386. package/templates-i18n/tanstack/src/features/landing/api/index.ts +2 -0
  387. package/templates-i18n/tanstack/src/features/landing/api/query-keys.ts +7 -0
  388. package/templates-i18n/tanstack/src/features/landing/components/CartDemo.tsx +67 -0
  389. package/templates-i18n/tanstack/src/features/landing/components/Features.tsx +79 -0
  390. package/templates-i18n/tanstack/src/features/landing/components/Hero.tsx +68 -0
  391. package/templates-i18n/tanstack/src/features/landing/components/LandingPage.tsx +17 -0
  392. package/templates-i18n/tanstack/src/features/landing/components/ProjectFormDemo.tsx +64 -0
  393. package/templates-i18n/tanstack/src/features/landing/components/Reveal.tsx +83 -0
  394. package/templates-i18n/tanstack/src/features/landing/components/Showcase.tsx +81 -0
  395. package/templates-i18n/tanstack/src/features/landing/components/UsersDemo.tsx +191 -0
  396. package/templates-i18n/tanstack/src/features/landing/data/features.data.tsx +45 -0
  397. package/templates-i18n/tanstack/src/features/landing/data/index.ts +1 -0
  398. package/templates-i18n/tanstack/src/features/landing/helpers/get-initials.ts +15 -0
  399. package/templates-i18n/tanstack/src/features/landing/helpers/index.ts +7 -0
  400. package/templates-i18n/tanstack/src/features/landing/helpers/motion.ts +21 -0
  401. package/templates-i18n/tanstack/src/features/landing/hooks/index.ts +1 -0
  402. package/templates-i18n/tanstack/src/features/landing/hooks/use-users.ts +19 -0
  403. package/templates-i18n/tanstack/src/features/landing/icons/index.ts +5 -0
  404. package/templates-i18n/tanstack/src/features/landing/icons/react-hook-form.tsx +18 -0
  405. package/templates-i18n/tanstack/src/features/landing/icons/react.tsx +20 -0
  406. package/templates-i18n/tanstack/src/features/landing/icons/tailwind.tsx +14 -0
  407. package/templates-i18n/tanstack/src/features/landing/icons/tanstack.tsx +321 -0
  408. package/templates-i18n/tanstack/src/features/landing/icons/typescript.tsx +16 -0
  409. package/templates-i18n/tanstack/src/features/landing/index.ts +1 -0
  410. package/templates-i18n/tanstack/src/features/landing/schemas/index.ts +1 -0
  411. package/templates-i18n/tanstack/src/features/landing/schemas/project.schema.ts +10 -0
  412. package/templates-i18n/tanstack/src/features/landing/stores/counter.store.ts +18 -0
  413. package/templates-i18n/tanstack/src/features/landing/stores/index.ts +1 -0
  414. package/templates-i18n/tanstack/src/features/landing/types/index.ts +1 -0
  415. package/templates-i18n/tanstack/src/features/landing/types/user.types.ts +9 -0
  416. package/templates-i18n/tanstack/src/helpers/format-date.ts +13 -0
  417. package/templates-i18n/tanstack/src/helpers/index.ts +1 -0
  418. package/templates-i18n/tanstack/src/hooks/index.ts +5 -0
  419. package/templates-i18n/tanstack/src/lib/api.ts +97 -0
  420. package/templates-i18n/tanstack/src/lib/query-client.ts +18 -0
  421. package/templates-i18n/tanstack/src/lib/utils.ts +13 -0
  422. package/templates-i18n/tanstack/src/paraglide/README.md +162 -0
  423. package/templates-i18n/tanstack/src/providers/Providers.tsx +12 -0
  424. package/templates-i18n/tanstack/src/providers/ThemeProvider.tsx +98 -0
  425. package/templates-i18n/tanstack/src/providers/devtools.tsx +6 -0
  426. package/templates-i18n/tanstack/src/providers/index.ts +1 -0
  427. package/templates-i18n/tanstack/src/providers/root-provider.ts +9 -0
  428. package/templates-i18n/tanstack/src/routeTree.gen.ts +179 -0
  429. package/templates-i18n/tanstack/src/router.tsx +27 -0
  430. package/templates-i18n/tanstack/src/routes/$lang/index.tsx +13 -0
  431. package/templates-i18n/tanstack/src/routes/$lang.tsx +22 -0
  432. package/templates-i18n/tanstack/src/routes/__root.tsx +80 -0
  433. package/templates-i18n/tanstack/src/routes/index.tsx +13 -0
  434. package/templates-i18n/tanstack/src/routes/robots[.]txt.ts +21 -0
  435. package/templates-i18n/tanstack/src/routes/site[.]webmanifest.ts +32 -0
  436. package/templates-i18n/tanstack/src/routes/sitemap[.]xml.ts +27 -0
  437. package/templates-i18n/tanstack/src/schemas/index.ts +5 -0
  438. package/templates-i18n/tanstack/src/server.ts +10 -0
  439. package/templates-i18n/tanstack/src/start.ts +20 -0
  440. package/templates-i18n/tanstack/src/stores/index.ts +5 -0
  441. package/templates-i18n/tanstack/src/styles/tailwind.css +123 -0
  442. package/templates-i18n/tanstack/src/types/site-config.types.ts +10 -0
  443. package/templates-i18n/tanstack/tsconfig.json +26 -0
  444. package/templates-i18n/tanstack/tsr.config.json +3 -0
  445. package/templates-i18n/tanstack/vite.config.ts +31 -0
  446. package/index.js +0 -3
  447. package/public/start.jpg +0 -0
@@ -0,0 +1,14 @@
1
+ import type { ComponentProps } from "react";
2
+
3
+ export function TailwindIcon(props: ComponentProps<"svg">) {
4
+ return (
5
+ <svg fill="none" viewBox="0 0 54 33" aria-hidden {...props}>
6
+ <path
7
+ fill="#38bdf8"
8
+ fillRule="evenodd"
9
+ d="M27 0c-7.2 0-11.7 3.6-13.5 10.8 2.7-3.6 5.85-4.95 9.45-4.05 2.054.513 3.522 2.004 5.147 3.653C30.744 13.09 33.808 16.2 40.5 16.2c7.2 0 11.7-3.6 13.5-10.8-2.7 3.6-5.85 4.95-9.45 4.05-2.054-.513-3.522-2.004-5.147-3.653C36.756 3.11 33.692 0 27 0zM13.5 16.2C6.3 16.2 1.8 19.8 0 27c2.7-3.6 5.85-4.95 9.45-4.05 2.054.514 3.522 2.004 5.147 3.653C17.244 29.29 20.308 32.4 27 32.4c7.2 0 11.7-3.6 13.5-10.8-2.7 3.6-5.85 4.95-9.45 4.05-2.054-.513-3.522-2.004-5.147-3.653C23.256 19.31 20.192 16.2 13.5 16.2z"
10
+ clipRule="evenodd"
11
+ />
12
+ </svg>
13
+ );
14
+ }
@@ -0,0 +1,321 @@
1
+ import type { ComponentProps } from "react";
2
+
3
+ export function TanstackIcon(props: ComponentProps<"svg">) {
4
+ return (
5
+ <svg xmlnsXlink="http://www.w3.org/1999/xlink" viewBox="0 0 633 633" {...props}>
6
+ <defs>
7
+ <linearGradient id="tanstack__b" x1="50%" x2="50%" y1="0%" y2="71.65%">
8
+ <stop offset="0%" stopColor="#6BDAFF" />
9
+ <stop offset="31.922%" stopColor="#F9FFB5" />
10
+ <stop offset="70.627%" stopColor="#FFA770" />
11
+ <stop offset="100%" stopColor="#FF7373" />
12
+ </linearGradient>
13
+ <linearGradient id="tanstack__d" x1="43.996%" x2="53.441%" y1="8.54%" y2="93.872%">
14
+ <stop offset="0%" stopColor="#673800" />
15
+ <stop offset="100%" stopColor="#B65E00" />
16
+ </linearGradient>
17
+ <linearGradient id="tanstack__e" x1="50%" x2="50%" y1="0%" y2="100%">
18
+ <stop offset="0%" stopColor="#2F8A00" />
19
+ <stop offset="100%" stopColor="#90FF57" />
20
+ </linearGradient>
21
+ <linearGradient id="tanstack__f" x1="50%" x2="50%" y1="0%" y2="100%">
22
+ <stop offset="0%" stopColor="#2F8A00" />
23
+ <stop offset="100%" stopColor="#90FF57" />
24
+ </linearGradient>
25
+ <linearGradient id="tanstack__g" x1="50%" x2="50%" y1="0%" y2="100%">
26
+ <stop offset="0%" stopColor="#2F8A00" />
27
+ <stop offset="100%" stopColor="#90FF57" />
28
+ </linearGradient>
29
+ <linearGradient id="tanstack__h" x1="50%" x2="50%" y1="0%" y2="100%">
30
+ <stop offset="0%" stopColor="#2F8A00" />
31
+ <stop offset="100%" stopColor="#90FF57" />
32
+ </linearGradient>
33
+ <linearGradient id="tanstack__i" x1="50%" x2="50%" y1="0%" y2="100%">
34
+ <stop offset="0%" stopColor="#2F8A00" />
35
+ <stop offset="100%" stopColor="#90FF57" />
36
+ </linearGradient>
37
+ <linearGradient id="tanstack__j" x1="50%" x2="50%" y1="0%" y2="100%">
38
+ <stop offset="0%" stopColor="#2F8A00" />
39
+ <stop offset="100%" stopColor="#90FF57" />
40
+ </linearGradient>
41
+ <linearGradient id="tanstack__k" x1="92.9%" x2="8.641%" y1="45.768%" y2="54.892%">
42
+ <stop offset="0%" stopColor="#EE2700" />
43
+ <stop offset="100%" stopColor="#FF008E" />
44
+ </linearGradient>
45
+ <linearGradient id="tanstack__l" x1="61.109%" x2="43.717%" y1="3.633%" y2="43.072%">
46
+ <stop offset="0%" stopColor="#FFF400" />
47
+ <stop offset="100%" stopColor="#3C8700" />
48
+ </linearGradient>
49
+ <linearGradient id="tanstack__m" x1="50%" x2="50%" y1="0%" y2="100%">
50
+ <stop offset="0%" stopColor="#FFDF00" />
51
+ <stop offset="100%" stopColor="#FF9D00" />
52
+ </linearGradient>
53
+ <linearGradient id="tanstack__n" x1="127.279%" x2="0%" y1="49.778%" y2="50.222%">
54
+ <stop offset="0%" stopColor="#FFA400" />
55
+ <stop offset="100%" stopColor="#FF5E00" />
56
+ </linearGradient>
57
+ <linearGradient id="tanstack__o" x1="127.279%" x2="0%" y1="47.531%" y2="52.469%">
58
+ <stop offset="0%" stopColor="#FFA400" />
59
+ <stop offset="100%" stopColor="#FF5E00" />
60
+ </linearGradient>
61
+ <linearGradient id="tanstack__p" x1="127.279%" x2="0%" y1="46.195%" y2="53.805%">
62
+ <stop offset="0%" stopColor="#FFA400" />
63
+ <stop offset="100%" stopColor="#FF5E00" />
64
+ </linearGradient>
65
+ <linearGradient id="tanstack__q" x1="127.279%" x2="0%" y1="35.33%" y2="64.67%">
66
+ <stop offset="0%" stopColor="#FFA400" />
67
+ <stop offset="100%" stopColor="#FF5E00" />
68
+ </linearGradient>
69
+ <linearGradient id="tanstack__r" x1="127.279%" x2="0%" y1="4.875%" y2="95.125%">
70
+ <stop offset="0%" stopColor="#FFA400" />
71
+ <stop offset="100%" stopColor="#FF5E00" />
72
+ </linearGradient>
73
+ <linearGradient id="tanstack__s" x1="78.334%" x2="31.668%" y1="0%" y2="100%">
74
+ <stop offset="0%" stopColor="#FFA400" />
75
+ <stop offset="100%" stopColor="#FF5E00" />
76
+ </linearGradient>
77
+ <linearGradient id="tanstack__t" x1="57.913%" x2="44.88%" y1="0%" y2="100%">
78
+ <stop offset="0%" stopColor="#FFA400" />
79
+ <stop offset="100%" stopColor="#FF5E00" />
80
+ </linearGradient>
81
+ <linearGradient id="tanstack__u" x1="50.495%" x2="49.68%" y1="0%" y2="100%">
82
+ <stop offset="0%" stopColor="#FFA400" />
83
+ <stop offset="100%" stopColor="#FF5E00" />
84
+ </linearGradient>
85
+ <circle id="tanstack__a" cx="308.5" cy="308.5" r="308.5" />
86
+ <circle id="tanstack__v" cx="307.5" cy="308.5" r="316.5" />
87
+ </defs>
88
+ <g fill="none" fillRule="evenodd" transform="translate(9 8)">
89
+ <mask id="tanstack__c" fill="#fff">
90
+ <use xlinkHref="#tanstack__a" />
91
+ </mask>
92
+ <use xlinkHref="#tanstack__a" fill="url(#tanstack__b)" />
93
+ <ellipse
94
+ cx="81.5"
95
+ cy="602.5"
96
+ fill="#015064"
97
+ stroke="#00CFE2"
98
+ strokeWidth="25"
99
+ mask="url(#tanstack__c)"
100
+ rx="214.5"
101
+ ry="185.968"
102
+ />
103
+ <ellipse
104
+ cx="535.5"
105
+ cy="602.5"
106
+ fill="#015064"
107
+ stroke="#00CFE2"
108
+ strokeWidth="25"
109
+ mask="url(#tanstack__c)"
110
+ rx="214.5"
111
+ ry="185.968"
112
+ />
113
+ <ellipse
114
+ cx="81.5"
115
+ cy="640.5"
116
+ fill="#015064"
117
+ stroke="#00A8B8"
118
+ strokeWidth="25"
119
+ mask="url(#tanstack__c)"
120
+ rx="214.5"
121
+ ry="185.968"
122
+ />
123
+ <ellipse
124
+ cx="535.5"
125
+ cy="640.5"
126
+ fill="#015064"
127
+ stroke="#00A8B8"
128
+ strokeWidth="25"
129
+ mask="url(#tanstack__c)"
130
+ rx="214.5"
131
+ ry="185.968"
132
+ />
133
+ <ellipse
134
+ cx="81.5"
135
+ cy="676.5"
136
+ fill="#015064"
137
+ stroke="#007782"
138
+ strokeWidth="25"
139
+ mask="url(#tanstack__c)"
140
+ rx="214.5"
141
+ ry="185.968"
142
+ />
143
+ <ellipse
144
+ cx="535.5"
145
+ cy="676.5"
146
+ fill="#015064"
147
+ stroke="#007782"
148
+ strokeWidth="25"
149
+ mask="url(#tanstack__c)"
150
+ rx="214.5"
151
+ ry="185.968"
152
+ />
153
+ <g mask="url(#tanstack__c)">
154
+ <path
155
+ fill="url(#tanstack__d)"
156
+ stroke="#6E3A00"
157
+ strokeWidth="6.088"
158
+ d="M98.318 88.007c7.691 37.104 16.643 72.442 26.856 106.013 10.212 33.571 25.57 68.934 46.07 106.088l-51.903 11.67c-10.057-60.01-17.232-99.172-21.525-117.487-4.293-18.315-10.989-51.434-20.089-99.357l20.591-6.927"
159
+ transform="scale(-1 1) rotate(25 -300.37 -553.013)"
160
+ />
161
+ <g stroke="#2F8A00">
162
+ <path
163
+ fill="url(#tanstack__e)"
164
+ strokeWidth="9.343"
165
+ d="M108.544 66.538s-13.54-21.305-37.417-27.785c-15.917-4.321-33.933.31-54.048 13.892C33.464 65.975 47.24 73.52 58.405 75.28c16.749 2.64 50.14-8.74 50.14-8.74Z"
166
+ transform="rotate(1 -6061.691 5926.397)"
167
+ />
168
+ <path
169
+ fill="url(#tanstack__f)"
170
+ strokeWidth="9.343"
171
+ d="M108.544 67.138s-47.187-5.997-81.077 19.936C4.873 104.362-3.782 137.794 1.502 187.369c28.42-29.22 48.758-50.836 61.016-64.846 18.387-21.016 46.026-55.385 46.026-55.385Z"
172
+ transform="rotate(1 -6061.691 5926.397)"
173
+ />
174
+ <path
175
+ fill="url(#tanstack__g)"
176
+ strokeWidth="9.343"
177
+ d="M108.544 66.538c-1.96-21.705 3.98-38.018 17.82-48.94C140.203 6.674 154.85.808 170.303 0c-4.865 21.527-12.373 36.314-22.524 44.361-10.151 8.048-23.23 15.44-39.236 22.177Z"
178
+ transform="rotate(1 -6061.691 5926.397)"
179
+ />
180
+ <path
181
+ fill="url(#tanstack__h)"
182
+ strokeWidth="9.343"
183
+ d="M108.544 67.138c29.838-31.486 61.061-42.776 93.669-33.869C234.82 42.176 253.749 60.785 259 89.096c-34.898-3.657-59.974-6.343-75.228-8.058-15.254-1.716-40.33-6.349-75.228-13.9Z"
184
+ transform="rotate(1 -6061.691 5926.397)"
185
+ />
186
+ <path
187
+ fill="url(#tanstack__i)"
188
+ strokeWidth="9.343"
189
+ d="M108.544 67.138c34.868-9.381 64.503-3.658 88.905 17.17 24.402 20.829 39.656 46.686 45.762 77.571-39.626-7.574-68.4-20.115-86.322-37.624a395.051 395.051 0 0 1-48.345-57.117Z"
190
+ transform="rotate(1 -6061.691 5926.397)"
191
+ />
192
+ <path
193
+ fill="url(#tanstack__j)"
194
+ strokeWidth="9.343"
195
+ d="M108.544 67.138C76.206 82.6 57.608 105.366 52.75 135.436c-4.858 30.07-.292 62.89 13.698 98.462 24.873-41.418 38.905-71.368 42.096-89.849 3.191-18.48 3.191-44.118 0-76.91Z"
196
+ transform="rotate(1 -6061.691 5926.397)"
197
+ />
198
+ <path
199
+ strokeLinecap="round"
200
+ strokeWidth="5.91"
201
+ d="M211.284 173.477c-13.851 21.992-23.291 42.022-28.32 60.093-5.03 18.071-8.175 33.143-9.436 45.216"
202
+ />
203
+ <path
204
+ strokeLinecap="round"
205
+ strokeWidth="5.91"
206
+ d="M209.814 176.884c-23.982 2.565-42.792 10.469-56.428 23.714-13.639 13.245-23.483 26.136-29.536 38.674M219.045 167.299c29.028-7.723 50.972-10.173 65.831-7.352 14.859 2.822 26.807 7.659 35.842 14.51M211.31 172.618c20.29 9.106 38.353 19.052 54.186 29.837 15.833 10.786 27.714 20.99 35.643 30.617"
207
+ />
208
+ </g>
209
+ <path
210
+ stroke="#830305"
211
+ strokeLinecap="round"
212
+ strokeLinejoin="bevel"
213
+ strokeWidth="6.937"
214
+ d="m409.379 398.157-23.176 18.556M328.04 375.516l-22.313 28.398M312.904 353.698l53.18 59.816"
215
+ />
216
+ <path
217
+ fill="url(#tanstack__k)"
218
+ d="M67.585 27.463H5.68C1.893 28.148 0 30.38 0 34.16c0 3.78 1.893 6.211 5.68 7.293h67.17l41.751-30.356c2.488-2.646 2.794-5.315.92-8.006s-4.6-3.626-8.177-2.803l-39.76 27.174Z"
219
+ transform="scale(-1 1) rotate(-9 2092.128 2856.854)"
220
+ />
221
+ <path
222
+ fill="#D8D8D8"
223
+ stroke="#FFF"
224
+ strokeLinecap="round"
225
+ strokeLinejoin="bevel"
226
+ strokeWidth="4.414"
227
+ d="m402.861 391.51.471-4.088M382.21 388.752l.472-4.087M361.546 385.404l.485-3.845M337.59 371.883l2.56-2.498M324.276 359.567l2.56-2.497"
228
+ />
229
+ </g>
230
+ <ellipse
231
+ cx="308.5"
232
+ cy="720.5"
233
+ fill="url(#tanstack__l)"
234
+ mask="url(#tanstack__c)"
235
+ rx="266"
236
+ ry="316.5"
237
+ />
238
+ <ellipse
239
+ cx="308.5"
240
+ cy="720.5"
241
+ stroke="#6DA300"
242
+ strokeOpacity=".502"
243
+ strokeWidth="26"
244
+ mask="url(#tanstack__c)"
245
+ rx="253"
246
+ ry="303.5"
247
+ />
248
+ <g mask="url(#tanstack__c)">
249
+ <g transform="translate(389 -32)">
250
+ <circle cx="168.5" cy="113.5" r="113.5" fill="url(#tanstack__m)" />
251
+ <circle
252
+ cx="168.5"
253
+ cy="113.5"
254
+ r="106"
255
+ stroke="#FFC900"
256
+ strokeOpacity=".529"
257
+ strokeWidth="15"
258
+ />
259
+ <path
260
+ stroke="url(#tanstack__n)"
261
+ strokeLinecap="round"
262
+ strokeLinejoin="bevel"
263
+ strokeWidth="12"
264
+ d="M30 113H0"
265
+ />
266
+ <path
267
+ stroke="url(#tanstack__o)"
268
+ strokeLinecap="round"
269
+ strokeLinejoin="bevel"
270
+ strokeWidth="12"
271
+ d="M33.5 79.5 7 74"
272
+ />
273
+ <path
274
+ stroke="url(#tanstack__p)"
275
+ strokeLinecap="round"
276
+ strokeLinejoin="bevel"
277
+ strokeWidth="12"
278
+ d="m34 146-29 8"
279
+ />
280
+ <path
281
+ stroke="url(#tanstack__q)"
282
+ strokeLinecap="round"
283
+ strokeLinejoin="bevel"
284
+ strokeWidth="12"
285
+ d="m45 177-24 13"
286
+ />
287
+ <path
288
+ stroke="url(#tanstack__r)"
289
+ strokeLinecap="round"
290
+ strokeLinejoin="bevel"
291
+ strokeWidth="12"
292
+ d="m67 204-20 19"
293
+ />
294
+ <path
295
+ stroke="url(#tanstack__s)"
296
+ strokeLinecap="round"
297
+ strokeLinejoin="bevel"
298
+ strokeWidth="12"
299
+ d="m94.373 227-13.834 22.847"
300
+ />
301
+ <path
302
+ stroke="url(#tanstack__t)"
303
+ strokeLinecap="round"
304
+ strokeLinejoin="bevel"
305
+ strokeWidth="12"
306
+ d="M127.5 243.5 120 268"
307
+ />
308
+ <path
309
+ stroke="url(#tanstack__u)"
310
+ strokeLinecap="round"
311
+ strokeLinejoin="bevel"
312
+ strokeWidth="12"
313
+ d="m167.5 252.5.5 24.5"
314
+ />
315
+ </g>
316
+ </g>
317
+ <circle cx="307.5" cy="308.5" r="304" stroke="#000" strokeWidth="25" />
318
+ </g>
319
+ </svg>
320
+ );
321
+ }
@@ -0,0 +1,16 @@
1
+ import type { ComponentProps } from "react";
2
+
3
+ export function TypescriptIcon(props: ComponentProps<"svg">) {
4
+ return (
5
+ <svg viewBox="0 0 256 256" preserveAspectRatio="xMidYMid" {...props}>
6
+ <path
7
+ d="M20 0h216c11.046 0 20 8.954 20 20v216c0 11.046-8.954 20-20 20H20c-11.046 0-20-8.954-20-20V20C0 8.954 8.954 0 20 0Z"
8
+ fill="#3178C6"
9
+ />
10
+ <path
11
+ d="M150.518 200.475v27.62c4.492 2.302 9.805 4.028 15.938 5.179 6.133 1.151 12.597 1.726 19.393 1.726 6.622 0 12.914-.633 18.874-1.899 5.96-1.266 11.187-3.352 15.678-6.257 4.492-2.906 8.048-6.704 10.669-11.394 2.62-4.689 3.93-10.486 3.93-17.391 0-5.006-.749-9.394-2.246-13.163a30.748 30.748 0 0 0-6.479-10.055c-2.821-2.935-6.205-5.567-10.149-7.898-3.945-2.33-8.394-4.531-13.347-6.602-3.628-1.497-6.881-2.949-9.761-4.359-2.879-1.41-5.327-2.848-7.342-4.316-2.016-1.467-3.571-3.021-4.665-4.661-1.094-1.64-1.641-3.495-1.641-5.567 0-1.899.489-3.61 1.468-5.135s2.362-2.834 4.147-3.927c1.785-1.094 3.973-1.942 6.565-2.547 2.591-.604 5.471-.906 8.638-.906 2.304 0 4.737.173 7.299.518 2.563.345 5.14.877 7.732 1.597a53.669 53.669 0 0 1 7.558 2.719 41.7 41.7 0 0 1 6.781 3.797v-25.807c-4.204-1.611-8.797-2.805-13.778-3.582-4.981-.777-10.697-1.165-17.147-1.165-6.565 0-12.784.705-18.658 2.115-5.874 1.409-11.043 3.61-15.506 6.602-4.463 2.993-7.99 6.805-10.582 11.437-2.591 4.632-3.887 10.17-3.887 16.615 0 8.228 2.375 15.248 7.127 21.06 4.751 5.811 11.963 10.731 21.638 14.759a291.458 291.458 0 0 1 10.625 4.575c3.283 1.496 6.119 3.049 8.509 4.66 2.39 1.611 4.276 3.366 5.658 5.265 1.382 1.899 2.073 4.057 2.073 6.474a9.901 9.901 0 0 1-1.296 4.963c-.863 1.524-2.174 2.848-3.93 3.97-1.756 1.122-3.945 1.999-6.565 2.632-2.62.633-5.687.95-9.2.95-5.989 0-11.92-1.05-17.794-3.151-5.875-2.1-11.317-5.25-16.327-9.451Zm-46.036-68.733H140V109H41v22.742h35.345V233h28.137V131.742Z"
12
+ fill="#FFF"
13
+ />
14
+ </svg>
15
+ );
16
+ }
@@ -0,0 +1 @@
1
+ export { LandingPage } from "@/features/landing/components/LandingPage";
@@ -0,0 +1 @@
1
+ export { getProjectSchema, type ProjectInput } from "@/features/landing/schemas/project.schema";
@@ -0,0 +1,9 @@
1
+ import { z } from "zod";
2
+
3
+ // Dışarıdan error map atanabilir hale getiriyoruz
4
+ export const getProjectSchema = (t: (key: string) => string) =>
5
+ z.object({
6
+ name: z.string().min(3, t("project_validation_min")).max(50, t("project_validation_max")),
7
+ });
8
+
9
+ export type ProjectInput = z.infer<ReturnType<typeof getProjectSchema>>;
@@ -0,0 +1,18 @@
1
+ import { create } from "zustand";
2
+
3
+ type CounterState = {
4
+ count: number;
5
+ increment: () => void;
6
+ decrement: () => void;
7
+ reset: () => void;
8
+ };
9
+
10
+ /**
11
+ * Example Zustand store. Delete once you have real client state to manage.
12
+ */
13
+ export const useCounterStore = create<CounterState>((set) => ({
14
+ count: 0,
15
+ increment: () => set((state) => ({ count: state.count + 1 })),
16
+ decrement: () => set((state) => ({ count: state.count - 1 })),
17
+ reset: () => set({ count: 0 }),
18
+ }));
@@ -0,0 +1 @@
1
+ export { useCounterStore } from "@/features/landing/stores/counter.store";
@@ -0,0 +1 @@
1
+ export type { User } from "@/features/landing/types/user.types";
@@ -0,0 +1,9 @@
1
+ export type User = {
2
+ id: number;
3
+ name: string;
4
+ username: string;
5
+ email: string;
6
+ address: {
7
+ city: string;
8
+ };
9
+ };
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Formats a date using `Intl.DateTimeFormat`. Kept dependency-free on purpose —
3
+ * add `date-fns` only if you need heavier date arithmetic.
4
+ */
5
+ export function formatDate(date: Date | string, locale = "en-US") {
6
+ const value = typeof date === "string" ? new Date(date) : date;
7
+
8
+ return new Intl.DateTimeFormat(locale, {
9
+ year: "numeric",
10
+ month: "long",
11
+ day: "numeric",
12
+ }).format(value);
13
+ }
@@ -0,0 +1 @@
1
+ export { formatDate } from "@/helpers/format-date";
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Shared hooks promoted out of features (Rule of Three).
3
+ * Feature-scoped hooks live under `src/features/[feature]/hooks`.
4
+ */
5
+ export {};
@@ -0,0 +1,16 @@
1
+ import { getRequestConfig } from "next-intl/server";
2
+
3
+ import { routing } from "./routing";
4
+
5
+ export default getRequestConfig(async ({ requestLocale }) => {
6
+ let locale = await requestLocale;
7
+
8
+ if (!locale || !routing.locales.includes(locale as "en" | "tr")) {
9
+ locale = routing.defaultLocale;
10
+ }
11
+
12
+ return {
13
+ locale,
14
+ messages: (await import(`../messages/${locale}.json`)).default,
15
+ };
16
+ });
@@ -0,0 +1,11 @@
1
+ import { createNavigation } from "next-intl/navigation";
2
+ import { defineRouting } from "next-intl/routing";
3
+
4
+ export const routing = defineRouting({
5
+ locales: ["en", "tr"],
6
+ defaultLocale: "en",
7
+ localePrefix: "as-needed",
8
+ localeDetection: false,
9
+ });
10
+
11
+ export const { Link, redirect, usePathname, useRouter, getPathname } = createNavigation(routing);
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Lightweight native `fetch` wrapper.
3
+ *
4
+ * Zero external HTTP dependencies (no axios/ofetch) so it stays 100%
5
+ * compatible with Next.js `fetch` caching/revalidation (`cache`, `next.revalidate`, `next.tags`).
6
+ */
7
+
8
+ export class ApiError extends Error {
9
+ readonly status: number;
10
+ readonly data: unknown;
11
+
12
+ constructor(message: string, status: number, data: unknown) {
13
+ super(message);
14
+ this.name = "ApiError";
15
+ this.status = status;
16
+ this.data = data;
17
+ }
18
+ }
19
+
20
+ type RequestOptions = Omit<RequestInit, "body"> & {
21
+ body?: unknown;
22
+ retry?: number;
23
+ retryDelayMs?: number;
24
+ };
25
+
26
+ const DEFAULT_RETRY = 0;
27
+ const DEFAULT_RETRY_DELAY_MS = 300;
28
+
29
+ function buildHeaders(init?: HeadersInit): Headers {
30
+ const headers = new Headers(init);
31
+
32
+ if (!headers.has("Content-Type")) {
33
+ headers.set("Content-Type", "application/json");
34
+ }
35
+
36
+ // FIXME: attach auth token once an auth solution is chosen, e.g.:
37
+ // const token = await getAuthToken();
38
+ // if (token) headers.set("Authorization", `Bearer ${token}`);
39
+
40
+ return headers;
41
+ }
42
+
43
+ async function parseResponse<T>(response: Response): Promise<T> {
44
+ const contentType = response.headers.get("content-type") ?? "";
45
+ const isJson = contentType.includes("application/json");
46
+ const payload = isJson ? await response.json() : await response.text();
47
+
48
+ if (!response.ok) {
49
+ throw new ApiError(`Request failed with status ${response.status}`, response.status, payload);
50
+ }
51
+
52
+ return payload as T;
53
+ }
54
+
55
+ async function sleep(ms: number) {
56
+ await new Promise((resolve) => setTimeout(resolve, ms));
57
+ }
58
+
59
+ async function request<T>(url: string, options: RequestOptions = {}): Promise<T> {
60
+ const { body, retry = DEFAULT_RETRY, retryDelayMs = DEFAULT_RETRY_DELAY_MS, ...rest } = options;
61
+
62
+ let attempt = 0;
63
+
64
+ while (true) {
65
+ try {
66
+ const response = await fetch(url, {
67
+ ...rest,
68
+ headers: buildHeaders(rest.headers),
69
+ body: body !== undefined ? JSON.stringify(body) : undefined,
70
+ });
71
+
72
+ return await parseResponse<T>(response);
73
+ } catch (error) {
74
+ const isLastAttempt = attempt >= retry;
75
+ const isServerOrNetworkError = !(error instanceof ApiError) || error.status >= 500;
76
+
77
+ if (isLastAttempt || !isServerOrNetworkError) {
78
+ throw error;
79
+ }
80
+
81
+ attempt += 1;
82
+ await sleep(retryDelayMs * attempt);
83
+ }
84
+ }
85
+ }
86
+
87
+ export const api = {
88
+ get: <T>(url: string, options?: RequestOptions) => request<T>(url, { ...options, method: "GET" }),
89
+ post: <T>(url: string, body?: unknown, options?: RequestOptions) =>
90
+ request<T>(url, { ...options, method: "POST", body }),
91
+ put: <T>(url: string, body?: unknown, options?: RequestOptions) =>
92
+ request<T>(url, { ...options, method: "PUT", body }),
93
+ patch: <T>(url: string, body?: unknown, options?: RequestOptions) =>
94
+ request<T>(url, { ...options, method: "PATCH", body }),
95
+ delete: <T>(url: string, options?: RequestOptions) =>
96
+ request<T>(url, { ...options, method: "DELETE" }),
97
+ };
@@ -0,0 +1,18 @@
1
+ import { QueryClient } from "@tanstack/react-query";
2
+
3
+ /**
4
+ * Creates a new QueryClient with sane defaults.
5
+ * A factory (instead of a singleton) avoids sharing cache across requests
6
+ * in server contexts and across users in a serverless environment.
7
+ */
8
+ export function makeQueryClient() {
9
+ return new QueryClient({
10
+ defaultOptions: {
11
+ queries: {
12
+ staleTime: 60 * 1000,
13
+ refetchOnWindowFocus: false,
14
+ retry: 1,
15
+ },
16
+ },
17
+ });
18
+ }
@@ -0,0 +1,12 @@
1
+ import { clsx, type ClassValue } from "clsx";
2
+ import { twMerge } from "tailwind-merge";
3
+
4
+ /**
5
+ * Merges Tailwind class names safely, resolving conflicting utility classes.
6
+ *
7
+ * @example
8
+ * cn("px-2 py-1", condition && "bg-primary", "px-4") // => "py-1 bg-primary px-4"
9
+ */
10
+ export function cn(...inputs: ClassValue[]) {
11
+ return twMerge(clsx(inputs));
12
+ }
@@ -0,0 +1,55 @@
1
+ {
2
+ "Index": {
3
+ "hero_badge": "Premium UI/UX · Agent-ready · Zero bloat",
4
+ "hero_title_1": "ViraStack",
5
+ "hero_title_2": "Start",
6
+ "hero_desc": "Built with <nextjs>Next.js 16</nextjs>, <react>React 19</react>, and <tailwind>Tailwind CSS 4</tailwind> - wired together with <zustand>Zustand</zustand>, <tanstack>TanStack Query</tanstack>, and <rhf>React Hook Form</rhf> so you can ship a polished product from day one.",
7
+ "github": "Star on GitHub",
8
+ "theme": "Theme",
9
+ "language": "Language",
10
+ "features_title": "Features",
11
+ "features_subtitle": "Everything you need to build a modern web application, already configured with the best practices.",
12
+ "feature_1_title": "Next.js App Router",
13
+ "feature_1_desc": "Leverage React Server Components, streaming, and nested layouts for unmatched performance.",
14
+ "feature_2_title": "Type-Safe Everything",
15
+ "feature_2_desc": "End-to-end type safety from environment variables to API responses with TypeScript and Zod.",
16
+ "feature_3_title": "TanStack Query",
17
+ "feature_3_desc": "Server-state caching and synchronization, plus URL state via nuqs - all wired and ready to use.",
18
+ "feature_4_title": "Tailwind & shadcn/ui",
19
+ "feature_4_desc": "shadcn/ui patterns on Base UI primitives - Tailwind CSS v4, accessible, and fully yours to own.",
20
+ "feature_5_title": "React Hook Form",
21
+ "feature_5_desc": "Performant, flexible, and extensible forms with easy-to-use validation integration.",
22
+ "feature_6_title": "ViraStack AI",
23
+ "feature_6_desc": "Pre-configured agent context - coding rules, design skills, and AGENTS.md so any AI assistant matches this codebase.",
24
+ "showcase_title": "Showcase",
25
+ "showcase_subtitle": "Experience the seamless integration of UI components and state management.",
26
+ "showcase_project_title": "New Project",
27
+ "showcase_project_desc": "Validated forms with <rhf>React Hook Form</rhf> and <zod>Zod</zod>.",
28
+ "showcase_state_title": "Global State",
29
+ "showcase_state_desc": "Shared client state managed with <zustand>Zustand</zustand>.",
30
+ "showcase_footer_license": "© {year} {name}. MIT Licensed.",
31
+ "showcase_footer_built": "Last updated on {date}.",
32
+ "users_title": "Recent Users",
33
+ "users_desc": "Fetch and cache data with <tanstack>TanStack Query</tanstack>, synced to the URL via <nuqs>nuqs</nuqs>.",
34
+ "users_search": "Search users...",
35
+ "users_refresh": "Refresh",
36
+ "users_refreshing": "Refreshing...",
37
+ "users_col_user": "User",
38
+ "users_col_city": "City",
39
+ "users_error_status": "Request failed with status {status}.",
40
+ "users_error_network": "Failed to load users. Check your network connection.",
41
+ "users_empty": "No users found.",
42
+ "project_label": "Project Name",
43
+ "project_placeholder": "virastack-app",
44
+ "project_desc": "Use 3–50 characters for the project name.",
45
+ "project_submit": "Create Project",
46
+ "project_submitting": "Creating…",
47
+ "project_success": "Created project: {name}",
48
+ "project_validation_min": "Project name must be at least 3 characters.",
49
+ "project_validation_max": "Project name must be at most 50 characters.",
50
+ "cart_item_name": "Cotton T-Shirt",
51
+ "cart_item_variant": "White / XL",
52
+ "cart_item_total": "Total",
53
+ "cart_clear": "Clear"
54
+ }
55
+ }