// lib/services.ts export type ServiceCategoryId = | "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., "1–2 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 } > = { "infrastructure-devops": { label: "Infrastructure & DevOps", anchor: "infrastructure-devops", }, "web-performance": { label: "Website Reliability & Performance", anchor: "web-performance", }, "dev-platforms": { label: "Developer Platforms & Tooling", anchor: "dev-platforms" }, migrations: { label: "Migrations & Refreshes", anchor: "migrations" }, minecraft: { label: "Minecraft Services", anchor: "minecraft" }, "web-dev": { label: "Web Development", anchor: "web-dev" }, }; // ------- 23 services ------- export const SERVICES: Service[] = [ { slug: "vps-hardening-care", title: "VPS Hardening & Care", category: "infrastructure-devops", outcome: "Secure, monitored, and backed-up VPS—foundation of the Reliability Stack™.", who: [ "SMBs running WordPress/Next.js/apps on a VPS", "Teams needing a baseline security and backup posture", ], deliverables: [ "SSH/CIS hardening, firewall (ufw), fail2ban", "Automated updates, audit log, intrusion checks", "Backups + restore test, uptime & resource monitoring", ], timeline: "1–2 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: "VPS Hardening & Care — Van Hunen IT", metaDescription: "Secure your VPS with hardening, monitoring, and tested backups. One-off setup or ongoing care.", }, { 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: "2–3 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: "1–2 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: "1–2 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: "1–2 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.", }, { 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: "2–3 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: "website-care-plan", title: "Website Care Plan", category: "web-performance", outcome: "Updates, uptime watch, and verified restores—the Reliability Stack™ on autopilot.", who: ["SMBs wanting stable updates and monitoring", "Teams without in-house ops"], deliverables: [ "Updates, uptime monitoring, backups + monthly restore test", "Incident credits and priority support", "Security checks & 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: "Website Care Plan — Van Hunen IT", metaDescription: "Monthly updates, uptime, and verified restores for peace of mind.", }, { 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: "1–2 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.", }, { 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.5–1 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: "2–4 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: "2–3 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.", }, { slug: "minecraft-managed-server", title: "Managed Minecraft Server", category: "minecraft", outcome: "Fast, stable, and safe server on a dedicated VPS.", 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 — Van Hunen IT", metaDescription: "Turnkey Minecraft hosting on a hardened VPS with backups and performance tuning.", }, { 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: "Custom Minecraft Plugin Development", category: "minecraft", outcome: "Features tailored to your server/community.", who: ["Servers needing unique mechanics", "Creators monetizing custom content"], deliverables: ["Spec, plugin build & tests", "Config & permissions", "Maintenance window"], timeline: "From 3–7 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 Plugin Development — Van Hunen IT", metaDescription: "Build custom Paper/Spigot plugins with tests, configs, and docs.", }, { 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.", }, { slug: "quick-launch-website", title: "Quick-Launch Website (Next.js)", category: "web-dev", outcome: "Fast, SEO-ready site in days.", who: ["SMBs needing a credible web presence fast", "Consultants/creators launching offers"], deliverables: ["5–7 sections, forms, OG/Twitter cards", "Analytics & deploy to your VPS", "Basic SEO & sitemap"], timeline: "5–7 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: "Quick-Launch Website (Next.js) — Van Hunen IT", metaDescription: "Launch a fast, SEO-ready site in days with forms, analytics, and deployment.", }, { 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: "2–3 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: "1–2 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.", }, ]; 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); }