// 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 = { "infrastructure-devops": { label: "Infrastructure & DevOps", anchor: "infrastructure-devops" }, "web-performance": { label: "Web Performance & Reliability", 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 ready for production.", 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.", 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: "Updated site with restore-on-demand and uptime eyes on.", 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 €99/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 + safe 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.", }, // (Web performance group already added 3; infra/devops group has 7; dev-platforms 3; migrations 2; minecraft 4; web-dev 3) ]; 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); }