@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,121 @@
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 Industry: FC<LayoutProps> = (props) => {
7
+ const { content, themeSettings } = props;
8
+ const primaryColor = themeSettings.primary_color ?? '#F59E0B';
9
+ const navColor = themeSettings.nav_color ?? '#14101E';
10
+ const fields = content.fields;
11
+
12
+ return (
13
+ <Base {...props}>
14
+ {/* Hero */}
15
+ <section class="relative overflow-hidden py-28 text-white" style={{ backgroundColor: navColor }}>
16
+ <div class="pointer-events-none absolute inset-0" style={{ background: `radial-gradient(ellipse at 30% 70%, ${primaryColor}10 0%, transparent 50%)` }} />
17
+ <div class="relative mx-auto max-w-4xl px-6">
18
+ <p class="mb-4 text-xs font-semibold uppercase tracking-[0.2em] text-gray-400">Industries We Staff</p>
19
+ <h1 class="text-4xl font-extrabold tracking-[-0.03em] leading-[1.1] sm:text-5xl lg:text-6xl">
20
+ {content.title}
21
+ </h1>
22
+ {fields.short_description && (
23
+ <p class="mt-8 max-w-2xl text-lg leading-relaxed text-gray-300/90">
24
+ {fields.short_description}
25
+ </p>
26
+ )}
27
+ </div>
28
+ </section>
29
+
30
+ {/* Challenges */}
31
+ {fields.challenges && Array.isArray(fields.challenges) && fields.challenges.length > 0 && (
32
+ <section class="py-24">
33
+ <div class="mx-auto max-w-5xl px-6">
34
+ <h2 class="mb-4 text-3xl font-bold tracking-[-0.02em] text-slate-900">Workforce Challenges</h2>
35
+ <p class="mb-12 text-lg text-slate-500">The hiring problems keeping leaders in this space up at night</p>
36
+ <div class="grid gap-6 sm:grid-cols-2">
37
+ {fields.challenges.map((challenge: string) => (
38
+ <div class="group rounded-2xl border border-gray-100 bg-white p-8 transition-all duration-300 hover:shadow-lg hover:shadow-slate-200/50">
39
+ <div class="mb-4 h-1 w-8 rounded transition-all duration-300 group-hover:w-12" style={{ backgroundColor: primaryColor }} />
40
+ <p class="leading-relaxed text-slate-600">{challenge}</p>
41
+ </div>
42
+ ))}
43
+ </div>
44
+ </div>
45
+ </section>
46
+ )}
47
+
48
+ {/* Solutions */}
49
+ {fields.solutions && Array.isArray(fields.solutions) && fields.solutions.length > 0 && (
50
+ <section class="border-t border-gray-100 bg-slate-50 py-24">
51
+ <div class="mx-auto max-w-5xl px-6">
52
+ <h2 class="mb-4 text-3xl font-bold tracking-[-0.02em] text-slate-900">Our Staffing Solutions</h2>
53
+ <p class="mb-16 text-lg text-slate-500">Proven hiring approaches tailored to your sector</p>
54
+ <div class="grid gap-8 sm:grid-cols-2 lg:grid-cols-3">
55
+ {fields.solutions.map((solution: { title: string; description?: string; url?: string }) => (
56
+ <div class="group rounded-2xl border border-gray-100 bg-white p-8 transition-all duration-300 hover:border-amber-200 hover:shadow-lg hover:shadow-slate-200/50">
57
+ <h3 class="mb-3 text-lg font-semibold tracking-[-0.01em] text-slate-900">{solution.title}</h3>
58
+ {solution.description && (
59
+ <p class="text-sm leading-relaxed text-slate-500">{solution.description}</p>
60
+ )}
61
+ {solution.url && (
62
+ <a href={solution.url} class="mt-4 inline-flex items-center gap-1 text-sm font-medium transition-colors hover:no-underline" style={{ color: primaryColor }}>
63
+ Learn more
64
+ <span class="transition-transform duration-200 group-hover:translate-x-1">&rarr;</span>
65
+ </a>
66
+ )}
67
+ </div>
68
+ ))}
69
+ </div>
70
+ </div>
71
+ </section>
72
+ )}
73
+
74
+ {/* Compliance */}
75
+ {fields.compliance && Array.isArray(fields.compliance) && fields.compliance.length > 0 && (
76
+ <section class="py-24">
77
+ <div class="mx-auto max-w-5xl px-6">
78
+ <h2 class="mb-12 text-3xl font-bold tracking-[-0.02em] text-slate-900">Compliance & Accreditations</h2>
79
+ <div class="flex flex-wrap gap-4">
80
+ {fields.compliance.map((badge: string) => (
81
+ <span class="rounded-xl border-2 px-6 py-3 text-sm font-semibold transition-all duration-200 hover:shadow-md" style={{ borderColor: primaryColor, color: primaryColor }}>
82
+ {badge}
83
+ </span>
84
+ ))}
85
+ </div>
86
+ </div>
87
+ </section>
88
+ )}
89
+
90
+ {/* Body */}
91
+ {content.bodyHtml && (
92
+ <section class="border-t border-gray-100 py-20">
93
+ <div class="mx-auto max-w-3xl px-6">
94
+ <div class="prose prose-lg prose-slate max-w-none" dangerouslySetInnerHTML={{ __html: content.bodyHtml }} />
95
+ </div>
96
+ </section>
97
+ )}
98
+
99
+ {/* CTA */}
100
+ <section class="relative overflow-hidden py-24 text-white" style={{ backgroundColor: navColor }}>
101
+ <div class="pointer-events-none absolute inset-0" style={{ background: `radial-gradient(ellipse at 50% 50%, ${primaryColor}12 0%, transparent 60%)` }} />
102
+ <div class="relative mx-auto max-w-3xl px-6 text-center">
103
+ <h2 class="text-3xl font-bold tracking-[-0.02em] sm:text-4xl">Partner with staffing experts</h2>
104
+ <p class="mt-6 text-lg text-gray-300/90">We understand the unique workforce challenges of your sector. Let's solve them together.</p>
105
+ <div class="mt-10 flex flex-wrap items-center justify-center gap-4">
106
+ <a href="/contact" class="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" style={{ backgroundColor: primaryColor }}>
107
+ Discuss Your Workforce Needs
108
+ </a>
109
+ <a href="/case-studies" class="inline-block rounded-lg border border-white/20 px-8 py-3.5 text-sm font-semibold text-white/90 transition-all duration-200 hover:border-white/50 hover:text-white hover:no-underline">
110
+ See Success Stories
111
+ </a>
112
+ </div>
113
+ </div>
114
+ </section>
115
+
116
+ {props.children}
117
+ </Base>
118
+ );
119
+ };
120
+
121
+ export default Industry;
@@ -0,0 +1,14 @@
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 LandingPage: FC<LayoutProps> = (props) => {
7
+ return (
8
+ <Base {...props}>
9
+ {props.children}
10
+ </Base>
11
+ );
12
+ };
13
+
14
+ export default LandingPage;
@@ -0,0 +1,158 @@
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 values = [
7
+ { title: 'Trust', icon: '◆', desc: 'We build lasting relationships through transparency, honest communication, and always putting people first.' },
8
+ { title: 'Speed', icon: '◈', desc: 'Time-to-fill matters. Our streamlined processes deliver qualified candidates faster than the competition.' },
9
+ { title: 'People-First', icon: '◇', desc: 'Every placement is a person. We invest in understanding candidates and clients to create perfect matches.' },
10
+ { title: 'Local Expertise', icon: '○', desc: 'Deep knowledge of regional labor markets, salary benchmarks, and workforce regulations across Poland.' },
11
+ ];
12
+
13
+ const milestones = [
14
+ { year: '2009', text: 'Founded in Warsaw with a team of five recruiters' },
15
+ { year: '2012', text: 'Opened Kraków office — first 1,000 placements' },
16
+ { year: '2014', text: 'Expanded to Wrocław and Gdańsk offices' },
17
+ { year: '2016', text: 'Łódź office. 5,000 cumulative placements' },
18
+ { year: '2018', text: 'Launched executive search division' },
19
+ { year: '2020', text: 'Remote hiring solutions during pandemic — record year' },
20
+ { year: '2022', text: '10 offices across Poland. 10,000+ placements' },
21
+ { year: '2024', text: '200+ recruiters. 15,000+ placements per year. 12 offices' },
22
+ ];
23
+
24
+ const PageAbout: FC<LayoutProps> = (props) => {
25
+ const { content, themeSettings } = props;
26
+ const primaryColor = themeSettings.primary_color ?? '#F59E0B';
27
+ const navColor = themeSettings.nav_color ?? '#14101E';
28
+
29
+ return (
30
+ <Base {...props}>
31
+ {/* Hero with team photo */}
32
+ <section class="relative overflow-hidden text-white" style={{ minHeight: '520px' }}>
33
+ <img
34
+ src="/static/images/article-platform-engineering.jpg"
35
+ alt="KadoServices team collaborating"
36
+ class="absolute inset-0 h-full w-full object-cover"
37
+ loading="eager"
38
+ />
39
+ <div class="absolute inset-0" style={{
40
+ background: `linear-gradient(to bottom, ${navColor}c0 0%, ${navColor}dd 50%, ${navColor}f0 100%)`,
41
+ }} />
42
+ <div class="relative z-10 flex min-h-[520px] items-center py-28">
43
+ <div class="mx-auto max-w-4xl px-6 text-center">
44
+ <p class="mb-4 text-xs font-semibold uppercase tracking-[0.2em] text-gray-300">About Us</p>
45
+ <h1 class="text-4xl font-extrabold tracking-[-0.03em] leading-[1.1] sm:text-5xl lg:text-6xl" style={{ textShadow: '0 2px 20px rgba(0,0,0,0.3)' }}>
46
+ We connect great people with great companies
47
+ </h1>
48
+ <p class="mx-auto mt-8 max-w-2xl text-lg leading-relaxed text-gray-200/90">
49
+ Founded in 2009. 200+ recruiters across 12 offices in Poland. Staffing, recruitment, and workforce solutions for companies of all sizes.
50
+ </p>
51
+ </div>
52
+ </div>
53
+ </section>
54
+
55
+ {/* Story — clean prose, lots of white space */}
56
+ <section class="py-24">
57
+ <div class="mx-auto max-w-3xl px-6">
58
+ <h2 class="mb-8 text-3xl font-bold tracking-[-0.02em] text-slate-900">Our Story</h2>
59
+ <div class="space-y-6 text-lg leading-relaxed text-slate-600">
60
+ <p>
61
+ KadoServices was founded in 2009 in Warsaw by a team of five recruiters who believed that staffing could be done differently — with genuine care for candidates, transparent partnerships with employers, and a relentless focus on long-term placements over quick fills.
62
+ </p>
63
+ <p>
64
+ What started as a small recruitment agency has grown into one of Poland's leading staffing and workforce solutions companies. Our growth has been organic and deliberate — every new office, service line, and hire was driven by client demand and a commitment to maintaining the people-first culture that defines us.
65
+ </p>
66
+ </div>
67
+ </div>
68
+ </section>
69
+
70
+ {/* Values — 4-column cards */}
71
+ <section class="border-t border-gray-100 bg-slate-50 py-24">
72
+ <div class="mx-auto max-w-6xl px-6">
73
+ <div class="mx-auto mb-16 max-w-2xl text-center">
74
+ <h2 class="text-3xl font-bold tracking-[-0.02em] text-slate-900">Our Values</h2>
75
+ <p class="mt-4 text-lg text-slate-500">The principles behind every decision we make</p>
76
+ </div>
77
+ <div class="grid gap-8 sm:grid-cols-2 lg:grid-cols-4">
78
+ {values.map((v) => (
79
+ <div class="group rounded-2xl border border-gray-100 bg-white p-8 transition-all duration-300 hover:shadow-xl hover:shadow-slate-200/50">
80
+ <div class="mb-5 text-2xl" style={{ color: primaryColor }}>{v.icon}</div>
81
+ <h3 class="mb-3 text-lg font-semibold text-slate-900">{v.title}</h3>
82
+ <p class="text-sm leading-relaxed text-slate-500">{v.desc}</p>
83
+ </div>
84
+ ))}
85
+ </div>
86
+ </div>
87
+ </section>
88
+
89
+ {/* Mission statement — big centered text */}
90
+ <section class="py-24">
91
+ <div class="mx-auto max-w-4xl px-6 text-center">
92
+ <blockquote class="text-3xl font-bold leading-snug tracking-[-0.02em] text-slate-900 sm:text-4xl">
93
+ "We <span style={{ color: primaryColor }}>connect</span> because every hire starts with a relationship.
94
+ <span style={{ color: primaryColor }}> People</span> because they are at the heart of every business.
95
+ <span style={{ color: primaryColor }}> Great companies</span> because our work has no value unless it creates lasting impact."
96
+ </blockquote>
97
+ </div>
98
+ </section>
99
+
100
+ {/* Milestones — clean timeline */}
101
+ <section class="border-t border-gray-100 bg-slate-50 py-24">
102
+ <div class="mx-auto max-w-4xl px-6">
103
+ <h2 class="mb-16 text-center text-3xl font-bold tracking-[-0.02em] text-slate-900">Key Milestones</h2>
104
+ <div class="space-y-0">
105
+ {milestones.map((m, i) => (
106
+ <div class="group flex items-start gap-8 py-6" style={{ borderBottom: i < milestones.length - 1 ? '1px solid #f1f5f9' : 'none' }}>
107
+ <div class="w-20 shrink-0 text-right text-2xl font-extrabold tracking-[-0.02em]" style={{ color: primaryColor }}>
108
+ {m.year}
109
+ </div>
110
+ <div class="pt-1 text-base text-slate-600">
111
+ {m.text}
112
+ </div>
113
+ </div>
114
+ ))}
115
+ </div>
116
+ </div>
117
+ </section>
118
+
119
+ {/* Numbers */}
120
+ <section class="py-24">
121
+ <div class="mx-auto max-w-6xl px-6">
122
+ <div class="grid gap-12 text-center sm:grid-cols-2 lg:grid-cols-4">
123
+ {[
124
+ { value: '15+', label: 'Years in Staffing' },
125
+ { value: '15,000+', label: 'Placements Per Year' },
126
+ { value: '12', label: 'Offices in Poland' },
127
+ { value: '94%', label: 'Client Retention' },
128
+ ].map((stat) => (
129
+ <div>
130
+ <div class="text-5xl font-extrabold tracking-[-0.03em]" style={{ color: primaryColor }}>{stat.value}</div>
131
+ <div class="mt-2 text-sm font-medium uppercase tracking-[0.1em] text-slate-400">{stat.label}</div>
132
+ </div>
133
+ ))}
134
+ </div>
135
+ </div>
136
+ </section>
137
+
138
+ {/* CTA */}
139
+ <section class="relative overflow-hidden py-24 text-white" style={{ backgroundColor: navColor }}>
140
+ <div class="pointer-events-none absolute inset-0" style={{ background: `radial-gradient(ellipse at 50% 50%, ${primaryColor}12 0%, transparent 60%)` }} />
141
+ <div class="relative mx-auto max-w-3xl px-6 text-center">
142
+ <h2 class="text-3xl font-bold tracking-[-0.02em] sm:text-4xl">Let's build your team together</h2>
143
+ <p class="mt-6 text-lg text-gray-300/90">Whether you need one key hire or an entire workforce — we're ready.</p>
144
+ <div class="mt-10 flex flex-wrap items-center justify-center gap-4">
145
+ <a href="/contact" class="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" style={{ backgroundColor: primaryColor }}>
146
+ Get in Touch
147
+ </a>
148
+ <a href="/case-studies" class="inline-block rounded-lg border border-white/20 px-8 py-3.5 text-sm font-semibold text-white/90 transition-all duration-200 hover:border-white/50 hover:text-white hover:no-underline">
149
+ See Success Stories
150
+ </a>
151
+ </div>
152
+ </div>
153
+ </section>
154
+ </Base>
155
+ );
156
+ };
157
+
158
+ export default PageAbout;
@@ -0,0 +1,214 @@
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 perks = [
7
+ { icon: '💰', title: 'Uncapped Commission', desc: 'No ceiling on your earnings. Transparent, competitive commission tiers.' },
8
+ { icon: '📚', title: 'Recruitment Training', desc: 'Structured onboarding, sourcing workshops, certifications.' },
9
+ { icon: '🏥', title: 'Health & Wellness', desc: 'Private healthcare, mental health support, gym memberships.' },
10
+ { icon: '🏖️', title: '26 Days PTO', desc: 'Plus national holidays. Rested recruiters build stronger relationships.' },
11
+ { icon: '🌍', title: 'Hybrid & Remote', desc: 'Work from 12 offices or from home. Flexibility that fits your lifestyle.' },
12
+ { icon: '📈', title: 'Career Growth', desc: 'Clear paths from recruiter to team lead to branch manager.' },
13
+ ];
14
+
15
+ const openings = [
16
+ { title: 'Senior Recruiter — IT', team: 'Tech Staffing', location: 'Warsaw', remote: 'Remote OK', type: 'Full-time', seniority: 'Senior', department: 'Recruitment' },
17
+ { title: 'Recruitment Consultant — Finance', team: 'Banking & Finance', location: 'Kraków', remote: 'Remote OK', type: 'Full-time', seniority: 'Mid', department: 'Recruitment' },
18
+ { title: 'Sourcing Specialist', team: 'Talent Acquisition', location: 'Wrocław', remote: 'Remote OK', type: 'Full-time', seniority: 'Junior', department: 'Recruitment' },
19
+ { title: 'Account Manager — Manufacturing', team: 'Client Relations', location: 'Gdańsk', remote: 'Hybrid', type: 'Full-time', seniority: 'Senior', department: 'Sales' },
20
+ { title: 'Branch Manager', team: 'Operations', location: 'Łódź', remote: 'On-site', type: 'Full-time', seniority: 'Lead', department: 'Operations' },
21
+ { title: 'HR Business Partner', team: 'Internal HR', location: 'Warsaw', remote: 'Remote OK', type: 'Full-time', seniority: 'Mid', department: 'HR' },
22
+ { title: 'Recruiter — Logistics', team: 'Logistics Staffing', location: 'Katowice', remote: 'Hybrid', type: 'Full-time', seniority: 'Junior', department: 'Recruitment' },
23
+ { title: 'Team Lead — Temporary Staffing', team: 'Temp Division', location: 'Warsaw', remote: 'Hybrid', type: 'Full-time', seniority: 'Lead', department: 'Recruitment' },
24
+ { title: 'Marketing Specialist', team: 'Marketing', location: 'Warsaw', remote: 'Remote OK', type: 'Full-time', seniority: 'Mid', department: 'Marketing' },
25
+ { title: 'Payroll Administrator', team: 'Payroll & Admin', location: 'Kraków', remote: 'On-site', type: 'Full-time', seniority: 'Junior', department: 'Operations' },
26
+ ];
27
+
28
+ const locations = ['All Locations', 'Warsaw', 'Kraków', 'Wrocław', 'Gdańsk', 'Łódź', 'Katowice'];
29
+ const departments = ['All Departments', 'Recruitment', 'Sales', 'Operations', 'HR', 'Marketing'];
30
+ const seniorities = ['All Levels', 'Junior', 'Mid', 'Senior', 'Lead'];
31
+
32
+ const stats = [
33
+ { number: '200+', label: 'Team members' },
34
+ { number: '12', label: 'Offices in Poland' },
35
+ { number: '94%', label: 'Employee satisfaction' },
36
+ { number: '3.2', label: 'Avg. years tenure' },
37
+ ];
38
+
39
+ const PageCareers: FC<LayoutProps> = (props) => {
40
+ const { content, themeSettings } = props;
41
+ const primaryColor = themeSettings.primary_color ?? '#F59E0B';
42
+ const navColor = themeSettings.nav_color ?? '#14101E';
43
+ const t = (k: string) => themeSettings._t?.(k) ?? k;
44
+ const url = (p: string) => themeSettings._url?.(p) ?? p;
45
+
46
+ return (
47
+ <Base {...props}>
48
+ {/* Hero — warm amber tint, not dark */}
49
+ <section class="py-24" style={{ background: 'linear-gradient(180deg, #FFFBEB 0%, #FAFAF9 100%)' }}>
50
+ <div class="mx-auto max-w-6xl px-6">
51
+ <div class="grid items-center gap-12 lg:grid-cols-2">
52
+ <div>
53
+ <p class="mb-4 text-xs font-semibold uppercase tracking-[0.2em]" style={{ color: primaryColor }}>Careers at KadoServices</p>
54
+ <h1 class="text-4xl font-extrabold tracking-[-0.03em] leading-[1.1] text-slate-900 sm:text-5xl">
55
+ Build careers that matter
56
+ </h1>
57
+ <p class="mt-6 max-w-lg text-lg leading-relaxed text-slate-600">
58
+ Join 200+ recruiters connecting top talent with Poland's most ambitious companies. No cold-call quotas — just meaningful work and uncapped earning potential.
59
+ </p>
60
+ <div class="mt-8 flex flex-wrap gap-4">
61
+ <a href="#openings" class="inline-block rounded-lg px-7 py-3.5 text-sm font-semibold text-white transition-all duration-200 hover:shadow-lg hover:no-underline" style={{ backgroundColor: primaryColor }}>
62
+ View {openings.length} Open Positions
63
+ </a>
64
+ <a href="mailto:careers@kadoservices.com" class="inline-block rounded-lg border-2 px-7 py-3.5 text-sm font-semibold transition-all duration-200 hover:no-underline" style={{ borderColor: primaryColor, color: primaryColor }}>
65
+ Send Your CV
66
+ </a>
67
+ </div>
68
+ </div>
69
+ <div class="hidden lg:block">
70
+ <img src="/static/images/team-meeting.jpg" alt="KadoServices team" class="rounded-2xl shadow-xl" loading="lazy" />
71
+ </div>
72
+ </div>
73
+ </div>
74
+ </section>
75
+
76
+ {/* Stats strip */}
77
+ <section class="border-y border-gray-100 bg-white py-10">
78
+ <div class="mx-auto flex max-w-5xl flex-wrap items-center justify-around gap-8 px-6">
79
+ {stats.map((s) => (
80
+ <div class="text-center">
81
+ <div class="text-3xl font-extrabold" style={{ color: primaryColor }}>{s.number}</div>
82
+ <div class="mt-1 text-xs font-medium uppercase tracking-wider text-slate-400">{s.label}</div>
83
+ </div>
84
+ ))}
85
+ </div>
86
+ </section>
87
+
88
+ {/* Open positions — table with filter tags */}
89
+ <section class="py-20" id="openings">
90
+ <div class="mx-auto max-w-6xl px-6">
91
+ <div class="mb-8 flex flex-col gap-4 sm:flex-row sm:items-end sm:justify-between">
92
+ <div>
93
+ <h2 class="text-3xl font-bold tracking-[-0.02em] text-slate-900">Open Positions</h2>
94
+ <p class="mt-2 text-slate-500">{openings.length} open roles across Poland</p>
95
+ </div>
96
+ </div>
97
+
98
+ {/* Filter bar */}
99
+ <div class="mb-8 flex flex-wrap gap-3 rounded-xl border border-gray-100 bg-slate-50 p-4">
100
+ <div>
101
+ <label class="mb-1 block text-[10px] font-semibold uppercase tracking-wider text-slate-400">Location</label>
102
+ <div class="flex flex-wrap gap-1.5">
103
+ {locations.map((loc, i) => (
104
+ <span class={`cursor-default rounded-full px-3 py-1 text-xs font-medium transition-colors ${i === 0 ? 'text-white' : 'bg-white text-slate-600 border border-gray-200'}`} style={i === 0 ? { backgroundColor: primaryColor } : {}}>
105
+ {loc}
106
+ </span>
107
+ ))}
108
+ </div>
109
+ </div>
110
+ <div class="border-l border-gray-200 pl-3">
111
+ <label class="mb-1 block text-[10px] font-semibold uppercase tracking-wider text-slate-400">Department</label>
112
+ <div class="flex flex-wrap gap-1.5">
113
+ {departments.map((dep, i) => (
114
+ <span class={`cursor-default rounded-full px-3 py-1 text-xs font-medium transition-colors ${i === 0 ? 'text-white' : 'bg-white text-slate-600 border border-gray-200'}`} style={i === 0 ? { backgroundColor: primaryColor } : {}}>
115
+ {dep}
116
+ </span>
117
+ ))}
118
+ </div>
119
+ </div>
120
+ <div class="border-l border-gray-200 pl-3">
121
+ <label class="mb-1 block text-[10px] font-semibold uppercase tracking-wider text-slate-400">Level</label>
122
+ <div class="flex flex-wrap gap-1.5">
123
+ {seniorities.map((s, i) => (
124
+ <span class={`cursor-default rounded-full px-3 py-1 text-xs font-medium transition-colors ${i === 0 ? 'text-white' : 'bg-white text-slate-600 border border-gray-200'}`} style={i === 0 ? { backgroundColor: primaryColor } : {}}>
125
+ {s}
126
+ </span>
127
+ ))}
128
+ </div>
129
+ </div>
130
+ </div>
131
+
132
+ {/* Job listings table */}
133
+ <div class="overflow-hidden rounded-xl border border-gray-100">
134
+ {/* Table header */}
135
+ <div class="hidden border-b border-gray-100 bg-slate-50 px-6 py-3 text-[11px] font-semibold uppercase tracking-wider text-slate-400 sm:grid sm:grid-cols-12 sm:gap-4">
136
+ <div class="col-span-4">Position</div>
137
+ <div class="col-span-2">Department</div>
138
+ <div class="col-span-2">Location</div>
139
+ <div class="col-span-2">Remote</div>
140
+ <div class="col-span-1">Level</div>
141
+ <div class="col-span-1"></div>
142
+ </div>
143
+ {/* Rows */}
144
+ {openings.map((job, idx) => (
145
+ <a
146
+ href={url('/contact')}
147
+ class={`group block border-b border-gray-50 px-6 py-5 transition-colors duration-150 hover:bg-amber-50/40 hover:no-underline sm:grid sm:grid-cols-12 sm:items-center sm:gap-4 ${idx % 2 === 0 ? 'bg-white' : 'bg-slate-50/30'}`}
148
+ >
149
+ <div class="col-span-4">
150
+ <h3 class="text-sm font-semibold text-slate-900 group-hover:text-amber-700">{job.title}</h3>
151
+ <p class="mt-0.5 text-xs text-slate-400 sm:hidden">{job.team} · {job.location} · {job.remote}</p>
152
+ </div>
153
+ <div class="col-span-2 hidden text-sm text-slate-600 sm:block">{job.team}</div>
154
+ <div class="col-span-2 hidden text-sm text-slate-600 sm:block">{job.location}</div>
155
+ <div class="col-span-2 hidden sm:block">
156
+ <span class={`rounded-full px-2.5 py-0.5 text-xs font-medium ${job.remote === 'Remote OK' ? 'bg-green-50 text-green-700' : job.remote === 'Hybrid' ? 'bg-blue-50 text-blue-700' : 'bg-gray-100 text-gray-600'}`}>
157
+ {job.remote}
158
+ </span>
159
+ </div>
160
+ <div class="col-span-1 hidden text-xs text-slate-400 sm:block">{job.seniority}</div>
161
+ <div class="col-span-1 hidden text-right sm:block">
162
+ <span class="text-xs font-semibold opacity-0 transition-all duration-200 group-hover:opacity-100" style={{ color: primaryColor }}>Apply &rarr;</span>
163
+ </div>
164
+ </a>
165
+ ))}
166
+ </div>
167
+
168
+ <p class="mt-6 text-sm text-slate-400">
169
+ Can't find a perfect fit? Send your CV to <a href="mailto:careers@kadoservices.com" class="font-medium hover:no-underline" style={{ color: primaryColor }}>careers@kadoservices.com</a>
170
+ </p>
171
+ </div>
172
+ </section>
173
+
174
+ {/* Why join us + Perks */}
175
+ <section class="border-t border-gray-100 bg-slate-50 py-24">
176
+ <div class="mx-auto max-w-6xl px-6">
177
+ <div class="grid gap-16 lg:grid-cols-2">
178
+ <div>
179
+ <h2 class="mb-6 text-3xl font-bold tracking-[-0.02em] text-slate-900">Why KadoServices?</h2>
180
+ <div class="space-y-5 text-base leading-relaxed text-slate-600">
181
+ <p>We're not a resume factory. Every recruiter here builds real relationships — from placing warehouse operators to sourcing C-level executives.</p>
182
+ <p>Our culture is built on people-first values. No impossible KPIs, no cold-call quotas. Just meaningful work, uncapped commission, and genuine commitment to your growth.</p>
183
+ <p>You'll work alongside some of the best recruiters in Poland, with the autonomy to manage your own desk and the support to build your career.</p>
184
+ </div>
185
+ </div>
186
+ <div class="grid gap-4 sm:grid-cols-2">
187
+ {perks.map((p) => (
188
+ <div class="rounded-xl border border-gray-100 bg-white p-6 transition-all duration-300 hover:shadow-md">
189
+ <div class="mb-3 text-2xl">{p.icon}</div>
190
+ <h3 class="mb-1 text-sm font-semibold text-slate-900">{p.title}</h3>
191
+ <p class="text-xs leading-relaxed text-slate-500">{p.desc}</p>
192
+ </div>
193
+ ))}
194
+ </div>
195
+ </div>
196
+ </div>
197
+ </section>
198
+
199
+ {/* Bottom CTA */}
200
+ <section class="relative overflow-hidden py-24 text-white" style={{ backgroundColor: navColor }}>
201
+ <div class="pointer-events-none absolute inset-0" style={{ background: `radial-gradient(ellipse at 50% 50%, ${primaryColor}12 0%, transparent 60%)` }} />
202
+ <div class="relative mx-auto max-w-3xl px-6 text-center">
203
+ <h2 class="text-3xl font-bold tracking-[-0.02em] sm:text-4xl">Don't see your role?</h2>
204
+ <p class="mt-6 text-lg text-gray-300/90">We're always looking for exceptional recruiters and HR professionals. Send us your CV and we'll reach out when a position opens.</p>
205
+ <a href="mailto:careers@kadoservices.com" class="mt-10 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" style={{ backgroundColor: primaryColor }}>
206
+ Send Your CV
207
+ </a>
208
+ </div>
209
+ </section>
210
+ </Base>
211
+ );
212
+ };
213
+
214
+ export default PageCareers;