In early 2026, I migrated coelacanth.ch — my sailing blog documenting our voyages across the North Sea and Baltic — from WordPress to Astro. The migration took less than 24 hours.
The WordPress site had grown over four years. Posts with images, videos, and links. The kind of content that doesn’t export cleanly to anything. Claude Code handled the migration. The implementation broke down into:
- Content export (WordPress XML to MDX files with structured frontmatter: coordinates in nautical notation, weather, engine hours etc),
- Building custom Astro components (Lightbox, YouTube embeds),
- Design (including view transitions, image optimization cutting total asset size by 40%), and
- Refactoring.
The sea chart
Two months after the migration, we (that’s Claude and I) built something I’m genuinely proud of: a geo-referenced nautical chart component.
Each blog post has coordinates — the port or anchorage where the story takes place. The ChartMap component takes a cropped section of a North Atlantic chart, plots those positions with clickable markers, and overlays the actual GPS track from our navigation equipment.

No Leaflet. No Mapbox. No external map library at all. The implementation is pure math: Mercator projection for latitude, linear mapping for longitude, calibrated against reference points on the chart image. GPX tracks from our Raymarine plotter are parsed and simplified using the Ramer-Douglas-Peucker algorithm. The chart region is cropped at build time with Sharp and served as a static image with an SVG overlay — zero runtime JavaScript for the map itself.
The result: readers can see where a voyage went, click a marker to read about that port, and trace the track across the North Sea. It loads instantly because everything is pre-rendered. And it looks like a proper nautical chart, not a Google Maps embed, because it is a proper nautical chart.