{
  "$schema": "https://www.stuurman.com/llms.json",
  "name": "Ed Stuurman",
  "description": "Ed Stuurman — Infrastructure & reliability engineer in Japan. Personal homelab, cloud architecture, Terraform automation, and photography.",
  "url": "https://www.stuurman.com/",
  "language": "en",
  "updated": "2026-11-01T00:00:00.000Z",
  "owner": {
    "name": "Ed Stuurman",
    "alternateName": "Edouard Stuurman",
    "role": "Infrastructure & Site Reliability Engineer",
    "location": "Japan",
    "email": "ed@stuurman.com",
    "links": {
      "website": "https://www.stuurman.com/",
      "github": "https://github.com/edstuurman",
      "gitlab": "https://gitlab.com/edstuurman",
      "linkedin": "https://www.linkedin.com/in/edouard-s-783774b9/",
      "instagram": "https://www.instagram.com/ed_stuurman/"
    }
  },
  "llmFiles": [
    {
      "name": "llms.txt",
      "url": "https://www.stuurman.com/llms.txt",
      "type": "text/markdown",
      "description": "Concise site overview and index of key pages, written for LLMs."
    },
    {
      "name": "llms-full.txt",
      "url": "https://www.stuurman.com/llms-full.txt",
      "type": "text/markdown",
      "description": "Concatenated Markdown archive of profile and article content for ingestion and RAG."
    },
    {
      "name": "llms.json",
      "url": "https://www.stuurman.com/llms.json",
      "type": "application/json",
      "description": "This file: structured index of pages, articles, topics, and feeds, generated at build time."
    }
  ],
  "feeds": {
    "rss": "https://www.stuurman.com/rss.xml",
    "atom": "https://www.stuurman.com/atom.xml",
    "sitemap": "https://www.stuurman.com/sitemap-index.xml"
  },
  "pages": [
    {
      "name": "Home",
      "url": "https://www.stuurman.com/",
      "description": "Overview, featured photography, and recent articles."
    },
    {
      "name": "About",
      "url": "https://www.stuurman.com/about/",
      "description": "Career history, homelab philosophy, and recommendations."
    },
    {
      "name": "Now",
      "url": "https://www.stuurman.com/now/",
      "description": "What Ed is currently working on and focused on."
    },
    {
      "name": "Log",
      "url": "https://www.stuurman.com/log/",
      "description": "Micro-updates, site changelogs, and picture logs."
    },
    {
      "name": "Blog",
      "url": "https://www.stuurman.com/blog/",
      "description": "Technical articles and homelab write-ups."
    },
    {
      "name": "Photography",
      "url": "https://www.stuurman.com/photography/",
      "description": "Portfolio of landscape, architecture, and street photography."
    },
    {
      "name": "Tags",
      "url": "https://www.stuurman.com/tags/",
      "description": "Cross-collection topic directory."
    },
    {
      "name": "Contact",
      "url": "https://www.stuurman.com/contact/",
      "description": "How to get in touch."
    }
  ],
  "articles": [
    {
      "title": "Why \"aws s3 sync\" Was Re-Uploading My Entire Site on Every Push (And How We Fixed Our CI/CD Pipeline)",
      "url": "https://www.stuurman.com/blog/2026-11-01-optimizing-gitlab-ci-s3-deployments/",
      "description": "How two sneaky CI/CD traps—npm ci wiping build caches inside node_modules and fresh build mtimes fooling aws s3 sync—turned one-line edits into full 592-file multi-region deployments.",
      "published": "2026-11-01T00:00:00.000Z",
      "updated": "2026-11-01T00:00:00.000Z",
      "author": "Ed Stuurman",
      "tags": [
        "CI/CD",
        "AWS",
        "Infrastructure",
        "Performance",
        "AstroJS"
      ]
    },
    {
      "title": "Stepping Back, Digging In, and Stepping Forward",
      "url": "https://www.stuurman.com/blog/2026-10-31-stepping-back-digging-in-and-stepping-forward/",
      "description": "Reflections on a two-year hiatus, rebuilding mental bandwidth, and stepping back into production infrastructure.",
      "published": "2026-10-31T00:00:00.000Z",
      "updated": "2026-10-31T00:00:00.000Z",
      "author": "Ed Stuurman",
      "tags": [
        "Career",
        "Engineering",
        "Infrastructure",
        "Reflection"
      ]
    },
    {
      "title": "From Static Tags to a Living CV: Pair-Programming a Site Architecture with AI",
      "url": "https://www.stuurman.com/blog/2026-10-29-from-tags-to-living-cv-ai-assisted-architecture/",
      "description": "How linking career milestones, homelab notes, and photography through simple tags sets up cleaner CV generation—and what pair-programming with AI as an amateur actually feels like.",
      "published": "2026-10-29T00:00:00.000Z",
      "updated": "2026-10-29T00:00:00.000Z",
      "author": "Ed Stuurman",
      "tags": [
        "AI",
        "AstroJS",
        "Career",
        "Architecture",
        "Opinion"
      ]
    },
    {
      "title": "Overhauling the Stack: Astro 7, Tailwind v4, and Converting to AI-Assisted Engineering",
      "url": "https://www.stuurman.com/blog/2026-10-27-converting-to-ai-assisted-engineering/",
      "description": "How a routine framework upgrade turned into a full modernization sprint—and why I finally became a believer in AI pair programming.",
      "published": "2026-10-27T00:00:00.000Z",
      "updated": "2026-10-29T00:00:00.000Z",
      "author": "Ed Stuurman",
      "tags": [
        "AstroJS",
        "Tailwind CSS",
        "AI",
        "Infrastructure",
        "Opinion"
      ]
    },
    {
      "title": "Using Terraform (HCL) to design, deploy, and manage repeatable multi-region AWS infrastructure.",
      "url": "https://www.stuurman.com/blog/2025-12-18-terraform-aws-mrap-s3/",
      "description": "Automating a setup that takes an hour to complete manually, because repetition is a problem best solved once.",
      "published": "2025-12-18T00:00:00.000Z",
      "updated": "2025-12-18T00:00:00.000Z",
      "author": "Ed Stuurman",
      "tags": [
        "AWS",
        "Infrastructure",
        "Terraform"
      ]
    },
    {
      "title": "Reducing compute capacity and retiring unnecessary workloads in a home-lab to optimize power consumption and improve overall efficiency.",
      "url": "https://www.stuurman.com/blog/2025-12-9-homelab-vmware-vsan-proxmox/",
      "description": "Downsizing compute and retiring unnecessary workloads in a homelab to cut power draw and optimize Proxmox and storage efficiency.",
      "published": "2025-12-09T00:00:00.000Z",
      "updated": "2025-12-09T00:00:00.000Z",
      "author": "Ed Stuurman",
      "tags": [
        "VMware",
        "Proxmox",
        "Homelab"
      ]
    },
    {
      "title": "Improving time to first byte, an intro to S3 Multi Region Access Points, Lambda@Edge functions and CloudFront",
      "url": "https://www.stuurman.com/blog/2025-12-6-aws-mrap-s3-lambda-cloudfront/",
      "description": "Improving Time to First Byte (TTFB) globally with S3 Multi-Region Access Points, Lambda@Edge, and CloudFront.",
      "published": "2025-12-06T00:00:00.000Z",
      "updated": "2025-12-06T00:00:00.000Z",
      "author": "Ed Stuurman",
      "tags": [
        "AWS",
        "Infrastructure"
      ]
    },
    {
      "title": "Umami: What I Learned While Eating a Big Serving of Humble Pie.",
      "url": "https://www.stuurman.com/blog/2025-11-27-aws-dsql-amplify-umami-analytics/",
      "description": "Lessons learned exploring how cheaply I could self-host the open-source Umami analytics suite on AWS with Aurora DSQL and Amplify.",
      "published": "2025-11-27T00:00:00.000Z",
      "updated": "2025-11-27T00:00:00.000Z",
      "author": "Ed Stuurman",
      "tags": [
        "AWS",
        "Lesson"
      ]
    },
    {
      "title": "Running a Mail Server Is Cool. Until SPF, DKIM, DMARC, and blocklists remind you what it really costs.",
      "url": "https://www.stuurman.com/blog/2025-11-26-email-deliverability/",
      "description": "Why self-hosting email is no longer practical: SPF, DKIM, DMARC, blocklists, and the true operational cost of mail deliverability.",
      "published": "2025-11-26T00:00:00.000Z",
      "updated": "2025-11-26T00:00:00.000Z",
      "author": "Ed Stuurman",
      "tags": [
        "Email",
        "Infrastructure",
        "Opinion"
      ]
    },
    {
      "title": "I Also Fell Down the Rabbit Hole: Building a Fully Automated Astro Blog Pipeline with VSCode, GitLab, Amplify and CloudFront.",
      "url": "https://www.stuurman.com/blog/2025-11-25-building-an-astro-site/",
      "description": "Because every infrastructure engineer eventually builds yet another automated static site pipeline.",
      "published": "2025-11-25T00:00:00.000Z",
      "updated": "2025-11-25T00:00:00.000Z",
      "author": "Ed Stuurman",
      "tags": [
        "AstroJS",
        "AWS",
        "Infrastructure",
        "Tailwind CSS"
      ]
    }
  ],
  "topics": [
    {
      "name": "Infrastructure",
      "url": "https://www.stuurman.com/tags/infrastructure/",
      "counts": {
        "total": 17,
        "articles": 7,
        "log": 6,
        "photos": 0,
        "career": 4
      }
    },
    {
      "name": "Networking",
      "url": "https://www.stuurman.com/tags/networking/",
      "counts": {
        "total": 4,
        "articles": 0,
        "log": 0,
        "photos": 0,
        "career": 4
      }
    },
    {
      "name": "AI",
      "url": "https://www.stuurman.com/tags/ai/",
      "counts": {
        "total": 3,
        "articles": 2,
        "log": 0,
        "photos": 0,
        "career": 1
      }
    },
    {
      "name": "CI/CD",
      "url": "https://www.stuurman.com/tags/cicd/",
      "counts": {
        "total": 3,
        "articles": 1,
        "log": 1,
        "photos": 0,
        "career": 1
      }
    },
    {
      "name": "Email",
      "url": "https://www.stuurman.com/tags/email/",
      "counts": {
        "total": 3,
        "articles": 1,
        "log": 0,
        "photos": 0,
        "career": 2
      }
    },
    {
      "name": "Hardware",
      "url": "https://www.stuurman.com/tags/hardware/",
      "counts": {
        "total": 3,
        "articles": 0,
        "log": 1,
        "photos": 0,
        "career": 2
      }
    },
    {
      "name": "IoT",
      "url": "https://www.stuurman.com/tags/iot/",
      "counts": {
        "total": 2,
        "articles": 0,
        "log": 1,
        "photos": 0,
        "career": 1
      }
    },
    {
      "name": "VMware",
      "url": "https://www.stuurman.com/tags/vmware/",
      "counts": {
        "total": 2,
        "articles": 1,
        "log": 0,
        "photos": 0,
        "career": 1
      }
    },
    {
      "name": "Windows Server",
      "url": "https://www.stuurman.com/tags/windows-server/",
      "counts": {
        "total": 2,
        "articles": 0,
        "log": 0,
        "photos": 0,
        "career": 2
      }
    },
    {
      "name": "Cloud",
      "url": "https://www.stuurman.com/tags/cloud/",
      "counts": {
        "total": 1,
        "articles": 0,
        "log": 0,
        "photos": 0,
        "career": 1
      }
    },
    {
      "name": "Docker",
      "url": "https://www.stuurman.com/tags/docker/",
      "counts": {
        "total": 1,
        "articles": 0,
        "log": 0,
        "photos": 0,
        "career": 1
      }
    },
    {
      "name": "GPU",
      "url": "https://www.stuurman.com/tags/gpu/",
      "counts": {
        "total": 1,
        "articles": 0,
        "log": 0,
        "photos": 0,
        "career": 1
      }
    },
    {
      "name": "Linux",
      "url": "https://www.stuurman.com/tags/linux/",
      "counts": {
        "total": 1,
        "articles": 0,
        "log": 0,
        "photos": 0,
        "career": 1
      }
    },
    {
      "name": "Observability",
      "url": "https://www.stuurman.com/tags/observability/",
      "counts": {
        "total": 1,
        "articles": 0,
        "log": 0,
        "photos": 0,
        "career": 1
      }
    },
    {
      "name": "OpenStack",
      "url": "https://www.stuurman.com/tags/openstack/",
      "counts": {
        "total": 1,
        "articles": 0,
        "log": 0,
        "photos": 0,
        "career": 1
      }
    },
    {
      "name": "Reliability",
      "url": "https://www.stuurman.com/tags/reliability/",
      "counts": {
        "total": 1,
        "articles": 0,
        "log": 0,
        "photos": 0,
        "career": 1
      }
    },
    {
      "name": "Security",
      "url": "https://www.stuurman.com/tags/security/",
      "counts": {
        "total": 1,
        "articles": 0,
        "log": 0,
        "photos": 0,
        "career": 1
      }
    },
    {
      "name": "Systems",
      "url": "https://www.stuurman.com/tags/systems/",
      "counts": {
        "total": 1,
        "articles": 0,
        "log": 0,
        "photos": 0,
        "career": 1
      }
    },
    {
      "name": "AstroJS",
      "url": "https://www.stuurman.com/tags/astrojs/",
      "counts": {
        "total": 11,
        "articles": 4,
        "log": 7,
        "photos": 0,
        "career": 0
      }
    },
    {
      "name": "Architecture",
      "url": "https://www.stuurman.com/tags/architecture/",
      "counts": {
        "total": 8,
        "articles": 1,
        "log": 0,
        "photos": 7,
        "career": 0
      }
    },
    {
      "name": "Career",
      "url": "https://www.stuurman.com/tags/career/",
      "counts": {
        "total": 7,
        "articles": 2,
        "log": 5,
        "photos": 0,
        "career": 0
      }
    },
    {
      "name": "AWS",
      "url": "https://www.stuurman.com/tags/aws/",
      "counts": {
        "total": 5,
        "articles": 5,
        "log": 0,
        "photos": 0,
        "career": 0
      }
    },
    {
      "name": "Tailwind CSS",
      "url": "https://www.stuurman.com/tags/tailwind-css/",
      "counts": {
        "total": 5,
        "articles": 2,
        "log": 3,
        "photos": 0,
        "career": 0
      }
    },
    {
      "name": "Performance",
      "url": "https://www.stuurman.com/tags/performance/",
      "counts": {
        "total": 4,
        "articles": 1,
        "log": 3,
        "photos": 0,
        "career": 0
      }
    },
    {
      "name": "Opinion",
      "url": "https://www.stuurman.com/tags/opinion/",
      "counts": {
        "total": 3,
        "articles": 3,
        "log": 0,
        "photos": 0,
        "career": 0
      }
    },
    {
      "name": "Reflection",
      "url": "https://www.stuurman.com/tags/reflection/",
      "counts": {
        "total": 2,
        "articles": 1,
        "log": 0,
        "photos": 1,
        "career": 0
      }
    },
    {
      "name": "Engineering",
      "url": "https://www.stuurman.com/tags/engineering/",
      "counts": {
        "total": 1,
        "articles": 1,
        "log": 0,
        "photos": 0,
        "career": 0
      }
    },
    {
      "name": "Homelab",
      "url": "https://www.stuurman.com/tags/homelab/",
      "counts": {
        "total": 1,
        "articles": 1,
        "log": 0,
        "photos": 0,
        "career": 0
      }
    },
    {
      "name": "Lesson",
      "url": "https://www.stuurman.com/tags/lesson/",
      "counts": {
        "total": 1,
        "articles": 1,
        "log": 0,
        "photos": 0,
        "career": 0
      }
    },
    {
      "name": "Proxmox",
      "url": "https://www.stuurman.com/tags/proxmox/",
      "counts": {
        "total": 1,
        "articles": 1,
        "log": 0,
        "photos": 0,
        "career": 0
      }
    },
    {
      "name": "Terraform",
      "url": "https://www.stuurman.com/tags/terraform/",
      "counts": {
        "total": 1,
        "articles": 1,
        "log": 0,
        "photos": 0,
        "career": 0
      }
    },
    {
      "name": "Design",
      "url": "https://www.stuurman.com/tags/design/",
      "counts": {
        "total": 6,
        "articles": 0,
        "log": 6,
        "photos": 0,
        "career": 0
      }
    },
    {
      "name": "Photography",
      "url": "https://www.stuurman.com/tags/photography/",
      "counts": {
        "total": 5,
        "articles": 0,
        "log": 5,
        "photos": 0,
        "career": 0
      }
    }
  ],
  "photography": {
    "url": "https://www.stuurman.com/photography/",
    "count": 40,
    "latest": "2026-01-15T00:00:00.000Z"
  }
}
