@barkajs/barka 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (621) hide show
  1. package/CLAUDE.md +64 -0
  2. package/INVARIANTS.json +43 -0
  3. package/LICENSE +19 -0
  4. package/README.md +566 -0
  5. package/dist/app.d.ts +22 -0
  6. package/dist/app.d.ts.map +1 -0
  7. package/dist/app.js +464 -0
  8. package/dist/app.js.map +1 -0
  9. package/dist/built-in-theme/components/cta/cta.d.ts +5 -0
  10. package/dist/built-in-theme/components/cta/cta.d.ts.map +1 -0
  11. package/dist/built-in-theme/components/cta/cta.js +6 -0
  12. package/dist/built-in-theme/components/cta/cta.js.map +1 -0
  13. package/dist/built-in-theme/components/features/features.d.ts +5 -0
  14. package/dist/built-in-theme/components/features/features.d.ts.map +1 -0
  15. package/dist/built-in-theme/components/features/features.js +7 -0
  16. package/dist/built-in-theme/components/features/features.js.map +1 -0
  17. package/dist/built-in-theme/components/hero/hero.d.ts +5 -0
  18. package/dist/built-in-theme/components/hero/hero.d.ts.map +1 -0
  19. package/dist/built-in-theme/components/hero/hero.js +6 -0
  20. package/dist/built-in-theme/components/hero/hero.js.map +1 -0
  21. package/dist/built-in-theme/components/text/text.d.ts +4 -0
  22. package/dist/built-in-theme/components/text/text.d.ts.map +1 -0
  23. package/dist/built-in-theme/components/text/text.js +7 -0
  24. package/dist/built-in-theme/components/text/text.js.map +1 -0
  25. package/dist/built-in-theme/layouts/article.d.ts +4 -0
  26. package/dist/built-in-theme/layouts/article.d.ts.map +1 -0
  27. package/dist/built-in-theme/layouts/article.js +11 -0
  28. package/dist/built-in-theme/layouts/article.js.map +1 -0
  29. package/dist/built-in-theme/layouts/base.d.ts +7 -0
  30. package/dist/built-in-theme/layouts/base.d.ts.map +1 -0
  31. package/dist/built-in-theme/layouts/base.js +21 -0
  32. package/dist/built-in-theme/layouts/base.js.map +1 -0
  33. package/dist/built-in-theme/layouts/landing-page.d.ts +6 -0
  34. package/dist/built-in-theme/layouts/landing-page.d.ts.map +1 -0
  35. package/dist/built-in-theme/layouts/landing-page.js +6 -0
  36. package/dist/built-in-theme/layouts/landing-page.js.map +1 -0
  37. package/dist/built-in-theme/layouts/page.d.ts +4 -0
  38. package/dist/built-in-theme/layouts/page.d.ts.map +1 -0
  39. package/dist/built-in-theme/layouts/page.js +7 -0
  40. package/dist/built-in-theme/layouts/page.js.map +1 -0
  41. package/dist/cli/build.d.ts +11 -0
  42. package/dist/cli/build.d.ts.map +1 -0
  43. package/dist/cli/build.js +271 -0
  44. package/dist/cli/build.js.map +1 -0
  45. package/dist/cli/create-app.d.ts +4 -0
  46. package/dist/cli/create-app.d.ts.map +1 -0
  47. package/dist/cli/create-app.js +179 -0
  48. package/dist/cli/create-app.js.map +1 -0
  49. package/dist/cli/db-init.d.ts +6 -0
  50. package/dist/cli/db-init.d.ts.map +1 -0
  51. package/dist/cli/db-init.js +28 -0
  52. package/dist/cli/db-init.js.map +1 -0
  53. package/dist/cli/dev.d.ts +10 -0
  54. package/dist/cli/dev.d.ts.map +1 -0
  55. package/dist/cli/dev.js +68 -0
  56. package/dist/cli/dev.js.map +1 -0
  57. package/dist/cli/export-cmd.d.ts +6 -0
  58. package/dist/cli/export-cmd.d.ts.map +1 -0
  59. package/dist/cli/export-cmd.js +12 -0
  60. package/dist/cli/export-cmd.js.map +1 -0
  61. package/dist/cli/import-cmd.d.ts +6 -0
  62. package/dist/cli/import-cmd.d.ts.map +1 -0
  63. package/dist/cli/import-cmd.js +11 -0
  64. package/dist/cli/import-cmd.js.map +1 -0
  65. package/dist/cli/index.d.ts +3 -0
  66. package/dist/cli/index.d.ts.map +1 -0
  67. package/dist/cli/index.js +163 -0
  68. package/dist/cli/index.js.map +1 -0
  69. package/dist/cli/init-cmd.d.ts +20 -0
  70. package/dist/cli/init-cmd.d.ts.map +1 -0
  71. package/dist/cli/init-cmd.js +116 -0
  72. package/dist/cli/init-cmd.js.map +1 -0
  73. package/dist/cli/sync-cmd.d.ts +5 -0
  74. package/dist/cli/sync-cmd.d.ts.map +1 -0
  75. package/dist/cli/sync-cmd.js +17 -0
  76. package/dist/cli/sync-cmd.js.map +1 -0
  77. package/dist/content-engine.d.ts +50 -0
  78. package/dist/content-engine.d.ts.map +1 -0
  79. package/dist/content-engine.js +240 -0
  80. package/dist/content-engine.js.map +1 -0
  81. package/dist/db/connection.d.ts +9 -0
  82. package/dist/db/connection.d.ts.map +1 -0
  83. package/dist/db/connection.js +121 -0
  84. package/dist/db/connection.js.map +1 -0
  85. package/dist/db/schema.d.ts +1178 -0
  86. package/dist/db/schema.d.ts.map +1 -0
  87. package/dist/db/schema.js +79 -0
  88. package/dist/db/schema.js.map +1 -0
  89. package/dist/index.d.ts +12 -0
  90. package/dist/index.d.ts.map +1 -0
  91. package/dist/index.js +8 -0
  92. package/dist/index.js.map +1 -0
  93. package/dist/lib/auth.d.ts +14 -0
  94. package/dist/lib/auth.d.ts.map +1 -0
  95. package/dist/lib/auth.js +40 -0
  96. package/dist/lib/auth.js.map +1 -0
  97. package/dist/lib/config-files.d.ts +8 -0
  98. package/dist/lib/config-files.d.ts.map +1 -0
  99. package/dist/lib/config-files.js +72 -0
  100. package/dist/lib/config-files.js.map +1 -0
  101. package/dist/lib/content-files.d.ts +5 -0
  102. package/dist/lib/content-files.d.ts.map +1 -0
  103. package/dist/lib/content-files.js +156 -0
  104. package/dist/lib/content-files.js.map +1 -0
  105. package/dist/lib/i18n.d.ts +33 -0
  106. package/dist/lib/i18n.d.ts.map +1 -0
  107. package/dist/lib/i18n.js +247 -0
  108. package/dist/lib/i18n.js.map +1 -0
  109. package/dist/lib/multisite.d.ts +23 -0
  110. package/dist/lib/multisite.d.ts.map +1 -0
  111. package/dist/lib/multisite.js +73 -0
  112. package/dist/lib/multisite.js.map +1 -0
  113. package/dist/lib/paths.d.ts +6 -0
  114. package/dist/lib/paths.d.ts.map +1 -0
  115. package/dist/lib/paths.js +25 -0
  116. package/dist/lib/paths.js.map +1 -0
  117. package/dist/lib/schema-loader.d.ts +25 -0
  118. package/dist/lib/schema-loader.d.ts.map +1 -0
  119. package/dist/lib/schema-loader.js +45 -0
  120. package/dist/lib/schema-loader.js.map +1 -0
  121. package/dist/lib/seo.d.ts +18 -0
  122. package/dist/lib/seo.d.ts.map +1 -0
  123. package/dist/lib/seo.js +212 -0
  124. package/dist/lib/seo.js.map +1 -0
  125. package/dist/lib/sync.d.ts +33 -0
  126. package/dist/lib/sync.d.ts.map +1 -0
  127. package/dist/lib/sync.js +308 -0
  128. package/dist/lib/sync.js.map +1 -0
  129. package/dist/lib/taxonomy.d.ts +29 -0
  130. package/dist/lib/taxonomy.d.ts.map +1 -0
  131. package/dist/lib/taxonomy.js +170 -0
  132. package/dist/lib/taxonomy.js.map +1 -0
  133. package/dist/lib/template-renderer.d.ts +6 -0
  134. package/dist/lib/template-renderer.d.ts.map +1 -0
  135. package/dist/lib/template-renderer.js +80 -0
  136. package/dist/lib/template-renderer.js.map +1 -0
  137. package/dist/lib/theme-loader.d.ts +5 -0
  138. package/dist/lib/theme-loader.d.ts.map +1 -0
  139. package/dist/lib/theme-loader.js +199 -0
  140. package/dist/lib/theme-loader.js.map +1 -0
  141. package/dist/lib/theme-types.d.ts +39 -0
  142. package/dist/lib/theme-types.d.ts.map +1 -0
  143. package/dist/lib/theme-types.js +2 -0
  144. package/dist/lib/theme-types.js.map +1 -0
  145. package/dist/lib/types.d.ts +91 -0
  146. package/dist/lib/types.d.ts.map +1 -0
  147. package/dist/lib/types.js +2 -0
  148. package/dist/lib/types.js.map +1 -0
  149. package/dist/routes/admin/content-edit.d.ts +10 -0
  150. package/dist/routes/admin/content-edit.d.ts.map +1 -0
  151. package/dist/routes/admin/content-edit.js +325 -0
  152. package/dist/routes/admin/content-edit.js.map +1 -0
  153. package/dist/routes/admin/content-list.d.ts +10 -0
  154. package/dist/routes/admin/content-list.d.ts.map +1 -0
  155. package/dist/routes/admin/content-list.js +162 -0
  156. package/dist/routes/admin/content-list.js.map +1 -0
  157. package/dist/routes/admin/content.d.ts +3 -0
  158. package/dist/routes/admin/content.d.ts.map +1 -0
  159. package/dist/routes/admin/content.js +12 -0
  160. package/dist/routes/admin/content.js.map +1 -0
  161. package/dist/routes/admin/dashboard.d.ts +4 -0
  162. package/dist/routes/admin/dashboard.d.ts.map +1 -0
  163. package/dist/routes/admin/dashboard.js +121 -0
  164. package/dist/routes/admin/dashboard.js.map +1 -0
  165. package/dist/routes/admin/export-route.d.ts +10 -0
  166. package/dist/routes/admin/export-route.d.ts.map +1 -0
  167. package/dist/routes/admin/export-route.js +19 -0
  168. package/dist/routes/admin/export-route.js.map +1 -0
  169. package/dist/routes/admin/index.d.ts +9 -0
  170. package/dist/routes/admin/index.d.ts.map +1 -0
  171. package/dist/routes/admin/index.js +27 -0
  172. package/dist/routes/admin/index.js.map +1 -0
  173. package/dist/routes/admin/layout.d.ts +17 -0
  174. package/dist/routes/admin/layout.d.ts.map +1 -0
  175. package/dist/routes/admin/layout.js +110 -0
  176. package/dist/routes/admin/layout.js.map +1 -0
  177. package/dist/routes/admin/login.d.ts +5 -0
  178. package/dist/routes/admin/login.d.ts.map +1 -0
  179. package/dist/routes/admin/login.js +113 -0
  180. package/dist/routes/admin/login.js.map +1 -0
  181. package/dist/routes/admin/media.d.ts +10 -0
  182. package/dist/routes/admin/media.d.ts.map +1 -0
  183. package/dist/routes/admin/media.js +192 -0
  184. package/dist/routes/admin/media.js.map +1 -0
  185. package/dist/routes/admin/middleware.d.ts +8 -0
  186. package/dist/routes/admin/middleware.d.ts.map +1 -0
  187. package/dist/routes/admin/middleware.js +29 -0
  188. package/dist/routes/admin/middleware.js.map +1 -0
  189. package/dist/routes/admin/section-builder.d.ts +10 -0
  190. package/dist/routes/admin/section-builder.d.ts.map +1 -0
  191. package/dist/routes/admin/section-builder.js +487 -0
  192. package/dist/routes/admin/section-builder.js.map +1 -0
  193. package/dist/routes/admin/settings.d.ts +10 -0
  194. package/dist/routes/admin/settings.d.ts.map +1 -0
  195. package/dist/routes/admin/settings.js +209 -0
  196. package/dist/routes/admin/settings.js.map +1 -0
  197. package/dist/routes/admin/site-switcher.d.ts +3 -0
  198. package/dist/routes/admin/site-switcher.d.ts.map +1 -0
  199. package/dist/routes/admin/site-switcher.js +36 -0
  200. package/dist/routes/admin/site-switcher.js.map +1 -0
  201. package/dist/routes/admin/taxonomy.d.ts +10 -0
  202. package/dist/routes/admin/taxonomy.d.ts.map +1 -0
  203. package/dist/routes/admin/taxonomy.js +297 -0
  204. package/dist/routes/admin/taxonomy.js.map +1 -0
  205. package/dist/routes/admin/users.d.ts +10 -0
  206. package/dist/routes/admin/users.d.ts.map +1 -0
  207. package/dist/routes/admin/users.js +227 -0
  208. package/dist/routes/admin/users.js.map +1 -0
  209. package/package.json +75 -0
  210. package/src/built-in-theme/components/cta/cta.tsx +18 -0
  211. package/src/built-in-theme/components/cta/schema.yaml +17 -0
  212. package/src/built-in-theme/components/features/features.tsx +18 -0
  213. package/src/built-in-theme/components/features/schema.yaml +22 -0
  214. package/src/built-in-theme/components/hero/hero.tsx +18 -0
  215. package/src/built-in-theme/components/hero/schema.yaml +17 -0
  216. package/src/built-in-theme/components/text/schema.yaml +12 -0
  217. package/src/built-in-theme/components/text/text.tsx +11 -0
  218. package/src/built-in-theme/layouts/article.tsx +20 -0
  219. package/src/built-in-theme/layouts/base.tsx +50 -0
  220. package/src/built-in-theme/layouts/landing-page.tsx +15 -0
  221. package/src/built-in-theme/layouts/page.tsx +11 -0
  222. package/src/built-in-theme/theme.yaml +4 -0
  223. package/starters/blank/config/content-types.yaml +47 -0
  224. package/starters/blank/config/section-types.yaml +115 -0
  225. package/starters/blank/config/settings.yaml +12 -0
  226. package/starters/blank/content/landing-pages/homepage.yaml +55 -0
  227. package/starters/blank/content/pages/about.md +27 -0
  228. package/starters/blank/starter.yaml +14 -0
  229. package/starters/blank/themes/starter/_types.ts +93 -0
  230. package/starters/blank/themes/starter/components/blog-listing/blog-listing.tsx +102 -0
  231. package/starters/blank/themes/starter/components/blog-listing/schema.yaml +21 -0
  232. package/starters/blank/themes/starter/components/columns/columns.tsx +101 -0
  233. package/starters/blank/themes/starter/components/columns/schema.yaml +23 -0
  234. package/starters/blank/themes/starter/components/counters/counters.css +13 -0
  235. package/starters/blank/themes/starter/components/counters/counters.tsx +81 -0
  236. package/starters/blank/themes/starter/components/counters/schema.yaml +23 -0
  237. package/starters/blank/themes/starter/components/cta/cta.tsx +57 -0
  238. package/starters/blank/themes/starter/components/cta/schema.yaml +30 -0
  239. package/starters/blank/themes/starter/components/faq/faq.tsx +77 -0
  240. package/starters/blank/themes/starter/components/faq/schema.yaml +20 -0
  241. package/starters/blank/themes/starter/components/features/features.tsx +82 -0
  242. package/starters/blank/themes/starter/components/features/schema.yaml +19 -0
  243. package/starters/blank/themes/starter/components/form/form.tsx +126 -0
  244. package/starters/blank/themes/starter/components/form/schema.yaml +18 -0
  245. package/starters/blank/themes/starter/components/gallery/gallery.tsx +85 -0
  246. package/starters/blank/themes/starter/components/gallery/schema.yaml +27 -0
  247. package/starters/blank/themes/starter/components/hero/hero.tsx +77 -0
  248. package/starters/blank/themes/starter/components/hero/schema.yaml +26 -0
  249. package/starters/blank/themes/starter/components/logo-slider/logo-slider.css +21 -0
  250. package/starters/blank/themes/starter/components/logo-slider/logo-slider.tsx +81 -0
  251. package/starters/blank/themes/starter/components/logo-slider/schema.yaml +23 -0
  252. package/starters/blank/themes/starter/components/pricing/pricing.tsx +141 -0
  253. package/starters/blank/themes/starter/components/pricing/schema.yaml +44 -0
  254. package/starters/blank/themes/starter/components/testimonials/schema.yaml +26 -0
  255. package/starters/blank/themes/starter/components/testimonials/testimonials.tsx +100 -0
  256. package/starters/blank/themes/starter/components/text/schema.yaml +12 -0
  257. package/starters/blank/themes/starter/components/text/text.tsx +62 -0
  258. package/starters/blank/themes/starter/components/text-with-image/schema.yaml +30 -0
  259. package/starters/blank/themes/starter/components/text-with-image/text-with-image.tsx +86 -0
  260. package/starters/blank/themes/starter/components/video/schema.yaml +19 -0
  261. package/starters/blank/themes/starter/components/video/video.tsx +98 -0
  262. package/starters/blank/themes/starter/layouts/article.tsx +42 -0
  263. package/starters/blank/themes/starter/layouts/base.tsx +92 -0
  264. package/starters/blank/themes/starter/layouts/landing-page.tsx +14 -0
  265. package/starters/blank/themes/starter/layouts/page.tsx +29 -0
  266. package/starters/blank/themes/starter/partials/footer.tsx +22 -0
  267. package/starters/blank/themes/starter/partials/header.tsx +32 -0
  268. package/starters/blank/themes/starter/static/style.css +125 -0
  269. package/starters/blank/themes/starter/theme.yaml +16 -0
  270. package/starters/kadoservices/config/content-types.yaml +239 -0
  271. package/starters/kadoservices/config/languages.yaml +12 -0
  272. package/starters/kadoservices/config/section-types.yaml +379 -0
  273. package/starters/kadoservices/config/settings.yaml +15 -0
  274. package/starters/kadoservices/config/sites.yaml +14 -0
  275. package/starters/kadoservices/config/taxonomies.yaml +61 -0
  276. package/starters/kadoservices/config/translations/de.yaml +120 -0
  277. package/starters/kadoservices/config/translations/en.yaml +120 -0
  278. package/starters/kadoservices/config/translations/pl.yaml +120 -0
  279. package/starters/kadoservices/content/articles/employer-branding-strategies.md +61 -0
  280. package/starters/kadoservices/content/articles/hiring-trends-2026.md +61 -0
  281. package/starters/kadoservices/content/articles/hiring-trends-2026.pl.md +61 -0
  282. package/starters/kadoservices/content/articles/labor-law-changes.md +78 -0
  283. package/starters/kadoservices/content/articles/temporary-staffing-guide.md +76 -0
  284. package/starters/kadoservices/content/articles/temporary-staffing-guide.pl.md +76 -0
  285. package/starters/kadoservices/content/case-studies/finance-rpo-program.md +68 -0
  286. package/starters/kadoservices/content/case-studies/manufacturing-mass-recruitment.md +65 -0
  287. package/starters/kadoservices/content/case-studies/manufacturing-mass-recruitment.pl.md +65 -0
  288. package/starters/kadoservices/content/case-studies/retail-seasonal-staffing.md +69 -0
  289. package/starters/kadoservices/content/industries/finance-shared-services.md +59 -0
  290. package/starters/kadoservices/content/industries/healthcare.md +64 -0
  291. package/starters/kadoservices/content/industries/it-technology.md +61 -0
  292. package/starters/kadoservices/content/industries/logistics.md +54 -0
  293. package/starters/kadoservices/content/industries/manufacturing.md +61 -0
  294. package/starters/kadoservices/content/industries/retail.md +56 -0
  295. package/starters/kadoservices/content/landing-pages/homepage.pl.yaml +198 -0
  296. package/starters/kadoservices/content/landing-pages/homepage.yaml +198 -0
  297. package/starters/kadoservices/content/locations/gdansk.md +32 -0
  298. package/starters/kadoservices/content/locations/krakow.md +30 -0
  299. package/starters/kadoservices/content/locations/warsaw.md +30 -0
  300. package/starters/kadoservices/content/locations/wroclaw.md +32 -0
  301. package/starters/kadoservices/content/pages/about.md +58 -0
  302. package/starters/kadoservices/content/pages/about.pl.md +58 -0
  303. package/starters/kadoservices/content/pages/careers.md +55 -0
  304. package/starters/kadoservices/content/pages/clients.md +65 -0
  305. package/starters/kadoservices/content/pages/contact.md +74 -0
  306. package/starters/kadoservices/content/pages/contact.pl.md +74 -0
  307. package/starters/kadoservices/content/pages/faq.md +76 -0
  308. package/starters/kadoservices/content/services/employer-branding.md +70 -0
  309. package/starters/kadoservices/content/services/hr-consulting.md +64 -0
  310. package/starters/kadoservices/content/services/outsourcing-rpo.md +78 -0
  311. package/starters/kadoservices/content/services/outsourcing-rpo.pl.md +67 -0
  312. package/starters/kadoservices/content/services/payroll-hr-admin.md +66 -0
  313. package/starters/kadoservices/content/services/permanent-recruitment.md +78 -0
  314. package/starters/kadoservices/content/services/permanent-recruitment.pl.md +78 -0
  315. package/starters/kadoservices/content/services/temporary-staffing.md +78 -0
  316. package/starters/kadoservices/content/team/anna-kowalska.md +26 -0
  317. package/starters/kadoservices/content/team/jan-lewandowski.md +26 -0
  318. package/starters/kadoservices/content/team/katarzyna-zielinska.md +26 -0
  319. package/starters/kadoservices/content/team/maria-wisniewska.md +28 -0
  320. package/starters/kadoservices/content/team/tomasz-nowak.md +26 -0
  321. package/starters/kadoservices/starter.yaml +15 -0
  322. package/starters/kadoservices/themes/kadoservices/_types.ts +93 -0
  323. package/starters/kadoservices/themes/kadoservices/components/blog-listing/blog-listing.tsx +197 -0
  324. package/starters/kadoservices/themes/kadoservices/components/blog-listing/schema.yaml +21 -0
  325. package/starters/kadoservices/themes/kadoservices/components/columns/columns.tsx +104 -0
  326. package/starters/kadoservices/themes/kadoservices/components/columns/schema.yaml +23 -0
  327. package/starters/kadoservices/themes/kadoservices/components/counters/counters.css +13 -0
  328. package/starters/kadoservices/themes/kadoservices/components/counters/counters.tsx +103 -0
  329. package/starters/kadoservices/themes/kadoservices/components/counters/schema.yaml +23 -0
  330. package/starters/kadoservices/themes/kadoservices/components/cta/cta.tsx +100 -0
  331. package/starters/kadoservices/themes/kadoservices/components/cta/schema.yaml +30 -0
  332. package/starters/kadoservices/themes/kadoservices/components/faq/faq.tsx +77 -0
  333. package/starters/kadoservices/themes/kadoservices/components/faq/schema.yaml +20 -0
  334. package/starters/kadoservices/themes/kadoservices/components/features/features.tsx +151 -0
  335. package/starters/kadoservices/themes/kadoservices/components/features/schema.yaml +19 -0
  336. package/starters/kadoservices/themes/kadoservices/components/form/form.tsx +135 -0
  337. package/starters/kadoservices/themes/kadoservices/components/form/schema.yaml +18 -0
  338. package/starters/kadoservices/themes/kadoservices/components/gallery/gallery.tsx +90 -0
  339. package/starters/kadoservices/themes/kadoservices/components/gallery/schema.yaml +27 -0
  340. package/starters/kadoservices/themes/kadoservices/components/hero/hero.tsx +175 -0
  341. package/starters/kadoservices/themes/kadoservices/components/hero/schema.yaml +26 -0
  342. package/starters/kadoservices/themes/kadoservices/components/logo-slider/logo-slider.css +21 -0
  343. package/starters/kadoservices/themes/kadoservices/components/logo-slider/logo-slider.tsx +83 -0
  344. package/starters/kadoservices/themes/kadoservices/components/logo-slider/schema.yaml +23 -0
  345. package/starters/kadoservices/themes/kadoservices/components/pricing/pricing.tsx +161 -0
  346. package/starters/kadoservices/themes/kadoservices/components/pricing/schema.yaml +44 -0
  347. package/starters/kadoservices/themes/kadoservices/components/testimonials/schema.yaml +26 -0
  348. package/starters/kadoservices/themes/kadoservices/components/testimonials/testimonials.css +13 -0
  349. package/starters/kadoservices/themes/kadoservices/components/testimonials/testimonials.tsx +150 -0
  350. package/starters/kadoservices/themes/kadoservices/components/text/schema.yaml +12 -0
  351. package/starters/kadoservices/themes/kadoservices/components/text/text.tsx +67 -0
  352. package/starters/kadoservices/themes/kadoservices/components/text-with-image/schema.yaml +30 -0
  353. package/starters/kadoservices/themes/kadoservices/components/text-with-image/text-with-image.tsx +92 -0
  354. package/starters/kadoservices/themes/kadoservices/components/video/schema.yaml +19 -0
  355. package/starters/kadoservices/themes/kadoservices/components/video/video.tsx +103 -0
  356. package/starters/kadoservices/themes/kadoservices/layouts/404.tsx +96 -0
  357. package/starters/kadoservices/themes/kadoservices/layouts/article.tsx +140 -0
  358. package/starters/kadoservices/themes/kadoservices/layouts/base.tsx +669 -0
  359. package/starters/kadoservices/themes/kadoservices/layouts/case-study.tsx +240 -0
  360. package/starters/kadoservices/themes/kadoservices/layouts/index--articles.tsx +250 -0
  361. package/starters/kadoservices/themes/kadoservices/layouts/index--case-studies.tsx +232 -0
  362. package/starters/kadoservices/themes/kadoservices/layouts/index--services.tsx +237 -0
  363. package/starters/kadoservices/themes/kadoservices/layouts/index.tsx +96 -0
  364. package/starters/kadoservices/themes/kadoservices/layouts/industry.tsx +121 -0
  365. package/starters/kadoservices/themes/kadoservices/layouts/landing-page.tsx +14 -0
  366. package/starters/kadoservices/themes/kadoservices/layouts/page--about.tsx +158 -0
  367. package/starters/kadoservices/themes/kadoservices/layouts/page--careers.tsx +214 -0
  368. package/starters/kadoservices/themes/kadoservices/layouts/page--contact.tsx +218 -0
  369. package/starters/kadoservices/themes/kadoservices/layouts/page.tsx +45 -0
  370. package/starters/kadoservices/themes/kadoservices/layouts/service.tsx +235 -0
  371. package/starters/kadoservices/themes/kadoservices/partials/footer.tsx +109 -0
  372. package/starters/kadoservices/themes/kadoservices/partials/header.tsx +53 -0
  373. package/starters/kadoservices/themes/kadoservices/static/images/article-platform-engineering.jpg +0 -0
  374. package/starters/kadoservices/themes/kadoservices/static/images/barka-logo.png +0 -0
  375. package/starters/kadoservices/themes/kadoservices/static/images/case-study-banking-dashboard.jpg +0 -0
  376. package/starters/kadoservices/themes/kadoservices/static/images/case-study-banking.png +0 -0
  377. package/starters/kadoservices/themes/kadoservices/static/images/case-study-ecommerce-dashboard.jpg +0 -0
  378. package/starters/kadoservices/themes/kadoservices/static/images/case-study-healthcare-dashboard.jpg +0 -0
  379. package/starters/kadoservices/themes/kadoservices/static/images/case-study-healthcare.png +0 -0
  380. package/starters/kadoservices/themes/kadoservices/static/images/case-study-retail.png +0 -0
  381. package/starters/kadoservices/themes/kadoservices/static/images/handshake.jpg +0 -0
  382. package/starters/kadoservices/themes/kadoservices/static/images/hero-bg.jpg +0 -0
  383. package/starters/kadoservices/themes/kadoservices/static/images/hero-bg.png +0 -0
  384. package/starters/kadoservices/themes/kadoservices/static/images/lokatech-logo.png +0 -0
  385. package/starters/kadoservices/themes/kadoservices/static/images/office-warsaw.png +0 -0
  386. package/starters/kadoservices/themes/kadoservices/static/images/office.jpg +0 -0
  387. package/starters/kadoservices/themes/kadoservices/static/images/team-anna-kowalska.png +0 -0
  388. package/starters/kadoservices/themes/kadoservices/static/images/team-collaboration.jpg +0 -0
  389. package/starters/kadoservices/themes/kadoservices/static/images/team-jan-nowak.png +0 -0
  390. package/starters/kadoservices/themes/kadoservices/static/images/team-katarzyna-kaminska.png +0 -0
  391. package/starters/kadoservices/themes/kadoservices/static/images/team-maria-wisniewska.png +0 -0
  392. package/starters/kadoservices/themes/kadoservices/static/images/team-meeting.jpg +0 -0
  393. package/starters/kadoservices/themes/kadoservices/static/images/team-strategy-session.jpg +0 -0
  394. package/starters/kadoservices/themes/kadoservices/static/images/team-tomasz-lewandowski.png +0 -0
  395. package/starters/kadoservices/themes/kadoservices/static/style.css +542 -0
  396. package/starters/kadoservices/themes/kadoservices/theme.yaml +21 -0
  397. package/starters/kadoservices/themes/starter/_types.ts +93 -0
  398. package/starters/kadoservices/themes/starter/components/blog-listing/blog-listing.tsx +102 -0
  399. package/starters/kadoservices/themes/starter/components/blog-listing/schema.yaml +21 -0
  400. package/starters/kadoservices/themes/starter/components/columns/columns.tsx +101 -0
  401. package/starters/kadoservices/themes/starter/components/columns/schema.yaml +23 -0
  402. package/starters/kadoservices/themes/starter/components/counters/counters.css +13 -0
  403. package/starters/kadoservices/themes/starter/components/counters/counters.tsx +81 -0
  404. package/starters/kadoservices/themes/starter/components/counters/schema.yaml +23 -0
  405. package/starters/kadoservices/themes/starter/components/cta/cta.tsx +57 -0
  406. package/starters/kadoservices/themes/starter/components/cta/schema.yaml +30 -0
  407. package/starters/kadoservices/themes/starter/components/faq/faq.tsx +77 -0
  408. package/starters/kadoservices/themes/starter/components/faq/schema.yaml +20 -0
  409. package/starters/kadoservices/themes/starter/components/features/features.tsx +82 -0
  410. package/starters/kadoservices/themes/starter/components/features/schema.yaml +19 -0
  411. package/starters/kadoservices/themes/starter/components/form/form.tsx +126 -0
  412. package/starters/kadoservices/themes/starter/components/form/schema.yaml +18 -0
  413. package/starters/kadoservices/themes/starter/components/gallery/gallery.tsx +85 -0
  414. package/starters/kadoservices/themes/starter/components/gallery/schema.yaml +27 -0
  415. package/starters/kadoservices/themes/starter/components/hero/hero.tsx +77 -0
  416. package/starters/kadoservices/themes/starter/components/hero/schema.yaml +26 -0
  417. package/starters/kadoservices/themes/starter/components/logo-slider/logo-slider.css +21 -0
  418. package/starters/kadoservices/themes/starter/components/logo-slider/logo-slider.tsx +81 -0
  419. package/starters/kadoservices/themes/starter/components/logo-slider/schema.yaml +23 -0
  420. package/starters/kadoservices/themes/starter/components/pricing/pricing.tsx +141 -0
  421. package/starters/kadoservices/themes/starter/components/pricing/schema.yaml +44 -0
  422. package/starters/kadoservices/themes/starter/components/testimonials/schema.yaml +26 -0
  423. package/starters/kadoservices/themes/starter/components/testimonials/testimonials.tsx +100 -0
  424. package/starters/kadoservices/themes/starter/components/text/schema.yaml +12 -0
  425. package/starters/kadoservices/themes/starter/components/text/text.tsx +62 -0
  426. package/starters/kadoservices/themes/starter/components/text-with-image/schema.yaml +30 -0
  427. package/starters/kadoservices/themes/starter/components/text-with-image/text-with-image.tsx +86 -0
  428. package/starters/kadoservices/themes/starter/components/video/schema.yaml +19 -0
  429. package/starters/kadoservices/themes/starter/components/video/video.tsx +98 -0
  430. package/starters/kadoservices/themes/starter/layouts/article.tsx +42 -0
  431. package/starters/kadoservices/themes/starter/layouts/base.tsx +92 -0
  432. package/starters/kadoservices/themes/starter/layouts/landing-page.tsx +14 -0
  433. package/starters/kadoservices/themes/starter/layouts/page.tsx +29 -0
  434. package/starters/kadoservices/themes/starter/partials/footer.tsx +22 -0
  435. package/starters/kadoservices/themes/starter/partials/header.tsx +32 -0
  436. package/starters/kadoservices/themes/starter/static/style.css +125 -0
  437. package/starters/kadoservices/themes/starter/theme.yaml +16 -0
  438. package/starters/lokatech/config/content-types.yaml +226 -0
  439. package/starters/lokatech/config/languages.yaml +12 -0
  440. package/starters/lokatech/config/section-types.yaml +379 -0
  441. package/starters/lokatech/config/settings.yaml +15 -0
  442. package/starters/lokatech/config/sites.yaml +21 -0
  443. package/starters/lokatech/config/taxonomies.yaml +65 -0
  444. package/starters/lokatech/config/translations/de.yaml +108 -0
  445. package/starters/lokatech/config/translations/en.yaml +108 -0
  446. package/starters/lokatech/config/translations/pl.yaml +108 -0
  447. package/starters/lokatech/content/articles/ai-in-enterprise.md +51 -0
  448. package/starters/lokatech/content/articles/api-gateway-patterns-enterprise.md +35 -0
  449. package/starters/lokatech/content/articles/design-system-enterprise-scale.md +35 -0
  450. package/starters/lokatech/content/articles/domain-driven-design-bounded-contexts.md +35 -0
  451. package/starters/lokatech/content/articles/engineering-team-scaling-50-to-200.md +33 -0
  452. package/starters/lokatech/content/articles/event-driven-architecture-microservices.md +35 -0
  453. package/starters/lokatech/content/articles/future-of-cloud-native.md +47 -0
  454. package/starters/lokatech/content/articles/getting-started.md +83 -0
  455. package/starters/lokatech/content/articles/headless-cms-composable-architecture.md +35 -0
  456. package/starters/lokatech/content/articles/kubernetes-cost-optimization-finops.md +33 -0
  457. package/starters/lokatech/content/articles/legacy-modernization-strangler-fig.md +35 -0
  458. package/starters/lokatech/content/articles/llm-fine-tuning-enterprise-data.md +33 -0
  459. package/starters/lokatech/content/articles/observability-opentelemetry-stack.md +35 -0
  460. package/starters/lokatech/content/articles/platform-engineering-internal-developer-portals.md +33 -0
  461. package/starters/lokatech/content/articles/platform-engineering-internal-developer-portals.pl.md +33 -0
  462. package/starters/lokatech/content/articles/rag-retrieval-augmented-generation-production.md +35 -0
  463. package/starters/lokatech/content/articles/remote-engineering-culture-distributed-teams.md +35 -0
  464. package/starters/lokatech/content/articles/supply-chain-security-sbom.md +35 -0
  465. package/starters/lokatech/content/articles/welcome.md +42 -0
  466. package/starters/lokatech/content/articles/welcome.pl.md +39 -0
  467. package/starters/lokatech/content/articles/zero-trust-network-architecture.md +35 -0
  468. package/starters/lokatech/content/articles/zero-trust-security.md +55 -0
  469. package/starters/lokatech/content/case-studies/banking-platform-modernization.md +67 -0
  470. package/starters/lokatech/content/case-studies/ecommerce-platform-rewrite.md +64 -0
  471. package/starters/lokatech/content/case-studies/govtech-citizen-portal.md +59 -0
  472. package/starters/lokatech/content/case-studies/healthcare-data-pipeline.md +67 -0
  473. package/starters/lokatech/content/case-studies/healthcare-data-pipeline.pl.md +60 -0
  474. package/starters/lokatech/content/case-studies/insurance-claims-automation.md +58 -0
  475. package/starters/lokatech/content/case-studies/manufacturing-iot-digital-twin.md +58 -0
  476. package/starters/lokatech/content/case-studies/retail-cloud-migration.md +49 -0
  477. package/starters/lokatech/content/case-studies/telecom-5g-platform.md +57 -0
  478. package/starters/lokatech/content/industries/energy-utilities.md +35 -0
  479. package/starters/lokatech/content/industries/financial-services.md +35 -0
  480. package/starters/lokatech/content/industries/healthcare.md +35 -0
  481. package/starters/lokatech/content/industries/manufacturing.md +35 -0
  482. package/starters/lokatech/content/industries/retail-ecommerce.md +35 -0
  483. package/starters/lokatech/content/industries/telecom-media.md +35 -0
  484. package/starters/lokatech/content/landing-pages/homepage.pl.yaml +182 -0
  485. package/starters/lokatech/content/landing-pages/homepage.yaml +236 -0
  486. package/starters/lokatech/content/locations/berlin.md +22 -0
  487. package/starters/lokatech/content/locations/krakow.md +22 -0
  488. package/starters/lokatech/content/locations/london.md +22 -0
  489. package/starters/lokatech/content/locations/warsaw.md +22 -0
  490. package/starters/lokatech/content/locations/wroclaw.md +22 -0
  491. package/starters/lokatech/content/pages/about.md +55 -0
  492. package/starters/lokatech/content/pages/about.pl.md +36 -0
  493. package/starters/lokatech/content/pages/careers.md +50 -0
  494. package/starters/lokatech/content/pages/contact.md +51 -0
  495. package/starters/lokatech/content/pages/contact.pl.md +51 -0
  496. package/starters/lokatech/content/pages/security-compliance.md +66 -0
  497. package/starters/lokatech/content/services/cloud-infrastructure.md +73 -0
  498. package/starters/lokatech/content/services/custom-software-development.md +74 -0
  499. package/starters/lokatech/content/services/custom-software-development.pl.md +80 -0
  500. package/starters/lokatech/content/services/cybersecurity.md +72 -0
  501. package/starters/lokatech/content/services/data-ai.md +74 -0
  502. package/starters/lokatech/content/services/digital-transformation.md +70 -0
  503. package/starters/lokatech/content/services/it-outsourcing.md +72 -0
  504. package/starters/lokatech/content/team/anna-kowalska.md +21 -0
  505. package/starters/lokatech/content/team/jan-nowak.md +21 -0
  506. package/starters/lokatech/content/team/katarzyna-kaminska.md +20 -0
  507. package/starters/lokatech/content/team/maria-wisniewska.md +20 -0
  508. package/starters/lokatech/content/team/tomasz-lewandowski.md +20 -0
  509. package/starters/lokatech/starter.yaml +15 -0
  510. package/starters/lokatech/themes/lokatech/_types.ts +93 -0
  511. package/starters/lokatech/themes/lokatech/components/blog-listing/blog-listing.tsx +197 -0
  512. package/starters/lokatech/themes/lokatech/components/blog-listing/schema.yaml +21 -0
  513. package/starters/lokatech/themes/lokatech/components/columns/columns.tsx +104 -0
  514. package/starters/lokatech/themes/lokatech/components/columns/schema.yaml +23 -0
  515. package/starters/lokatech/themes/lokatech/components/counters/counters.css +13 -0
  516. package/starters/lokatech/themes/lokatech/components/counters/counters.tsx +103 -0
  517. package/starters/lokatech/themes/lokatech/components/counters/schema.yaml +23 -0
  518. package/starters/lokatech/themes/lokatech/components/cta/cta.tsx +100 -0
  519. package/starters/lokatech/themes/lokatech/components/cta/schema.yaml +30 -0
  520. package/starters/lokatech/themes/lokatech/components/faq/faq.tsx +77 -0
  521. package/starters/lokatech/themes/lokatech/components/faq/schema.yaml +20 -0
  522. package/starters/lokatech/themes/lokatech/components/features/features.tsx +149 -0
  523. package/starters/lokatech/themes/lokatech/components/features/schema.yaml +19 -0
  524. package/starters/lokatech/themes/lokatech/components/form/form.tsx +135 -0
  525. package/starters/lokatech/themes/lokatech/components/form/schema.yaml +18 -0
  526. package/starters/lokatech/themes/lokatech/components/gallery/gallery.tsx +90 -0
  527. package/starters/lokatech/themes/lokatech/components/gallery/schema.yaml +27 -0
  528. package/starters/lokatech/themes/lokatech/components/hero/hero.tsx +167 -0
  529. package/starters/lokatech/themes/lokatech/components/hero/schema.yaml +26 -0
  530. package/starters/lokatech/themes/lokatech/components/logo-slider/logo-slider.css +21 -0
  531. package/starters/lokatech/themes/lokatech/components/logo-slider/logo-slider.tsx +83 -0
  532. package/starters/lokatech/themes/lokatech/components/logo-slider/schema.yaml +23 -0
  533. package/starters/lokatech/themes/lokatech/components/pricing/pricing.tsx +161 -0
  534. package/starters/lokatech/themes/lokatech/components/pricing/schema.yaml +44 -0
  535. package/starters/lokatech/themes/lokatech/components/testimonials/schema.yaml +26 -0
  536. package/starters/lokatech/themes/lokatech/components/testimonials/testimonials.css +13 -0
  537. package/starters/lokatech/themes/lokatech/components/testimonials/testimonials.tsx +150 -0
  538. package/starters/lokatech/themes/lokatech/components/text/schema.yaml +12 -0
  539. package/starters/lokatech/themes/lokatech/components/text/text.tsx +67 -0
  540. package/starters/lokatech/themes/lokatech/components/text-with-image/schema.yaml +30 -0
  541. package/starters/lokatech/themes/lokatech/components/text-with-image/text-with-image.tsx +92 -0
  542. package/starters/lokatech/themes/lokatech/components/video/schema.yaml +19 -0
  543. package/starters/lokatech/themes/lokatech/components/video/video.tsx +103 -0
  544. package/starters/lokatech/themes/lokatech/layouts/404.tsx +96 -0
  545. package/starters/lokatech/themes/lokatech/layouts/article.tsx +140 -0
  546. package/starters/lokatech/themes/lokatech/layouts/base.tsx +672 -0
  547. package/starters/lokatech/themes/lokatech/layouts/case-study.tsx +233 -0
  548. package/starters/lokatech/themes/lokatech/layouts/index--articles.tsx +246 -0
  549. package/starters/lokatech/themes/lokatech/layouts/index--case-studies.tsx +230 -0
  550. package/starters/lokatech/themes/lokatech/layouts/index--services.tsx +237 -0
  551. package/starters/lokatech/themes/lokatech/layouts/index.tsx +96 -0
  552. package/starters/lokatech/themes/lokatech/layouts/industry.tsx +121 -0
  553. package/starters/lokatech/themes/lokatech/layouts/landing-page.tsx +14 -0
  554. package/starters/lokatech/themes/lokatech/layouts/page--about.tsx +158 -0
  555. package/starters/lokatech/themes/lokatech/layouts/page--careers.tsx +125 -0
  556. package/starters/lokatech/themes/lokatech/layouts/page--contact.tsx +235 -0
  557. package/starters/lokatech/themes/lokatech/layouts/page.tsx +45 -0
  558. package/starters/lokatech/themes/lokatech/layouts/service.tsx +235 -0
  559. package/starters/lokatech/themes/lokatech/partials/footer.tsx +109 -0
  560. package/starters/lokatech/themes/lokatech/partials/header.tsx +53 -0
  561. package/starters/lokatech/themes/lokatech/static/images/article-platform-engineering.jpg +0 -0
  562. package/starters/lokatech/themes/lokatech/static/images/barka-logo.png +0 -0
  563. package/starters/lokatech/themes/lokatech/static/images/case-study-banking-dashboard.jpg +0 -0
  564. package/starters/lokatech/themes/lokatech/static/images/case-study-banking.png +0 -0
  565. package/starters/lokatech/themes/lokatech/static/images/case-study-ecommerce-dashboard.jpg +0 -0
  566. package/starters/lokatech/themes/lokatech/static/images/case-study-healthcare-dashboard.jpg +0 -0
  567. package/starters/lokatech/themes/lokatech/static/images/case-study-healthcare.png +0 -0
  568. package/starters/lokatech/themes/lokatech/static/images/case-study-retail.png +0 -0
  569. package/starters/lokatech/themes/lokatech/static/images/hero-bg.png +0 -0
  570. package/starters/lokatech/themes/lokatech/static/images/lokatech-logo.png +0 -0
  571. package/starters/lokatech/themes/lokatech/static/images/office-warsaw.png +0 -0
  572. package/starters/lokatech/themes/lokatech/static/images/team-anna-kowalska.png +0 -0
  573. package/starters/lokatech/themes/lokatech/static/images/team-collaboration.jpg +0 -0
  574. package/starters/lokatech/themes/lokatech/static/images/team-jan-nowak.png +0 -0
  575. package/starters/lokatech/themes/lokatech/static/images/team-katarzyna-kaminska.png +0 -0
  576. package/starters/lokatech/themes/lokatech/static/images/team-maria-wisniewska.png +0 -0
  577. package/starters/lokatech/themes/lokatech/static/images/team-strategy-session.jpg +0 -0
  578. package/starters/lokatech/themes/lokatech/static/images/team-tomasz-lewandowski.png +0 -0
  579. package/starters/lokatech/themes/lokatech/static/style.css +495 -0
  580. package/starters/lokatech/themes/lokatech/theme.yaml +21 -0
  581. package/starters/lokatech/themes/starter/_types.ts +93 -0
  582. package/starters/lokatech/themes/starter/components/blog-listing/blog-listing.tsx +102 -0
  583. package/starters/lokatech/themes/starter/components/blog-listing/schema.yaml +21 -0
  584. package/starters/lokatech/themes/starter/components/columns/columns.tsx +101 -0
  585. package/starters/lokatech/themes/starter/components/columns/schema.yaml +23 -0
  586. package/starters/lokatech/themes/starter/components/counters/counters.css +13 -0
  587. package/starters/lokatech/themes/starter/components/counters/counters.tsx +81 -0
  588. package/starters/lokatech/themes/starter/components/counters/schema.yaml +23 -0
  589. package/starters/lokatech/themes/starter/components/cta/cta.tsx +57 -0
  590. package/starters/lokatech/themes/starter/components/cta/schema.yaml +30 -0
  591. package/starters/lokatech/themes/starter/components/faq/faq.tsx +77 -0
  592. package/starters/lokatech/themes/starter/components/faq/schema.yaml +20 -0
  593. package/starters/lokatech/themes/starter/components/features/features.tsx +82 -0
  594. package/starters/lokatech/themes/starter/components/features/schema.yaml +19 -0
  595. package/starters/lokatech/themes/starter/components/form/form.tsx +126 -0
  596. package/starters/lokatech/themes/starter/components/form/schema.yaml +18 -0
  597. package/starters/lokatech/themes/starter/components/gallery/gallery.tsx +85 -0
  598. package/starters/lokatech/themes/starter/components/gallery/schema.yaml +27 -0
  599. package/starters/lokatech/themes/starter/components/hero/hero.tsx +77 -0
  600. package/starters/lokatech/themes/starter/components/hero/schema.yaml +26 -0
  601. package/starters/lokatech/themes/starter/components/logo-slider/logo-slider.css +21 -0
  602. package/starters/lokatech/themes/starter/components/logo-slider/logo-slider.tsx +81 -0
  603. package/starters/lokatech/themes/starter/components/logo-slider/schema.yaml +23 -0
  604. package/starters/lokatech/themes/starter/components/pricing/pricing.tsx +141 -0
  605. package/starters/lokatech/themes/starter/components/pricing/schema.yaml +44 -0
  606. package/starters/lokatech/themes/starter/components/testimonials/schema.yaml +26 -0
  607. package/starters/lokatech/themes/starter/components/testimonials/testimonials.tsx +100 -0
  608. package/starters/lokatech/themes/starter/components/text/schema.yaml +12 -0
  609. package/starters/lokatech/themes/starter/components/text/text.tsx +62 -0
  610. package/starters/lokatech/themes/starter/components/text-with-image/schema.yaml +30 -0
  611. package/starters/lokatech/themes/starter/components/text-with-image/text-with-image.tsx +86 -0
  612. package/starters/lokatech/themes/starter/components/video/schema.yaml +19 -0
  613. package/starters/lokatech/themes/starter/components/video/video.tsx +98 -0
  614. package/starters/lokatech/themes/starter/layouts/article.tsx +42 -0
  615. package/starters/lokatech/themes/starter/layouts/base.tsx +92 -0
  616. package/starters/lokatech/themes/starter/layouts/landing-page.tsx +14 -0
  617. package/starters/lokatech/themes/starter/layouts/page.tsx +29 -0
  618. package/starters/lokatech/themes/starter/partials/footer.tsx +22 -0
  619. package/starters/lokatech/themes/starter/partials/header.tsx +32 -0
  620. package/starters/lokatech/themes/starter/static/style.css +125 -0
  621. package/starters/lokatech/themes/starter/theme.yaml +16 -0
@@ -0,0 +1,235 @@
1
+ /** @jsxImportSource hono/jsx */
2
+ import type { FC } from 'hono/jsx';
3
+ import type { LayoutProps } from '../_types.js';
4
+ import Base from './base.js';
5
+
6
+ const contactChannels = [
7
+ {
8
+ label: 'General Inquiries',
9
+ email: 'hello@barka.dev',
10
+ icon: '<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"/><polyline points="22,6 12,13 2,6"/></svg>',
11
+ },
12
+ {
13
+ label: 'Sales & Partnerships',
14
+ email: 'sales@barka.dev',
15
+ phone: '+48 22 123 4567',
16
+ icon: '<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z"/></svg>',
17
+ },
18
+ {
19
+ label: 'Careers',
20
+ email: 'careers@barka.dev',
21
+ icon: '<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M23 21v-2a4 4 0 0 0-3-3.87"/><path d="M16 3.13a4 4 0 0 1 0 7.75"/></svg>',
22
+ },
23
+ ];
24
+
25
+ const offices = [
26
+ { city: 'Warsaw', flag: '🇵🇱', label: 'Headquarters', address: 'ul. Marszałkowska 100, 00-026 Warsaw, Poland' },
27
+ { city: 'Kraków', flag: '🇵🇱', label: 'Engineering Hub', address: 'ul. Pawia 5, 31-154 Kraków, Poland' },
28
+ { city: 'Wrocław', flag: '🇵🇱', label: 'Development Center', address: 'ul. Świdnicka 40, 50-024 Wrocław, Poland' },
29
+ { city: 'Berlin', flag: '🇩🇪', label: 'DACH Office', address: 'Friedrichstraße 123, 10117 Berlin, Germany' },
30
+ { city: 'London', flag: '🇬🇧', label: 'UK Office', address: '1 Canada Square, Canary Wharf, London E14 5AB' },
31
+ ];
32
+
33
+ const PageContact: FC<LayoutProps> = (props) => {
34
+ const { content, themeSettings } = props;
35
+ const primaryColor = themeSettings.primary_color ?? '#10B981';
36
+ const navColor = themeSettings.nav_color ?? '#0B1222';
37
+
38
+ return (
39
+ <Base {...props}>
40
+ {/* Hero */}
41
+ <section class="relative overflow-hidden py-20 text-white" style={{ backgroundColor: navColor }}>
42
+ <div class="pointer-events-none absolute inset-0" style={{ background: `radial-gradient(ellipse at 60% 50%, ${primaryColor}12 0%, transparent 50%)` }} />
43
+ <div class="relative mx-auto max-w-7xl px-6 text-center">
44
+ <h1 class="text-4xl font-extrabold tracking-[-0.03em] sm:text-5xl">
45
+ {content.title ?? 'Get in Touch'}
46
+ </h1>
47
+ <p class="mx-auto mt-4 max-w-xl text-lg text-gray-300/90">
48
+ {content.fields?.subtitle ?? "Let's discuss how we can accelerate your digital transformation"}
49
+ </p>
50
+ </div>
51
+ </section>
52
+
53
+ {/* Contact form + info — two-column layout */}
54
+ <section class="py-20">
55
+ <div class="mx-auto grid max-w-7xl gap-16 px-6 lg:grid-cols-5">
56
+
57
+ {/* Left — Contact form */}
58
+ <div class="lg:col-span-3">
59
+ <h2 class="text-2xl font-bold tracking-[-0.02em] text-slate-900">Send us a message</h2>
60
+ <p class="mt-2 text-sm text-slate-500">Fill out the form and our team will get back to you within 24 hours.</p>
61
+
62
+ <form class="mt-8 space-y-6" action="#" method="post">
63
+ <div class="grid gap-6 sm:grid-cols-2">
64
+ <div>
65
+ <label class="mb-1.5 block text-sm font-medium text-slate-700" for="first_name">First name</label>
66
+ <input
67
+ type="text" id="first_name" name="first_name" autocomplete="given-name"
68
+ class="block w-full rounded-lg border border-gray-200 bg-white px-4 py-3 text-sm text-slate-900 placeholder-slate-400 transition-all duration-200 focus:border-emerald-500 focus:outline-none focus:ring-2 focus:ring-emerald-500/20"
69
+ placeholder="Jane"
70
+ />
71
+ </div>
72
+ <div>
73
+ <label class="mb-1.5 block text-sm font-medium text-slate-700" for="last_name">Last name</label>
74
+ <input
75
+ type="text" id="last_name" name="last_name" autocomplete="family-name"
76
+ class="block w-full rounded-lg border border-gray-200 bg-white px-4 py-3 text-sm text-slate-900 placeholder-slate-400 transition-all duration-200 focus:border-emerald-500 focus:outline-none focus:ring-2 focus:ring-emerald-500/20"
77
+ placeholder="Smith"
78
+ />
79
+ </div>
80
+ </div>
81
+
82
+ <div>
83
+ <label class="mb-1.5 block text-sm font-medium text-slate-700" for="email">Work email</label>
84
+ <input
85
+ type="email" id="email" name="email" autocomplete="email"
86
+ class="block w-full rounded-lg border border-gray-200 bg-white px-4 py-3 text-sm text-slate-900 placeholder-slate-400 transition-all duration-200 focus:border-emerald-500 focus:outline-none focus:ring-2 focus:ring-emerald-500/20"
87
+ placeholder="jane@company.com"
88
+ />
89
+ </div>
90
+
91
+ <div>
92
+ <label class="mb-1.5 block text-sm font-medium text-slate-700" for="company">Company</label>
93
+ <input
94
+ type="text" id="company" name="company" autocomplete="organization"
95
+ class="block w-full rounded-lg border border-gray-200 bg-white px-4 py-3 text-sm text-slate-900 placeholder-slate-400 transition-all duration-200 focus:border-emerald-500 focus:outline-none focus:ring-2 focus:ring-emerald-500/20"
96
+ placeholder="Company Ltd."
97
+ />
98
+ </div>
99
+
100
+ <div>
101
+ <label class="mb-1.5 block text-sm font-medium text-slate-700" for="interest">I'm interested in</label>
102
+ <select
103
+ id="interest" name="interest"
104
+ class="block w-full rounded-lg border border-gray-200 bg-white px-4 py-3 text-sm text-slate-900 transition-all duration-200 focus:border-emerald-500 focus:outline-none focus:ring-2 focus:ring-emerald-500/20"
105
+ >
106
+ <option value="">Select a topic</option>
107
+ <option value="custom-software">Custom Software Development</option>
108
+ <option value="cloud">Cloud & Infrastructure</option>
109
+ <option value="data-ai">Data & AI</option>
110
+ <option value="cybersecurity">Cybersecurity</option>
111
+ <option value="devops">DevOps & SRE</option>
112
+ <option value="staff">IT Outsourcing & Staff Augmentation</option>
113
+ <option value="consulting">Digital Transformation Consulting</option>
114
+ <option value="other">Other</option>
115
+ </select>
116
+ </div>
117
+
118
+ <div>
119
+ <label class="mb-1.5 block text-sm font-medium text-slate-700" for="message">Message</label>
120
+ <textarea
121
+ id="message" name="message" rows={5}
122
+ class="block w-full rounded-lg border border-gray-200 bg-white px-4 py-3 text-sm text-slate-900 placeholder-slate-400 transition-all duration-200 focus:border-emerald-500 focus:outline-none focus:ring-2 focus:ring-emerald-500/20 resize-none"
123
+ placeholder="Tell us about your project, timeline, and goals..."
124
+ />
125
+ </div>
126
+
127
+ <button
128
+ type="submit"
129
+ class="w-full rounded-lg px-8 py-3.5 text-sm font-semibold text-white transition-all duration-200 hover:shadow-lg sm:w-auto"
130
+ style={{ backgroundColor: primaryColor }}
131
+ >
132
+ Send Message
133
+ </button>
134
+ </form>
135
+ </div>
136
+
137
+ {/* Right — Contact channels */}
138
+ <div class="lg:col-span-2">
139
+ <h2 class="text-2xl font-bold tracking-[-0.02em] text-slate-900">Contact directly</h2>
140
+ <p class="mt-2 text-sm text-slate-500">Prefer email or phone? Reach out to the right team.</p>
141
+
142
+ <div class="mt-8 space-y-4">
143
+ {contactChannels.map((ch) => (
144
+ <div class="rounded-2xl border border-gray-100 bg-white p-5 transition-all duration-300 hover:shadow-lg hover:shadow-slate-200/50">
145
+ <div class="flex items-start gap-4">
146
+ <div
147
+ class="flex h-10 w-10 shrink-0 items-center justify-center rounded-xl text-white"
148
+ style={{ backgroundColor: primaryColor }}
149
+ dangerouslySetInnerHTML={{ __html: ch.icon }}
150
+ />
151
+ <div>
152
+ <div class="text-sm font-semibold text-slate-900">{ch.label}</div>
153
+ <a href={`mailto:${ch.email}`} class="mt-1 block text-sm hover:no-underline" style={{ color: primaryColor }}>
154
+ {ch.email}
155
+ </a>
156
+ {ch.phone && (
157
+ <a href={`tel:${ch.phone.replace(/\s/g, '')}`} class="mt-0.5 block text-sm text-slate-500 hover:text-slate-900 hover:no-underline">
158
+ {ch.phone}
159
+ </a>
160
+ )}
161
+ </div>
162
+ </div>
163
+ </div>
164
+ ))}
165
+ </div>
166
+
167
+ {/* Business hours */}
168
+ <div class="mt-8 rounded-2xl border border-gray-100 bg-slate-50 p-6">
169
+ <h3 class="text-sm font-semibold text-slate-900">Business Hours</h3>
170
+ <div class="mt-3 space-y-2 text-sm text-slate-500">
171
+ <div class="flex justify-between">
172
+ <span>Monday – Friday</span>
173
+ <span class="font-medium text-slate-700">9:00 – 18:00 CET</span>
174
+ </div>
175
+ <div class="flex justify-between">
176
+ <span>Saturday – Sunday</span>
177
+ <span class="font-medium text-slate-400">Closed</span>
178
+ </div>
179
+ </div>
180
+ <div class="mt-4 border-t border-gray-200 pt-4 text-xs text-slate-400">
181
+ 24/7 operations support: <a href="mailto:ops@barka.dev" class="hover:no-underline" style={{ color: primaryColor }}>ops@barka.dev</a>
182
+ </div>
183
+ </div>
184
+ </div>
185
+
186
+ </div>
187
+ </section>
188
+
189
+ {/* Offices */}
190
+ <section class="border-t border-gray-100 bg-slate-50 py-20">
191
+ <div class="mx-auto max-w-7xl px-6">
192
+ <h2 class="mb-4 text-center text-3xl font-bold tracking-[-0.02em] text-slate-900">Our Offices</h2>
193
+ <p class="mx-auto mb-16 max-w-xl text-center text-slate-500">
194
+ 5 offices across Europe, 800+ engineers ready to work with you.
195
+ </p>
196
+
197
+ <div class="grid gap-6 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-5">
198
+ {offices.map((office) => (
199
+ <div class="group rounded-2xl border border-gray-100 bg-white p-6 transition-all duration-300 hover:shadow-lg hover:shadow-slate-200/50">
200
+ <div class="mb-3 text-2xl">{office.flag}</div>
201
+ <h3 class="text-base font-semibold text-slate-900">{office.city}</h3>
202
+ <div class="mt-0.5 text-xs font-medium uppercase tracking-widest" style={{ color: primaryColor }}>{office.label}</div>
203
+ <p class="mt-3 text-sm leading-relaxed text-slate-400">
204
+ {office.address}
205
+ </p>
206
+ </div>
207
+ ))}
208
+ </div>
209
+ </div>
210
+ </section>
211
+
212
+ {/* CTA */}
213
+ <section class="relative overflow-hidden py-20 text-white" style={{ backgroundColor: navColor }}>
214
+ <div class="pointer-events-none absolute inset-0" style={{ background: `radial-gradient(ellipse at 50% 50%, ${primaryColor}12 0%, transparent 60%)` }} />
215
+ <div class="relative mx-auto max-w-3xl px-6 text-center">
216
+ <h2 class="text-3xl font-bold tracking-[-0.02em] sm:text-4xl">
217
+ Prefer a scheduled call?
218
+ </h2>
219
+ <p class="mt-4 text-lg text-gray-300/90">
220
+ Book a 30-minute discovery call with one of our solution architects.
221
+ </p>
222
+ <a
223
+ href="#"
224
+ class="mt-8 inline-block rounded-lg px-8 py-3.5 text-sm font-semibold text-white transition-all duration-200 hover:shadow-xl hover:no-underline"
225
+ style={{ backgroundColor: primaryColor }}
226
+ >
227
+ Book a Discovery Call
228
+ </a>
229
+ </div>
230
+ </section>
231
+ </Base>
232
+ );
233
+ };
234
+
235
+ export default PageContact;
@@ -0,0 +1,45 @@
1
+ /** @jsxImportSource hono/jsx */
2
+ import type { FC } from 'hono/jsx';
3
+ import type { LayoutProps } from '../_types.js';
4
+ import Base from './base.js';
5
+
6
+ const Page: FC<LayoutProps> = (props) => {
7
+ const { content, themeSettings } = props;
8
+ const primaryColor = themeSettings.primary_color ?? '#10B981';
9
+ const navColor = themeSettings.nav_color ?? '#0B1222';
10
+
11
+ return (
12
+ <Base {...props}>
13
+ {/* Hero */}
14
+ <section class="relative overflow-hidden py-20 text-white" style={{ backgroundColor: navColor }}>
15
+ <div class="pointer-events-none absolute inset-0" style={{ background: `radial-gradient(ellipse at 50% 50%, ${primaryColor}08 0%, transparent 50%)` }} />
16
+ <div class="relative mx-auto max-w-4xl px-6 text-center">
17
+ <h1 class="text-4xl font-extrabold tracking-[-0.03em] leading-[1.1] sm:text-5xl">
18
+ {content.title}
19
+ </h1>
20
+ {content.fields?.subtitle && (
21
+ <p class="mx-auto mt-6 max-w-xl text-lg text-gray-300/90">
22
+ {content.fields.subtitle}
23
+ </p>
24
+ )}
25
+ </div>
26
+ </section>
27
+
28
+ {/* Body */}
29
+ {content.bodyHtml && (
30
+ <section class="py-20">
31
+ <div class="mx-auto max-w-3xl px-6">
32
+ <div
33
+ class="prose prose-lg prose-slate max-w-none"
34
+ dangerouslySetInnerHTML={{ __html: content.bodyHtml }}
35
+ />
36
+ </div>
37
+ </section>
38
+ )}
39
+
40
+ {props.children}
41
+ </Base>
42
+ );
43
+ };
44
+
45
+ export default Page;
@@ -0,0 +1,235 @@
1
+ /** @jsxImportSource hono/jsx */
2
+ import type { FC } from 'hono/jsx';
3
+ import type { LayoutProps } from '../_types.js';
4
+ import Base from './base.js';
5
+
6
+ const Service: FC<LayoutProps> = (props) => {
7
+ const { content, themeSettings } = props;
8
+ const primaryColor = themeSettings.primary_color ?? '#10B981';
9
+ const navColor = themeSettings.nav_color ?? '#0B1222';
10
+ const fields = content.fields;
11
+
12
+ return (
13
+ <Base {...props}>
14
+ {/* ═══ Hero — with grid, blobs, stats bar ═══ */}
15
+ <section class="relative overflow-hidden py-28 text-white" style={{ backgroundColor: navColor }}>
16
+ <div class="grid-pattern pointer-events-none absolute inset-0" />
17
+ <div class="blob blob-lg" style={{ top: '-15%', right: '-10%', background: `${primaryColor}12` }} />
18
+ <div class="blob blob-sm" style={{ bottom: '10%', left: '5%', background: `#3b82f608`, animationDelay: '-4s' }} />
19
+ <div class="pointer-events-none absolute inset-0" style={{ background: `radial-gradient(ellipse at 70% 30%, ${primaryColor}12 0%, transparent 50%)` }} />
20
+
21
+ <div class="relative mx-auto max-w-7xl px-6">
22
+ <div class="max-w-3xl">
23
+ <p class="reveal-sub mb-4 text-xs font-semibold uppercase tracking-[0.25em] text-gray-400">Our Services</p>
24
+ <h1 class="reveal-heading text-4xl font-extrabold tracking-[-0.04em] leading-[1.05] sm:text-5xl lg:text-6xl">
25
+ {content.title}
26
+ </h1>
27
+ {fields.short_description && (
28
+ <p class="reveal-sub mt-8 max-w-2xl text-lg leading-relaxed text-gray-300/80" style={{ animationDelay: '0.25s' }}>
29
+ {fields.short_description}
30
+ </p>
31
+ )}
32
+ <div class="reveal-sub mt-10 flex flex-wrap gap-4" style={{ animationDelay: '0.4s' }}>
33
+ <a href="/contact" class="inline-block rounded-lg px-8 py-4 text-sm font-semibold text-white shadow-lg transition-all duration-300 hover:shadow-xl hover:brightness-110 hover:no-underline" style={{ backgroundColor: primaryColor }}>
34
+ Get a Free Assessment
35
+ </a>
36
+ <a href="/case-studies" class="inline-block rounded-lg border border-white/20 px-8 py-4 text-sm font-semibold text-white/90 transition-all duration-300 hover:border-white/40 hover:text-white hover:no-underline">
37
+ View Case Studies
38
+ </a>
39
+ </div>
40
+ </div>
41
+
42
+ {/* Stats bar */}
43
+ {fields.hero_stats && Array.isArray(fields.hero_stats) && (
44
+ <div class="reveal-sub mt-16 flex flex-wrap gap-12 border-t border-white/10 pt-10" style={{ animationDelay: '0.5s' }}>
45
+ {fields.hero_stats.map((stat: { value: string; label: string }) => (
46
+ <div class="counter-item">
47
+ <div class="text-3xl font-extrabold tracking-[-0.03em] lg:text-4xl">{stat.value}</div>
48
+ <div class="mt-1 text-xs font-medium uppercase tracking-[0.12em] text-gray-400">{stat.label}</div>
49
+ </div>
50
+ ))}
51
+ </div>
52
+ )}
53
+ </div>
54
+ <div class="glow-line absolute bottom-0 left-0 right-0" />
55
+ </section>
56
+
57
+ {/* ═══ Challenges — left heading + staggered grid ═══ */}
58
+ {fields.challenges && Array.isArray(fields.challenges) && fields.challenges.length > 0 && (
59
+ <section class="relative overflow-hidden py-24">
60
+ <div class="blob blob-sm" style={{ top: '20%', right: '-3%', background: `${primaryColor}06` }} />
61
+ <div class="mx-auto max-w-7xl px-6">
62
+ <div class="mb-16 max-w-2xl">
63
+ <h2 class="reveal-heading text-3xl font-bold tracking-[-0.03em] sm:text-4xl lg:text-5xl">
64
+ The challenges <em class="not-italic" style={{ background: `linear-gradient(135deg,${primaryColor},${primaryColor}99,#60a5fa)`, WebkitBackgroundClip: 'text', WebkitTextFillColor: 'transparent', backgroundClip: 'text' }}>we solve</em>
65
+ </h2>
66
+ <p class="reveal-sub mt-4 text-lg text-slate-500">Problems enterprises face every day — and the reason they call us.</p>
67
+ </div>
68
+ <div class="stagger-grid grid gap-5 sm:grid-cols-2 lg:grid-cols-3">
69
+ {fields.challenges.map((challenge: string, idx: number) => (
70
+ <div class={`group flex items-start gap-4 rounded-2xl border border-gray-100 bg-white p-6 transition-all duration-400 hover:border-emerald-200 hover:shadow-xl hover:shadow-emerald-500/5 ${idx % 3 === 1 ? 'lg:translate-y-3' : ''}`}>
71
+ <div class="mt-1 flex h-7 w-7 shrink-0 items-center justify-center rounded-lg transition-all duration-300 group-hover:scale-110" style={{ backgroundColor: `${primaryColor}15` }}>
72
+ <div class="h-2 w-2 rounded-full" style={{ backgroundColor: primaryColor }} />
73
+ </div>
74
+ <p class="text-sm leading-relaxed text-slate-600">{challenge}</p>
75
+ </div>
76
+ ))}
77
+ </div>
78
+ </div>
79
+ </section>
80
+ )}
81
+
82
+ {/* ═══ Process — asymmetric timeline ═══ */}
83
+ {fields.process && Array.isArray(fields.process) && fields.process.length > 0 && (
84
+ <section class="relative overflow-hidden border-t border-gray-100 bg-slate-50 py-24">
85
+ <div class="mx-auto max-w-7xl px-6">
86
+ <div class="grid gap-16 lg:grid-cols-5">
87
+ {/* Left heading — sticky */}
88
+ <div class="lg:col-span-2">
89
+ <div class="lg:sticky lg:top-32">
90
+ <h2 class="reveal-heading text-3xl font-bold tracking-[-0.03em] sm:text-4xl">Our proven <em class="not-italic" style={{ background: `linear-gradient(135deg,${primaryColor},${primaryColor}99,#60a5fa)`, WebkitBackgroundClip: 'text', WebkitTextFillColor: 'transparent', backgroundClip: 'text' }}>approach</em></h2>
91
+ <p class="reveal-sub mt-4 text-base text-slate-500">A methodology refined across hundreds of enterprise projects, from Fortune 500 to high-growth scaleups.</p>
92
+ <div class="reveal-sub mt-8 hidden h-1 w-16 rounded lg:block" style={{ backgroundColor: primaryColor, animationDelay: '0.35s' }} />
93
+ </div>
94
+ </div>
95
+
96
+ {/* Right steps — staggered */}
97
+ <div class="stagger-grid space-y-8 lg:col-span-3">
98
+ {fields.process.map((step: { title: string; description: string }, i: number) => (
99
+ <div class="group flex gap-6 rounded-2xl border border-gray-100 bg-white p-7 transition-all duration-400 hover:shadow-lg hover:shadow-slate-200/50">
100
+ <div class="flex h-12 w-12 shrink-0 items-center justify-center rounded-2xl text-base font-bold text-white transition-transform duration-300 group-hover:scale-110 group-hover:rotate-3" style={{ backgroundColor: primaryColor }}>
101
+ {String(i + 1).padStart(2, '0')}
102
+ </div>
103
+ <div>
104
+ <h3 class="text-lg font-semibold tracking-[-0.01em] text-slate-900">{step.title}</h3>
105
+ <p class="mt-2 text-sm leading-relaxed text-slate-500">{step.description}</p>
106
+ </div>
107
+ </div>
108
+ ))}
109
+ </div>
110
+ </div>
111
+ </div>
112
+ </section>
113
+ )}
114
+
115
+ {/* ═══ Capabilities — staggered bento ═══ */}
116
+ {fields.capabilities && Array.isArray(fields.capabilities) && fields.capabilities.length > 0 && (
117
+ <section class="relative overflow-hidden py-24">
118
+ <div class="mx-auto max-w-7xl px-6">
119
+ <div class="mb-16 max-w-2xl">
120
+ <h2 class="reveal-heading text-3xl font-bold tracking-[-0.03em] sm:text-4xl">What we <em class="not-italic" style={{ background: `linear-gradient(135deg,${primaryColor},${primaryColor}99,#60a5fa)`, WebkitBackgroundClip: 'text', WebkitTextFillColor: 'transparent', backgroundClip: 'text' }}>deliver</em></h2>
121
+ </div>
122
+ <div class="stagger-grid grid gap-4 sm:grid-cols-2 lg:grid-cols-3">
123
+ {fields.capabilities.map((cap: string, idx: number) => {
124
+ const [title, ...rest] = cap.split(' — ');
125
+ const desc = rest.join(' — ');
126
+ return (
127
+ <div class={`group rounded-2xl border border-gray-100 bg-white p-7 transition-all duration-400 hover:border-emerald-200 hover:shadow-xl hover:shadow-emerald-500/5 ${idx === 0 || idx === 6 ? 'sm:col-span-2 lg:col-span-1' : ''}`}>
128
+ <div class="mb-4 h-1 w-8 rounded transition-all duration-400 group-hover:w-16" style={{ backgroundColor: primaryColor }} />
129
+ <h3 class="text-base font-semibold text-slate-900">{title}</h3>
130
+ {desc && <p class="mt-2 text-sm leading-relaxed text-slate-500">{desc}</p>}
131
+ </div>
132
+ );
133
+ })}
134
+ </div>
135
+ </div>
136
+ </section>
137
+ )}
138
+
139
+ {/* ═══ Technologies — pills with hover ═══ */}
140
+ {fields.technologies && Array.isArray(fields.technologies) && fields.technologies.length > 0 && (
141
+ <section class="relative overflow-hidden border-t border-gray-100 bg-slate-50 py-24">
142
+ <div class="mx-auto max-w-7xl px-6">
143
+ <div class="grid items-start gap-12 lg:grid-cols-5">
144
+ <div class="lg:col-span-2">
145
+ <h2 class="reveal-heading text-3xl font-bold tracking-[-0.03em] sm:text-4xl">Technology <em class="not-italic" style={{ background: `linear-gradient(135deg,${primaryColor},${primaryColor}99,#60a5fa)`, WebkitBackgroundClip: 'text', WebkitTextFillColor: 'transparent', backgroundClip: 'text' }}>stack</em></h2>
146
+ <p class="reveal-sub mt-4 text-base text-slate-500">Battle-tested tools and platforms our engineers use daily.</p>
147
+ </div>
148
+ <div class="flex flex-wrap gap-3 lg:col-span-3">
149
+ {fields.technologies.map((tech: { name: string; logo?: string }, idx: number) => (
150
+ <div
151
+ class="stagger-grid flex items-center gap-2.5 rounded-xl border border-gray-100 bg-white px-5 py-3.5 transition-all duration-300 hover:border-emerald-200 hover:shadow-lg hover:shadow-emerald-500/5"
152
+ style={{ animationDelay: `${0.05 * idx}s` }}
153
+ >
154
+ {tech.logo && (
155
+ <img src={tech.logo} alt={tech.name} class="h-6 w-6 object-contain" loading="lazy" />
156
+ )}
157
+ <span class="text-sm font-semibold text-slate-700">{tech.name}</span>
158
+ </div>
159
+ ))}
160
+ </div>
161
+ </div>
162
+ </div>
163
+ </section>
164
+ )}
165
+
166
+ {/* ═══ Related Case Studies ═══ */}
167
+ {fields.case_studies && Array.isArray(fields.case_studies) && fields.case_studies.length > 0 && (
168
+ <section class="py-24">
169
+ <div class="mx-auto max-w-7xl px-6">
170
+ <div class="mb-16 flex items-end justify-between">
171
+ <div class="max-w-2xl">
172
+ <h2 class="reveal-heading text-3xl font-bold tracking-[-0.03em] sm:text-4xl">Proven <em class="not-italic" style={{ background: `linear-gradient(135deg,${primaryColor},${primaryColor}99,#60a5fa)`, WebkitBackgroundClip: 'text', WebkitTextFillColor: 'transparent', backgroundClip: 'text' }}>results</em></h2>
173
+ <p class="reveal-sub mt-4 text-base text-slate-500">See how our expertise translates to measurable business outcomes.</p>
174
+ </div>
175
+ <a href="/case-studies" class="reveal-sub hidden items-center gap-1 text-sm font-semibold transition-colors duration-200 hover:no-underline sm:flex" style={{ color: primaryColor }}>
176
+ All case studies <span>&rarr;</span>
177
+ </a>
178
+ </div>
179
+ <div class="stagger-grid grid gap-6 sm:grid-cols-2 lg:grid-cols-3">
180
+ {fields.case_studies.map((cs: { title: string; result: string; url: string }) => (
181
+ <a href={cs.url} class="group rounded-2xl border border-gray-100 bg-white p-8 transition-all duration-400 hover:shadow-xl hover:shadow-slate-200/50 hover:no-underline">
182
+ <div class="mb-4 text-xs font-semibold uppercase tracking-widest text-slate-400">Case Study</div>
183
+ <h3 class="text-lg font-bold text-slate-900">{cs.title}</h3>
184
+ <div class="mt-3 text-2xl font-extrabold" style={{ color: primaryColor }}>{cs.result}</div>
185
+ <div class="mt-5 flex items-center gap-1 text-xs font-semibold opacity-0 transition-all duration-300 group-hover:opacity-100" style={{ color: primaryColor }}>
186
+ Read case study <span class="transition-transform duration-200 group-hover:translate-x-1">&rarr;</span>
187
+ </div>
188
+ </a>
189
+ ))}
190
+ </div>
191
+ </div>
192
+ </section>
193
+ )}
194
+
195
+ {/* ═══ Body (markdown) ═══ */}
196
+ {content.bodyHtml && (
197
+ <section class="py-20">
198
+ <div class="mx-auto max-w-3xl px-6">
199
+ <div class="prose prose-lg prose-slate max-w-none" dangerouslySetInnerHTML={{ __html: content.bodyHtml }} />
200
+ </div>
201
+ </section>
202
+ )}
203
+
204
+ {/* ═══ CTA — asymmetric ═══ */}
205
+ <section class="relative overflow-hidden py-24 text-white" style={{ backgroundColor: navColor }}>
206
+ <div class="grid-pattern pointer-events-none absolute inset-0" />
207
+ <div class="blob blob-sm" style={{ bottom: '-10%', right: '10%', background: `${primaryColor}10`, animationDelay: '-5s' }} />
208
+ <div class="pointer-events-none absolute inset-0" style={{ background: `radial-gradient(ellipse at 50% 50%, ${primaryColor}10 0%, transparent 60%)` }} />
209
+ <div class="relative mx-auto max-w-7xl px-6">
210
+ <div class="grid items-center gap-10 lg:grid-cols-5">
211
+ <div class="lg:col-span-3">
212
+ <h2 class="reveal-heading text-3xl font-bold tracking-[-0.03em] sm:text-4xl">Ready to start your project?</h2>
213
+ <p class="reveal-sub mt-4 max-w-lg text-lg text-gray-300/90" style={{ animationDelay: '0.2s' }}>
214
+ Get a free consultation. Our architects and domain experts will map the optimal strategy for your challenge in a 60-minute workshop.
215
+ </p>
216
+ </div>
217
+ <div class="reveal-sub flex flex-col gap-4 lg:col-span-2" style={{ animationDelay: '0.35s' }}>
218
+ <a href="/contact" class="inline-block rounded-lg px-8 py-4 text-center text-sm font-semibold text-white shadow-lg transition-all duration-300 hover:shadow-xl hover:brightness-110 hover:no-underline" style={{ backgroundColor: primaryColor }}>
219
+ Schedule a Free Assessment
220
+ </a>
221
+ <a href="/case-studies" class="inline-block rounded-lg border border-white/20 px-8 py-4 text-center text-sm font-semibold text-white/90 transition-all duration-300 hover:border-white/40 hover:text-white hover:no-underline">
222
+ View Case Studies
223
+ </a>
224
+ </div>
225
+ </div>
226
+ </div>
227
+ <div class="glow-line absolute top-0 left-0 right-0" />
228
+ </section>
229
+
230
+ {props.children}
231
+ </Base>
232
+ );
233
+ };
234
+
235
+ export default Service;
@@ -0,0 +1,109 @@
1
+ /** @jsxImportSource hono/jsx */
2
+ import type { FC } from 'hono/jsx';
3
+ import type { SiteConfig, ThemeConfig } from '../_types.js';
4
+
5
+ interface FooterProps {
6
+ site: SiteConfig;
7
+ theme: ThemeConfig;
8
+ themeSettings: Record<string, any>;
9
+ }
10
+
11
+ const footerServices = [
12
+ { label: 'Cloud Infrastructure', href: '/services/cloud-infrastructure' },
13
+ { label: 'Data Engineering', href: '/services/data-engineering' },
14
+ { label: 'Custom Software', href: '/services/custom-software' },
15
+ { label: 'DevOps & SRE', href: '/services/devops-sre' },
16
+ { label: 'AI & Machine Learning', href: '/services/ai-ml' },
17
+ ];
18
+
19
+ const footerCompany = [
20
+ { label: 'About Us', href: '/about' },
21
+ { label: 'Leadership', href: '/about/leadership' },
22
+ { label: 'Careers', href: '/careers' },
23
+ { label: 'Partners', href: '/partners' },
24
+ { label: 'Contact', href: '/contact' },
25
+ ];
26
+
27
+ const footerResources = [
28
+ { label: 'Blog', href: '/articles' },
29
+ { label: 'Case Studies', href: '/case-studies' },
30
+ { label: 'Whitepapers', href: '/resources/whitepapers' },
31
+ { label: 'Documentation', href: '/docs' },
32
+ { label: 'Status Page', href: '/status' },
33
+ ];
34
+
35
+ const Footer: FC<FooterProps> = ({ site, themeSettings }) => {
36
+ const primaryColor = themeSettings.primary_color ?? '#10B981';
37
+ const navColor = themeSettings.nav_color ?? '#0B1222';
38
+
39
+ return (
40
+ <footer style={{ backgroundColor: navColor }}>
41
+ <div class="h-1" style={{ backgroundColor: primaryColor }} />
42
+ <div class="mx-auto max-w-7xl px-6 py-16">
43
+ <div class="grid gap-12 sm:grid-cols-2 lg:grid-cols-4">
44
+ {/* Company info */}
45
+ <div>
46
+ <div class="mb-4 text-lg font-bold text-white">{site.site_name}</div>
47
+ <p class="mb-6 text-sm leading-relaxed text-gray-400">
48
+ {themeSettings.footer_text ?? 'Engineering technology that moves enterprises forward.'}
49
+ </p>
50
+ <div class="flex gap-4 text-sm text-gray-400">
51
+ <a href="#" class="transition-colors hover:text-white hover:no-underline">LinkedIn</a>
52
+ <a href="#" class="transition-colors hover:text-white hover:no-underline">X</a>
53
+ <a href="#" class="transition-colors hover:text-white hover:no-underline">GitHub</a>
54
+ </div>
55
+ </div>
56
+
57
+ {/* Services */}
58
+ <div>
59
+ <h4 class="mb-4 text-sm font-semibold uppercase tracking-wider text-white">Services</h4>
60
+ <ul class="space-y-3">
61
+ {footerServices.map((link) => (
62
+ <li>
63
+ <a href={link.href} class="text-sm text-gray-400 transition-colors hover:text-white hover:no-underline">
64
+ {link.label}
65
+ </a>
66
+ </li>
67
+ ))}
68
+ </ul>
69
+ </div>
70
+
71
+ {/* Company */}
72
+ <div>
73
+ <h4 class="mb-4 text-sm font-semibold uppercase tracking-wider text-white">Company</h4>
74
+ <ul class="space-y-3">
75
+ {footerCompany.map((link) => (
76
+ <li>
77
+ <a href={link.href} class="text-sm text-gray-400 transition-colors hover:text-white hover:no-underline">
78
+ {link.label}
79
+ </a>
80
+ </li>
81
+ ))}
82
+ </ul>
83
+ </div>
84
+
85
+ {/* Resources */}
86
+ <div>
87
+ <h4 class="mb-4 text-sm font-semibold uppercase tracking-wider text-white">Resources</h4>
88
+ <ul class="space-y-3">
89
+ {footerResources.map((link) => (
90
+ <li>
91
+ <a href={link.href} class="text-sm text-gray-400 transition-colors hover:text-white hover:no-underline">
92
+ {link.label}
93
+ </a>
94
+ </li>
95
+ ))}
96
+ </ul>
97
+ </div>
98
+ </div>
99
+
100
+ {/* Bottom bar */}
101
+ <div class="mt-12 border-t border-gray-800 pt-8 text-center text-xs text-gray-500">
102
+ <p>&copy; {new Date().getFullYear()} {site.site_name}. All rights reserved.</p>
103
+ </div>
104
+ </div>
105
+ </footer>
106
+ );
107
+ };
108
+
109
+ export default Footer;