it/web/lib/services.ts
2025-10-26 17:52:17 +01:00

600 lines
26 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

export type ServiceCategoryId =
| "hosting"
| "infrastructure-devops"
| "web-performance"
| "dev-platforms"
| "migrations"
| "minecraft"
| "web-dev";
export interface FaqItem {
q: string;
a: string;
}
export interface Service {
slug: string;
title: string;
category: ServiceCategoryId;
outcome: string; // one-liner outcome under the H1
who: string[]; // "Who it's for"
outcomes?: string[]; // optional detailed outcomes list
deliverables: string[];
timeline: string; // e.g., "12 days"
price: string; // e.g., "€490" or "from €99/mo"
proof: string[]; // what you verify and how you show it
faq: FaqItem[];
relatedSlugs?: string[]; // internal cross-links
metaTitle: string;
metaDescription: string;
}
export const SERVICE_CATEGORIES: Record<
ServiceCategoryId,
{ label: string; anchor: string }
> = {
hosting: { label: "Hosting (Managed)", anchor: "hosting" },
"web-dev": { label: "Websites (Development)", anchor: "web-dev" },
minecraft: { label: "Minecraft Services", anchor: "minecraft" },
"infrastructure-devops": {
label: "Infrastructure & DevOps",
anchor: "infrastructure-devops",
},
"web-performance": {
label: "Website Reliability, Performance & Hosting",
anchor: "web-performance",
},
"dev-platforms": {
label: "Developer Platforms & Tooling",
anchor: "dev-platforms",
},
migrations: { label: "Migrations & Refreshes", anchor: "migrations" },
};
// ------- services -------
export const SERVICES: Service[] = [
// --- HOSTING (Managed) ---
{
slug: "vps-hardening-care",
title: "Managed VPS Hosting (Hardened & Monitored)",
category: "hosting",
outcome:
"Secure, fast VPS hosting—server management, monitoring, and restore-tested backups handled for you.",
who: [
"SMBs running WordPress/Next.js/custom apps on a VPS",
"Teams that want managed VPS hosting with proof of outcomes",
],
deliverables: [
"SSH/CIS hardening, firewall (ufw), fail2ban",
"Automated updates, audit log, intrusion checks",
"Backups + restore test, uptime & resource monitoring",
"Optional Cloudflare edge hardening & HTTP/3",
],
timeline: "12 days",
price: "€390 one-off or €89/mo care",
proof: [
"Hardened config diff & CIS checklist",
"Restore test report and monitoring dashboard screenshots",
],
faq: [
{
q: "Do you need root access?",
a: "Yes, temporary privileged access is required to apply hardening, install monitoring, and verify backups. Access is removed post-delivery.",
},
{
q: "Which OS do you support?",
a: "Debian/Ubuntu preferred. We can adapt to AlmaLinux/RHEL-family on request.",
},
],
relatedSlugs: ["cloudflare-edge-hardening", "backup-disaster-recovery-drill"],
metaTitle: "Managed VPS Hosting (Hardened & Monitored) — Van Hunen IT",
metaDescription:
"Secure, fast VPS hosting with server management, monitoring, and restore-tested backups. Optional Cloudflare hardening.",
},
{
slug: "website-care-plan",
title: "Managed Website Hosting & Care",
category: "hosting",
outcome:
"Fully managed website hosting and maintenance—updates, uptime, and monthly restore-tested backups.",
who: ["SMBs wanting stable updates and monitoring", "Teams without in-house ops"],
deliverables: [
"Managed WordPress/Next.js hosting & updates",
"Uptime monitoring and incident handling (per SLA)",
"Backups with monthly restore test",
"Security checks and monthly reporting",
],
timeline: "Monthly",
price: "from €149/mo",
proof: ["Monthly report & restore test evidence", "Incident notes with timestamps"],
faq: [
{ q: "What platforms?", a: "WordPress, Next.js, Node backends; others on request." },
{ q: "SLA?", a: "Incident response windows depend on plan tier." },
],
relatedSlugs: ["backup-disaster-recovery-drill", "core-web-vitals-sprint"],
metaTitle: "Managed Website Hosting & Care — Van Hunen IT",
metaDescription:
"Fully managed website hosting & maintenance with updates, uptime monitoring, and monthly restore-tested backups.",
},
// --- WEBSITES (Development) ---
{
slug: "quick-launch-website",
title: "Website Development (Next.js)",
category: "web-dev",
outcome: "Launch a fast, SEO-ready site with modern tech—clear scope, predictable timeline.",
who: ["SMBs needing a credible web presence fast", "Consultants/creators launching offers"],
deliverables: [
"57 sections, contact forms, OG/Twitter cards",
"Analytics, sitemap, and basic SEO setup",
"Deploy to your managed VPS or hosting",
"Optional headless CMS (Ghost/Strapi)",
],
timeline: "57 days",
price: "€2,450",
proof: ["Lighthouse pass for basics", "Deployed site link & repo handover"],
faq: [
{ q: "Copy & assets?", a: "We provide a brief and templates; you can supply or we refine." },
{ q: "CMS?", a: "Optional—see Headless CMS Setup." },
],
relatedSlugs: ["headless-cms-setup", "core-web-vitals-sprint"],
metaTitle: "Website Development (Next.js) — Van Hunen IT",
metaDescription:
"Launch a fast, SEO-ready site with analytics and deployment to your managed hosting.",
},
{
slug: "headless-cms-setup",
title: "Headless CMS Setup (Ghost/Strapi)",
category: "web-dev",
outcome: "Non-tech content updates without redeploys.",
who: ["Teams wanting easy publishing", "Sites separating content from code"],
deliverables: ["CMS install & roles", "Content model & CI/CD", "Image optimization & docs"],
timeline: "23 days",
price: "€1,190",
proof: ["Editor demo & role permissions", "Publishing pipeline test"],
faq: [
{ q: "Migration from WordPress?", a: "We can import and map key content types." },
{ q: "Auth & SSO?", a: "SSO/OAuth possible depending on CMS chosen." },
],
relatedSlugs: ["quick-launch-website", "website-care-plan"],
metaTitle: "Headless CMS Setup — Van Hunen IT",
metaDescription:
"Install and configure Ghost/Strapi with roles, CI/CD, and image optimization.",
},
{
slug: "security-compliance-baseline",
title: "Security & Compliance Baseline (GDPR-aware)",
category: "web-dev",
outcome: "Reasonable security for small teams.",
who: ["SMBs formalizing access and logging", "Teams preparing for audits"],
deliverables: [
"Password policy, 2FA & least-privilege",
"Audit logging & data retention",
"Incident checklist & drills",
],
timeline: "12 days",
price: "€740",
proof: ["Policy documents & checklists", "Access review and logging tests"],
faq: [
{ q: "Covers DPIA?", a: "We provide input; legal sign-off remains with your DPO/counsel." },
{ q: "Tooling?", a: "We match to your stack—SaaS or self-hosted where appropriate." },
],
relatedSlugs: ["vps-hardening-care", "backup-disaster-recovery-drill"],
metaTitle: "Security & Compliance Baseline — Van Hunen IT",
metaDescription:
"Implement practical security policies, logging, and incident readiness for SMBs.",
},
// --- MINECRAFT ---
{
slug: "minecraft-managed-server",
title: "Managed Minecraft Server Hosting",
category: "minecraft",
outcome:
"Lag-free, stable Minecraft hosting on a hardened VPS—backups, tuning, and monitoring included.",
who: ["Communities, schools, creators", "Small networks needing reliable ops"],
deliverables: [
"VPS sizing/hardening, Paper/Velocity setup",
"Auto-backups + restore test",
"Performance tuning, grief/anti-cheat basics, monitoring",
],
timeline: "Setup 1 day · Ongoing monthly",
price: "Starter €49/mo · Pro €99/mo · Network €199/mo (+ VPS)",
proof: ["TPS baseline & timings report", "Restore test proof & monitoring"],
faq: [
{ q: "Java or Bedrock?", a: "Java by default; Bedrock or Geyser support on request." },
{ q: "Modpacks?", a: "CurseForge/modded supported—resource-dependent." },
],
relatedSlugs: ["minecraft-performance-audit", "minecraft-plugin-development", "minecraft-monetization-pack"],
metaTitle: "Managed Minecraft Server Hosting — Van Hunen IT",
metaDescription:
"Lag-free Minecraft hosting on a hardened VPS with backups, tuning, and monitoring. Java/Bedrock; modpacks supported.",
},
{
slug: "minecraft-performance-audit",
title: "Minecraft Performance & Stability Audit",
category: "minecraft",
outcome: "Higher TPS, fewer crashes.",
who: ["Servers with lag or frequent crashes", "Owners scaling to more players"],
deliverables: ["Profiler run (Spark), timings analysis", "JVM flags & plugin audit", "Before/after TPS report"],
timeline: "1 day",
price: "€390",
proof: ["Timings & Spark screenshots", "Updated config diff & TPS before/after"],
faq: [
{ q: "Supports Bungee/Velocity?", a: "Yes—networked setups supported." },
{ q: "Player cap increase?", a: "We optimize, then size infra appropriately." },
],
relatedSlugs: ["minecraft-managed-server"],
metaTitle: "Minecraft Performance Audit — Van Hunen IT",
metaDescription:
"Fix lag with timings, JVM flags, and plugin optimizations plus TPS reporting.",
},
{
slug: "minecraft-plugin-development",
title: "Minecraft Server Plugin Development",
category: "minecraft",
outcome:
"Custom Paper/Spigot plugins with tests, config, and docs—built for your servers goals.",
who: ["Servers needing unique mechanics", "Creators monetizing custom content"],
deliverables: [
"Spec, plugin build & tests",
"Config & permissions + changelog",
"Private repo transfer; ownership after payment",
],
timeline: "From 37 days",
price: "€85/hr or fixed from €650",
proof: ["Feature demo & test suite run", "Config docs and changelog"],
faq: [
{
q: "Source code ownership?",
a: "You own it after payment unless agreed otherwise (private repo transfer included).",
},
{ q: "API compatibility?", a: "Paper API targeted; cross-version support is scoped case-by-case." },
],
relatedSlugs: ["minecraft-managed-server", "minecraft-monetization-pack"],
metaTitle: "Minecraft Server Plugin Development — Van Hunen IT",
metaDescription:
"Custom Paper/Spigot plugins with tests, config, and docs. Ownership transferred after payment.",
},
{
slug: "minecraft-monetization-pack",
title: "Creator Monetization Pack (Tebex)",
category: "minecraft",
outcome: "Clean store + safe donations.",
who: ["Servers adding a store", "Creators formalizing monetization"],
deliverables: ["Tebex setup & product catalog", "Rank automation & receipts", "Anti-fraud notes & webhooks"],
timeline: "1 day",
price: "€420",
proof: ["Test purchase flow", "Webhook logs to grants"],
faq: [
{ q: "Compliance?", a: "We avoid P2W violations and follow platform rules." },
{ q: "Branding?", a: "Store theme aligned with your site and server style." },
],
relatedSlugs: ["minecraft-plugin-development", "minecraft-managed-server"],
metaTitle: "Minecraft Monetization Pack — Van Hunen IT",
metaDescription:
"Set up Tebex with products, ranks, and safe donation flows.",
},
// --- INFRASTRUCTURE & DEVOPS ---
{
slug: "dockerize-deploy",
title: "Dockerize & Deploy",
category: "infrastructure-devops",
outcome: "Your app runs in reproducible containers with minimal manual steps.",
who: ["Teams moving from pets to containers", "Startups needing consistent envs from dev to prod"],
deliverables: [
"Dockerfiles & Compose, healthchecks, .env templating",
"Secrets handling, rollouts, runbook",
"Docs for local dev & production deployment",
],
timeline: "23 days",
price: "€690",
proof: ["Successful build/deploy logs with healthcheck passes", "Rollback steps validated in a dry-run"],
faq: [
{ q: "Can you support multiple services?", a: "Yes—compose a multi-service stack with networks, volumes, and per-service healthchecks." },
{ q: "Will you set up CI?", a: "CI/CD can be added. See Git-to-Prod CI/CD." },
],
relatedSlugs: ["git-to-prod-ci-cd", "observability-stack"],
metaTitle: "Dockerize & Deploy — Van Hunen IT",
metaDescription:
"Containerize your app with Docker and deploy with confidence—healthchecks, secrets, and runbooks included.",
},
{
slug: "container-registry-setup",
title: "Private Container Registry Setup",
category: "infrastructure-devops",
outcome: "Secure image storage and CI/CD-friendly workflows.",
who: ["Teams needing private images with access control", "Orgs adopting container scanning & retention policies"],
deliverables: [
"GHCR/Harbor registry, RBAC & tokens",
"Retention & vulnerability scanning",
"CI push/pull integration docs",
],
timeline: "12 days",
price: "€490",
proof: ["Policy & RBAC screenshots", "Pipeline run showing signed/pushed images"],
faq: [
{ q: "Do you support Harbor on-prem?", a: "Yes, Harbor on VPS/K8s with TLS and persistence." },
{ q: "Image signing?", a: "Cosign support can be added on request." },
],
relatedSlugs: ["git-to-prod-ci-cd", "dockerize-deploy"],
metaTitle: "Private Container Registry — Van Hunen IT",
metaDescription:
"Set up a private, secure container registry with RBAC, retention, and CI integration.",
},
{
slug: "k3s-kubernetes-cluster",
title: "k3s/Kubernetes Cluster in a Day",
category: "infrastructure-devops",
outcome: "Production-ready k3s/K8s with ingress, TLS, and app namespaces.",
who: ["Projects outgrowing Docker Compose", "Teams needing multi-app isolation with ingress"],
deliverables: ["k3s/K8s install, ingress (Traefik/NGINX), TLS", "Storage class, namespaces, RBAC", "Example deployment & runbook"],
timeline: "12 days",
price: "€890",
proof: ["kubectl outputs validating health & RBAC", "Ingress verification and SSL pass"],
faq: [
{ q: "Is this managed?", a: "We provision and hand over; optional care add-on available." },
{ q: "On which infra?", a: "Single VPS, multi-node, or cloud—sized to your load." },
],
relatedSlugs: ["observability-stack", "secrets-management", "staging-environment"],
metaTitle: "Kubernetes (k3s) in a Day — Van Hunen IT",
metaDescription:
"Get a production-ready k3s/Kubernetes cluster with ingress, TLS, RBAC, and a sample app.",
},
{
slug: "git-to-prod-ci-cd",
title: "Git-to-Prod CI/CD",
category: "infrastructure-devops",
outcome: "Push to main → build → test → deploy.",
who: ["Teams wanting predictable deployment pipelines", "Shops standardizing environments and rollbacks"],
deliverables: [
"Pipelines (GitHub Actions/Woodpecker)",
"Image build & tagging, environment promotion",
"Automated rollbacks & notifications",
],
timeline: "2 days",
price: "€780",
proof: ["Green pipeline run from commit to deploy", "Rollback rehearsal recorded in logs"],
faq: [
{ q: "Do you support monorepos?", a: "Yes—matrix builds and targeted deploys." },
{ q: "Secrets in CI?", a: "We wire secure secrets management per provider." },
],
relatedSlugs: ["dockerize-deploy", "container-registry-setup"],
metaTitle: "CI/CD to Production — Van Hunen IT",
metaDescription:
"Automated pipelines from commit to production with tagging, promotion, and rollbacks.",
},
{
slug: "observability-stack",
title: "Observability Stack (Prometheus/Grafana/Loki)",
category: "infrastructure-devops",
outcome: "Metrics, logs, and alerts you can act on.",
who: ["Apps needing visibility and alerting", "Teams consolidating logs and dashboards"],
deliverables: ["Prometheus metrics & alert rules", "Grafana dashboards for app & infra", "Loki log aggregation & retention"],
timeline: "12 days",
price: "€740",
proof: ["Dashboards with baseline SLOs", "Test alert firing to Slack/Email"],
faq: [
{ q: "Can you integrate with K8s?", a: "Yes, via exporters and service monitors." },
{ q: "Retention strategy?", a: "Right-sized for your VPS budget and compliance." },
],
relatedSlugs: ["k3s-kubernetes-cluster", "git-to-prod-ci-cd"],
metaTitle: "Observability Stack — Van Hunen IT",
metaDescription:
"Prometheus, Grafana, and Loki set up with alerts and actionable dashboards.",
},
{
slug: "backup-disaster-recovery-drill",
title: "Backup & Disaster-Recovery Drill",
category: "infrastructure-devops",
outcome: "Verified restore path—not just backups.",
who: ["Sites that never tested restore", "Teams formalizing RPO/RTO targets"],
deliverables: [
"Backup plan (files/db), encryption & rotation",
"Restore test with documented steps",
"RPO/RTO notes & recommendations",
],
timeline: "1 day",
price: "€490",
proof: ["Restore demonstration on staging", "Report with timings and gaps"],
faq: [
{ q: "Which databases?", a: "MySQL/MariaDB/Postgres supported; others on request." },
{ q: "Offsite options?", a: "S3-compatible storage or rsync to secondary VPS." },
],
relatedSlugs: ["vps-hardening-care", "website-care-plan"],
metaTitle: "Backup & DR Drill — Van Hunen IT",
metaDescription:
"We plan, back up, and verify restores with a documented drill and RPO/RTO notes.",
},
{
slug: "cloudflare-edge-hardening",
title: "Cloudflare Edge Hardening",
category: "infrastructure-devops",
outcome: "Lower TTFB, fewer bad bots, safer origins.",
who: ["Sites facing spam/bot abuse or high TTFB", "Teams needing sane edge security fast"],
deliverables: [
"WAF & bot tuning, page rules, cache keys",
"Origin shielding, HTTP/3, rate limiting",
"TTFB and cache-hit improvements",
],
timeline: "1 day",
price: "€420",
proof: ["Before/after WebPageTest/TTFB screenshots", "WAF rule set export & notes"],
faq: [
{ q: "Pro/Business plan required?", a: "We work with Free+ plans; some features need Pro/Business." },
{ q: "Will it break APIs?", a: "Rules are staged and tested with allowlists where needed." },
],
relatedSlugs: ["vps-hardening-care", "core-web-vitals-sprint"],
metaTitle: "Cloudflare Edge Hardening — Van Hunen IT",
metaDescription:
"Tune WAF, caching, and HTTP/3 to reduce TTFB and block abusive traffic.",
},
// --- WEBSITE RELIABILITY & PERFORMANCE ---
{
slug: "core-web-vitals-sprint",
title: "Core Web Vitals Sprint",
category: "web-performance",
outcome: "CLS/LCP/INP into the green with measurable before/after.",
who: ["Marketing sites and shops with poor CWV", "Next.js/WordPress teams needing a focused fix"],
deliverables: [
"Image strategy (WebP/next/image), font loading",
"Script defers, critical CSS, caching headers",
"Before/after CWV report",
],
timeline: "23 days",
price: "€820",
proof: ["Lighthouse/CrUX before vs after", "Largest contentful paint assets diff"],
faq: [
{ q: "Will you change design?", a: "Only insofar as needed to stabilize layout and loading." },
{ q: "Third-party scripts?", a: "We reduce impact via defer/async and budgeting." },
],
relatedSlugs: ["cloudflare-edge-hardening", "website-care-plan"],
metaTitle: "Core Web Vitals Sprint — Van Hunen IT",
metaDescription:
"Improve LCP/CLS/INP with image, font, and script strategy plus caching.",
},
{
slug: "email-deliverability-pack",
title: "Secure Contact & Email Deliverability Pack",
category: "web-performance",
outcome: "Inbox-ready email, spoofing blocked, safer forms.",
who: ["Domains landing in spam or failing DMARC", "Sites receiving contact-form spam"],
deliverables: [
"SPF/DKIM/DMARC config & reports",
"Seed tests, alignment verification",
"Form honeypot/time-trap/rate-limit",
],
timeline: "12 days",
price: "€520",
proof: ["Before/after seed test screenshots", "DMARC alignment & provider screenshots"],
faq: [
{ q: "BIMI?", a: "Supported if you provide a valid SVG and VMC (optional)." },
{ q: "Multiple providers?", a: "Yes—ESP+transactional combos are supported." },
],
relatedSlugs: ["website-care-plan", "cloudflare-edge-hardening"],
metaTitle: "Email Deliverability Pack — Van Hunen IT",
metaDescription:
"Fix spam issues with SPF/DKIM/DMARC, verified tests, and safer contact forms.",
},
// --- DEV PLATFORMS & MIGRATIONS ---
{
slug: "self-hosted-gitea-sso",
title: "Self-Hosted Git (Gitea) with SSO",
category: "dev-platforms",
outcome: "Private Git with teams and permissions.",
who: ["Teams needing on-prem/private Git", "Shops standardizing code workflows"],
deliverables: ["Gitea + runner, backup/restore", "OAuth/SSO, protected branches", "Repo templates & permissions"],
timeline: "1 day",
price: "€460",
proof: ["Admin settings & SSO validation", "Backup/restore rehearsal log"],
faq: [
{ q: "Migrate from GitHub/GitLab?", a: "Yes—repositories and permissions where possible." },
{ q: "Runner support?", a: "Gitea Actions or Woodpecker runners on request." },
],
relatedSlugs: ["git-to-prod-ci-cd", "container-registry-setup"],
metaTitle: "Self-Hosted Gitea with SSO — Van Hunen IT",
metaDescription:
"Own your source control with Gitea, SSO, backups, and runners.",
},
{
slug: "secrets-management",
title: "Secrets Management (SOPS/age or Sealed-Secrets)",
category: "dev-platforms",
outcome: "Safe secrets in Git and Kubernetes.",
who: ["Teams committing .env by mistake", "K8s users needing encrypted manifests"],
deliverables: ["SOPS/age or Sealed-Secrets setup", "Key management & rotation policy", "Usage examples & policy notes"],
timeline: "0.51 day",
price: "€380",
proof: ["Encrypted secrets in repo & decrypt flow", "Rotation drill notes"],
faq: [
{ q: "Which to choose?", a: "SOPS for Git-centric flow; Sealed-Secrets for cluster-centric flow." },
{ q: "CI integration?", a: "We wire CI to decrypt securely where needed." },
],
relatedSlugs: ["k3s-kubernetes-cluster", "git-to-prod-ci-cd"],
metaTitle: "Secrets Management — Van Hunen IT",
metaDescription:
"Implement SOPS/age or Sealed-Secrets for safe secrets handling in Git/K8s.",
},
{
slug: "staging-environment",
title: "Staging Environment on the Same VPS/Cluster",
category: "dev-platforms",
outcome: "Risk-free previews before prod.",
who: ["Teams deploying without review", "Sites needing UAT previews"],
deliverables: ["Staging namespace/compose stack", "Preview URLs & deploy gates", "Masked data & access controls"],
timeline: "1 day",
price: "€520",
proof: ["Preview deployment validation", "Access restricted and logged"],
faq: [
{ q: "Separate VPS needed?", a: "Not required; we can isolate on the same host if resources allow." },
{ q: "Data masking?", a: "We provide safe anonymization for staging data." },
],
relatedSlugs: ["git-to-prod-ci-cd", "dockerize-deploy"],
metaTitle: "Staging Environment — Van Hunen IT",
metaDescription:
"Add a staging environment with preview URLs and deploy gates.",
},
{
slug: "server-app-migration",
title: "Server/App Migration to VPS/Kubernetes",
category: "migrations",
outcome: "Zero-to-minimal downtime move with rollback.",
who: ["Teams changing hosts or platforms", "Apps consolidating infra"],
deliverables: [
"Inventory & plan, containerization if needed",
"DNS/cutover & rollback plan",
"Smoke tests & timed runbook",
],
timeline: "24 days",
price: "€1,190",
proof: ["Cutover timeline & metrics", "Rollback rehearsal log"],
faq: [
{ q: "Can you migrate databases?", a: "Yes—logical or physical migration with validated checks." },
{ q: "Downtime window?", a: "We schedule low-impact windows and offer blue/green where possible." },
],
relatedSlugs: ["legacy-to-container-refresh", "k3s-kubernetes-cluster"],
metaTitle: "Server/App Migration — Van Hunen IT",
metaDescription:
"Plan and execute migrations to VPS or Kubernetes with rollback protection.",
},
{
slug: "legacy-to-container-refresh",
title: "Legacy to Container Refresh",
category: "migrations",
outcome: "From pets to cattle—documented and reproducible.",
who: ["Legacy apps lacking deployment consistency", "Teams modernizing delivery"],
deliverables: ["Dockerfiles & manifests", "Healthchecks, backups, docs", "Operational runbook"],
timeline: "23 days",
price: "€990",
proof: ["Green healthchecks post-deploy", "Disaster recovery walk-through"],
faq: [
{ q: "Unsupported stacks?", a: "We assess feasibility; some apps may need refactors." },
{ q: "Windows workloads?", a: "Case-by-case; Linux recommended for best results." },
],
relatedSlugs: ["dockerize-deploy", "git-to-prod-ci-cd"],
metaTitle: "Legacy to Container Refresh — Van Hunen IT",
metaDescription:
"Containerize legacy apps with healthchecks, backups, and docs.",
},
];
export function getAllServices(): Service[] {
// Keep a stable order by category then title
return [...SERVICES].sort((a, b) =>
a.category === b.category
? a.title.localeCompare(b.title)
: a.category.localeCompare(b.category)
);
}
export function getServiceBySlug(slug: string): Service | undefined {
return SERVICES.find((s) => s.slug === slug);
}
export function getServicesByCategory(category: ServiceCategoryId): Service[] {
return getAllServices().filter((s) => s.category === category);
}