[
  {
    "title": "Ionian Anchorages & Towns",
    "description": "Anchorages & coastal views.",
    "tags": [
      "fenna",
      "sailing"
    ],
    "slug": "fenna/Gallery/ionian_anchorages_and_towns",
    "category": "blog",
    "route": "/blog/fenna/Gallery/ionian_anchorages_and_towns",
    "contentSnippet": "Ionian Anchorages and Towns Some of the harbours, anchorages, and towns we visited along the Ionian coast. Corfu !corfuharbour !corfuharbourfenna Parga !parga !pargacastle Along the coast !swimmingwit"
  },
  {
    "title": "Ionian Sea",
    "description": "Images from around the Ionian Sea",
    "tags": [
      "fenna",
      "sailing"
    ],
    "slug": "fenna/Gallery/ionian_sea",
    "category": "blog",
    "route": "/blog/fenna/Gallery/ionian_sea",
    "contentSnippet": "Ionia !bluewaters !bluewaters1 !lightbluewaters !bluecoast!bluewaterssailing !cloudsoversea !lefkadasouth !sunriseiniona !sunrisenorthcorfu !sesoula"
  },
  {
    "title": "A bit of a tow",
    "description": "When everything fails... you might need some help",
    "tags": [
      "fenna",
      "sailing"
    ],
    "slug": "fenna/a_couple_of_mishaps/a_bit_of_a_tow",
    "category": "blog",
    "route": "/blog/fenna/a_couple_of_mishaps/a_bit_of_a_tow",
    "contentSnippet": "A bit of a tow We have had our share of mishaps. We encountered our first -- and so far worst calamity very early on. We had been motoring around getting a feel for the yacht -- when the engine cut ou"
  },
  {
    "title": "Dropping anchor ain't simple",
    "description": "Stories about issues at anchor",
    "tags": [
      "fenna",
      "sailing"
    ],
    "slug": "fenna/a_couple_of_mishaps/dropping_anchor_ain't_simple",
    "category": "blog",
    "route": "/blog/fenna/a_couple_of_mishaps/dropping_anchor_ain't_simple",
    "contentSnippet": "Dropping Anchor Ain't Simple Dropping anchor should be simple, however it is an act that must be done with great care. The really stressful one was when we were tied to shore on the south of Ithaca. W"
  },
  {
    "title": "Inflatable No Longer",
    "description": "When the inflatable boat is no longer inflated.",
    "tags": [
      "fenna",
      "sailing"
    ],
    "slug": "fenna/a_couple_of_mishaps/inflatable_no_longer",
    "category": "blog",
    "route": "/blog/fenna/a_couple_of_mishaps/inflatable_no_longer",
    "contentSnippet": "Inflatable no longer Our next issue was another nuisance -- a spun prop on the outboard. It just happened to time itself when I had some guests come by. Not ideal. An easy fix -- just had to wait for "
  },
  {
    "title": "You Can't Park Here",
    "description": "the tight anchorages & inexperience/carelessness make for a stressful combo.",
    "tags": [
      "fenna",
      "sailing"
    ],
    "slug": "fenna/a_couple_of_mishaps/you_cant_park_here",
    "category": "blog",
    "route": "/blog/fenna/a_couple_of_mishaps/you_cant_park_here",
    "contentSnippet": "You Can't Park Here The town of Lakka, on the island of Paxos, is gorgeous. It is every bit an idyllic seaside town. It is a great anchorage, and very conveniently placed between the larger towns of P"
  },
  {
    "title": "An Oily Situation",
    "description": "Oil. Oil everywhere.",
    "tags": [
      "fenna",
      "sailing"
    ],
    "slug": "fenna/mechanics_maintenance_oh_my/an_oily_situation",
    "category": "blog",
    "route": "/blog/fenna/mechanics_maintenance_oh_my/an_oily_situation",
    "contentSnippet": "An oily situation One of the first bits of maintenance we did was an overhaul of the generator. It was in real need of a service -- the heat exchanger was completely clogged. !heatexchanger The coolan"
  },
  {
    "title": "Immediately, I Was Put to Work",
    "description": "getting the boat ready for the first time was a slog.",
    "tags": [
      "fenna",
      "sailing"
    ],
    "slug": "fenna/mechanics_maintenance_oh_my/immediately_put_to_work",
    "category": "blog",
    "route": "/blog/fenna/mechanics_maintenance_oh_my/immediately_put_to_work",
    "contentSnippet": "Immediately put to work After an inspection, a bunch of paperwork, and other preparation we arrived in Preveza -- ready to get the boat on the water. Almost immediately after we arrived, the size of t"
  },
  {
    "title": "Typically, the Shifter is Connected to the Engine",
    "description": "A shift linkage breaks... at a rather inopportune moment.",
    "tags": [
      "fenna",
      "sailing"
    ],
    "slug": "fenna/mechanics_maintenance_oh_my/shifter_not_connected",
    "category": "blog",
    "route": "/blog/fenna/mechanics_maintenance_oh_my/shifter_not_connected",
    "contentSnippet": "Typically, the Shifter is Connected to the Engine You can imagine my surprise when I was attempting to maneuver to anchor -- and the shifter no longer did anything. Happily -- I was right near the anc"
  },
  {
    "title": "Launch Day!",
    "description": "the first launch of Fenna!",
    "tags": [
      "fenna",
      "sailing"
    ],
    "slug": "fenna/sailing_the_seas/launch_day",
    "category": "blog",
    "route": "/blog/fenna/sailing_the_seas/launch_day",
    "contentSnippet": "Launch Day These delays, kerfuffles, and other items meant that we didn't manage to get onto the water until the following spring. We thought it would be simple... We have been proven wrong about that"
  },
  {
    "title": "On the Water",
    "description": "Finally - sailing!",
    "tags": [
      "fenna",
      "sailing"
    ],
    "slug": "fenna/sailing_the_seas/on_the_water",
    "category": "blog",
    "route": "/blog/fenna/sailing_the_seas/on_the_water",
    "contentSnippet": "On the Water It took a while -- but we got there! The vivid colors of the Ionian Sea. !caelanathelm"
  },
  {
    "title": "Time to Return Home",
    "description": "bringing the boat back onto the hard for the winter",
    "tags": [
      "fenna",
      "sailing"
    ],
    "slug": "fenna/sailing_the_seas/time_to_return_home",
    "category": "blog",
    "route": "/blog/fenna/sailing_the_seas/time_to_return_home",
    "contentSnippet": "Time to Return Home After a whole summer, 1293NM, 131 days, 1 million Greek salads, 2 million souvlakis, and 100 million gyros -- it was time to put the boat back up on dry land for the winter. Dockin"
  },
  {
    "title": "Working at sea",
    "description": "what's it like to work at sea?",
    "tags": [
      "fenna",
      "sailing"
    ],
    "slug": "fenna/sailing_the_seas/working_at_sea",
    "category": "blog",
    "route": "/blog/fenna/sailing_the_seas/working_at_sea",
    "contentSnippet": "I have been working at sea! Quite nice. I have a server at home in Vancouver that technically hosts and does everything. A laptop to securely connect to it -- and I am working in Canada! Technically, "
  },
  {
    "title": "/debug - Systematic Debugging",
    "description": "Use /debug for bugs that resist quick fixes - a systematic 4-phase approach that investigates root causes instead of guessing.",
    "tags": [
      "ai",
      "cagents",
      "claude",
      "debug",
      "debugging",
      "troubleshooting"
    ],
    "slug": "AI/cagents-debug",
    "category": "knowledge_base",
    "route": "/kb/AI/cagents-debug",
    "contentSnippet": "This is Part 7 of a 10-part series on cAgents. Previous: /optimize - Performance and Efficiency | Next: /review - Quality Review Unlike or , doesn't have its own standalone pipeline. It routes through"
  },
  {
    "title": "/designer - Design Before You Build",
    "description": "Use /designer to explore requirements through structured Q&A and produce implementation-ready design documents before committing to an approach.",
    "tags": [
      "ai",
      "cagents",
      "claude",
      "designer",
      "planning",
      "workflow"
    ],
    "slug": "AI/cagents-designer",
    "category": "knowledge_base",
    "route": "/kb/AI/cagents-designer",
    "contentSnippet": "This is Part 2 of a 10-part series on cAgents. | Previous: Getting Started with cAgents | Next: /run - Execute Tasks with Agents Most projects fail at the requirements stage, not the build stage. You "
  },
  {
    "title": "Getting Started with cAgents",
    "description": "Install Claude Code, set up cAgents, and run your first coordinated AI task - the complete beginner's guide.",
    "tags": [
      "ai",
      "cagents",
      "claude",
      "setup",
      "getting-started"
    ],
    "slug": "AI/cagents-getting-started",
    "category": "knowledge_base",
    "route": "/kb/AI/cagents-getting-started",
    "contentSnippet": "This is Part 1 of a 10-part series on cAgents. This article covers installation and setup. Part 2 starts using the tools: /designer - Design Before You Build. The terminal output shown in walkthroughs"
  },
  {
    "title": "Hooks - The Event System",
    "description": "How cAgents uses Claude Code hooks to track agents, enforce safety, manage context, and coordinate teams - the event-driven infrastructure behind every pipeline.",
    "tags": [
      "ai",
      "cagents",
      "claude",
      "hooks",
      "events",
      "internals"
    ],
    "slug": "AI/cagents-hooks",
    "category": "knowledge_base",
    "route": "/kb/AI/cagents-hooks",
    "contentSnippet": "This is Part 10 of a 10-part series on cAgents. Previous: Sessions - Under the Hood | First: Getting Started with cAgents The previous article covered sessions - the static record of what happened. Th"
  },
  {
    "title": "/optimize - Performance and Efficiency",
    "description": "Use /optimize to detect and fix performance bottlenecks with measurable before-and-after metrics and automatic rollback safety.",
    "tags": [
      "ai",
      "cagents",
      "claude",
      "optimize",
      "performance",
      "metrics"
    ],
    "slug": "AI/cagents-optimize",
    "category": "knowledge_base",
    "route": "/kb/AI/cagents-optimize",
    "contentSnippet": "This is Part 6 of a 10-part series on cAgents. Previous: /org - Cross-Domain Orchestration | Next: /debug - Systematic Debugging You've built the thing. It works. Then you check the Lighthouse score a"
  },
  {
    "title": "/org - Cross-Domain Orchestration",
    "description": "Use /org to coordinate work across multiple business domains - engineering, marketing, sales, support - with C-suite agents that plan and delegate like a real organization.",
    "tags": [
      "ai",
      "cagents",
      "claude",
      "org",
      "orchestration",
      "strategy",
      "cross-domain"
    ],
    "slug": "AI/cagents-org",
    "category": "knowledge_base",
    "route": "/kb/AI/cagents-org",
    "contentSnippet": "This is Part 5 of a 10-part series on cAgents. Previous: /team - Parallel Multi-Agent Execution | Next: /optimize - Performance and Efficiency Most tasks live in one domain. You're building a feature "
  },
  {
    "title": "/review - Quality Review",
    "description": "Use /review to run parallel specialist agents that audit your code, content, or infrastructure for quality, security, and consistency - with optional auto-fix.",
    "tags": [
      "ai",
      "cagents",
      "claude",
      "review",
      "quality",
      "audit"
    ],
    "slug": "AI/cagents-review",
    "category": "knowledge_base",
    "route": "/kb/AI/cagents-review",
    "contentSnippet": "This is Part 8 of a 10-part series on cAgents. Previous: /debug - Systematic Debugging | Next: Sessions - Under the Hood You've built the thing. Debugged the hard parts. Optimized what needed optimizi"
  },
  {
    "title": "/run - Execute Tasks with Agents",
    "description": "Use /run to hand off any single task to a coordinated team of AI agents that plan, execute, and validate the work automatically.",
    "tags": [
      "ai",
      "cagents",
      "claude",
      "run",
      "execution",
      "workflow"
    ],
    "slug": "AI/cagents-run",
    "category": "knowledge_base",
    "route": "/kb/AI/cagents-run",
    "contentSnippet": "This is Part 3 of a 10-part series on cAgents. Previous: /designer - Design Before You Build | Next: /team - Parallel Multi-Agent Execution is the workhorse. Give it a task - implement this feature, w"
  },
  {
    "title": "Sessions - Under the Hood",
    "description": "How cAgents tracks every pipeline run - the session directory, YAML schemas, state machines, and resumption that make multi-agent coordination reliable.",
    "tags": [
      "ai",
      "cagents",
      "claude",
      "sessions",
      "internals"
    ],
    "slug": "AI/cagents-sessions",
    "category": "knowledge_base",
    "route": "/kb/AI/cagents-sessions",
    "contentSnippet": "This is Part 9 of a 10-part series on cAgents. Previous: /review - Quality Review | Next: Hooks - The Event System The first eight articles showed what each command does. This one shows what happens o"
  },
  {
    "title": "/team - Parallel Multi-Agent Execution",
    "description": "Use /team to run multiple independent tasks simultaneously with wave-based quality gates - like having a whole team working in parallel.",
    "tags": [
      "ai",
      "cagents",
      "claude",
      "team",
      "parallel",
      "waves"
    ],
    "slug": "AI/cagents-team",
    "category": "knowledge_base",
    "route": "/kb/AI/cagents-team",
    "contentSnippet": "This is Part 4 of a 10-part series on cAgents. Previous: /run - Execute Tasks with Agents | Next: /org - Cross-Domain Orchestration You've got three pages to build, four blog posts to write, or five t"
  },
  {
    "title": "Email overview and authentication",
    "description": "Understanding email authentication including SPF, DKIM, and DMARC for secure email delivery",
    "tags": [
      "email",
      "security",
      "spf",
      "dkim",
      "dmarc"
    ],
    "slug": "Email",
    "category": "knowledge_base",
    "route": "/kb/Email",
    "contentSnippet": "Email overview and authentication This is a primer on the core components of email authentication, with a sequence diagram illustrating how email validation works. Email authentication Email authentic"
  },
  {
    "title": "Configuring HTTPS with a reverse proxy using pfSense",
    "description": "Complete guide to configuring HTTPS using pfSense with HAProxy reverse proxy and Let's Encrypt certificates",
    "tags": [
      "proxy",
      "https",
      "ssl",
      "web-hosting",
      "websites",
      "pfsense",
      "haproxy",
      "letsencrypt",
      "dns"
    ],
    "slug": "web_hosting/configure-https-with-a-reverse-proxy-using-pfsense",
    "category": "knowledge_base",
    "route": "/kb/web_hosting/configure-https-with-a-reverse-proxy-using-pfsense",
    "contentSnippet": "Introduction Most HTTPS guides cover one piece of the puzzle, and the rest are 20-minute YouTube videos. I wrote this because I needed documentation that covered the whole thing in one place. Friends "
  },
  {
    "title": "About me",
    "description": "Homepage & About Me",
    "tags": [
      "About",
      "Caelan"
    ],
    "slug": "",
    "category": "about",
    "route": "/",
    "contentSnippet": "Hello! <img align=\"right\" src=\"/attachments/caelan_portrait.webp\" alt=\"Caelan Drayer portrait\" width=\"200\" height=\"300\"> Nice to see you here. I am Caelan, a technology professional based in Vancouver"
  }
]