@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.
- package/CLAUDE.md +64 -0
- package/INVARIANTS.json +43 -0
- package/LICENSE +19 -0
- package/README.md +566 -0
- package/dist/app.d.ts +22 -0
- package/dist/app.d.ts.map +1 -0
- package/dist/app.js +464 -0
- package/dist/app.js.map +1 -0
- package/dist/built-in-theme/components/cta/cta.d.ts +5 -0
- package/dist/built-in-theme/components/cta/cta.d.ts.map +1 -0
- package/dist/built-in-theme/components/cta/cta.js +6 -0
- package/dist/built-in-theme/components/cta/cta.js.map +1 -0
- package/dist/built-in-theme/components/features/features.d.ts +5 -0
- package/dist/built-in-theme/components/features/features.d.ts.map +1 -0
- package/dist/built-in-theme/components/features/features.js +7 -0
- package/dist/built-in-theme/components/features/features.js.map +1 -0
- package/dist/built-in-theme/components/hero/hero.d.ts +5 -0
- package/dist/built-in-theme/components/hero/hero.d.ts.map +1 -0
- package/dist/built-in-theme/components/hero/hero.js +6 -0
- package/dist/built-in-theme/components/hero/hero.js.map +1 -0
- package/dist/built-in-theme/components/text/text.d.ts +4 -0
- package/dist/built-in-theme/components/text/text.d.ts.map +1 -0
- package/dist/built-in-theme/components/text/text.js +7 -0
- package/dist/built-in-theme/components/text/text.js.map +1 -0
- package/dist/built-in-theme/layouts/article.d.ts +4 -0
- package/dist/built-in-theme/layouts/article.d.ts.map +1 -0
- package/dist/built-in-theme/layouts/article.js +11 -0
- package/dist/built-in-theme/layouts/article.js.map +1 -0
- package/dist/built-in-theme/layouts/base.d.ts +7 -0
- package/dist/built-in-theme/layouts/base.d.ts.map +1 -0
- package/dist/built-in-theme/layouts/base.js +21 -0
- package/dist/built-in-theme/layouts/base.js.map +1 -0
- package/dist/built-in-theme/layouts/landing-page.d.ts +6 -0
- package/dist/built-in-theme/layouts/landing-page.d.ts.map +1 -0
- package/dist/built-in-theme/layouts/landing-page.js +6 -0
- package/dist/built-in-theme/layouts/landing-page.js.map +1 -0
- package/dist/built-in-theme/layouts/page.d.ts +4 -0
- package/dist/built-in-theme/layouts/page.d.ts.map +1 -0
- package/dist/built-in-theme/layouts/page.js +7 -0
- package/dist/built-in-theme/layouts/page.js.map +1 -0
- package/dist/cli/build.d.ts +11 -0
- package/dist/cli/build.d.ts.map +1 -0
- package/dist/cli/build.js +271 -0
- package/dist/cli/build.js.map +1 -0
- package/dist/cli/create-app.d.ts +4 -0
- package/dist/cli/create-app.d.ts.map +1 -0
- package/dist/cli/create-app.js +179 -0
- package/dist/cli/create-app.js.map +1 -0
- package/dist/cli/db-init.d.ts +6 -0
- package/dist/cli/db-init.d.ts.map +1 -0
- package/dist/cli/db-init.js +28 -0
- package/dist/cli/db-init.js.map +1 -0
- package/dist/cli/dev.d.ts +10 -0
- package/dist/cli/dev.d.ts.map +1 -0
- package/dist/cli/dev.js +68 -0
- package/dist/cli/dev.js.map +1 -0
- package/dist/cli/export-cmd.d.ts +6 -0
- package/dist/cli/export-cmd.d.ts.map +1 -0
- package/dist/cli/export-cmd.js +12 -0
- package/dist/cli/export-cmd.js.map +1 -0
- package/dist/cli/import-cmd.d.ts +6 -0
- package/dist/cli/import-cmd.d.ts.map +1 -0
- package/dist/cli/import-cmd.js +11 -0
- package/dist/cli/import-cmd.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +163 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/init-cmd.d.ts +20 -0
- package/dist/cli/init-cmd.d.ts.map +1 -0
- package/dist/cli/init-cmd.js +116 -0
- package/dist/cli/init-cmd.js.map +1 -0
- package/dist/cli/sync-cmd.d.ts +5 -0
- package/dist/cli/sync-cmd.d.ts.map +1 -0
- package/dist/cli/sync-cmd.js +17 -0
- package/dist/cli/sync-cmd.js.map +1 -0
- package/dist/content-engine.d.ts +50 -0
- package/dist/content-engine.d.ts.map +1 -0
- package/dist/content-engine.js +240 -0
- package/dist/content-engine.js.map +1 -0
- package/dist/db/connection.d.ts +9 -0
- package/dist/db/connection.d.ts.map +1 -0
- package/dist/db/connection.js +121 -0
- package/dist/db/connection.js.map +1 -0
- package/dist/db/schema.d.ts +1178 -0
- package/dist/db/schema.d.ts.map +1 -0
- package/dist/db/schema.js +79 -0
- package/dist/db/schema.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/auth.d.ts +14 -0
- package/dist/lib/auth.d.ts.map +1 -0
- package/dist/lib/auth.js +40 -0
- package/dist/lib/auth.js.map +1 -0
- package/dist/lib/config-files.d.ts +8 -0
- package/dist/lib/config-files.d.ts.map +1 -0
- package/dist/lib/config-files.js +72 -0
- package/dist/lib/config-files.js.map +1 -0
- package/dist/lib/content-files.d.ts +5 -0
- package/dist/lib/content-files.d.ts.map +1 -0
- package/dist/lib/content-files.js +156 -0
- package/dist/lib/content-files.js.map +1 -0
- package/dist/lib/i18n.d.ts +33 -0
- package/dist/lib/i18n.d.ts.map +1 -0
- package/dist/lib/i18n.js +247 -0
- package/dist/lib/i18n.js.map +1 -0
- package/dist/lib/multisite.d.ts +23 -0
- package/dist/lib/multisite.d.ts.map +1 -0
- package/dist/lib/multisite.js +73 -0
- package/dist/lib/multisite.js.map +1 -0
- package/dist/lib/paths.d.ts +6 -0
- package/dist/lib/paths.d.ts.map +1 -0
- package/dist/lib/paths.js +25 -0
- package/dist/lib/paths.js.map +1 -0
- package/dist/lib/schema-loader.d.ts +25 -0
- package/dist/lib/schema-loader.d.ts.map +1 -0
- package/dist/lib/schema-loader.js +45 -0
- package/dist/lib/schema-loader.js.map +1 -0
- package/dist/lib/seo.d.ts +18 -0
- package/dist/lib/seo.d.ts.map +1 -0
- package/dist/lib/seo.js +212 -0
- package/dist/lib/seo.js.map +1 -0
- package/dist/lib/sync.d.ts +33 -0
- package/dist/lib/sync.d.ts.map +1 -0
- package/dist/lib/sync.js +308 -0
- package/dist/lib/sync.js.map +1 -0
- package/dist/lib/taxonomy.d.ts +29 -0
- package/dist/lib/taxonomy.d.ts.map +1 -0
- package/dist/lib/taxonomy.js +170 -0
- package/dist/lib/taxonomy.js.map +1 -0
- package/dist/lib/template-renderer.d.ts +6 -0
- package/dist/lib/template-renderer.d.ts.map +1 -0
- package/dist/lib/template-renderer.js +80 -0
- package/dist/lib/template-renderer.js.map +1 -0
- package/dist/lib/theme-loader.d.ts +5 -0
- package/dist/lib/theme-loader.d.ts.map +1 -0
- package/dist/lib/theme-loader.js +199 -0
- package/dist/lib/theme-loader.js.map +1 -0
- package/dist/lib/theme-types.d.ts +39 -0
- package/dist/lib/theme-types.d.ts.map +1 -0
- package/dist/lib/theme-types.js +2 -0
- package/dist/lib/theme-types.js.map +1 -0
- package/dist/lib/types.d.ts +91 -0
- package/dist/lib/types.d.ts.map +1 -0
- package/dist/lib/types.js +2 -0
- package/dist/lib/types.js.map +1 -0
- package/dist/routes/admin/content-edit.d.ts +10 -0
- package/dist/routes/admin/content-edit.d.ts.map +1 -0
- package/dist/routes/admin/content-edit.js +325 -0
- package/dist/routes/admin/content-edit.js.map +1 -0
- package/dist/routes/admin/content-list.d.ts +10 -0
- package/dist/routes/admin/content-list.d.ts.map +1 -0
- package/dist/routes/admin/content-list.js +162 -0
- package/dist/routes/admin/content-list.js.map +1 -0
- package/dist/routes/admin/content.d.ts +3 -0
- package/dist/routes/admin/content.d.ts.map +1 -0
- package/dist/routes/admin/content.js +12 -0
- package/dist/routes/admin/content.js.map +1 -0
- package/dist/routes/admin/dashboard.d.ts +4 -0
- package/dist/routes/admin/dashboard.d.ts.map +1 -0
- package/dist/routes/admin/dashboard.js +121 -0
- package/dist/routes/admin/dashboard.js.map +1 -0
- package/dist/routes/admin/export-route.d.ts +10 -0
- package/dist/routes/admin/export-route.d.ts.map +1 -0
- package/dist/routes/admin/export-route.js +19 -0
- package/dist/routes/admin/export-route.js.map +1 -0
- package/dist/routes/admin/index.d.ts +9 -0
- package/dist/routes/admin/index.d.ts.map +1 -0
- package/dist/routes/admin/index.js +27 -0
- package/dist/routes/admin/index.js.map +1 -0
- package/dist/routes/admin/layout.d.ts +17 -0
- package/dist/routes/admin/layout.d.ts.map +1 -0
- package/dist/routes/admin/layout.js +110 -0
- package/dist/routes/admin/layout.js.map +1 -0
- package/dist/routes/admin/login.d.ts +5 -0
- package/dist/routes/admin/login.d.ts.map +1 -0
- package/dist/routes/admin/login.js +113 -0
- package/dist/routes/admin/login.js.map +1 -0
- package/dist/routes/admin/media.d.ts +10 -0
- package/dist/routes/admin/media.d.ts.map +1 -0
- package/dist/routes/admin/media.js +192 -0
- package/dist/routes/admin/media.js.map +1 -0
- package/dist/routes/admin/middleware.d.ts +8 -0
- package/dist/routes/admin/middleware.d.ts.map +1 -0
- package/dist/routes/admin/middleware.js +29 -0
- package/dist/routes/admin/middleware.js.map +1 -0
- package/dist/routes/admin/section-builder.d.ts +10 -0
- package/dist/routes/admin/section-builder.d.ts.map +1 -0
- package/dist/routes/admin/section-builder.js +487 -0
- package/dist/routes/admin/section-builder.js.map +1 -0
- package/dist/routes/admin/settings.d.ts +10 -0
- package/dist/routes/admin/settings.d.ts.map +1 -0
- package/dist/routes/admin/settings.js +209 -0
- package/dist/routes/admin/settings.js.map +1 -0
- package/dist/routes/admin/site-switcher.d.ts +3 -0
- package/dist/routes/admin/site-switcher.d.ts.map +1 -0
- package/dist/routes/admin/site-switcher.js +36 -0
- package/dist/routes/admin/site-switcher.js.map +1 -0
- package/dist/routes/admin/taxonomy.d.ts +10 -0
- package/dist/routes/admin/taxonomy.d.ts.map +1 -0
- package/dist/routes/admin/taxonomy.js +297 -0
- package/dist/routes/admin/taxonomy.js.map +1 -0
- package/dist/routes/admin/users.d.ts +10 -0
- package/dist/routes/admin/users.d.ts.map +1 -0
- package/dist/routes/admin/users.js +227 -0
- package/dist/routes/admin/users.js.map +1 -0
- package/package.json +75 -0
- package/src/built-in-theme/components/cta/cta.tsx +18 -0
- package/src/built-in-theme/components/cta/schema.yaml +17 -0
- package/src/built-in-theme/components/features/features.tsx +18 -0
- package/src/built-in-theme/components/features/schema.yaml +22 -0
- package/src/built-in-theme/components/hero/hero.tsx +18 -0
- package/src/built-in-theme/components/hero/schema.yaml +17 -0
- package/src/built-in-theme/components/text/schema.yaml +12 -0
- package/src/built-in-theme/components/text/text.tsx +11 -0
- package/src/built-in-theme/layouts/article.tsx +20 -0
- package/src/built-in-theme/layouts/base.tsx +50 -0
- package/src/built-in-theme/layouts/landing-page.tsx +15 -0
- package/src/built-in-theme/layouts/page.tsx +11 -0
- package/src/built-in-theme/theme.yaml +4 -0
- package/starters/blank/config/content-types.yaml +47 -0
- package/starters/blank/config/section-types.yaml +115 -0
- package/starters/blank/config/settings.yaml +12 -0
- package/starters/blank/content/landing-pages/homepage.yaml +55 -0
- package/starters/blank/content/pages/about.md +27 -0
- package/starters/blank/starter.yaml +14 -0
- package/starters/blank/themes/starter/_types.ts +93 -0
- package/starters/blank/themes/starter/components/blog-listing/blog-listing.tsx +102 -0
- package/starters/blank/themes/starter/components/blog-listing/schema.yaml +21 -0
- package/starters/blank/themes/starter/components/columns/columns.tsx +101 -0
- package/starters/blank/themes/starter/components/columns/schema.yaml +23 -0
- package/starters/blank/themes/starter/components/counters/counters.css +13 -0
- package/starters/blank/themes/starter/components/counters/counters.tsx +81 -0
- package/starters/blank/themes/starter/components/counters/schema.yaml +23 -0
- package/starters/blank/themes/starter/components/cta/cta.tsx +57 -0
- package/starters/blank/themes/starter/components/cta/schema.yaml +30 -0
- package/starters/blank/themes/starter/components/faq/faq.tsx +77 -0
- package/starters/blank/themes/starter/components/faq/schema.yaml +20 -0
- package/starters/blank/themes/starter/components/features/features.tsx +82 -0
- package/starters/blank/themes/starter/components/features/schema.yaml +19 -0
- package/starters/blank/themes/starter/components/form/form.tsx +126 -0
- package/starters/blank/themes/starter/components/form/schema.yaml +18 -0
- package/starters/blank/themes/starter/components/gallery/gallery.tsx +85 -0
- package/starters/blank/themes/starter/components/gallery/schema.yaml +27 -0
- package/starters/blank/themes/starter/components/hero/hero.tsx +77 -0
- package/starters/blank/themes/starter/components/hero/schema.yaml +26 -0
- package/starters/blank/themes/starter/components/logo-slider/logo-slider.css +21 -0
- package/starters/blank/themes/starter/components/logo-slider/logo-slider.tsx +81 -0
- package/starters/blank/themes/starter/components/logo-slider/schema.yaml +23 -0
- package/starters/blank/themes/starter/components/pricing/pricing.tsx +141 -0
- package/starters/blank/themes/starter/components/pricing/schema.yaml +44 -0
- package/starters/blank/themes/starter/components/testimonials/schema.yaml +26 -0
- package/starters/blank/themes/starter/components/testimonials/testimonials.tsx +100 -0
- package/starters/blank/themes/starter/components/text/schema.yaml +12 -0
- package/starters/blank/themes/starter/components/text/text.tsx +62 -0
- package/starters/blank/themes/starter/components/text-with-image/schema.yaml +30 -0
- package/starters/blank/themes/starter/components/text-with-image/text-with-image.tsx +86 -0
- package/starters/blank/themes/starter/components/video/schema.yaml +19 -0
- package/starters/blank/themes/starter/components/video/video.tsx +98 -0
- package/starters/blank/themes/starter/layouts/article.tsx +42 -0
- package/starters/blank/themes/starter/layouts/base.tsx +92 -0
- package/starters/blank/themes/starter/layouts/landing-page.tsx +14 -0
- package/starters/blank/themes/starter/layouts/page.tsx +29 -0
- package/starters/blank/themes/starter/partials/footer.tsx +22 -0
- package/starters/blank/themes/starter/partials/header.tsx +32 -0
- package/starters/blank/themes/starter/static/style.css +125 -0
- package/starters/blank/themes/starter/theme.yaml +16 -0
- package/starters/kadoservices/config/content-types.yaml +239 -0
- package/starters/kadoservices/config/languages.yaml +12 -0
- package/starters/kadoservices/config/section-types.yaml +379 -0
- package/starters/kadoservices/config/settings.yaml +15 -0
- package/starters/kadoservices/config/sites.yaml +14 -0
- package/starters/kadoservices/config/taxonomies.yaml +61 -0
- package/starters/kadoservices/config/translations/de.yaml +120 -0
- package/starters/kadoservices/config/translations/en.yaml +120 -0
- package/starters/kadoservices/config/translations/pl.yaml +120 -0
- package/starters/kadoservices/content/articles/employer-branding-strategies.md +61 -0
- package/starters/kadoservices/content/articles/hiring-trends-2026.md +61 -0
- package/starters/kadoservices/content/articles/hiring-trends-2026.pl.md +61 -0
- package/starters/kadoservices/content/articles/labor-law-changes.md +78 -0
- package/starters/kadoservices/content/articles/temporary-staffing-guide.md +76 -0
- package/starters/kadoservices/content/articles/temporary-staffing-guide.pl.md +76 -0
- package/starters/kadoservices/content/case-studies/finance-rpo-program.md +68 -0
- package/starters/kadoservices/content/case-studies/manufacturing-mass-recruitment.md +65 -0
- package/starters/kadoservices/content/case-studies/manufacturing-mass-recruitment.pl.md +65 -0
- package/starters/kadoservices/content/case-studies/retail-seasonal-staffing.md +69 -0
- package/starters/kadoservices/content/industries/finance-shared-services.md +59 -0
- package/starters/kadoservices/content/industries/healthcare.md +64 -0
- package/starters/kadoservices/content/industries/it-technology.md +61 -0
- package/starters/kadoservices/content/industries/logistics.md +54 -0
- package/starters/kadoservices/content/industries/manufacturing.md +61 -0
- package/starters/kadoservices/content/industries/retail.md +56 -0
- package/starters/kadoservices/content/landing-pages/homepage.pl.yaml +198 -0
- package/starters/kadoservices/content/landing-pages/homepage.yaml +198 -0
- package/starters/kadoservices/content/locations/gdansk.md +32 -0
- package/starters/kadoservices/content/locations/krakow.md +30 -0
- package/starters/kadoservices/content/locations/warsaw.md +30 -0
- package/starters/kadoservices/content/locations/wroclaw.md +32 -0
- package/starters/kadoservices/content/pages/about.md +58 -0
- package/starters/kadoservices/content/pages/about.pl.md +58 -0
- package/starters/kadoservices/content/pages/careers.md +55 -0
- package/starters/kadoservices/content/pages/clients.md +65 -0
- package/starters/kadoservices/content/pages/contact.md +74 -0
- package/starters/kadoservices/content/pages/contact.pl.md +74 -0
- package/starters/kadoservices/content/pages/faq.md +76 -0
- package/starters/kadoservices/content/services/employer-branding.md +70 -0
- package/starters/kadoservices/content/services/hr-consulting.md +64 -0
- package/starters/kadoservices/content/services/outsourcing-rpo.md +78 -0
- package/starters/kadoservices/content/services/outsourcing-rpo.pl.md +67 -0
- package/starters/kadoservices/content/services/payroll-hr-admin.md +66 -0
- package/starters/kadoservices/content/services/permanent-recruitment.md +78 -0
- package/starters/kadoservices/content/services/permanent-recruitment.pl.md +78 -0
- package/starters/kadoservices/content/services/temporary-staffing.md +78 -0
- package/starters/kadoservices/content/team/anna-kowalska.md +26 -0
- package/starters/kadoservices/content/team/jan-lewandowski.md +26 -0
- package/starters/kadoservices/content/team/katarzyna-zielinska.md +26 -0
- package/starters/kadoservices/content/team/maria-wisniewska.md +28 -0
- package/starters/kadoservices/content/team/tomasz-nowak.md +26 -0
- package/starters/kadoservices/starter.yaml +15 -0
- package/starters/kadoservices/themes/kadoservices/_types.ts +93 -0
- package/starters/kadoservices/themes/kadoservices/components/blog-listing/blog-listing.tsx +197 -0
- package/starters/kadoservices/themes/kadoservices/components/blog-listing/schema.yaml +21 -0
- package/starters/kadoservices/themes/kadoservices/components/columns/columns.tsx +104 -0
- package/starters/kadoservices/themes/kadoservices/components/columns/schema.yaml +23 -0
- package/starters/kadoservices/themes/kadoservices/components/counters/counters.css +13 -0
- package/starters/kadoservices/themes/kadoservices/components/counters/counters.tsx +103 -0
- package/starters/kadoservices/themes/kadoservices/components/counters/schema.yaml +23 -0
- package/starters/kadoservices/themes/kadoservices/components/cta/cta.tsx +100 -0
- package/starters/kadoservices/themes/kadoservices/components/cta/schema.yaml +30 -0
- package/starters/kadoservices/themes/kadoservices/components/faq/faq.tsx +77 -0
- package/starters/kadoservices/themes/kadoservices/components/faq/schema.yaml +20 -0
- package/starters/kadoservices/themes/kadoservices/components/features/features.tsx +151 -0
- package/starters/kadoservices/themes/kadoservices/components/features/schema.yaml +19 -0
- package/starters/kadoservices/themes/kadoservices/components/form/form.tsx +135 -0
- package/starters/kadoservices/themes/kadoservices/components/form/schema.yaml +18 -0
- package/starters/kadoservices/themes/kadoservices/components/gallery/gallery.tsx +90 -0
- package/starters/kadoservices/themes/kadoservices/components/gallery/schema.yaml +27 -0
- package/starters/kadoservices/themes/kadoservices/components/hero/hero.tsx +175 -0
- package/starters/kadoservices/themes/kadoservices/components/hero/schema.yaml +26 -0
- package/starters/kadoservices/themes/kadoservices/components/logo-slider/logo-slider.css +21 -0
- package/starters/kadoservices/themes/kadoservices/components/logo-slider/logo-slider.tsx +83 -0
- package/starters/kadoservices/themes/kadoservices/components/logo-slider/schema.yaml +23 -0
- package/starters/kadoservices/themes/kadoservices/components/pricing/pricing.tsx +161 -0
- package/starters/kadoservices/themes/kadoservices/components/pricing/schema.yaml +44 -0
- package/starters/kadoservices/themes/kadoservices/components/testimonials/schema.yaml +26 -0
- package/starters/kadoservices/themes/kadoservices/components/testimonials/testimonials.css +13 -0
- package/starters/kadoservices/themes/kadoservices/components/testimonials/testimonials.tsx +150 -0
- package/starters/kadoservices/themes/kadoservices/components/text/schema.yaml +12 -0
- package/starters/kadoservices/themes/kadoservices/components/text/text.tsx +67 -0
- package/starters/kadoservices/themes/kadoservices/components/text-with-image/schema.yaml +30 -0
- package/starters/kadoservices/themes/kadoservices/components/text-with-image/text-with-image.tsx +92 -0
- package/starters/kadoservices/themes/kadoservices/components/video/schema.yaml +19 -0
- package/starters/kadoservices/themes/kadoservices/components/video/video.tsx +103 -0
- package/starters/kadoservices/themes/kadoservices/layouts/404.tsx +96 -0
- package/starters/kadoservices/themes/kadoservices/layouts/article.tsx +140 -0
- package/starters/kadoservices/themes/kadoservices/layouts/base.tsx +669 -0
- package/starters/kadoservices/themes/kadoservices/layouts/case-study.tsx +240 -0
- package/starters/kadoservices/themes/kadoservices/layouts/index--articles.tsx +250 -0
- package/starters/kadoservices/themes/kadoservices/layouts/index--case-studies.tsx +232 -0
- package/starters/kadoservices/themes/kadoservices/layouts/index--services.tsx +237 -0
- package/starters/kadoservices/themes/kadoservices/layouts/index.tsx +96 -0
- package/starters/kadoservices/themes/kadoservices/layouts/industry.tsx +121 -0
- package/starters/kadoservices/themes/kadoservices/layouts/landing-page.tsx +14 -0
- package/starters/kadoservices/themes/kadoservices/layouts/page--about.tsx +158 -0
- package/starters/kadoservices/themes/kadoservices/layouts/page--careers.tsx +214 -0
- package/starters/kadoservices/themes/kadoservices/layouts/page--contact.tsx +218 -0
- package/starters/kadoservices/themes/kadoservices/layouts/page.tsx +45 -0
- package/starters/kadoservices/themes/kadoservices/layouts/service.tsx +235 -0
- package/starters/kadoservices/themes/kadoservices/partials/footer.tsx +109 -0
- package/starters/kadoservices/themes/kadoservices/partials/header.tsx +53 -0
- package/starters/kadoservices/themes/kadoservices/static/images/article-platform-engineering.jpg +0 -0
- package/starters/kadoservices/themes/kadoservices/static/images/barka-logo.png +0 -0
- package/starters/kadoservices/themes/kadoservices/static/images/case-study-banking-dashboard.jpg +0 -0
- package/starters/kadoservices/themes/kadoservices/static/images/case-study-banking.png +0 -0
- package/starters/kadoservices/themes/kadoservices/static/images/case-study-ecommerce-dashboard.jpg +0 -0
- package/starters/kadoservices/themes/kadoservices/static/images/case-study-healthcare-dashboard.jpg +0 -0
- package/starters/kadoservices/themes/kadoservices/static/images/case-study-healthcare.png +0 -0
- package/starters/kadoservices/themes/kadoservices/static/images/case-study-retail.png +0 -0
- package/starters/kadoservices/themes/kadoservices/static/images/handshake.jpg +0 -0
- package/starters/kadoservices/themes/kadoservices/static/images/hero-bg.jpg +0 -0
- package/starters/kadoservices/themes/kadoservices/static/images/hero-bg.png +0 -0
- package/starters/kadoservices/themes/kadoservices/static/images/lokatech-logo.png +0 -0
- package/starters/kadoservices/themes/kadoservices/static/images/office-warsaw.png +0 -0
- package/starters/kadoservices/themes/kadoservices/static/images/office.jpg +0 -0
- package/starters/kadoservices/themes/kadoservices/static/images/team-anna-kowalska.png +0 -0
- package/starters/kadoservices/themes/kadoservices/static/images/team-collaboration.jpg +0 -0
- package/starters/kadoservices/themes/kadoservices/static/images/team-jan-nowak.png +0 -0
- package/starters/kadoservices/themes/kadoservices/static/images/team-katarzyna-kaminska.png +0 -0
- package/starters/kadoservices/themes/kadoservices/static/images/team-maria-wisniewska.png +0 -0
- package/starters/kadoservices/themes/kadoservices/static/images/team-meeting.jpg +0 -0
- package/starters/kadoservices/themes/kadoservices/static/images/team-strategy-session.jpg +0 -0
- package/starters/kadoservices/themes/kadoservices/static/images/team-tomasz-lewandowski.png +0 -0
- package/starters/kadoservices/themes/kadoservices/static/style.css +542 -0
- package/starters/kadoservices/themes/kadoservices/theme.yaml +21 -0
- package/starters/kadoservices/themes/starter/_types.ts +93 -0
- package/starters/kadoservices/themes/starter/components/blog-listing/blog-listing.tsx +102 -0
- package/starters/kadoservices/themes/starter/components/blog-listing/schema.yaml +21 -0
- package/starters/kadoservices/themes/starter/components/columns/columns.tsx +101 -0
- package/starters/kadoservices/themes/starter/components/columns/schema.yaml +23 -0
- package/starters/kadoservices/themes/starter/components/counters/counters.css +13 -0
- package/starters/kadoservices/themes/starter/components/counters/counters.tsx +81 -0
- package/starters/kadoservices/themes/starter/components/counters/schema.yaml +23 -0
- package/starters/kadoservices/themes/starter/components/cta/cta.tsx +57 -0
- package/starters/kadoservices/themes/starter/components/cta/schema.yaml +30 -0
- package/starters/kadoservices/themes/starter/components/faq/faq.tsx +77 -0
- package/starters/kadoservices/themes/starter/components/faq/schema.yaml +20 -0
- package/starters/kadoservices/themes/starter/components/features/features.tsx +82 -0
- package/starters/kadoservices/themes/starter/components/features/schema.yaml +19 -0
- package/starters/kadoservices/themes/starter/components/form/form.tsx +126 -0
- package/starters/kadoservices/themes/starter/components/form/schema.yaml +18 -0
- package/starters/kadoservices/themes/starter/components/gallery/gallery.tsx +85 -0
- package/starters/kadoservices/themes/starter/components/gallery/schema.yaml +27 -0
- package/starters/kadoservices/themes/starter/components/hero/hero.tsx +77 -0
- package/starters/kadoservices/themes/starter/components/hero/schema.yaml +26 -0
- package/starters/kadoservices/themes/starter/components/logo-slider/logo-slider.css +21 -0
- package/starters/kadoservices/themes/starter/components/logo-slider/logo-slider.tsx +81 -0
- package/starters/kadoservices/themes/starter/components/logo-slider/schema.yaml +23 -0
- package/starters/kadoservices/themes/starter/components/pricing/pricing.tsx +141 -0
- package/starters/kadoservices/themes/starter/components/pricing/schema.yaml +44 -0
- package/starters/kadoservices/themes/starter/components/testimonials/schema.yaml +26 -0
- package/starters/kadoservices/themes/starter/components/testimonials/testimonials.tsx +100 -0
- package/starters/kadoservices/themes/starter/components/text/schema.yaml +12 -0
- package/starters/kadoservices/themes/starter/components/text/text.tsx +62 -0
- package/starters/kadoservices/themes/starter/components/text-with-image/schema.yaml +30 -0
- package/starters/kadoservices/themes/starter/components/text-with-image/text-with-image.tsx +86 -0
- package/starters/kadoservices/themes/starter/components/video/schema.yaml +19 -0
- package/starters/kadoservices/themes/starter/components/video/video.tsx +98 -0
- package/starters/kadoservices/themes/starter/layouts/article.tsx +42 -0
- package/starters/kadoservices/themes/starter/layouts/base.tsx +92 -0
- package/starters/kadoservices/themes/starter/layouts/landing-page.tsx +14 -0
- package/starters/kadoservices/themes/starter/layouts/page.tsx +29 -0
- package/starters/kadoservices/themes/starter/partials/footer.tsx +22 -0
- package/starters/kadoservices/themes/starter/partials/header.tsx +32 -0
- package/starters/kadoservices/themes/starter/static/style.css +125 -0
- package/starters/kadoservices/themes/starter/theme.yaml +16 -0
- package/starters/lokatech/config/content-types.yaml +226 -0
- package/starters/lokatech/config/languages.yaml +12 -0
- package/starters/lokatech/config/section-types.yaml +379 -0
- package/starters/lokatech/config/settings.yaml +15 -0
- package/starters/lokatech/config/sites.yaml +21 -0
- package/starters/lokatech/config/taxonomies.yaml +65 -0
- package/starters/lokatech/config/translations/de.yaml +108 -0
- package/starters/lokatech/config/translations/en.yaml +108 -0
- package/starters/lokatech/config/translations/pl.yaml +108 -0
- package/starters/lokatech/content/articles/ai-in-enterprise.md +51 -0
- package/starters/lokatech/content/articles/api-gateway-patterns-enterprise.md +35 -0
- package/starters/lokatech/content/articles/design-system-enterprise-scale.md +35 -0
- package/starters/lokatech/content/articles/domain-driven-design-bounded-contexts.md +35 -0
- package/starters/lokatech/content/articles/engineering-team-scaling-50-to-200.md +33 -0
- package/starters/lokatech/content/articles/event-driven-architecture-microservices.md +35 -0
- package/starters/lokatech/content/articles/future-of-cloud-native.md +47 -0
- package/starters/lokatech/content/articles/getting-started.md +83 -0
- package/starters/lokatech/content/articles/headless-cms-composable-architecture.md +35 -0
- package/starters/lokatech/content/articles/kubernetes-cost-optimization-finops.md +33 -0
- package/starters/lokatech/content/articles/legacy-modernization-strangler-fig.md +35 -0
- package/starters/lokatech/content/articles/llm-fine-tuning-enterprise-data.md +33 -0
- package/starters/lokatech/content/articles/observability-opentelemetry-stack.md +35 -0
- package/starters/lokatech/content/articles/platform-engineering-internal-developer-portals.md +33 -0
- package/starters/lokatech/content/articles/platform-engineering-internal-developer-portals.pl.md +33 -0
- package/starters/lokatech/content/articles/rag-retrieval-augmented-generation-production.md +35 -0
- package/starters/lokatech/content/articles/remote-engineering-culture-distributed-teams.md +35 -0
- package/starters/lokatech/content/articles/supply-chain-security-sbom.md +35 -0
- package/starters/lokatech/content/articles/welcome.md +42 -0
- package/starters/lokatech/content/articles/welcome.pl.md +39 -0
- package/starters/lokatech/content/articles/zero-trust-network-architecture.md +35 -0
- package/starters/lokatech/content/articles/zero-trust-security.md +55 -0
- package/starters/lokatech/content/case-studies/banking-platform-modernization.md +67 -0
- package/starters/lokatech/content/case-studies/ecommerce-platform-rewrite.md +64 -0
- package/starters/lokatech/content/case-studies/govtech-citizen-portal.md +59 -0
- package/starters/lokatech/content/case-studies/healthcare-data-pipeline.md +67 -0
- package/starters/lokatech/content/case-studies/healthcare-data-pipeline.pl.md +60 -0
- package/starters/lokatech/content/case-studies/insurance-claims-automation.md +58 -0
- package/starters/lokatech/content/case-studies/manufacturing-iot-digital-twin.md +58 -0
- package/starters/lokatech/content/case-studies/retail-cloud-migration.md +49 -0
- package/starters/lokatech/content/case-studies/telecom-5g-platform.md +57 -0
- package/starters/lokatech/content/industries/energy-utilities.md +35 -0
- package/starters/lokatech/content/industries/financial-services.md +35 -0
- package/starters/lokatech/content/industries/healthcare.md +35 -0
- package/starters/lokatech/content/industries/manufacturing.md +35 -0
- package/starters/lokatech/content/industries/retail-ecommerce.md +35 -0
- package/starters/lokatech/content/industries/telecom-media.md +35 -0
- package/starters/lokatech/content/landing-pages/homepage.pl.yaml +182 -0
- package/starters/lokatech/content/landing-pages/homepage.yaml +236 -0
- package/starters/lokatech/content/locations/berlin.md +22 -0
- package/starters/lokatech/content/locations/krakow.md +22 -0
- package/starters/lokatech/content/locations/london.md +22 -0
- package/starters/lokatech/content/locations/warsaw.md +22 -0
- package/starters/lokatech/content/locations/wroclaw.md +22 -0
- package/starters/lokatech/content/pages/about.md +55 -0
- package/starters/lokatech/content/pages/about.pl.md +36 -0
- package/starters/lokatech/content/pages/careers.md +50 -0
- package/starters/lokatech/content/pages/contact.md +51 -0
- package/starters/lokatech/content/pages/contact.pl.md +51 -0
- package/starters/lokatech/content/pages/security-compliance.md +66 -0
- package/starters/lokatech/content/services/cloud-infrastructure.md +73 -0
- package/starters/lokatech/content/services/custom-software-development.md +74 -0
- package/starters/lokatech/content/services/custom-software-development.pl.md +80 -0
- package/starters/lokatech/content/services/cybersecurity.md +72 -0
- package/starters/lokatech/content/services/data-ai.md +74 -0
- package/starters/lokatech/content/services/digital-transformation.md +70 -0
- package/starters/lokatech/content/services/it-outsourcing.md +72 -0
- package/starters/lokatech/content/team/anna-kowalska.md +21 -0
- package/starters/lokatech/content/team/jan-nowak.md +21 -0
- package/starters/lokatech/content/team/katarzyna-kaminska.md +20 -0
- package/starters/lokatech/content/team/maria-wisniewska.md +20 -0
- package/starters/lokatech/content/team/tomasz-lewandowski.md +20 -0
- package/starters/lokatech/starter.yaml +15 -0
- package/starters/lokatech/themes/lokatech/_types.ts +93 -0
- package/starters/lokatech/themes/lokatech/components/blog-listing/blog-listing.tsx +197 -0
- package/starters/lokatech/themes/lokatech/components/blog-listing/schema.yaml +21 -0
- package/starters/lokatech/themes/lokatech/components/columns/columns.tsx +104 -0
- package/starters/lokatech/themes/lokatech/components/columns/schema.yaml +23 -0
- package/starters/lokatech/themes/lokatech/components/counters/counters.css +13 -0
- package/starters/lokatech/themes/lokatech/components/counters/counters.tsx +103 -0
- package/starters/lokatech/themes/lokatech/components/counters/schema.yaml +23 -0
- package/starters/lokatech/themes/lokatech/components/cta/cta.tsx +100 -0
- package/starters/lokatech/themes/lokatech/components/cta/schema.yaml +30 -0
- package/starters/lokatech/themes/lokatech/components/faq/faq.tsx +77 -0
- package/starters/lokatech/themes/lokatech/components/faq/schema.yaml +20 -0
- package/starters/lokatech/themes/lokatech/components/features/features.tsx +149 -0
- package/starters/lokatech/themes/lokatech/components/features/schema.yaml +19 -0
- package/starters/lokatech/themes/lokatech/components/form/form.tsx +135 -0
- package/starters/lokatech/themes/lokatech/components/form/schema.yaml +18 -0
- package/starters/lokatech/themes/lokatech/components/gallery/gallery.tsx +90 -0
- package/starters/lokatech/themes/lokatech/components/gallery/schema.yaml +27 -0
- package/starters/lokatech/themes/lokatech/components/hero/hero.tsx +167 -0
- package/starters/lokatech/themes/lokatech/components/hero/schema.yaml +26 -0
- package/starters/lokatech/themes/lokatech/components/logo-slider/logo-slider.css +21 -0
- package/starters/lokatech/themes/lokatech/components/logo-slider/logo-slider.tsx +83 -0
- package/starters/lokatech/themes/lokatech/components/logo-slider/schema.yaml +23 -0
- package/starters/lokatech/themes/lokatech/components/pricing/pricing.tsx +161 -0
- package/starters/lokatech/themes/lokatech/components/pricing/schema.yaml +44 -0
- package/starters/lokatech/themes/lokatech/components/testimonials/schema.yaml +26 -0
- package/starters/lokatech/themes/lokatech/components/testimonials/testimonials.css +13 -0
- package/starters/lokatech/themes/lokatech/components/testimonials/testimonials.tsx +150 -0
- package/starters/lokatech/themes/lokatech/components/text/schema.yaml +12 -0
- package/starters/lokatech/themes/lokatech/components/text/text.tsx +67 -0
- package/starters/lokatech/themes/lokatech/components/text-with-image/schema.yaml +30 -0
- package/starters/lokatech/themes/lokatech/components/text-with-image/text-with-image.tsx +92 -0
- package/starters/lokatech/themes/lokatech/components/video/schema.yaml +19 -0
- package/starters/lokatech/themes/lokatech/components/video/video.tsx +103 -0
- package/starters/lokatech/themes/lokatech/layouts/404.tsx +96 -0
- package/starters/lokatech/themes/lokatech/layouts/article.tsx +140 -0
- package/starters/lokatech/themes/lokatech/layouts/base.tsx +672 -0
- package/starters/lokatech/themes/lokatech/layouts/case-study.tsx +233 -0
- package/starters/lokatech/themes/lokatech/layouts/index--articles.tsx +246 -0
- package/starters/lokatech/themes/lokatech/layouts/index--case-studies.tsx +230 -0
- package/starters/lokatech/themes/lokatech/layouts/index--services.tsx +237 -0
- package/starters/lokatech/themes/lokatech/layouts/index.tsx +96 -0
- package/starters/lokatech/themes/lokatech/layouts/industry.tsx +121 -0
- package/starters/lokatech/themes/lokatech/layouts/landing-page.tsx +14 -0
- package/starters/lokatech/themes/lokatech/layouts/page--about.tsx +158 -0
- package/starters/lokatech/themes/lokatech/layouts/page--careers.tsx +125 -0
- package/starters/lokatech/themes/lokatech/layouts/page--contact.tsx +235 -0
- package/starters/lokatech/themes/lokatech/layouts/page.tsx +45 -0
- package/starters/lokatech/themes/lokatech/layouts/service.tsx +235 -0
- package/starters/lokatech/themes/lokatech/partials/footer.tsx +109 -0
- package/starters/lokatech/themes/lokatech/partials/header.tsx +53 -0
- package/starters/lokatech/themes/lokatech/static/images/article-platform-engineering.jpg +0 -0
- package/starters/lokatech/themes/lokatech/static/images/barka-logo.png +0 -0
- package/starters/lokatech/themes/lokatech/static/images/case-study-banking-dashboard.jpg +0 -0
- package/starters/lokatech/themes/lokatech/static/images/case-study-banking.png +0 -0
- package/starters/lokatech/themes/lokatech/static/images/case-study-ecommerce-dashboard.jpg +0 -0
- package/starters/lokatech/themes/lokatech/static/images/case-study-healthcare-dashboard.jpg +0 -0
- package/starters/lokatech/themes/lokatech/static/images/case-study-healthcare.png +0 -0
- package/starters/lokatech/themes/lokatech/static/images/case-study-retail.png +0 -0
- package/starters/lokatech/themes/lokatech/static/images/hero-bg.png +0 -0
- package/starters/lokatech/themes/lokatech/static/images/lokatech-logo.png +0 -0
- package/starters/lokatech/themes/lokatech/static/images/office-warsaw.png +0 -0
- package/starters/lokatech/themes/lokatech/static/images/team-anna-kowalska.png +0 -0
- package/starters/lokatech/themes/lokatech/static/images/team-collaboration.jpg +0 -0
- package/starters/lokatech/themes/lokatech/static/images/team-jan-nowak.png +0 -0
- package/starters/lokatech/themes/lokatech/static/images/team-katarzyna-kaminska.png +0 -0
- package/starters/lokatech/themes/lokatech/static/images/team-maria-wisniewska.png +0 -0
- package/starters/lokatech/themes/lokatech/static/images/team-strategy-session.jpg +0 -0
- package/starters/lokatech/themes/lokatech/static/images/team-tomasz-lewandowski.png +0 -0
- package/starters/lokatech/themes/lokatech/static/style.css +495 -0
- package/starters/lokatech/themes/lokatech/theme.yaml +21 -0
- package/starters/lokatech/themes/starter/_types.ts +93 -0
- package/starters/lokatech/themes/starter/components/blog-listing/blog-listing.tsx +102 -0
- package/starters/lokatech/themes/starter/components/blog-listing/schema.yaml +21 -0
- package/starters/lokatech/themes/starter/components/columns/columns.tsx +101 -0
- package/starters/lokatech/themes/starter/components/columns/schema.yaml +23 -0
- package/starters/lokatech/themes/starter/components/counters/counters.css +13 -0
- package/starters/lokatech/themes/starter/components/counters/counters.tsx +81 -0
- package/starters/lokatech/themes/starter/components/counters/schema.yaml +23 -0
- package/starters/lokatech/themes/starter/components/cta/cta.tsx +57 -0
- package/starters/lokatech/themes/starter/components/cta/schema.yaml +30 -0
- package/starters/lokatech/themes/starter/components/faq/faq.tsx +77 -0
- package/starters/lokatech/themes/starter/components/faq/schema.yaml +20 -0
- package/starters/lokatech/themes/starter/components/features/features.tsx +82 -0
- package/starters/lokatech/themes/starter/components/features/schema.yaml +19 -0
- package/starters/lokatech/themes/starter/components/form/form.tsx +126 -0
- package/starters/lokatech/themes/starter/components/form/schema.yaml +18 -0
- package/starters/lokatech/themes/starter/components/gallery/gallery.tsx +85 -0
- package/starters/lokatech/themes/starter/components/gallery/schema.yaml +27 -0
- package/starters/lokatech/themes/starter/components/hero/hero.tsx +77 -0
- package/starters/lokatech/themes/starter/components/hero/schema.yaml +26 -0
- package/starters/lokatech/themes/starter/components/logo-slider/logo-slider.css +21 -0
- package/starters/lokatech/themes/starter/components/logo-slider/logo-slider.tsx +81 -0
- package/starters/lokatech/themes/starter/components/logo-slider/schema.yaml +23 -0
- package/starters/lokatech/themes/starter/components/pricing/pricing.tsx +141 -0
- package/starters/lokatech/themes/starter/components/pricing/schema.yaml +44 -0
- package/starters/lokatech/themes/starter/components/testimonials/schema.yaml +26 -0
- package/starters/lokatech/themes/starter/components/testimonials/testimonials.tsx +100 -0
- package/starters/lokatech/themes/starter/components/text/schema.yaml +12 -0
- package/starters/lokatech/themes/starter/components/text/text.tsx +62 -0
- package/starters/lokatech/themes/starter/components/text-with-image/schema.yaml +30 -0
- package/starters/lokatech/themes/starter/components/text-with-image/text-with-image.tsx +86 -0
- package/starters/lokatech/themes/starter/components/video/schema.yaml +19 -0
- package/starters/lokatech/themes/starter/components/video/video.tsx +98 -0
- package/starters/lokatech/themes/starter/layouts/article.tsx +42 -0
- package/starters/lokatech/themes/starter/layouts/base.tsx +92 -0
- package/starters/lokatech/themes/starter/layouts/landing-page.tsx +14 -0
- package/starters/lokatech/themes/starter/layouts/page.tsx +29 -0
- package/starters/lokatech/themes/starter/partials/footer.tsx +22 -0
- package/starters/lokatech/themes/starter/partials/header.tsx +32 -0
- package/starters/lokatech/themes/starter/static/style.css +125 -0
- package/starters/lokatech/themes/starter/theme.yaml +16 -0
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Digital Transformation Consulting"
|
|
3
|
+
type: service
|
|
4
|
+
status: published
|
|
5
|
+
langcode: en
|
|
6
|
+
slug: digital-transformation
|
|
7
|
+
date: 2026-03-21
|
|
8
|
+
fields:
|
|
9
|
+
short_description: "Strategic advisory to modernize legacy systems, automate processes, and accelerate your digital roadmap. From assessment to execution with measurable outcomes."
|
|
10
|
+
icon: rocket
|
|
11
|
+
hero_stats:
|
|
12
|
+
- value: "150+"
|
|
13
|
+
label: "Transformations delivered"
|
|
14
|
+
- value: "40%"
|
|
15
|
+
label: "Avg. process efficiency gain"
|
|
16
|
+
- value: "18"
|
|
17
|
+
label: "Months avg. payback period"
|
|
18
|
+
challenges:
|
|
19
|
+
- "Legacy systems built 15-20 years ago are the backbone of operations — but they can't support modern digital experiences"
|
|
20
|
+
- "Siloed departments run independent tech stacks that don't communicate, creating data gaps and duplicate work"
|
|
21
|
+
- "Previous transformation attempts failed because they focused on technology without addressing process and culture"
|
|
22
|
+
- "Resistance to change from leadership and teams blocks adoption of new tools and ways of working"
|
|
23
|
+
- "No clear metrics to prove ROI — leadership sees transformation as a cost center, not a value driver"
|
|
24
|
+
- "Vendor-driven roadmaps prioritize product sales over your actual business outcomes"
|
|
25
|
+
process:
|
|
26
|
+
- title: "Digital Maturity Assessment"
|
|
27
|
+
description: "Evaluate your current technology landscape, processes, organizational readiness, and competitive position. Benchmark against industry peers using our proprietary maturity model across 8 dimensions."
|
|
28
|
+
- title: "Strategy & Roadmap"
|
|
29
|
+
description: "Define a phased transformation plan aligned with business objectives. Each initiative has clear ROI projections, resource requirements, and dependencies. Quick wins in Q1, strategic moves in Q2-Q4."
|
|
30
|
+
- title: "Architecture & Technology Selection"
|
|
31
|
+
description: "Design target-state architecture: integration strategy, platform selection, build-vs-buy decisions. TOGAF-aligned with clear migration paths from current state."
|
|
32
|
+
- title: "Implementation & Change Management"
|
|
33
|
+
description: "Execute the roadmap with dedicated cross-functional teams. Parallel workstreams for technology delivery, process redesign, and organizational change management."
|
|
34
|
+
- title: "Measurement & Continuous Optimization"
|
|
35
|
+
description: "Track KPIs against targets, measure adoption rates, and iterate on the strategy quarterly. Transformation is a journey, not a project — we stay until outcomes are achieved."
|
|
36
|
+
capabilities:
|
|
37
|
+
- "Legacy Modernization — assessment, strangler fig migration, database re-platforming"
|
|
38
|
+
- "Process Automation — RPA, workflow automation, intelligent document processing"
|
|
39
|
+
- "Enterprise Architecture — TOGAF frameworks, governance, architecture reviews"
|
|
40
|
+
- "Change Management — stakeholder engagement, training, adoption measurement"
|
|
41
|
+
- "Innovation Labs — rapid prototyping, POC development, technology evaluation"
|
|
42
|
+
- "Digital Strategy — market analysis, competitive benchmarking, capability mapping"
|
|
43
|
+
- "Platform Selection — vendor evaluation, RFP management, contract negotiation"
|
|
44
|
+
- "Integration Strategy — API-first, event-driven, middleware modernization"
|
|
45
|
+
- "Data Migration — legacy database extraction, cleansing, and migration"
|
|
46
|
+
technologies:
|
|
47
|
+
- name: "TOGAF"
|
|
48
|
+
- name: "Mulesoft"
|
|
49
|
+
- name: "ServiceNow"
|
|
50
|
+
- name: "UiPath"
|
|
51
|
+
- name: "Power Platform"
|
|
52
|
+
- name: "Jira"
|
|
53
|
+
- name: "Confluence"
|
|
54
|
+
- name: "Azure DevOps"
|
|
55
|
+
- name: "Salesforce"
|
|
56
|
+
- name: "SAP"
|
|
57
|
+
case_studies:
|
|
58
|
+
- title: "Banking Platform Modernization"
|
|
59
|
+
result: "60% faster transactions"
|
|
60
|
+
url: "/case-studies/banking-platform-modernization"
|
|
61
|
+
- title: "Telecom 5G Platform"
|
|
62
|
+
result: "5M+ subscribers migrated"
|
|
63
|
+
url: "/case-studies/telecom-5g-platform"
|
|
64
|
+
- title: "GovTech Citizen Portal"
|
|
65
|
+
result: "80% digital adoption"
|
|
66
|
+
url: "/case-studies/govtech-citizen-portal"
|
|
67
|
+
seo:
|
|
68
|
+
title: "Digital Transformation Consulting — LokaTech Solutions"
|
|
69
|
+
description: "Strategic digital transformation consulting. Legacy modernization, process automation, and technology roadmaps for enterprise."
|
|
70
|
+
---
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "IT Outsourcing & Staff Augmentation"
|
|
3
|
+
type: service
|
|
4
|
+
status: published
|
|
5
|
+
langcode: en
|
|
6
|
+
slug: it-outsourcing
|
|
7
|
+
date: 2026-03-21
|
|
8
|
+
fields:
|
|
9
|
+
short_description: "Scalable engineering teams that integrate seamlessly with your organization. From individual specialists to fully managed 50-person delivery units."
|
|
10
|
+
icon: users
|
|
11
|
+
hero_stats:
|
|
12
|
+
- value: "800+"
|
|
13
|
+
label: "Engineers available"
|
|
14
|
+
- value: "2 weeks"
|
|
15
|
+
label: "Avg. team ramp-up"
|
|
16
|
+
- value: "95%"
|
|
17
|
+
label: "Contract renewal rate"
|
|
18
|
+
challenges:
|
|
19
|
+
- "Local talent markets are depleted — senior engineers receive 5+ offers and your positions stay open for months"
|
|
20
|
+
- "Onboarding new hires takes 3-6 months before they're productive, but your project deadline is next quarter"
|
|
21
|
+
- "Freelancers and agencies deliver inconsistent quality and disappear after the contract ends"
|
|
22
|
+
- "Time zone differences and cultural gaps make offshore outsourcing a communication nightmare"
|
|
23
|
+
- "Knowledge transfer risk — if key engineers leave, critical institutional knowledge walks out the door"
|
|
24
|
+
- "Scaling down is as hard as scaling up — permanent hires create fixed costs that budgets can't absorb during downturns"
|
|
25
|
+
process:
|
|
26
|
+
- title: "Needs Analysis & Team Design"
|
|
27
|
+
description: "Deep dive into your technology stack, team culture, project requirements, and working style. We design the optimal team composition — roles, seniority mix, and engagement model."
|
|
28
|
+
- title: "Talent Selection & Matching"
|
|
29
|
+
description: "Hand-pick engineers from our 800+ bench, matching technical skills, domain experience, seniority, and personality fit. Candidates go through your interview process, not just ours."
|
|
30
|
+
- title: "Structured Onboarding"
|
|
31
|
+
description: "First week: tools, access, codebase orientation. Second week: paired programming with your team. Our onboarding playbook ensures engineers contribute from sprint one."
|
|
32
|
+
- title: "Delivery & Account Management"
|
|
33
|
+
description: "Dedicated account managers monitor quality, communication, and team health. Bi-weekly satisfaction check-ins with your leadership. Transparent performance dashboards."
|
|
34
|
+
- title: "Continuous Optimization"
|
|
35
|
+
description: "Quarterly performance reviews, skill gap analysis, and team composition adjustments. Knowledge management ensures continuity even when individual engineers rotate."
|
|
36
|
+
capabilities:
|
|
37
|
+
- "Staff Augmentation — individual specialists embedded in your team and processes"
|
|
38
|
+
- "Dedicated Teams — full cross-functional squads managed by LokaTech engineering leads"
|
|
39
|
+
- "Managed Delivery — end-to-end project ownership with fixed scope and deliverables"
|
|
40
|
+
- "Build-Operate-Transfer — we build and run the team, then transfer to your organization"
|
|
41
|
+
- "Nearshore Delivery — Central European timezone (CET/CEST) for real-time collaboration"
|
|
42
|
+
- "Specialized Squads — DevOps, QA, security, data engineering, frontend, backend"
|
|
43
|
+
- "Team Scaling — ramp up or down within 2 weeks without contractual penalties"
|
|
44
|
+
- "Knowledge Management — documentation, knowledge bases, and handoff playbooks"
|
|
45
|
+
- "Engineering Culture — code reviews, tech talks, and internal upskilling for your team"
|
|
46
|
+
technologies:
|
|
47
|
+
- name: "Java"
|
|
48
|
+
- name: ".NET"
|
|
49
|
+
- name: "Python"
|
|
50
|
+
- name: "React"
|
|
51
|
+
- name: "Angular"
|
|
52
|
+
- name: "Node.js"
|
|
53
|
+
- name: "AWS"
|
|
54
|
+
- name: "Azure"
|
|
55
|
+
- name: "Kubernetes"
|
|
56
|
+
- name: "Terraform"
|
|
57
|
+
- name: "Go"
|
|
58
|
+
- name: "Rust"
|
|
59
|
+
case_studies:
|
|
60
|
+
- title: "E-commerce Platform Rewrite"
|
|
61
|
+
result: "40-person team in 3 weeks"
|
|
62
|
+
url: "/case-studies/ecommerce-platform-rewrite"
|
|
63
|
+
- title: "Telecom 5G Platform"
|
|
64
|
+
result: "12 squads across 3 time zones"
|
|
65
|
+
url: "/case-studies/telecom-5g-platform"
|
|
66
|
+
- title: "Manufacturing IoT Digital Twin"
|
|
67
|
+
result: "8 specialists, 6-month engagement"
|
|
68
|
+
url: "/case-studies/manufacturing-iot-digital-twin"
|
|
69
|
+
seo:
|
|
70
|
+
title: "IT Outsourcing & Staff Augmentation — LokaTech Solutions"
|
|
71
|
+
description: "Scalable engineering teams for enterprise projects. Dedicated teams, staff augmentation, nearshore delivery from Central Europe."
|
|
72
|
+
---
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Anna Kowalska"
|
|
3
|
+
type: person
|
|
4
|
+
status: published
|
|
5
|
+
langcode: en
|
|
6
|
+
slug: anna-kowalska
|
|
7
|
+
date: 2026-03-21
|
|
8
|
+
fields:
|
|
9
|
+
role: "Chief Executive Officer"
|
|
10
|
+
department: "Executive"
|
|
11
|
+
linkedin: "https://linkedin.com/in/example"
|
|
12
|
+
photo: "/static/images/team-anna-kowalska.png"
|
|
13
|
+
quote: "Technology should serve the business, not the other way around. At LokaTech, we build partnerships that last because we deliver results that matter."
|
|
14
|
+
seo:
|
|
15
|
+
title: "Anna Kowalska — CEO, LokaTech Solutions"
|
|
16
|
+
description: "Anna Kowalska, CEO and co-founder of LokaTech Solutions. 20+ years in enterprise IT, MBA from INSEAD."
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
Anna Kowalska co-founded LokaTech Solutions in 2008 and has led the company from a five-person startup to an 800+ engineer enterprise IT services firm. With over 20 years of experience in the technology industry, Anna brings a rare combination of deep technical understanding and strategic business acumen. Before founding LokaTech, she served as Vice President of Technology Services at Accenture's Central European division, where she managed a portfolio of 40+ enterprise clients across banking, manufacturing, and telecommunications.
|
|
20
|
+
|
|
21
|
+
Anna holds an MBA from INSEAD and a Master's degree in Computer Science from the Warsaw University of Technology. She is a frequent speaker at technology leadership conferences across Europe and serves on the advisory board of the Polish Technology Industry Association. Under her leadership, LokaTech has been recognized as a Clutch Top 100 IT Services Company, a Great Place to Work, and one of the fastest-growing technology firms in Central Europe. Anna's vision for LokaTech is simple: build a company where exceptional engineers want to work and where clients see a genuine partner, not just a vendor.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Jan Nowak"
|
|
3
|
+
type: person
|
|
4
|
+
status: published
|
|
5
|
+
langcode: en
|
|
6
|
+
slug: jan-nowak
|
|
7
|
+
date: 2026-03-21
|
|
8
|
+
fields:
|
|
9
|
+
role: "Chief Technology Officer"
|
|
10
|
+
department: "Engineering"
|
|
11
|
+
linkedin: "https://linkedin.com/in/example"
|
|
12
|
+
photo: "/static/images/team-jan-nowak.png"
|
|
13
|
+
quote: "Great technology comes from great engineers. Our job is to create an environment where brilliant people can do their best work."
|
|
14
|
+
seo:
|
|
15
|
+
title: "Jan Nowak — CTO, LokaTech Solutions"
|
|
16
|
+
description: "Jan Nowak, CTO of LokaTech Solutions. 15+ years in software architecture, PhD in distributed systems, formerly at Google."
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
Jan Nowak joined LokaTech as Chief Technology Officer in 2014, bringing 15+ years of experience in software architecture and distributed systems. Before LokaTech, Jan served as a Principal Software Architect at Google's Zurich office, where he worked on large-scale distributed data processing systems serving billions of requests daily. His research background in consensus algorithms and fault-tolerant systems directly informs LokaTech's approach to building mission-critical enterprise platforms.
|
|
20
|
+
|
|
21
|
+
Jan holds a PhD in Distributed Systems from AGH University of Krakow and has published over 20 papers in peer-reviewed journals and conferences. At LokaTech, he leads the technical vision across all practice areas, oversees the architecture review board, and drives the company's technology radar — a quarterly assessment of emerging technologies and their readiness for enterprise adoption. He is passionate about mentoring the next generation of software architects and runs LokaTech's internal Architecture Guild, a community of practice where senior engineers share knowledge and debate design decisions.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Katarzyna Kamińska"
|
|
3
|
+
type: person
|
|
4
|
+
status: published
|
|
5
|
+
langcode: en
|
|
6
|
+
slug: katarzyna-kaminska
|
|
7
|
+
date: 2026-03-21
|
|
8
|
+
fields:
|
|
9
|
+
role: "VP of Product & Innovation"
|
|
10
|
+
department: "Product"
|
|
11
|
+
linkedin: "https://linkedin.com/in/example"
|
|
12
|
+
photo: "/static/images/team-katarzyna-kaminska.png"
|
|
13
|
+
seo:
|
|
14
|
+
title: "Katarzyna Kamińska — VP of Product & Innovation, LokaTech Solutions"
|
|
15
|
+
description: "Katarzyna Kamińska, VP of Product & Innovation at LokaTech. 10+ years in product management, formerly at Allegro."
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
Katarzyna Kamińska leads LokaTech's product strategy and innovation initiatives, driving the company's investment in emerging technologies and new service offerings. With over 10 years of experience in product management and technology strategy, she brings a product-thinking mindset to LokaTech's services business — ensuring that every client engagement starts with a clear understanding of user needs and business outcomes before jumping to technical solutions.
|
|
19
|
+
|
|
20
|
+
Before LokaTech, Katarzyna served as Senior Product Lead at Allegro, Poland's largest e-commerce platform, where she managed the search and recommendation product line serving 20 million monthly active users. She holds a Master's degree in Human-Computer Interaction from the University of Warsaw and is a certified Product Manager (CPM). At LokaTech, she oversees the Innovation Labs program — a quarterly initiative where cross-functional teams prototype solutions to emerging client challenges using technologies like generative AI, digital twins, and edge computing. Several Innovation Labs projects have evolved into production client engagements, generating over €5M in new revenue since the program's inception.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Maria Wiśniewska"
|
|
3
|
+
type: person
|
|
4
|
+
status: published
|
|
5
|
+
langcode: en
|
|
6
|
+
slug: maria-wisniewska
|
|
7
|
+
date: 2026-03-21
|
|
8
|
+
fields:
|
|
9
|
+
role: "VP of Engineering"
|
|
10
|
+
department: "Engineering"
|
|
11
|
+
linkedin: "https://linkedin.com/in/example"
|
|
12
|
+
photo: "/static/images/team-maria-wisniewska.png"
|
|
13
|
+
seo:
|
|
14
|
+
title: "Maria Wiśniewska — VP of Engineering, LokaTech Solutions"
|
|
15
|
+
description: "Maria Wiśniewska, VP of Engineering at LokaTech Solutions. 12+ years in engineering leadership, formerly at Spotify."
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
Maria Wiśniewska leads LokaTech's engineering organization of 600+ developers, architects, and QA engineers across five development centers. With over 12 years of experience in engineering leadership, Maria specializes in scaling engineering organizations while maintaining the quality standards and engineering culture that attract top talent. Before LokaTech, she served as Engineering Director at Spotify's Platform division in Stockholm, where she managed 15 engineering squads building the internal developer platform used by 1,500+ engineers.
|
|
19
|
+
|
|
20
|
+
Maria's approach to engineering leadership centers on platform engineering and developer experience. At LokaTech, she has championed the adoption of Internal Developer Platforms, standardized CI/CD pipelines, and engineering metrics that measure team health alongside delivery velocity. She holds a Master's degree in Software Engineering from Wrocław University of Technology and is an active contributor to the platform engineering community, speaking regularly at conferences including PlatformCon, QCon, and DevOpsDays. Her team has reduced onboarding time for new engineers from four weeks to five days through investments in documentation, automation, and structured mentoring.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Tomasz Lewandowski"
|
|
3
|
+
type: person
|
|
4
|
+
status: published
|
|
5
|
+
langcode: en
|
|
6
|
+
slug: tomasz-lewandowski
|
|
7
|
+
date: 2026-03-21
|
|
8
|
+
fields:
|
|
9
|
+
role: "VP of Sales & Partnerships"
|
|
10
|
+
department: "Sales"
|
|
11
|
+
linkedin: "https://linkedin.com/in/example"
|
|
12
|
+
photo: "/static/images/team-tomasz-lewandowski.png"
|
|
13
|
+
seo:
|
|
14
|
+
title: "Tomasz Lewandowski — VP of Sales & Partnerships, LokaTech Solutions"
|
|
15
|
+
description: "Tomasz Lewandowski, VP of Sales & Partnerships at LokaTech. 18+ years in enterprise sales, formerly at Microsoft."
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
Tomasz Lewandowski oversees LokaTech's commercial operations across all European markets, managing relationships with Fortune 500 clients and strategic technology partnerships. With 18+ years of experience in enterprise technology sales, Tomasz has a proven track record of building long-term client partnerships that grow from initial engagements into multi-year strategic relationships. Before joining LokaTech in 2017, he spent eight years at Microsoft's Enterprise Services division, where he managed a portfolio exceeding €50M in annual revenue across the DACH and Central European regions.
|
|
19
|
+
|
|
20
|
+
Tomasz's philosophy is that the best sales in professional services come from delivering exceptional results, not from pitch decks. Under his leadership, LokaTech's client retention rate exceeds 92%, and the average client relationship spans 4.5 years. He holds an MBA from Warsaw School of Economics (SGH) and speaks fluent Polish, German, and English — a combination that has been instrumental in LokaTech's expansion into the DACH market. Tomasz is also responsible for LokaTech's technology partnerships with AWS, Microsoft, and Google Cloud, ensuring the company maintains advanced partner status across all major cloud providers.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
name: lokatech
|
|
2
|
+
label: "LokaTech — Enterprise IT Demo"
|
|
3
|
+
description: >
|
|
4
|
+
Full demo site for a fictional enterprise IT services company.
|
|
5
|
+
Includes 6 services, 6 industries, 8 case studies, articles, team pages,
|
|
6
|
+
office locations, and a landing page with 10 sections.
|
|
7
|
+
Ships with the premium LokaTech theme.
|
|
8
|
+
theme: lokatech
|
|
9
|
+
copies:
|
|
10
|
+
- from: content/
|
|
11
|
+
to: content/
|
|
12
|
+
- from: config/
|
|
13
|
+
to: config/
|
|
14
|
+
- from: themes/
|
|
15
|
+
to: themes/
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
export interface ThemeConfig {
|
|
2
|
+
name: string;
|
|
3
|
+
label: string;
|
|
4
|
+
description?: string;
|
|
5
|
+
version?: string;
|
|
6
|
+
author?: string;
|
|
7
|
+
base?: string;
|
|
8
|
+
settings?: Record<string, ThemeSettingDefinition>;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export interface ThemeSettingDefinition {
|
|
12
|
+
type: string;
|
|
13
|
+
label: string;
|
|
14
|
+
default?: any;
|
|
15
|
+
options?: string[];
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export interface Content {
|
|
19
|
+
id: string;
|
|
20
|
+
type: string;
|
|
21
|
+
title: string;
|
|
22
|
+
slug: string;
|
|
23
|
+
status: 'draft' | 'published' | 'archived';
|
|
24
|
+
langcode: string;
|
|
25
|
+
body: string;
|
|
26
|
+
bodyHtml: string;
|
|
27
|
+
fields: Record<string, any>;
|
|
28
|
+
sections?: Section[];
|
|
29
|
+
seo?: SeoData;
|
|
30
|
+
siteId?: string;
|
|
31
|
+
createdAt: Date;
|
|
32
|
+
updatedAt: Date;
|
|
33
|
+
publishedAt?: Date;
|
|
34
|
+
filePath?: string;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export interface Section {
|
|
38
|
+
type: string;
|
|
39
|
+
weight: number;
|
|
40
|
+
data: Record<string, any>;
|
|
41
|
+
settings: SectionSettings;
|
|
42
|
+
children?: Section[];
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export interface SectionSettings {
|
|
46
|
+
background: 'light' | 'dark' | 'primary' | 'custom';
|
|
47
|
+
background_color?: string;
|
|
48
|
+
background_image?: string;
|
|
49
|
+
spacing: 'none' | 'small' | 'medium' | 'large' | 'xlarge';
|
|
50
|
+
width: 'contained' | 'wide' | 'full';
|
|
51
|
+
css_class?: string;
|
|
52
|
+
anchor_id?: string;
|
|
53
|
+
hidden?: boolean;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export interface SeoData {
|
|
57
|
+
title?: string;
|
|
58
|
+
description?: string;
|
|
59
|
+
image?: string;
|
|
60
|
+
noindex?: boolean;
|
|
61
|
+
canonical?: string;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export interface SiteConfig {
|
|
65
|
+
site_name: string;
|
|
66
|
+
base_url: string;
|
|
67
|
+
theme: string;
|
|
68
|
+
theme_settings?: Record<string, any>;
|
|
69
|
+
seo?: {
|
|
70
|
+
title_separator?: string;
|
|
71
|
+
default_description?: string;
|
|
72
|
+
default_image?: string;
|
|
73
|
+
google_site_verification?: string;
|
|
74
|
+
json_ld?: {
|
|
75
|
+
organization?: { name: string; logo: string; url: string };
|
|
76
|
+
};
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
export interface LayoutProps {
|
|
81
|
+
content: Content;
|
|
82
|
+
site: SiteConfig;
|
|
83
|
+
theme: ThemeConfig;
|
|
84
|
+
themeSettings: Record<string, any>;
|
|
85
|
+
children?: any;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
export interface SectionProps {
|
|
89
|
+
data: Record<string, any>;
|
|
90
|
+
settings: SectionSettings;
|
|
91
|
+
theme: ThemeConfig;
|
|
92
|
+
themeSettings: Record<string, any>;
|
|
93
|
+
}
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
/** @jsxImportSource hono/jsx */
|
|
2
|
+
import { raw } from 'hono/html';
|
|
3
|
+
import type { FC } from 'hono/jsx';
|
|
4
|
+
import type { SectionProps } from '../../_types.js';
|
|
5
|
+
|
|
6
|
+
function renderGradient(text: string, color: string): any {
|
|
7
|
+
const parts = text.split(/(\*[^*]+\*)/g);
|
|
8
|
+
const html = parts
|
|
9
|
+
.map((p) =>
|
|
10
|
+
p.startsWith('*') && p.endsWith('*')
|
|
11
|
+
? `<em class="not-italic" style="background:linear-gradient(135deg,${color},${color}99,#60a5fa);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text">${p.slice(1, -1)}</em>`
|
|
12
|
+
: p,
|
|
13
|
+
)
|
|
14
|
+
.join('');
|
|
15
|
+
return raw(html);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
const spacingMap: Record<string, string> = {
|
|
19
|
+
none: 'py-0',
|
|
20
|
+
small: 'py-10',
|
|
21
|
+
medium: 'py-20',
|
|
22
|
+
large: 'py-28',
|
|
23
|
+
xlarge: 'py-36',
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
const widthMap: Record<string, string> = {
|
|
27
|
+
contained: 'max-w-6xl mx-auto px-6',
|
|
28
|
+
wide: 'max-w-7xl mx-auto px-6',
|
|
29
|
+
full: 'w-full px-6',
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
const bgMap: Record<string, string> = {
|
|
33
|
+
light: 'bg-white text-slate-900',
|
|
34
|
+
dark: 'text-white',
|
|
35
|
+
primary: 'text-white',
|
|
36
|
+
custom: '',
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
const BlogListing: FC<SectionProps> = ({ data, settings, themeSettings }) => {
|
|
40
|
+
if (settings.hidden) return null;
|
|
41
|
+
|
|
42
|
+
const urlFn = (p: string) => themeSettings._url?.(p) ?? p;
|
|
43
|
+
const t = (key: string) => themeSettings._t?.(key) ?? key;
|
|
44
|
+
const spacing = spacingMap[settings.spacing] ?? spacingMap.large;
|
|
45
|
+
const width = widthMap[settings.width] ?? widthMap.contained;
|
|
46
|
+
const bg = bgMap[settings.background] ?? bgMap.light;
|
|
47
|
+
const primaryColor = themeSettings.primary_color ?? '#10B981';
|
|
48
|
+
const navColor = themeSettings.nav_color ?? '#0B1222';
|
|
49
|
+
|
|
50
|
+
const bgStyle: Record<string, string> = {};
|
|
51
|
+
if (settings.background === 'dark') {
|
|
52
|
+
bgStyle.backgroundColor = navColor;
|
|
53
|
+
} else if (settings.background === 'primary') {
|
|
54
|
+
bgStyle.backgroundColor = primaryColor;
|
|
55
|
+
} else if (settings.background === 'custom' && settings.background_color) {
|
|
56
|
+
bgStyle.backgroundColor = settings.background_color;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
const isDark = settings.background === 'dark' || settings.background === 'primary';
|
|
60
|
+
|
|
61
|
+
const items: Array<{
|
|
62
|
+
title: string;
|
|
63
|
+
url?: string;
|
|
64
|
+
excerpt?: string;
|
|
65
|
+
image?: string;
|
|
66
|
+
date?: string;
|
|
67
|
+
}> = data.items ?? [];
|
|
68
|
+
|
|
69
|
+
const featured = items[0];
|
|
70
|
+
const rest = items.slice(1);
|
|
71
|
+
|
|
72
|
+
return (
|
|
73
|
+
<section
|
|
74
|
+
class={`${spacing} ${bg} relative overflow-hidden ${settings.css_class ?? ''}`}
|
|
75
|
+
id={settings.anchor_id}
|
|
76
|
+
style={Object.keys(bgStyle).length > 0 ? bgStyle : undefined}
|
|
77
|
+
>
|
|
78
|
+
<div class={width}>
|
|
79
|
+
{/* Left-aligned heading + "View all" link */}
|
|
80
|
+
<div class="mb-16 flex items-end justify-between gap-4">
|
|
81
|
+
<div class="max-w-2xl">
|
|
82
|
+
{data.heading && (
|
|
83
|
+
<h2 class="reveal-heading text-3xl font-bold tracking-[-0.03em] sm:text-4xl lg:text-5xl">
|
|
84
|
+
{data.heading.includes('*') ? renderGradient(data.heading, primaryColor) : data.heading}
|
|
85
|
+
</h2>
|
|
86
|
+
)}
|
|
87
|
+
</div>
|
|
88
|
+
<a
|
|
89
|
+
href={urlFn('/articles')}
|
|
90
|
+
class="reveal-sub hidden shrink-0 items-center gap-1 text-sm font-semibold transition-colors duration-200 hover:no-underline sm:flex"
|
|
91
|
+
style={{ color: primaryColor }}
|
|
92
|
+
>
|
|
93
|
+
{t('blog.view_all')}
|
|
94
|
+
<span class="transition-transform duration-200 hover:translate-x-1">→</span>
|
|
95
|
+
</a>
|
|
96
|
+
</div>
|
|
97
|
+
|
|
98
|
+
{items.length > 0 ? (
|
|
99
|
+
<div class="grid gap-6 lg:grid-cols-5">
|
|
100
|
+
{/* Featured article — large, left */}
|
|
101
|
+
{featured && (
|
|
102
|
+
<article class="testimonial-featured lg:col-span-3">
|
|
103
|
+
<a
|
|
104
|
+
href={featured.url ?? '#'}
|
|
105
|
+
class={`group block overflow-hidden rounded-2xl border transition-all duration-400 hover:no-underline ${
|
|
106
|
+
isDark
|
|
107
|
+
? 'border-gray-700/50 bg-white/[0.03] hover:border-gray-600'
|
|
108
|
+
: 'border-gray-100 bg-white hover:shadow-xl hover:shadow-slate-200/50'
|
|
109
|
+
}`}
|
|
110
|
+
>
|
|
111
|
+
{featured.image && (
|
|
112
|
+
<div class="overflow-hidden">
|
|
113
|
+
<img
|
|
114
|
+
src={featured.image}
|
|
115
|
+
alt={featured.title}
|
|
116
|
+
class="aspect-[16/10] w-full object-cover transition-transform duration-700 group-hover:scale-105"
|
|
117
|
+
loading="lazy"
|
|
118
|
+
/>
|
|
119
|
+
</div>
|
|
120
|
+
)}
|
|
121
|
+
<div class="p-8">
|
|
122
|
+
{featured.date && (
|
|
123
|
+
<time class={`text-xs font-medium ${isDark ? 'text-gray-500' : 'text-slate-400'}`}>{featured.date}</time>
|
|
124
|
+
)}
|
|
125
|
+
<h3 class={`mt-3 text-xl font-bold tracking-[-0.02em] leading-tight ${isDark ? 'text-white' : 'text-slate-900'}`}>
|
|
126
|
+
{featured.title}
|
|
127
|
+
</h3>
|
|
128
|
+
{featured.excerpt && (
|
|
129
|
+
<p class={`mt-3 line-clamp-3 text-sm leading-relaxed ${isDark ? 'text-gray-400' : 'text-slate-500'}`}>
|
|
130
|
+
{featured.excerpt}
|
|
131
|
+
</p>
|
|
132
|
+
)}
|
|
133
|
+
<div class="mt-5 flex items-center gap-1 text-sm font-semibold" style={{ color: primaryColor }}>
|
|
134
|
+
Read more
|
|
135
|
+
<span class="transition-transform duration-200 group-hover:translate-x-1">→</span>
|
|
136
|
+
</div>
|
|
137
|
+
</div>
|
|
138
|
+
</a>
|
|
139
|
+
</article>
|
|
140
|
+
)}
|
|
141
|
+
|
|
142
|
+
{/* Side articles — stacked, offset */}
|
|
143
|
+
<div class="testimonial-side flex flex-col gap-6 lg:col-span-2 lg:mt-6">
|
|
144
|
+
{rest.map((item) => (
|
|
145
|
+
<article>
|
|
146
|
+
<a
|
|
147
|
+
href={item.url ?? '#'}
|
|
148
|
+
class={`group flex gap-5 rounded-2xl border p-5 transition-all duration-400 hover:no-underline ${
|
|
149
|
+
isDark
|
|
150
|
+
? 'border-gray-700/50 bg-white/[0.03] hover:border-gray-600'
|
|
151
|
+
: 'border-gray-100 bg-white hover:shadow-lg hover:shadow-slate-200/50'
|
|
152
|
+
}`}
|
|
153
|
+
>
|
|
154
|
+
{item.image && (
|
|
155
|
+
<div class="hidden shrink-0 overflow-hidden rounded-xl sm:block" style={{ width: '100px', height: '100px' }}>
|
|
156
|
+
<img
|
|
157
|
+
src={item.image}
|
|
158
|
+
alt={item.title}
|
|
159
|
+
class="h-full w-full object-cover transition-transform duration-500 group-hover:scale-110"
|
|
160
|
+
loading="lazy"
|
|
161
|
+
/>
|
|
162
|
+
</div>
|
|
163
|
+
)}
|
|
164
|
+
<div class="flex-1">
|
|
165
|
+
{item.date && (
|
|
166
|
+
<time class={`text-xs font-medium ${isDark ? 'text-gray-500' : 'text-slate-400'}`}>{item.date}</time>
|
|
167
|
+
)}
|
|
168
|
+
<h3 class={`mt-1 text-sm font-semibold leading-snug ${isDark ? 'text-white' : 'text-slate-900'}`}>
|
|
169
|
+
{item.title}
|
|
170
|
+
</h3>
|
|
171
|
+
<div class="mt-2 flex items-center gap-1 text-xs font-semibold opacity-0 transition-all duration-200 group-hover:opacity-100" style={{ color: primaryColor }}>
|
|
172
|
+
Read <span class="transition-transform duration-200 group-hover:translate-x-1">→</span>
|
|
173
|
+
</div>
|
|
174
|
+
</div>
|
|
175
|
+
</a>
|
|
176
|
+
</article>
|
|
177
|
+
))}
|
|
178
|
+
</div>
|
|
179
|
+
</div>
|
|
180
|
+
) : (
|
|
181
|
+
<p class={`text-center text-sm ${isDark ? 'text-gray-500' : 'text-slate-400'}`}>
|
|
182
|
+
Blog listing renders dynamically — content will appear here at runtime.
|
|
183
|
+
</p>
|
|
184
|
+
)}
|
|
185
|
+
|
|
186
|
+
{/* Mobile "View all" */}
|
|
187
|
+
<div class="mt-10 text-center sm:hidden">
|
|
188
|
+
<a href={urlFn('/articles')} class="text-sm font-semibold hover:no-underline" style={{ color: primaryColor }}>
|
|
189
|
+
{t('blog.view_all')} →
|
|
190
|
+
</a>
|
|
191
|
+
</div>
|
|
192
|
+
</div>
|
|
193
|
+
</section>
|
|
194
|
+
);
|
|
195
|
+
};
|
|
196
|
+
|
|
197
|
+
export default BlogListing;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
label: Blog Listing
|
|
2
|
+
icon: list
|
|
3
|
+
description: "Featured blog post with side listing of recent articles."
|
|
4
|
+
status: stable
|
|
5
|
+
fields:
|
|
6
|
+
heading:
|
|
7
|
+
type: text
|
|
8
|
+
label: Heading
|
|
9
|
+
content_type:
|
|
10
|
+
type: text
|
|
11
|
+
label: Content Type
|
|
12
|
+
default: article
|
|
13
|
+
limit:
|
|
14
|
+
type: number
|
|
15
|
+
label: Max Items
|
|
16
|
+
default: 6
|
|
17
|
+
columns:
|
|
18
|
+
type: select
|
|
19
|
+
label: Columns
|
|
20
|
+
options: ["2", "3", "4"]
|
|
21
|
+
default: "3"
|