You’ve run the npm create emdash@latestcodecodecodecode command. You’ve seen the wizard. Blog, portfolio, marketing site. Three options, presented like a choose-your-own-adventure for developers who already know what they’re doing.
But here’s what the documentation doesn’t tell you. The template you pick at install time isn’t just a skin swap. It changes the content model, the default plugins, the theme architecture, and — critically — the migration path if you’re coming from WordPress.
The template you pick at install time isn't just a skin swap.
Let’s skip the obvious. No “blog is for writers, portfolio is for creatives” hand-waving. Instead, here’s what each template actually commits you to, architecturally speaking.
The Blog Template: Content Collections First
When you select blog, EmDash configures its content schema around two post types: postscodecodecodecode and pagescodecodecodecode. That’s it. No custom content types out of the box. The template ships with a single-column layout, a sidebar widget area for the primary navigation, and SEO metadata fields pre-attached to every post.
What matters for the experienced developer: the blog template uses Astro’s content collections under the hood. Your posts live as structured JSON (portable text, not HTML). This means you can query them via the built-in API without parsing markup — something AI agents and headless consumers handle natively.
The blog template also enables comments with AI moderation by default. If you’re migrating a high-traffic WordPress blog, check whether the moderation rules match your existing workflow. They don’t. You’ll need to configure those manually.
The Portfolio Template: Projects as First-Class Citizens
The portfolio template introduces a third content type: projectscodecodecodecode. Each project has client name, year, a link field, and a rich text body. The default theme renders these as a grid with filtering by category or tag.
Here’s the non-obvious part. The portfolio template ships with a contact form plugin pre-installed. That plugin is a sandboxed dynamic worker — it requests read contentcodecodecodecode and send emailcodecodecodecode capabilities in its manifest. It cannot touch your database or your media library. If you’re used to form plugins that store submissions as custom post types in WordPress, you’ll need to rethink that pattern. In EmDash, form submissions are not content types. They’re ephemeral data handled by the plugin’s sandbox.
The portfolio template also enables bylinescodecodecodecode — a content metadata field for attributing work to specific authors or contributors. This is not a taxonomy. It’s a separate entity type. If your workflow requires complex author management (multiple roles, guest contributors, etc.), you’ll want to test this early.
The Marketing Site Template: Conversion-Ready Architecture
The marketing site template is the most opinionated of the three. It includes a sectionscodecodecodecode system — reusable blocks (header, about, sign-up, etc.) that you can compose into pages. Think of it as a lightweight theme builder, not a page builder. You don’t drag and drop. You select a section, configure its fields, and the Astro frontend renders it.
This template also ships with redirect management built-in. That’s a direct response to one of WordPress’s pain points — needing a plugin for 404 handling and redirects. In EmDash, it’s a core feature on the marketing template.
The marketing template uses the most Cloudflare-specific infrastructure. It assumes D1 for the database, R2 for media storage, and Workers for compute. Self-hosting this template on a plain Node.js server works, but you lose the edge caching and the sandboxed plugin execution. For a marketing site where uptime and speed matter, that tradeoff is worth thinking about.
What the Wizard Doesn’t Tell You
All three templates share a common base: the same admin UI, the same user role system (administrator, editor, author, contributor), the same passkey authentication, and the same built-in SEO fields. They also all support dark mode out of the box — but the default themes are minimal. You’re expected to customize them with Tailwind, TypeScript, and Astro components.
The real differentiator is the content model and the default plugins. If you pick the blog template and later realize you need a projects content type, you can add it via the admin panel. But that content type is stored in the database, not in code. If you’re doing infrastructure-as-code deploys, that’s a problem. The marketing template avoids this by using sections — but sections are also database-defined.
The Migration Angle
If you’re migrating from WordPress, the template choice affects the import. The blog template maps WordPress posts and pages cleanly. The portfolio template maps custom post types — but only if your WordPress export includes them. The marketing template imports content into sections, which is a structural conversion. Expect to spend time re-mapping fields.
Based on early reports from developers who tested the beta, the WordPress import handles Yoast SEO fields (title, description, image) and maps them to EmDash’s built-in SEO metadata. But anything in ACF, Jet Engine, or custom meta fields — that’s a manual job regardless of template.
The Verdict for Practitioners
Pick the blog template if you’re building a content-driven site with predictable structure and want the cleanest migration path from WordPress. Pick the portfolio template if you need projects as a distinct content type and want a contact form that’s sandboxed by default. Pick the marketing template if you’re building a conversion-focused site with reusable sections and need redirect management out of the box.
But know this: the template you choose is reversible. You can add content types, change themes, and install plugins later. The choice at install time is about time-to-first-deployment, not lifetime commitment.
Based on what most production-ready sites actually need — an e-commerce migration, a membership system, or complex form handling — none of the three templates are sufficient alone. They’re starting points. The real work begins after the wizard ends.
- What content types does the blog template support?The blog template supports two post types: posts and pages. It uses Astro's content collections with structured JSON.
- How does the portfolio template handle contact forms?The portfolio template ships with a sandboxed dynamic worker plugin that requests read content and send email capabilities. It cannot touch your database or media library.
- What is the marketing template's sections system?The marketing template includes a sections system with reusable blocks like header, about, and sign-up. These are database-defined, not a drag-and-drop page builder.
- Can you change templates after installation?Yes, the template choice is reversible. You can add content types, change themes, and install plugins later.