# Essential Code > Micro web agency for headless website migrations. We move websites from legacy CMS platforms (WordPress, Drupal, TYPO3) to modern headless setups and stay accountable for them after launch. Every page is available as raw Markdown. Request the HTML URL with `Accept: text/markdown`, or append `.md` to the path (e.g. `/about.md`, `/services/headless-audit.md`, `/blog/slug.md`). Agent Skills index: [https://www.essentialcode.eu/.well-known/agent-skills/index.json](https://www.essentialcode.eu/.well-known/agent-skills/index.json) ## Core Services - [Headless Audit](https://www.essentialcode.eu/services/headless-audit): Technical audit of your current website setup with a clear migration recommendation. Fixed price. - [AI Marketing Stack Readiness Check](https://www.essentialcode.eu/services/ai-readiness-check): A scored report on whether your content model and governance are ready for agents to operate. Five dimensions, rated and evidenced, delivered in one week. Fixed price. - [AI Visibility Audit](https://www.essentialcode.eu/services/ai-visibility-audit): A scored audit of whether AI answer engines like ChatGPT, Perplexity, and Google AI Overviews can reach, understand, and cite your site, with the fixes. Delivered in one week. Fixed price. - [Headless Website](https://www.essentialcode.eu/services/headless-website): New website built on a headless CMS with a modern frontend framework. - [Headless Migration](https://www.essentialcode.eu/services/headless-migration): Migration from WordPress, Drupal, or TYPO3 to a headless architecture. SEO preserved, performance improved. - [Agentic Marketing Automation](https://www.essentialcode.eu/services/agentic-marketing-automation): A governed AI control room over your headless CMS, so your marketing team builds and publishes pages by chatting with an agent, with a human approving every publish. - [Fractional Marketing Engineer](https://www.essentialcode.eu/services/fractional-marketing-engineer): One senior engineer for your marketing team's website work, AI tooling, and integrations, on a monthly subscription. - [White-Label Web Development](https://www.essentialcode.eu/services/white-label-web-development): Technical partner for design agencies. We build, they keep the client relationship. - [ERPNext E-Commerce Integration](https://www.essentialcode.eu/services/erpnext-ecommerce-integration): A headless storefront on top of ERPNext, so the marketing team controls the frontend without touching the ERP backend. - [Odoo E-Commerce Integration](https://www.essentialcode.eu/services/odoo-ecommerce-integration): A headless storefront connected to Odoo, replacing the built-in webshop and QWeb templates with full frontend control. - [Business Central E-Commerce Integration](https://www.essentialcode.eu/services/business-central-ecommerce-integration): A headless storefront that syncs directly with Business Central, no Shopify in between and no third-party connectors. ## Migrations by platform - [WordPress to headless](https://www.essentialcode.eu/migrations/wordpress-to-headless): Plugin sprawl gone, page-builder lock-in dropped, every URL mapped with a full redirect plan. - [Webflow to headless](https://www.essentialcode.eu/migrations/webflow-to-headless): Pixel-accurate rebuild in code, CMS Collections moved into a real content system, the visual-editor ceiling removed. - [Drupal to headless](https://www.essentialcode.eu/migrations/drupal-to-headless): Paragraph sprawl normalized, Views replaced by API queries, multi-site setups consolidated or split cleanly. - [TYPO3 to headless](https://www.essentialcode.eu/migrations/typo3-to-headless): TypoScript and Fluid retired, the backend swapped for a real CMS, multilingual content carried over with hreflang. - [Umbraco to headless](https://www.essentialcode.eu/migrations/umbraco-to-headless): Document Type sprawl normalized, the backoffice replaced, the Windows and SQL Server bill off your books. - [Sitecore to headless](https://www.essentialcode.eu/migrations/sitecore-to-headless): Templates and renderings normalized, the Content Editor gone, license and infrastructure costs cut. - [Kentico to headless](https://www.essentialcode.eu/migrations/kentico-to-headless): Page Type sprawl normalized, the Pages app retired, unused EMS features taken off the bill. - [Squarespace to headless](https://www.essentialcode.eu/migrations/squarespace-to-headless): Templates and blocks turned into real components, performance fixed, every URL preserved. - [Wix to headless](https://www.essentialcode.eu/migrations/wix-to-headless): The drag-and-drop ceiling removed, Velo code rebuilt as real components, performance fixed. - [Contentful to DatoCMS or Storyblok](https://www.essentialcode.eu/migrations/from-contentful): A headless-to-headless move scoped against your renewal date, with the frontend code rewrite included. ## Blog Posts - [Our homepage scores 100 on accessibility. It was still failing Level A.](https://www.essentialcode.eu/blog/accessibility-score-100-still-failing-level-a/): Five accessibility scanners, the rule source of each one read line by line, and what they actually detect for moving content. Plus the five-minute check and the 30-minute manual pass that cover what they miss. - [The Shared AI Setup That Makes Multi-Market Content Work](https://www.essentialcode.eu/blog/shared-ai-setup-multi-market-content/): Putting AI on multi-market content one seat at a time gives you five different qualities of page. A shared setup, one content model, one brand rulebook, prompts that carry the constraints, and agent-assisted review with a human sign-off, is what makes six languages ship at one quality. - [What we do not let an AI agent do in a client's CMS](https://www.essentialcode.eu/blog/what-we-do-not-let-an-ai-agent-do-in-a-clients-cms/): Our three hard lines for an AI agent in a client's CMS, the principle behind them, and why guardrails are the easy part of running AI in a marketing team. - [The AI Control Center for Marketing Teams (and Why It Runs on Your CMS)](https://www.essentialcode.eu/blog/ai-control-center-marketing-teams/): Every tool grew an AI feature this year. What marketing teams need is a control center to run their AI, and it only works when built on a structured CMS. - [Astro 7 Breaking Changes: What to Check Before You Upgrade](https://www.essentialcode.eu/blog/astro-7-marketing-site/): Astro 7's breaking changes are real, but cheap to fix on a clean foundation. We upgraded three production sites with zero breakages and builds nearly 3x faster. - [Content QA Pipelines: Catching the Boring Failures Before They Ship](https://www.essentialcode.eu/blog/content-qa-pipelines-before-you-ship/): AI made production cheap. Now content QA is the bottleneck. Here is the split: which pre-publish checks belong to a machine, and which need a human. - [Headless CMS Migration: What It Is and What Breaks](https://www.essentialcode.eu/blog/headless-cms-migration-guide/): A headless migration moves the system underneath your site while it stays live. What changes, what it costs, how long it takes, and where it goes wrong. - [AI Internal Linking: How to Run a Linking Agent Without Wrecking Your SEO](https://www.essentialcode.eu/blog/internal-linking-at-scale-ai-assisted-seo/): An AI internal linking agent can crawl your library, find the orphans, and write the anchors. Here is the checklist it runs, the limits a person sets before it runs, and the decisions it has to hand back. - [Content Reuse Across Channels and Markets: One Model, Many Outputs](https://www.essentialcode.eu/blog/content-reuse-channels-and-markets/): The same content retyped for every channel and every market is the everyday tax of page-bound content. One typed model removes it. - [Salesforce Bought Contentful. What It Means for Your CMS.](https://www.essentialcode.eu/blog/contentful-salesforce-acquisition/): On June 1, 2026, Salesforce signed a deal to acquire Contentful. Here is what actually changes for existing customers, what does not, and how to think about your next renewal. - [Why Strict Data Models Make Editors Faster: Notes From a Live Launch](https://www.essentialcode.eu/blog/strict-data-models-make-editors-faster/): How a current event-platform launch with 50 speakers and 50 events in two languages got entered ahead of schedule, and why a strict CMS data model is the reason. - [DatoCMS MCP Server: Setup, Tools, and Real Workflows](https://www.essentialcode.eu/blog/control-datocms-from-claude-code/): The DatoCMS MCP server lets AI agents read and edit your content through sandboxed, type-checked scripts. How to set it up, what it does well, and where it breaks down. - [Your website has two audiences now. Most agencies build for one.](https://www.essentialcode.eu/blog/websites-two-audiences-agentic-web/): One is your team using AI tools to work faster. The other is the AI agents visiting your site. Agencies still building for neither are a problem. - [Your Blog Should Also Be a Markdown File](https://www.essentialcode.eu/blog/serve-your-blog-as-markdown-for-ai-crawlers/): Giving every blog post a clean Markdown copy helps humans who paste into Claude or ChatGPT, and may help AI crawlers too. Here is how to wire it up in Astro. - [WordPress Plugin Supply Chain Attack: Is Your Site Still Compromised?](https://www.essentialcode.eu/blog/wordpress-plugin-supply-chain-attack/): The forced WordPress.org update neutralized the plugin backdoor but left wp-config.php untouched. Here is how to check your own site. - [Translation Workflows That Don't Break Your CMS](https://www.essentialcode.eu/blog/translation-workflows-that-dont-break-your-cms/): Most translation workflows treat content like a document. A headless CMS treats it as structured data. The mismatch breaks formatting and lets content drift. - [The Web Industry Has a Trust Problem](https://www.essentialcode.eu/blog/the-web-industry-has-a-trust-problem/): Web development has no entry barrier and no proof of competence. That is fine for the industry. It is expensive for the buyer. - [Control Storyblok From Claude Code](https://www.essentialcode.eu/blog/control-storyblok-from-claude-code/): How to wire Claude Code into Storyblok so marketing teams can draft, edit, and publish without leaving their workflow. The MCP setup, the guardrails, and where it breaks down. - [What Your CMS Vendor Won't Tell You About Lock-In](https://www.essentialcode.eu/blog/cms-vendor-lock-in/): CMS lock-in costs companies thousands of hours and tens of thousands of euros before they even realize it. Here is how to spot it, measure it, and get out. - [What a Website Audit Actually Reveals](https://www.essentialcode.eu/blog/what-a-website-audit-reveals/): Most teams know something is wrong with their website. Few know exactly what. A structured audit turns gut feelings into a plan before a five-figure rebuild. - [Building a website is getting easier. Running one is not.](https://www.essentialcode.eu/blog/building-is-getting-easier-running-is-not/): AI tools can generate a landing page in minutes. But migrating a website without losing traffic or rankings is a different problem entirely. - [How to Launch a Website in a New Market Without Rebuilding Everything](https://www.essentialcode.eu/blog/launch-website-new-market/): Expanding into a new country should not mean rebuilding your website. With the right architecture, adding a market is a content task. - [What Happens in the First 30 Days After a Website Migration](https://www.essentialcode.eu/blog/first-30-days-after-website-migration/): The first 30 days after a migration determine whether you keep your traffic or spend a year recovering it. Here is what to watch. - [WordPress to Storyblok Migration: 10x Faster, 6 Markets](https://www.essentialcode.eu/blog/eversports-manager-wordpress-to-storyblok-migration/): The site is ten times faster and the marketing team now manages six languages independently. How Eversports moved from WordPress to Storyblok, page by page. - [Useful Unicode Characters for Content Editors](https://www.essentialcode.eu/blog/useful-unicode-characters-for-editors/): A practical reference of Unicode characters every content editor should know. Click to copy typographic quotes, dashes, special spaces, and more. - [CMS Translation Workflow: Why Most Multilingual Setups Fail](https://www.essentialcode.eu/blog/multilingual-content-at-scale/): Most CMS platforms were not built for translation at scale. A proper CMS translation workflow keeps content, translators, and publishing inside one system. - [AI Finally Killed Hourly Billing](https://www.essentialcode.eu/blog/ai-finally-killed-hourly-billing/): If your service provider is still billing by the hour in 2026, they have a problem. And so do you. AI compressed execution time. The pricing model broke. - [Why We Built a Framework for Website Migrations (And What It Actually Looks Like)](https://www.essentialcode.eu/blog/essential-launch-framework/): Six phases, three decision points, and a process designed to prevent the most common ways website projects go wrong. - [The Redirect Strategy That Preserves Your Traffic During a Website Migration](https://www.essentialcode.eu/blog/redirect-strategy-website-migration/): Redirect mapping is the most underestimated part of any website migration. Get it wrong and you lose years of SEO equity overnight. - [Core Web Vitals After Migration: Why Headless Sites Perform Better](https://www.essentialcode.eu/blog/core-web-vitals-headless-migration/): WordPress sites pass Core Web Vitals only 45% of the time on mobile. Headless sites routinely score 90+. The difference is architectural. - [What to Expect When You Work With a Micro Agency](https://www.essentialcode.eu/blog/what-to-expect-working-with-micro-agency/): No account managers. No status meetings that could have been an email. Here is how working with a micro agency actually works. - [Structured Content vs Structured Data: Why Typed Fields Make Schema Write Itself](https://www.essentialcode.eu/blog/structured-content-seo-ai-marketing/): Structured content and structured data are not the same thing. Here is the clean line between them, and why typed CMS fields make schema.org markup correct by construction. - [Signs Your CMS Is Holding Your Marketing Team Back](https://www.essentialcode.eu/blog/signs-cms-holding-marketing-team-back/): If publishing a blog post takes longer than writing it, your CMS is the bottleneck. Here are the warning signs and what to do. - [Why Micro Agency Beats Big 'Do-Everything' Firms](https://www.essentialcode.eu/blog/why-micro-agencies-dont-need-do-it-all-overhead/): How micro agencies stay competitive by focusing on what they do best and partnering for the rest. Without the overhead of traditional agencies. - [LLMs.txt: A Practical Guide for Marketing Teams](https://www.essentialcode.eu/blog/llms-txt-a-practical-guide-for-marketing-teams/): What llms.txt is, why it matters for your website's visibility in AI-powered search, and how marketing teams can implement it today. - [White-Label Development: Technical Strength Without Your Own Dev Team](https://www.essentialcode.eu/blog/white-label-development-technical-strength-without-dev-team/): How white-label development partnerships let design agencies offer technical services without building an in-house development team. - [Why Your Beautiful New Website Will Be Outdated in 6 Months](https://www.essentialcode.eu/blog/why-your-beautiful-new-website-will-be-outdated-in-6-months/): Why websites age faster than you think and what you can do to build for longevity instead of just launch day. - [The Invisible Time Trap: Why CMS Editor Experience Determines Success](https://www.essentialcode.eu/blog/the-invisible-time-trap-why-editor-experience-matters/): How poor content editing experiences silently drain your team's time and why investing in editor experience pays for itself. - [Micro Agencies: The Middle Ground Between Agency and Freelancing](https://www.essentialcode.eu/blog/micro-agencies-between-agency-and-freelancer/): What micro agencies are, why they're growing, and how they combine the best qualities of freelancers and traditional agencies. - [From B2B Applications to Website Development: A Change in Perspective](https://www.essentialcode.eu/blog/from-b2b-applications-to-website-development-journey-of-rediscovery/): After running a B2B software agency for over a decade, I made an unexpected shift to modern web development. Here's what I learned. - [WordPress Alternative: When to Leave and What Replaces It](https://www.essentialcode.eu/blog/wordpress-alternative-modern-cms-systems/): The real WordPress alternative for a growing business is a different architecture rather than another theme. Here is when switching is worth it and what replaces it. - [Digital Offers: A Guide to Thorough Evaluation](https://www.essentialcode.eu/blog/digital-offers-guide/): How to evaluate software offers beyond feature lists. From understanding output vs. outcome to contract details and tech stack choices. - [The Essential Code Guide to Self-Service Portals](https://www.essentialcode.eu/blog/self-service-portal-guide/): A comprehensive guide to self-service portals for smaller companies. From needs analysis to implementation and measuring success. - [Your Digital Future: Investment or Cost Center?](https://www.essentialcode.eu/blog/digital-future-investment-or-cost-center/): Why your website budget should be framed as a strategic investment rather than an operational cost. And how to make the case internally. - [The 5-Step Plan for Choosing the Right CMS](https://www.essentialcode.eu/blog/5-step-plan-for-choosing-cms/): A structured approach to evaluating and selecting the right CMS. From understanding your team's workflows to making the final decision. - [Our Stack for Customer Portals and Authenticated Applications](https://www.essentialcode.eu/blog/customer-portals-nhost-hasura/): When a website needs a customer portal or anything behind a login, we build it on Nhost + Hasura. Here is how. ## About - [About Essential Code](https://www.essentialcode.eu/about): Deliberately small. Senior team. Full ownership of what we ship. - [Tech Stack](https://www.essentialcode.eu/tech-stack): The tools and platforms we build on. - [Contact](https://www.essentialcode.eu/contact): david@essentialcode.eu