@beknurakhmed/webforge-cli 0.1.1 → 0.1.3

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 (325) hide show
  1. package/README.md +226 -226
  2. package/package.json +63 -63
  3. package/templates/angular/angular.json +28 -2
  4. package/templates/extras/typescript/deps.json +6 -0
  5. package/templates/extras/typescript/react/tsconfig.json +21 -0
  6. package/templates/extras/typescript/vanilla/tsconfig.json +19 -0
  7. package/templates/extras/typescript/vue/tsconfig.json +20 -0
  8. package/templates/overlays/blog/angular/src/app/app.component.ts +100 -0
  9. package/templates/overlays/blog/angular/src/app/app.routes.ts +12 -0
  10. package/templates/overlays/blog/angular/src/app/components/blog-sidebar.component.ts +115 -0
  11. package/templates/overlays/blog/angular/src/app/components/post-card.component.ts +94 -0
  12. package/templates/overlays/blog/angular/src/app/pages/about.component.ts +114 -0
  13. package/templates/overlays/blog/angular/src/app/pages/category.component.ts +141 -0
  14. package/templates/overlays/blog/angular/src/app/pages/home.component.ts +143 -0
  15. package/templates/overlays/blog/angular/src/app/pages/post-detail.component.ts +196 -0
  16. package/templates/overlays/blog/angular/src/main.ts +10 -0
  17. package/templates/overlays/blog/nextjs/src/app/about/page.tsx +55 -0
  18. package/templates/overlays/blog/nextjs/src/app/category/[slug]/page.tsx +52 -0
  19. package/templates/overlays/blog/nextjs/src/app/components/BlogFooter.tsx +46 -0
  20. package/templates/overlays/blog/nextjs/src/app/components/BlogHeader.tsx +37 -0
  21. package/templates/overlays/blog/nextjs/src/app/components/BlogSidebar.tsx +56 -0
  22. package/templates/overlays/blog/nextjs/src/app/components/PostCard.tsx +42 -0
  23. package/templates/overlays/blog/nextjs/src/app/globals.css +158 -0
  24. package/templates/overlays/blog/nextjs/src/app/layout.tsx +20 -0
  25. package/templates/overlays/blog/nextjs/src/app/page.tsx +36 -0
  26. package/templates/overlays/blog/nextjs/src/app/post/[id]/page.tsx +78 -0
  27. package/templates/overlays/blog/nuxt/app.vue +27 -0
  28. package/templates/overlays/blog/nuxt/components/BlogFooter.vue +48 -0
  29. package/templates/overlays/blog/nuxt/components/BlogHeader.vue +55 -0
  30. package/templates/overlays/blog/nuxt/components/BlogSidebar.vue +144 -0
  31. package/templates/overlays/blog/nuxt/components/PostCard.vue +125 -0
  32. package/templates/overlays/blog/nuxt/layouts/default.vue +25 -0
  33. package/templates/overlays/blog/nuxt/pages/about.vue +161 -0
  34. package/templates/overlays/blog/nuxt/pages/category/[slug].vue +80 -0
  35. package/templates/overlays/blog/nuxt/pages/index.vue +54 -0
  36. package/templates/overlays/blog/nuxt/pages/post/[id].vue +158 -0
  37. package/templates/overlays/blog/react/src/App.css +58 -18
  38. package/templates/overlays/blog/react/src/App.tsx +16 -31
  39. package/templates/overlays/blog/react/src/components/BlogFooter.tsx +4 -2
  40. package/templates/overlays/blog/react/src/components/BlogHeader.tsx +12 -6
  41. package/templates/overlays/blog/react/src/components/BlogSidebar.tsx +9 -8
  42. package/templates/overlays/blog/react/src/components/Layout.tsx +17 -0
  43. package/templates/overlays/blog/react/src/components/PostCard.tsx +30 -0
  44. package/templates/overlays/blog/react/src/data/posts.ts +22 -0
  45. package/templates/overlays/blog/react/src/pages/About.tsx +33 -0
  46. package/templates/overlays/blog/react/src/pages/Category.tsx +29 -0
  47. package/templates/overlays/blog/react/src/pages/Home.tsx +18 -0
  48. package/templates/overlays/blog/react/src/pages/PostDetail.tsx +38 -0
  49. package/templates/overlays/blog/vanilla/src/main.ts +112 -0
  50. package/templates/overlays/blog/vanilla/src/pages/about.ts +106 -0
  51. package/templates/overlays/blog/vanilla/src/pages/category.ts +86 -0
  52. package/templates/overlays/blog/vanilla/src/pages/home.ts +103 -0
  53. package/templates/overlays/blog/vanilla/src/pages/post-detail.ts +108 -0
  54. package/templates/overlays/blog/vanilla/src/router.ts +33 -0
  55. package/templates/overlays/blog/vanilla/src/style.css +677 -0
  56. package/templates/overlays/blog/vue/src/App.vue +29 -0
  57. package/templates/overlays/blog/vue/src/components/BlogFooter.vue +8 -0
  58. package/templates/overlays/blog/vue/src/components/BlogHeader.vue +14 -0
  59. package/templates/overlays/blog/vue/src/components/BlogSidebar.vue +31 -0
  60. package/templates/overlays/blog/vue/src/components/PostCard.vue +17 -0
  61. package/templates/overlays/blog/vue/src/data.ts +82 -0
  62. package/templates/overlays/blog/vue/src/main.ts +6 -0
  63. package/templates/overlays/blog/vue/src/pages/About.vue +17 -0
  64. package/templates/overlays/blog/vue/src/pages/Category.vue +32 -0
  65. package/templates/overlays/blog/vue/src/pages/Home.vue +14 -0
  66. package/templates/overlays/blog/vue/src/pages/PostDetail.vue +22 -0
  67. package/templates/overlays/blog/vue/src/router.ts +19 -0
  68. package/templates/overlays/blog/vue/src/style.css +288 -0
  69. package/templates/overlays/crm/angular/src/app/app.component.ts +110 -0
  70. package/templates/overlays/crm/angular/src/app/app.routes.ts +12 -0
  71. package/templates/overlays/crm/angular/src/app/components/contacts-table.component.ts +98 -0
  72. package/templates/overlays/crm/angular/src/app/components/stats-cards.component.ts +63 -0
  73. package/templates/overlays/crm/angular/src/app/pages/contacts.component.ts +70 -0
  74. package/templates/overlays/crm/angular/src/app/pages/dashboard-home.component.ts +38 -0
  75. package/templates/overlays/crm/angular/src/app/pages/deals.component.ts +145 -0
  76. package/templates/overlays/crm/angular/src/app/pages/settings.component.ts +103 -0
  77. package/templates/overlays/crm/angular/src/main.ts +8 -0
  78. package/templates/overlays/crm/nextjs/src/app/components/ContactsTable.tsx +69 -0
  79. package/templates/overlays/crm/nextjs/src/app/components/Sidebar.tsx +45 -0
  80. package/templates/overlays/crm/nextjs/src/app/components/StatsCards.tsx +31 -0
  81. package/templates/overlays/crm/nextjs/src/app/contacts/page.tsx +111 -0
  82. package/templates/overlays/crm/nextjs/src/app/deals/page.tsx +111 -0
  83. package/templates/overlays/crm/nextjs/src/app/globals.css +165 -0
  84. package/templates/overlays/crm/nextjs/src/app/layout.tsx +20 -0
  85. package/templates/overlays/crm/nextjs/src/app/page.tsx +43 -0
  86. package/templates/overlays/crm/nextjs/src/app/settings/page.tsx +91 -0
  87. package/templates/overlays/crm/nuxt/app.vue +27 -0
  88. package/templates/overlays/crm/nuxt/components/ContactsTable.vue +140 -0
  89. package/templates/overlays/crm/nuxt/components/CrmSidebar.vue +97 -0
  90. package/templates/overlays/crm/nuxt/components/StatsCards.vue +63 -0
  91. package/templates/overlays/crm/nuxt/layouts/default.vue +21 -0
  92. package/templates/overlays/crm/nuxt/pages/contacts.vue +79 -0
  93. package/templates/overlays/crm/nuxt/pages/deals.vue +229 -0
  94. package/templates/overlays/crm/nuxt/pages/index.vue +186 -0
  95. package/templates/overlays/crm/nuxt/pages/settings.vue +233 -0
  96. package/templates/overlays/crm/react/src/App.css +49 -20
  97. package/templates/overlays/crm/react/src/App.tsx +16 -41
  98. package/templates/overlays/crm/react/src/components/ContactsTable.tsx +8 -8
  99. package/templates/overlays/crm/react/src/components/Layout.tsx +15 -0
  100. package/templates/overlays/crm/react/src/components/Sidebar.tsx +20 -14
  101. package/templates/overlays/crm/react/src/components/StatsCards.tsx +10 -12
  102. package/templates/overlays/crm/react/src/data/contacts.ts +19 -0
  103. package/templates/overlays/crm/react/src/pages/Contacts.tsx +32 -0
  104. package/templates/overlays/crm/react/src/pages/DashboardHome.tsx +44 -0
  105. package/templates/overlays/crm/react/src/pages/Deals.tsx +48 -0
  106. package/templates/overlays/crm/react/src/pages/Settings.tsx +35 -0
  107. package/templates/overlays/crm/vanilla/src/main.ts +95 -0
  108. package/templates/overlays/crm/vanilla/src/pages/contacts.ts +87 -0
  109. package/templates/overlays/crm/vanilla/src/pages/dashboard-home.ts +121 -0
  110. package/templates/overlays/crm/vanilla/src/pages/deals.ts +116 -0
  111. package/templates/overlays/crm/vanilla/src/pages/settings.ts +129 -0
  112. package/templates/overlays/crm/vanilla/src/router.ts +33 -0
  113. package/templates/overlays/crm/vanilla/src/style.css +766 -0
  114. package/templates/overlays/crm/vue/src/App.vue +25 -0
  115. package/templates/overlays/crm/vue/src/components/ContactsTable.vue +30 -0
  116. package/templates/overlays/crm/vue/src/components/CrmSidebar.vue +14 -0
  117. package/templates/overlays/crm/vue/src/components/StatsCards.vue +23 -0
  118. package/templates/overlays/crm/vue/src/data.ts +38 -0
  119. package/templates/overlays/crm/vue/src/main.ts +6 -0
  120. package/templates/overlays/crm/vue/src/pages/Contacts.vue +25 -0
  121. package/templates/overlays/crm/vue/src/pages/DashboardHome.vue +19 -0
  122. package/templates/overlays/crm/vue/src/pages/Deals.vue +34 -0
  123. package/templates/overlays/crm/vue/src/pages/Settings.vue +33 -0
  124. package/templates/overlays/crm/vue/src/router.ts +19 -0
  125. package/templates/overlays/crm/vue/src/style.css +272 -0
  126. package/templates/overlays/dashboard/angular/src/app/app.component.ts +135 -0
  127. package/templates/overlays/dashboard/angular/src/app/app.routes.ts +24 -0
  128. package/templates/overlays/dashboard/angular/src/app/components/chart-placeholder.component.ts +86 -0
  129. package/templates/overlays/dashboard/angular/src/app/components/data-table.component.ts +140 -0
  130. package/templates/overlays/dashboard/angular/src/app/components/kpi-cards.component.ts +120 -0
  131. package/templates/overlays/dashboard/angular/src/app/pages/analytics.component.ts +138 -0
  132. package/templates/overlays/dashboard/angular/src/app/pages/overview.component.ts +58 -0
  133. package/templates/overlays/dashboard/angular/src/app/pages/settings.component.ts +128 -0
  134. package/templates/overlays/dashboard/angular/src/app/pages/users.component.ts +153 -0
  135. package/templates/overlays/dashboard/angular/src/main.ts +10 -0
  136. package/templates/overlays/dashboard/nextjs/src/app/analytics/page.tsx +76 -0
  137. package/templates/overlays/dashboard/nextjs/src/app/components/ChartPlaceholder.tsx +58 -0
  138. package/templates/overlays/dashboard/nextjs/src/app/components/DataTable.tsx +60 -0
  139. package/templates/overlays/dashboard/nextjs/src/app/components/KPICards.tsx +31 -0
  140. package/templates/overlays/dashboard/nextjs/src/app/components/Sidebar.tsx +45 -0
  141. package/templates/overlays/dashboard/nextjs/src/app/globals.css +150 -0
  142. package/templates/overlays/dashboard/nextjs/src/app/layout.tsx +20 -0
  143. package/templates/overlays/dashboard/nextjs/src/app/page.tsx +20 -0
  144. package/templates/overlays/dashboard/nextjs/src/app/settings/page.tsx +118 -0
  145. package/templates/overlays/dashboard/nextjs/src/app/users/page.tsx +99 -0
  146. package/templates/overlays/dashboard/nuxt/app.vue +27 -0
  147. package/templates/overlays/dashboard/nuxt/components/ChartPlaceholder.vue +73 -0
  148. package/templates/overlays/dashboard/nuxt/components/DashSidebar.vue +97 -0
  149. package/templates/overlays/dashboard/nuxt/components/DataTable.vue +126 -0
  150. package/templates/overlays/dashboard/nuxt/components/KPICards.vue +76 -0
  151. package/templates/overlays/dashboard/nuxt/layouts/default.vue +21 -0
  152. package/templates/overlays/dashboard/nuxt/pages/analytics.vue +94 -0
  153. package/templates/overlays/dashboard/nuxt/pages/index.vue +49 -0
  154. package/templates/overlays/dashboard/nuxt/pages/settings.vue +239 -0
  155. package/templates/overlays/dashboard/nuxt/pages/users.vue +227 -0
  156. package/templates/overlays/dashboard/react/src/App.css +50 -24
  157. package/templates/overlays/dashboard/react/src/App.tsx +16 -22
  158. package/templates/overlays/dashboard/react/src/components/ChartPlaceholder.tsx +5 -2
  159. package/templates/overlays/dashboard/react/src/components/DataTable.tsx +9 -1
  160. package/templates/overlays/dashboard/react/src/components/KPICards.tsx +4 -4
  161. package/templates/overlays/dashboard/react/src/components/Layout.tsx +13 -0
  162. package/templates/overlays/dashboard/react/src/components/Sidebar.tsx +15 -10
  163. package/templates/overlays/dashboard/react/src/pages/Analytics.tsx +33 -0
  164. package/templates/overlays/dashboard/react/src/pages/Overview.tsx +23 -0
  165. package/templates/overlays/dashboard/react/src/pages/Settings.tsx +41 -0
  166. package/templates/overlays/dashboard/react/src/pages/Users.tsx +57 -0
  167. package/templates/overlays/dashboard/vanilla/src/main.ts +101 -0
  168. package/templates/overlays/dashboard/vanilla/src/pages/analytics.ts +99 -0
  169. package/templates/overlays/dashboard/vanilla/src/pages/overview.ts +60 -0
  170. package/templates/overlays/dashboard/vanilla/src/pages/settings.ts +118 -0
  171. package/templates/overlays/dashboard/vanilla/src/pages/users.ts +80 -0
  172. package/templates/overlays/dashboard/vanilla/src/router.ts +33 -0
  173. package/templates/overlays/dashboard/vanilla/src/style.css +654 -0
  174. package/templates/overlays/dashboard/vue/src/App.vue +12 -0
  175. package/templates/overlays/dashboard/vue/src/components/ChartPlaceholder.vue +34 -0
  176. package/templates/overlays/dashboard/vue/src/components/DashSidebar.vue +19 -0
  177. package/templates/overlays/dashboard/vue/src/components/DataTable.vue +34 -0
  178. package/templates/overlays/dashboard/vue/src/components/KPICards.vue +18 -0
  179. package/templates/overlays/dashboard/vue/src/main.ts +6 -0
  180. package/templates/overlays/dashboard/vue/src/pages/Analytics.vue +32 -0
  181. package/templates/overlays/dashboard/vue/src/pages/Overview.vue +17 -0
  182. package/templates/overlays/dashboard/vue/src/pages/Settings.vue +65 -0
  183. package/templates/overlays/dashboard/vue/src/pages/Users.vue +44 -0
  184. package/templates/overlays/dashboard/vue/src/router.ts +15 -0
  185. package/templates/overlays/dashboard/vue/src/style.css +447 -0
  186. package/templates/overlays/ecommerce/angular/src/app/app.component.ts +147 -0
  187. package/templates/overlays/ecommerce/angular/src/app/app.routes.ts +10 -0
  188. package/templates/overlays/ecommerce/angular/src/app/components/product-card.component.ts +94 -0
  189. package/templates/overlays/ecommerce/angular/src/app/data/products.ts +75 -0
  190. package/templates/overlays/ecommerce/angular/src/app/pages/cart.component.ts +169 -0
  191. package/templates/overlays/ecommerce/angular/src/app/pages/home.component.ts +96 -0
  192. package/templates/overlays/ecommerce/angular/src/app/pages/product-detail.component.ts +124 -0
  193. package/templates/overlays/ecommerce/angular/src/main.ts +10 -0
  194. package/templates/overlays/ecommerce/nextjs/src/app/cart/page.tsx +74 -0
  195. package/templates/overlays/ecommerce/nextjs/src/app/components/CartProvider.tsx +80 -0
  196. package/templates/overlays/ecommerce/nextjs/src/app/components/Footer.tsx +44 -0
  197. package/templates/overlays/ecommerce/nextjs/src/app/components/Header.tsx +27 -0
  198. package/templates/overlays/ecommerce/nextjs/src/app/components/ProductCard.tsx +23 -0
  199. package/templates/overlays/ecommerce/nextjs/src/app/globals.css +144 -0
  200. package/templates/overlays/ecommerce/nextjs/src/app/layout.tsx +23 -0
  201. package/templates/overlays/ecommerce/nextjs/src/app/page.tsx +73 -0
  202. package/templates/overlays/ecommerce/nextjs/src/app/product/[id]/page.tsx +63 -0
  203. package/templates/overlays/ecommerce/nuxt/app.vue +27 -0
  204. package/templates/overlays/ecommerce/nuxt/components/ProductCard.vue +77 -0
  205. package/templates/overlays/ecommerce/nuxt/components/StoreFooter.vue +47 -0
  206. package/templates/overlays/ecommerce/nuxt/components/StoreHeader.vue +91 -0
  207. package/templates/overlays/ecommerce/nuxt/layouts/default.vue +43 -0
  208. package/templates/overlays/ecommerce/nuxt/pages/cart.vue +268 -0
  209. package/templates/overlays/ecommerce/nuxt/pages/index.vue +154 -0
  210. package/templates/overlays/ecommerce/nuxt/pages/product/[id].vue +211 -0
  211. package/templates/overlays/ecommerce/react/src/App.css +71 -59
  212. package/templates/overlays/ecommerce/react/src/App.tsx +18 -44
  213. package/templates/overlays/ecommerce/react/src/components/Footer.tsx +2 -2
  214. package/templates/overlays/ecommerce/react/src/components/Header.tsx +15 -14
  215. package/templates/overlays/ecommerce/react/src/components/Layout.tsx +20 -0
  216. package/templates/overlays/ecommerce/react/src/components/ProductCard.tsx +28 -0
  217. package/templates/overlays/ecommerce/react/src/data/products.ts +23 -0
  218. package/templates/overlays/ecommerce/react/src/pages/Cart.tsx +51 -0
  219. package/templates/overlays/ecommerce/react/src/pages/Home.tsx +37 -0
  220. package/templates/overlays/ecommerce/react/src/pages/ProductDetail.tsx +38 -0
  221. package/templates/overlays/ecommerce/vanilla/src/main.ts +73 -0
  222. package/templates/overlays/ecommerce/vanilla/src/pages/cart.ts +73 -0
  223. package/templates/overlays/ecommerce/vanilla/src/pages/home.ts +71 -0
  224. package/templates/overlays/ecommerce/vanilla/src/pages/product-detail.ts +81 -0
  225. package/templates/overlays/ecommerce/vanilla/src/router.ts +33 -0
  226. package/templates/overlays/ecommerce/vanilla/src/style.css +522 -0
  227. package/templates/overlays/ecommerce/vue/src/App.vue +17 -32
  228. package/templates/overlays/ecommerce/vue/src/components/ProductCard.vue +25 -0
  229. package/templates/overlays/ecommerce/vue/src/components/StoreFooter.vue +6 -12
  230. package/templates/overlays/ecommerce/vue/src/components/StoreHeader.vue +5 -23
  231. package/templates/overlays/ecommerce/vue/src/data.ts +23 -0
  232. package/templates/overlays/ecommerce/vue/src/main.ts +6 -0
  233. package/templates/overlays/ecommerce/vue/src/pages/Cart.vue +34 -0
  234. package/templates/overlays/ecommerce/vue/src/pages/Home.vue +27 -0
  235. package/templates/overlays/ecommerce/vue/src/pages/ProductDetail.vue +27 -0
  236. package/templates/overlays/ecommerce/vue/src/router.ts +13 -0
  237. package/templates/overlays/ecommerce/vue/src/style.css +359 -0
  238. package/templates/overlays/portfolio/angular/src/app/app.component.ts +102 -0
  239. package/templates/overlays/portfolio/angular/src/app/app.routes.ts +12 -0
  240. package/templates/overlays/portfolio/angular/src/app/components/project-card.component.ts +86 -0
  241. package/templates/overlays/portfolio/angular/src/app/components/skills-grid.component.ts +88 -0
  242. package/templates/overlays/portfolio/angular/src/app/pages/about.component.ts +122 -0
  243. package/templates/overlays/portfolio/angular/src/app/pages/contact.component.ts +131 -0
  244. package/templates/overlays/portfolio/angular/src/app/pages/home.component.ts +207 -0
  245. package/templates/overlays/portfolio/angular/src/app/pages/projects.component.ts +150 -0
  246. package/templates/overlays/portfolio/angular/src/main.ts +10 -0
  247. package/templates/overlays/portfolio/nextjs/src/app/about/page.tsx +70 -0
  248. package/templates/overlays/portfolio/nextjs/src/app/components/Footer.tsx +37 -0
  249. package/templates/overlays/portfolio/nextjs/src/app/components/Navbar.tsx +37 -0
  250. package/templates/overlays/portfolio/nextjs/src/app/components/ProjectCard.tsx +35 -0
  251. package/templates/overlays/portfolio/nextjs/src/app/components/SkillsGrid.tsx +45 -0
  252. package/templates/overlays/portfolio/nextjs/src/app/contact/page.tsx +138 -0
  253. package/templates/overlays/portfolio/nextjs/src/app/globals.css +197 -0
  254. package/templates/overlays/portfolio/nextjs/src/app/layout.tsx +20 -0
  255. package/templates/overlays/portfolio/nextjs/src/app/page.tsx +60 -0
  256. package/templates/overlays/portfolio/nextjs/src/app/projects/page.tsx +56 -0
  257. package/templates/overlays/portfolio/nuxt/app.vue +27 -0
  258. package/templates/overlays/portfolio/nuxt/components/PortfolioFooter.vue +49 -0
  259. package/templates/overlays/portfolio/nuxt/components/PortfolioNav.vue +77 -0
  260. package/templates/overlays/portfolio/nuxt/components/ProjectCard.vue +102 -0
  261. package/templates/overlays/portfolio/nuxt/components/SkillsGrid.vue +89 -0
  262. package/templates/overlays/portfolio/nuxt/layouts/default.vue +21 -0
  263. package/templates/overlays/portfolio/nuxt/pages/about.vue +179 -0
  264. package/templates/overlays/portfolio/nuxt/pages/contact.vue +278 -0
  265. package/templates/overlays/portfolio/nuxt/pages/index.vue +160 -0
  266. package/templates/overlays/portfolio/nuxt/pages/projects.vue +116 -0
  267. package/templates/overlays/portfolio/react/src/App.css +54 -27
  268. package/templates/overlays/portfolio/react/src/App.tsx +16 -12
  269. package/templates/overlays/portfolio/react/src/components/Layout.tsx +17 -0
  270. package/templates/overlays/portfolio/react/src/components/Navbar.tsx +30 -0
  271. package/templates/overlays/portfolio/react/src/components/PortfolioFooter.tsx +5 -3
  272. package/templates/overlays/portfolio/react/src/components/ProjectCard.tsx +24 -0
  273. package/templates/overlays/portfolio/react/src/components/SkillsGrid.tsx +20 -0
  274. package/templates/overlays/portfolio/react/src/data/projects.ts +25 -0
  275. package/templates/overlays/portfolio/react/src/pages/About.tsx +43 -0
  276. package/templates/overlays/portfolio/react/src/pages/Contact.tsx +48 -0
  277. package/templates/overlays/portfolio/react/src/pages/Home.tsx +44 -0
  278. package/templates/overlays/portfolio/react/src/pages/Projects.tsx +36 -0
  279. package/templates/overlays/portfolio/vanilla/src/main.ts +58 -0
  280. package/templates/overlays/portfolio/vanilla/src/pages/about.ts +146 -0
  281. package/templates/overlays/portfolio/vanilla/src/pages/contact.ts +159 -0
  282. package/templates/overlays/portfolio/vanilla/src/pages/home.ts +123 -0
  283. package/templates/overlays/portfolio/vanilla/src/pages/projects.ts +89 -0
  284. package/templates/overlays/portfolio/vanilla/src/router.ts +33 -0
  285. package/templates/overlays/portfolio/vanilla/src/style.css +909 -0
  286. package/templates/overlays/portfolio/vue/src/App.vue +25 -0
  287. package/templates/overlays/portfolio/vue/src/components/PortfolioFooter.vue +14 -0
  288. package/templates/overlays/portfolio/vue/src/components/PortfolioNav.vue +16 -0
  289. package/templates/overlays/portfolio/vue/src/components/ProjectCard.vue +18 -0
  290. package/templates/overlays/portfolio/vue/src/components/SkillsGrid.vue +14 -0
  291. package/templates/overlays/portfolio/vue/src/data.ts +78 -0
  292. package/templates/overlays/portfolio/vue/src/main.ts +6 -0
  293. package/templates/overlays/portfolio/vue/src/pages/About.vue +30 -0
  294. package/templates/overlays/portfolio/vue/src/pages/Contact.vue +47 -0
  295. package/templates/overlays/portfolio/vue/src/pages/Home.vue +27 -0
  296. package/templates/overlays/portfolio/vue/src/pages/Projects.vue +33 -0
  297. package/templates/overlays/portfolio/vue/src/router.ts +19 -0
  298. package/templates/overlays/portfolio/vue/src/style.css +404 -0
  299. package/templates/react/package.json +23 -19
  300. package/templates/react/tsconfig.json +20 -0
  301. package/templates/styling/tailwind/deps.json +7 -6
  302. package/templates/styling/tailwind/nextjs/postcss.config.mjs +7 -0
  303. package/templates/styling/tailwind/nextjs/src/app/globals.css +1 -0
  304. package/templates/styling/tailwind/react/src/index.css +1 -0
  305. package/templates/styling/tailwind/react/vite.config.ts +7 -0
  306. package/templates/styling/tailwind/vanilla/src/style.css +1 -0
  307. package/templates/styling/tailwind/vanilla/vite.config.ts +6 -0
  308. package/templates/styling/tailwind/vue/src/style.css +1 -0
  309. package/templates/styling/tailwind/vue/vite.config.ts +7 -0
  310. package/templates/vanilla/package.json +15 -14
  311. package/templates/vanilla/tsconfig.json +19 -0
  312. package/templates/vue/package.json +21 -18
  313. package/templates/vue/tsconfig.json +20 -0
  314. package/templates/overlays/blog/react/src/components/PostList.tsx +0 -27
  315. package/templates/overlays/crm/react/src/components/Filters.tsx +0 -22
  316. package/templates/overlays/ecommerce/react/src/components/Cart.tsx +0 -47
  317. package/templates/overlays/ecommerce/react/src/components/ProductGrid.tsx +0 -32
  318. package/templates/overlays/ecommerce/vue/src/components/CartPanel.vue +0 -46
  319. package/templates/overlays/ecommerce/vue/src/components/ProductGrid.vue +0 -40
  320. package/templates/overlays/portfolio/react/src/components/ContactForm.tsx +0 -29
  321. package/templates/overlays/portfolio/react/src/components/HeroSection.tsx +0 -24
  322. package/templates/overlays/portfolio/react/src/components/Projects.tsx +0 -33
  323. package/templates/overlays/portfolio/react/src/components/Skills.tsx +0 -27
  324. package/templates/styling/tailwind/config/postcss.config.js +0 -5
  325. package/templates/styling/tailwind/config/tailwind.config.js +0 -11
@@ -0,0 +1,70 @@
1
+ import Link from 'next/link';
2
+ import { SkillsGrid } from '../components/SkillsGrid';
3
+
4
+ const experience = [
5
+ { role: 'Senior Full-Stack Developer', company: 'TechCorp Inc.', period: '2022 - Present', description: 'Leading development of cloud-native applications serving 50K+ users. Architecting microservices and mentoring junior developers.', icon: '🏢' },
6
+ { role: 'Frontend Developer', company: 'DesignStudio Co.', period: '2020 - 2022', description: 'Built responsive web applications and design systems. Improved page load performance by 40% through optimization.', icon: '💻' },
7
+ { role: 'Junior Developer', company: 'StartupXYZ', period: '2018 - 2020', description: 'Full-stack development for a SaaS platform. Implemented features used by thousands of customers daily.', icon: '🚀' },
8
+ ];
9
+
10
+ const education = [
11
+ { degree: 'M.S. Computer Science', school: 'State University', year: '2018', icon: '🎓' },
12
+ { degree: 'B.S. Software Engineering', school: 'Tech Institute', year: '2016', icon: '📚' },
13
+ ];
14
+
15
+ export default function AboutPage() {
16
+ return (
17
+ <div className="about-page">
18
+ <section className="about-hero">
19
+ <div className="about-hero-content">
20
+ <div className="about-avatar">👨‍💻</div>
21
+ <h1>About Me</h1>
22
+ <p className="about-intro">
23
+ I am a full-stack developer with over 6 years of experience building web applications.
24
+ I am passionate about clean code, user experience, and turning complex problems into simple,
25
+ elegant solutions.
26
+ </p>
27
+ </div>
28
+ </section>
29
+
30
+ <section className="about-section">
31
+ <h2>💼 Experience</h2>
32
+ <div className="timeline">
33
+ {experience.map((exp, i) => (
34
+ <div key={i} className="timeline-item">
35
+ <div className="timeline-icon">{exp.icon}</div>
36
+ <div className="timeline-content">
37
+ <h3>{exp.role}</h3>
38
+ <p className="timeline-company">{exp.company}</p>
39
+ <p className="timeline-period">{exp.period}</p>
40
+ <p className="timeline-description">{exp.description}</p>
41
+ </div>
42
+ </div>
43
+ ))}
44
+ </div>
45
+ </section>
46
+
47
+ <section className="about-section">
48
+ <h2>🎓 Education</h2>
49
+ <div className="education-grid">
50
+ {education.map((edu, i) => (
51
+ <div key={i} className="education-card">
52
+ <span className="education-icon">{edu.icon}</span>
53
+ <h3>{edu.degree}</h3>
54
+ <p className="education-school">{edu.school}</p>
55
+ <p className="education-year">{edu.year}</p>
56
+ </div>
57
+ ))}
58
+ </div>
59
+ </section>
60
+
61
+ <SkillsGrid />
62
+
63
+ <section className="about-cta">
64
+ <h2>Want to work together?</h2>
65
+ <p>I am always interested in hearing about new projects and opportunities.</p>
66
+ <Link href="/contact" className="btn btn-primary btn-lg">Get in Touch</Link>
67
+ </section>
68
+ </div>
69
+ );
70
+ }
@@ -0,0 +1,37 @@
1
+ import Link from 'next/link';
2
+
3
+ export function Footer() {
4
+ return (
5
+ <footer className="portfolio-footer">
6
+ <div className="footer-container">
7
+ <div className="footer-grid">
8
+ <div className="footer-section">
9
+ <h3>🚀 {'{{projectName}}'}</h3>
10
+ <p>Building digital experiences that make a difference. Let us create something amazing together.</p>
11
+ </div>
12
+ <div className="footer-section">
13
+ <h4>Quick Links</h4>
14
+ <ul>
15
+ <li><Link href="/">Home</Link></li>
16
+ <li><Link href="/projects">Projects</Link></li>
17
+ <li><Link href="/about">About</Link></li>
18
+ <li><Link href="/contact">Contact</Link></li>
19
+ </ul>
20
+ </div>
21
+ <div className="footer-section">
22
+ <h4>Connect</h4>
23
+ <div className="social-links">
24
+ <span>💼</span>
25
+ <span>🐦</span>
26
+ <span>📂</span>
27
+ <span>📧</span>
28
+ </div>
29
+ </div>
30
+ </div>
31
+ <div className="footer-bottom">
32
+ <p>&copy; 2025 {'{{projectName}}'}. Crafted with care.</p>
33
+ </div>
34
+ </div>
35
+ </footer>
36
+ );
37
+ }
@@ -0,0 +1,37 @@
1
+ 'use client';
2
+
3
+ import Link from 'next/link';
4
+ import { usePathname } from 'next/navigation';
5
+
6
+ const navItems = [
7
+ { href: '/', label: 'Home' },
8
+ { href: '/projects', label: 'Projects' },
9
+ { href: '/about', label: 'About' },
10
+ { href: '/contact', label: 'Contact' },
11
+ ];
12
+
13
+ export function Navbar() {
14
+ const pathname = usePathname();
15
+
16
+ return (
17
+ <header className="navbar">
18
+ <div className="navbar-container">
19
+ <Link href="/" className="navbar-logo">
20
+ <span className="logo-icon">🚀</span>
21
+ <span>{'{{projectName}}'}</span>
22
+ </Link>
23
+ <nav className="navbar-nav">
24
+ {navItems.map((item) => (
25
+ <Link
26
+ key={item.href}
27
+ href={item.href}
28
+ className={`navbar-link ${pathname === item.href ? 'active' : ''}`}
29
+ >
30
+ {item.label}
31
+ </Link>
32
+ ))}
33
+ </nav>
34
+ </div>
35
+ </header>
36
+ );
37
+ }
@@ -0,0 +1,35 @@
1
+ export interface Project {
2
+ id: number;
3
+ title: string;
4
+ description: string;
5
+ tech: string[];
6
+ image: string;
7
+ category: string;
8
+ link: string;
9
+ featured: boolean;
10
+ }
11
+
12
+ interface ProjectCardProps {
13
+ project: Project;
14
+ }
15
+
16
+ export function ProjectCard({ project }: ProjectCardProps) {
17
+ return (
18
+ <div className="project-card">
19
+ <div className="project-image">{project.image}</div>
20
+ <div className="project-info">
21
+ <span className="project-category">{project.category}</span>
22
+ <h3 className="project-title">{project.title}</h3>
23
+ <p className="project-description">{project.description}</p>
24
+ <div className="project-tech">
25
+ {project.tech.map((t) => (
26
+ <span key={t} className="tech-tag">{t}</span>
27
+ ))}
28
+ </div>
29
+ <a href={project.link} className="project-link" target="_blank" rel="noopener noreferrer">
30
+ View Project →
31
+ </a>
32
+ </div>
33
+ </div>
34
+ );
35
+ }
@@ -0,0 +1,45 @@
1
+ interface Skill {
2
+ name: string;
3
+ level: number;
4
+ icon: string;
5
+ category: string;
6
+ }
7
+
8
+ const skills: Skill[] = [
9
+ { name: 'React', level: 95, icon: '⚛️', category: 'Frontend' },
10
+ { name: 'TypeScript', level: 90, icon: '📘', category: 'Languages' },
11
+ { name: 'Node.js', level: 88, icon: '🟢', category: 'Backend' },
12
+ { name: 'Next.js', level: 92, icon: '▲', category: 'Frontend' },
13
+ { name: 'CSS/Sass', level: 90, icon: '🎨', category: 'Frontend' },
14
+ { name: 'Python', level: 80, icon: '🐍', category: 'Languages' },
15
+ { name: 'PostgreSQL', level: 82, icon: '🐘', category: 'Backend' },
16
+ { name: 'Docker', level: 75, icon: '🐳', category: 'DevOps' },
17
+ { name: 'AWS', level: 78, icon: '☁️', category: 'DevOps' },
18
+ { name: 'Git', level: 93, icon: '📂', category: 'Tools' },
19
+ { name: 'Figma', level: 85, icon: '🖌️', category: 'Design' },
20
+ { name: 'GraphQL', level: 80, icon: '📊', category: 'Backend' },
21
+ ];
22
+
23
+ export function SkillsGrid() {
24
+ return (
25
+ <section className="skills-section">
26
+ <h2 className="section-title">Skills & Technologies</h2>
27
+ <p className="section-subtitle">Tools and technologies I work with on a daily basis</p>
28
+ <div className="skills-grid">
29
+ {skills.map((skill) => (
30
+ <div key={skill.name} className="skill-card">
31
+ <div className="skill-header">
32
+ <span className="skill-icon">{skill.icon}</span>
33
+ <span className="skill-category">{skill.category}</span>
34
+ </div>
35
+ <h4 className="skill-name">{skill.name}</h4>
36
+ <div className="skill-bar">
37
+ <div className="skill-fill" style={{ width: `${skill.level}%` }} />
38
+ </div>
39
+ <span className="skill-level">{skill.level}%</span>
40
+ </div>
41
+ ))}
42
+ </div>
43
+ </section>
44
+ );
45
+ }
@@ -0,0 +1,138 @@
1
+ 'use client';
2
+
3
+ import { useState } from 'react';
4
+
5
+ export default function ContactPage() {
6
+ const [formData, setFormData] = useState({ name: '', email: '', subject: '', message: '' });
7
+ const [submitted, setSubmitted] = useState(false);
8
+
9
+ const handleSubmit = (e: React.FormEvent) => {
10
+ e.preventDefault();
11
+ setSubmitted(true);
12
+ };
13
+
14
+ const handleChange = (e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement>) => {
15
+ setFormData({ ...formData, [e.target.name]: e.target.value });
16
+ };
17
+
18
+ return (
19
+ <div className="contact-page">
20
+ <div className="contact-header">
21
+ <h1>Get in Touch</h1>
22
+ <p>Have a project in mind or just want to say hello? I would love to hear from you.</p>
23
+ </div>
24
+
25
+ <div className="contact-grid">
26
+ <div className="contact-form-card">
27
+ {submitted ? (
28
+ <div className="success-message">
29
+ <span className="success-icon">✅</span>
30
+ <h3>Message Sent!</h3>
31
+ <p>Thank you for reaching out. I will get back to you as soon as possible.</p>
32
+ <button className="btn btn-primary" onClick={() => setSubmitted(false)}>Send Another</button>
33
+ </div>
34
+ ) : (
35
+ <form onSubmit={handleSubmit}>
36
+ <div className="form-group">
37
+ <label htmlFor="name">Name</label>
38
+ <input
39
+ type="text"
40
+ id="name"
41
+ name="name"
42
+ value={formData.name}
43
+ onChange={handleChange}
44
+ placeholder="Your name"
45
+ required
46
+ />
47
+ </div>
48
+ <div className="form-group">
49
+ <label htmlFor="email">Email</label>
50
+ <input
51
+ type="email"
52
+ id="email"
53
+ name="email"
54
+ value={formData.email}
55
+ onChange={handleChange}
56
+ placeholder="your@email.com"
57
+ required
58
+ />
59
+ </div>
60
+ <div className="form-group">
61
+ <label htmlFor="subject">Subject</label>
62
+ <select id="subject" name="subject" value={formData.subject} onChange={handleChange} required>
63
+ <option value="">Select a subject</option>
64
+ <option value="project">Project Inquiry</option>
65
+ <option value="collaboration">Collaboration</option>
66
+ <option value="freelance">Freelance Work</option>
67
+ <option value="other">Other</option>
68
+ </select>
69
+ </div>
70
+ <div className="form-group">
71
+ <label htmlFor="message">Message</label>
72
+ <textarea
73
+ id="message"
74
+ name="message"
75
+ value={formData.message}
76
+ onChange={handleChange}
77
+ placeholder="Tell me about your project..."
78
+ rows={5}
79
+ required
80
+ />
81
+ </div>
82
+ <button type="submit" className="btn btn-primary btn-lg btn-full">Send Message</button>
83
+ </form>
84
+ )}
85
+ </div>
86
+
87
+ <div className="contact-info-section">
88
+ <div className="contact-info-card">
89
+ <h3>Contact Information</h3>
90
+ <div className="info-item">
91
+ <span className="info-icon">📧</span>
92
+ <div>
93
+ <p className="info-label">Email</p>
94
+ <p className="info-value">hello@{'{{projectName}}'}.com</p>
95
+ </div>
96
+ </div>
97
+ <div className="info-item">
98
+ <span className="info-icon">📍</span>
99
+ <div>
100
+ <p className="info-label">Location</p>
101
+ <p className="info-value">San Francisco, CA</p>
102
+ </div>
103
+ </div>
104
+ <div className="info-item">
105
+ <span className="info-icon">🕐</span>
106
+ <div>
107
+ <p className="info-label">Availability</p>
108
+ <p className="info-value">Open for freelance projects</p>
109
+ </div>
110
+ </div>
111
+ </div>
112
+
113
+ <div className="contact-info-card">
114
+ <h3>Social Links</h3>
115
+ <div className="social-grid">
116
+ <a href="#" className="social-card">
117
+ <span>💼</span>
118
+ <span>LinkedIn</span>
119
+ </a>
120
+ <a href="#" className="social-card">
121
+ <span>📂</span>
122
+ <span>GitHub</span>
123
+ </a>
124
+ <a href="#" className="social-card">
125
+ <span>🐦</span>
126
+ <span>Twitter</span>
127
+ </a>
128
+ <a href="#" className="social-card">
129
+ <span>📸</span>
130
+ <span>Dribbble</span>
131
+ </a>
132
+ </div>
133
+ </div>
134
+ </div>
135
+ </div>
136
+ </div>
137
+ );
138
+ }
@@ -0,0 +1,197 @@
1
+ /* === PORTFOLIO TEMPLATE STYLES === */
2
+ *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
3
+
4
+ :root {
5
+ --primary: #4f46e5;
6
+ --primary-hover: #4338ca;
7
+ --dark: #111827;
8
+ --text: #374151;
9
+ --text-light: #6b7280;
10
+ --bg: #f9fafb;
11
+ --white: #ffffff;
12
+ --border: #e5e7eb;
13
+ --radius: 12px;
14
+ --shadow: 0 1px 3px rgba(0,0,0,0.08);
15
+ --shadow-lg: 0 10px 25px rgba(0,0,0,0.1);
16
+ }
17
+
18
+ body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; color: var(--text); background: var(--bg); line-height: 1.6; }
19
+ a { text-decoration: none; color: inherit; }
20
+
21
+ /* Navbar */
22
+ .navbar { background: var(--white); border-bottom: 1px solid var(--border); position: sticky; top: 0; z-index: 100; }
23
+ .navbar-container { max-width: 1100px; margin: 0 auto; padding: 0 1.5rem; display: flex; align-items: center; justify-content: space-between; height: 64px; }
24
+ .navbar-logo { display: flex; align-items: center; gap: 0.5rem; font-size: 1.25rem; font-weight: 700; color: var(--dark); }
25
+ .logo-icon { font-size: 1.4rem; }
26
+ .navbar-nav { display: flex; gap: 1.75rem; }
27
+ .navbar-link { color: var(--text); font-weight: 500; transition: color 0.2s; padding: 0.25rem 0; border-bottom: 2px solid transparent; }
28
+ .navbar-link:hover { color: var(--primary); }
29
+ .navbar-link.active { color: var(--primary); border-bottom-color: var(--primary); }
30
+
31
+ /* Home Page */
32
+ .home-page { max-width: 1100px; margin: 0 auto; padding: 0 1.5rem; }
33
+
34
+ /* Hero */
35
+ .hero { display: grid; grid-template-columns: 1fr 1fr; gap: 3rem; align-items: center; padding: 4rem 0; }
36
+ .hero-greeting { font-size: 1.1rem; color: var(--primary); font-weight: 600; margin-bottom: 0.5rem; }
37
+ .hero-name { font-size: 3rem; font-weight: 800; color: var(--dark); line-height: 1.1; margin-bottom: 0.5rem; }
38
+ .hero-title { font-size: 1.35rem; color: var(--text-light); font-weight: 500; margin-bottom: 1rem; }
39
+ .hero-description { font-size: 1.05rem; color: var(--text); margin-bottom: 2rem; max-width: 500px; }
40
+ .hero-actions { display: flex; gap: 1rem; }
41
+ .hero-visual { display: flex; align-items: center; justify-content: center; }
42
+ .hero-emoji { font-size: 10rem; }
43
+
44
+ /* Section Styles */
45
+ .section-title { font-size: 1.75rem; font-weight: 700; color: var(--dark); text-align: center; }
46
+ .section-subtitle { text-align: center; color: var(--text-light); margin-top: 0.5rem; margin-bottom: 2rem; }
47
+ .section-cta { text-align: center; margin-top: 2rem; }
48
+
49
+ /* Featured Section */
50
+ .featured-section { padding: 4rem 0; }
51
+
52
+ /* Projects Grid */
53
+ .projects-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); gap: 1.5rem; }
54
+
55
+ /* Project Card */
56
+ .project-card { background: var(--white); border-radius: var(--radius); overflow: hidden; box-shadow: var(--shadow); transition: transform 0.2s, box-shadow 0.2s; }
57
+ .project-card:hover { transform: translateY(-4px); box-shadow: var(--shadow-lg); }
58
+ .project-image { height: 200px; display: flex; align-items: center; justify-content: center; font-size: 4rem; background: linear-gradient(135deg, #eef2ff, #e0e7ff); }
59
+ .project-info { padding: 1.25rem; }
60
+ .project-category { font-size: 0.75rem; font-weight: 600; color: var(--primary); text-transform: uppercase; letter-spacing: 0.05em; }
61
+ .project-title { font-size: 1.15rem; font-weight: 700; color: var(--dark); margin: 0.35rem 0; }
62
+ .project-description { font-size: 0.9rem; color: var(--text); margin-bottom: 1rem; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
63
+ .project-tech { display: flex; flex-wrap: wrap; gap: 0.4rem; margin-bottom: 1rem; }
64
+ .tech-tag { background: #eef2ff; color: var(--primary); padding: 0.2rem 0.6rem; border-radius: 4px; font-size: 0.75rem; font-weight: 500; }
65
+ .project-link { color: var(--primary); font-weight: 600; font-size: 0.9rem; }
66
+ .project-link:hover { text-decoration: underline; }
67
+
68
+ /* Skills Section */
69
+ .skills-section { padding: 4rem 0; }
70
+ .skills-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); gap: 1rem; }
71
+ .skill-card { background: var(--white); padding: 1.25rem; border-radius: var(--radius); box-shadow: var(--shadow); }
72
+ .skill-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 0.5rem; }
73
+ .skill-icon { font-size: 1.5rem; }
74
+ .skill-category { font-size: 0.7rem; font-weight: 600; color: var(--text-light); text-transform: uppercase; }
75
+ .skill-name { font-size: 0.95rem; font-weight: 600; color: var(--dark); margin-bottom: 0.5rem; }
76
+ .skill-bar { width: 100%; height: 6px; background: var(--bg); border-radius: 3px; overflow: hidden; margin-bottom: 0.25rem; }
77
+ .skill-fill { height: 100%; background: linear-gradient(90deg, var(--primary), #818cf8); border-radius: 3px; transition: width 0.5s ease; }
78
+ .skill-level { font-size: 0.75rem; color: var(--text-light); font-weight: 600; }
79
+
80
+ /* CTA Section */
81
+ .cta-section { text-align: center; padding: 4rem 2rem; background: linear-gradient(135deg, var(--primary), #7c3aed); border-radius: var(--radius); margin: 4rem 0; color: var(--white); }
82
+ .cta-section h2 { font-size: 2rem; font-weight: 800; margin-bottom: 0.75rem; }
83
+ .cta-section p { font-size: 1.1rem; opacity: 0.9; margin-bottom: 1.5rem; max-width: 500px; margin-left: auto; margin-right: auto; }
84
+ .cta-section .btn-primary { background: var(--white); color: var(--primary); }
85
+ .cta-section .btn-primary:hover { background: #f3f4f6; }
86
+
87
+ /* Projects Page */
88
+ .projects-page { max-width: 1100px; margin: 0 auto; padding: 2rem 1.5rem; }
89
+ .projects-header { text-align: center; margin-bottom: 2rem; }
90
+ .projects-header h1 { font-size: 2rem; font-weight: 800; color: var(--dark); }
91
+ .projects-header p { color: var(--text-light); margin-top: 0.5rem; }
92
+ .filter-group { display: flex; justify-content: center; gap: 0.5rem; margin-bottom: 2rem; flex-wrap: wrap; }
93
+ .filter-btn { padding: 0.5rem 1.25rem; border: 2px solid var(--border); border-radius: 50px; background: var(--white); cursor: pointer; font-weight: 500; color: var(--text); transition: all 0.2s; font-size: 0.85rem; }
94
+ .filter-btn:hover, .filter-btn.active { background: var(--primary); color: var(--white); border-color: var(--primary); }
95
+ .empty-state { text-align: center; padding: 3rem; color: var(--text-light); }
96
+
97
+ /* About Page */
98
+ .about-page { max-width: 900px; margin: 0 auto; padding: 2rem 1.5rem; }
99
+ .about-hero { text-align: center; margin-bottom: 3rem; }
100
+ .about-avatar { font-size: 5rem; margin-bottom: 1rem; }
101
+ .about-hero h1 { font-size: 2rem; font-weight: 800; color: var(--dark); margin-bottom: 1rem; }
102
+ .about-intro { font-size: 1.1rem; color: var(--text); max-width: 600px; margin: 0 auto; }
103
+ .about-section { margin-bottom: 3rem; }
104
+ .about-section h2 { font-size: 1.5rem; font-weight: 700; color: var(--dark); margin-bottom: 1.5rem; }
105
+
106
+ /* Timeline */
107
+ .timeline { display: flex; flex-direction: column; gap: 1.5rem; }
108
+ .timeline-item { display: flex; gap: 1.25rem; background: var(--white); padding: 1.5rem; border-radius: var(--radius); box-shadow: var(--shadow); }
109
+ .timeline-icon { font-size: 2rem; flex-shrink: 0; }
110
+ .timeline-content h3 { font-size: 1.1rem; font-weight: 700; color: var(--dark); }
111
+ .timeline-company { color: var(--primary); font-weight: 600; font-size: 0.9rem; }
112
+ .timeline-period { font-size: 0.8rem; color: var(--text-light); margin-bottom: 0.5rem; }
113
+ .timeline-description { font-size: 0.9rem; color: var(--text); }
114
+
115
+ /* Education */
116
+ .education-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(250px, 1fr)); gap: 1.25rem; }
117
+ .education-card { background: var(--white); padding: 1.5rem; border-radius: var(--radius); box-shadow: var(--shadow); text-align: center; }
118
+ .education-icon { font-size: 2.5rem; display: block; margin-bottom: 0.75rem; }
119
+ .education-card h3 { font-size: 1rem; font-weight: 700; color: var(--dark); }
120
+ .education-school { color: var(--text); font-size: 0.9rem; }
121
+ .education-year { color: var(--text-light); font-size: 0.85rem; }
122
+
123
+ /* About CTA */
124
+ .about-cta { text-align: center; padding: 3rem; background: var(--white); border-radius: var(--radius); box-shadow: var(--shadow); }
125
+ .about-cta h2 { font-size: 1.5rem; font-weight: 700; color: var(--dark); margin-bottom: 0.5rem; }
126
+ .about-cta p { color: var(--text-light); margin-bottom: 1.5rem; }
127
+
128
+ /* Contact Page */
129
+ .contact-page { max-width: 1000px; margin: 0 auto; padding: 2rem 1.5rem; }
130
+ .contact-header { text-align: center; margin-bottom: 2.5rem; }
131
+ .contact-header h1 { font-size: 2rem; font-weight: 800; color: var(--dark); }
132
+ .contact-header p { color: var(--text-light); margin-top: 0.5rem; }
133
+ .contact-grid { display: grid; grid-template-columns: 1.2fr 1fr; gap: 2rem; align-items: start; }
134
+ .contact-form-card { background: var(--white); padding: 2rem; border-radius: var(--radius); box-shadow: var(--shadow); }
135
+ .form-group { margin-bottom: 1.25rem; }
136
+ .form-group label { display: block; font-size: 0.85rem; font-weight: 600; color: var(--text); margin-bottom: 0.35rem; }
137
+ .form-group input, .form-group select, .form-group textarea { width: 100%; padding: 0.75rem 1rem; border: 1px solid var(--border); border-radius: 8px; font-size: 0.95rem; color: var(--text); background: var(--white); font-family: inherit; }
138
+ .form-group input:focus, .form-group select:focus, .form-group textarea:focus { outline: none; border-color: var(--primary); box-shadow: 0 0 0 3px rgba(79,70,229,0.1); }
139
+ .form-group textarea { resize: vertical; }
140
+ .success-message { text-align: center; padding: 2rem; }
141
+ .success-icon { font-size: 3rem; display: block; margin-bottom: 1rem; }
142
+ .success-message h3 { font-size: 1.25rem; color: var(--dark); margin-bottom: 0.5rem; }
143
+ .success-message p { color: var(--text-light); margin-bottom: 1.5rem; }
144
+
145
+ /* Contact Info */
146
+ .contact-info-section { display: flex; flex-direction: column; gap: 1.25rem; }
147
+ .contact-info-card { background: var(--white); padding: 1.5rem; border-radius: var(--radius); box-shadow: var(--shadow); }
148
+ .contact-info-card h3 { font-size: 1.1rem; font-weight: 700; color: var(--dark); margin-bottom: 1rem; }
149
+ .info-item { display: flex; gap: 0.75rem; margin-bottom: 1rem; }
150
+ .info-item:last-child { margin-bottom: 0; }
151
+ .info-icon { font-size: 1.5rem; flex-shrink: 0; }
152
+ .info-label { font-size: 0.8rem; color: var(--text-light); }
153
+ .info-value { font-weight: 600; color: var(--dark); }
154
+ .social-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 0.75rem; }
155
+ .social-card { display: flex; align-items: center; gap: 0.5rem; padding: 0.75rem; background: var(--bg); border-radius: 8px; font-weight: 500; color: var(--text); transition: all 0.2s; }
156
+ .social-card:hover { background: #eef2ff; color: var(--primary); }
157
+
158
+ /* Buttons */
159
+ .btn { display: inline-block; padding: 0.75rem 1.75rem; border-radius: 8px; font-weight: 600; cursor: pointer; border: none; transition: all 0.2s; font-size: 0.95rem; }
160
+ .btn-primary { background: var(--primary); color: var(--white); }
161
+ .btn-primary:hover { background: var(--primary-hover); }
162
+ .btn-outline { background: transparent; color: var(--primary); border: 2px solid var(--primary); }
163
+ .btn-outline:hover { background: var(--primary); color: var(--white); }
164
+ .btn-lg { padding: 0.875rem 2rem; font-size: 1.05rem; }
165
+ .btn-full { width: 100%; text-align: center; }
166
+
167
+ /* Footer */
168
+ .portfolio-footer { background: var(--dark); color: #d1d5db; padding: 3rem 1.5rem 1.5rem; margin-top: 4rem; }
169
+ .footer-container { max-width: 1100px; margin: 0 auto; }
170
+ .footer-grid { display: grid; grid-template-columns: 2fr 1fr 1fr; gap: 2rem; margin-bottom: 2rem; }
171
+ .footer-section h3 { color: var(--white); font-size: 1.15rem; margin-bottom: 0.75rem; }
172
+ .footer-section h4 { color: var(--white); font-size: 0.95rem; margin-bottom: 0.75rem; }
173
+ .footer-section p { font-size: 0.85rem; line-height: 1.6; }
174
+ .footer-section ul { list-style: none; }
175
+ .footer-section li { padding: 0.2rem 0; font-size: 0.85rem; }
176
+ .footer-section a:hover { color: var(--white); }
177
+ .social-links { display: flex; gap: 1rem; font-size: 1.4rem; }
178
+ .footer-bottom { border-top: 1px solid #374151; padding-top: 1.5rem; text-align: center; font-size: 0.8rem; }
179
+
180
+ /* Responsive */
181
+ @media (max-width: 768px) {
182
+ .hero { grid-template-columns: 1fr; text-align: center; padding: 2.5rem 0; }
183
+ .hero-description { margin: 0 auto 2rem; }
184
+ .hero-actions { justify-content: center; }
185
+ .hero-emoji { font-size: 6rem; }
186
+ .hero-name { font-size: 2rem; }
187
+ .projects-grid { grid-template-columns: 1fr; }
188
+ .skills-grid { grid-template-columns: repeat(auto-fill, minmax(140px, 1fr)); }
189
+ .contact-grid { grid-template-columns: 1fr; }
190
+ .footer-grid { grid-template-columns: 1fr; }
191
+ .navbar-nav { gap: 1rem; }
192
+ }
193
+
194
+ @media (max-width: 480px) {
195
+ .hero-actions { flex-direction: column; align-items: center; }
196
+ .education-grid { grid-template-columns: 1fr; }
197
+ }
@@ -0,0 +1,20 @@
1
+ import './globals.css';
2
+ import { Navbar } from './components/Navbar';
3
+ import { Footer } from './components/Footer';
4
+
5
+ export const metadata = {
6
+ title: '{{projectName}} - Portfolio',
7
+ description: 'Portfolio and projects showcase for {{projectName}}',
8
+ };
9
+
10
+ export default function RootLayout({ children }: { children: React.ReactNode }) {
11
+ return (
12
+ <html lang="en">
13
+ <body>
14
+ <Navbar />
15
+ <main>{children}</main>
16
+ <Footer />
17
+ </body>
18
+ </html>
19
+ );
20
+ }
@@ -0,0 +1,60 @@
1
+ import Link from 'next/link';
2
+ import { ProjectCard, Project } from './components/ProjectCard';
3
+ import { SkillsGrid } from './components/SkillsGrid';
4
+
5
+ const projects: Project[] = [
6
+ { id: 1, title: 'E-Commerce Platform', description: 'A full-featured online store with cart, checkout, and payment integration. Built with modern web technologies for optimal performance.', tech: ['React', 'Node.js', 'PostgreSQL'], image: '🛒', category: 'Web App', link: '#', featured: true },
7
+ { id: 2, title: 'Task Management Dashboard', description: 'Real-time collaborative task management tool with drag-and-drop, notifications, and team features.', tech: ['Next.js', 'TypeScript', 'MongoDB'], image: '📋', category: 'SaaS', link: '#', featured: true },
8
+ { id: 3, title: 'Weather Analytics App', description: 'Interactive weather visualization app with historical data analysis and forecasting capabilities.', tech: ['React', 'D3.js', 'Python'], image: '🌤️', category: 'Data Viz', link: '#', featured: true },
9
+ { id: 4, title: 'Social Media Mobile App', description: 'Cross-platform social app with real-time messaging, stories, and content sharing features.', tech: ['React Native', 'Firebase', 'Redux'], image: '📱', category: 'Mobile', link: '#', featured: false },
10
+ { id: 5, title: 'AI Content Generator', description: 'AI-powered tool for generating marketing copy, blog posts, and social media content automatically.', tech: ['Python', 'OpenAI', 'FastAPI'], image: '🤖', category: 'AI/ML', link: '#', featured: false },
11
+ { id: 6, title: 'Portfolio Website Builder', description: 'Drag-and-drop portfolio builder with customizable themes, animations, and one-click deployment.', tech: ['Vue.js', 'Node.js', 'AWS'], image: '🎨', category: 'Web App', link: '#', featured: false },
12
+ ];
13
+
14
+ const featuredProjects = projects.filter((p) => p.featured);
15
+
16
+ export default function HomePage() {
17
+ return (
18
+ <div className="home-page">
19
+ <section className="hero">
20
+ <div className="hero-content">
21
+ <p className="hero-greeting">Hello, I am</p>
22
+ <h1 className="hero-name">{'{{projectName}}'}</h1>
23
+ <p className="hero-title">Full-Stack Developer & Designer</p>
24
+ <p className="hero-description">
25
+ I build modern web applications with clean code and thoughtful design.
26
+ Passionate about creating digital experiences that make a real impact.
27
+ </p>
28
+ <div className="hero-actions">
29
+ <Link href="/projects" className="btn btn-primary">View Projects</Link>
30
+ <Link href="/contact" className="btn btn-outline">Get in Touch</Link>
31
+ </div>
32
+ </div>
33
+ <div className="hero-visual">
34
+ <div className="hero-emoji">👨‍💻</div>
35
+ </div>
36
+ </section>
37
+
38
+ <section className="featured-section">
39
+ <h2 className="section-title">Featured Projects</h2>
40
+ <p className="section-subtitle">A selection of my recent work and side projects</p>
41
+ <div className="projects-grid">
42
+ {featuredProjects.map((project) => (
43
+ <ProjectCard key={project.id} project={project} />
44
+ ))}
45
+ </div>
46
+ <div className="section-cta">
47
+ <Link href="/projects" className="btn btn-outline">View All Projects →</Link>
48
+ </div>
49
+ </section>
50
+
51
+ <SkillsGrid />
52
+
53
+ <section className="cta-section">
54
+ <h2>Let us Work Together</h2>
55
+ <p>Have a project in mind? I am always open to discussing new opportunities and creative ideas.</p>
56
+ <Link href="/contact" className="btn btn-primary btn-lg">Start a Conversation</Link>
57
+ </section>
58
+ </div>
59
+ );
60
+ }