Customizing the EmDash Admin Panel
The EmDash admin panel ships ready to use. You open it at /_emdash/admin, log in with your passkey, and you have a full CMS interface without configuring anything. But there's a meaningful set of things you can customize, and knowing where they live saves you a lot of hunting. This is a tour of what's adjustable, what the defaults are, and what's still on the roadmap.
Getting In: Passkey Authentication
The first time you navigate to /_emdash/admin on a fresh site, you're walked through a setup wizard that creates your admin account using a passkey — no password required. After that, every login is a biometric prompt or security key tap. There's no password to manage, no session cookie to worry about, and no login page that bots can hammer.
Passkey authentication means the admin panel doesn't have a login page in the traditional sense. There's nothing for an attacker to brute-force, no credentials to phish, and no session to hijack.
Admin Panel Sections at a Glance
Here's a map of every section in the admin panel, what it does, and whether it's customizable today:
| Section | What it does | Customizable? |
| Content | Create, edit, publish, and delete entries across all collections | Via schema (fields, collections) |
| Media | Upload, organize, and attach images and files | Storage backend (R2, local, S3) |
| Taxonomies | Manage categories and tags: create, edit, nest, reorder | Yes — add terms freely |
| Menus | Build and reorder navigation menus with a drag-and-drop UI | Yes — fully editable |
| Widgets | Assign widget blocks to named areas in your theme | Yes — areas defined in schema |
| Users | Invite and manage admin users, assign roles | Yes — roles and invites |
| Plugins | View installed plugins and their settings pages | Via plugin config |
| Settings | Site title, tagline, logo, favicon, timezone, and reading settings | Yes — fully editable |
Content Management
The content section is the heart of the admin panel. You'll see one entry in the sidebar navigation per collection defined in your schema. Click into a collection to see its entries, filter by status (draft, published, scheduled), and open any entry for editing. The Portable Text editor handles rich content including headings, lists, links, embedded blocks, and code.
Drafts and published versions are tracked separately. Editing a published entry creates a new draft; you publish when you're ready to push changes live. The revision history panel shows every published version with a timestamp, and you can restore any previous revision from there.
Site Settings
Under Settings, you'll find the fields your Astro templates pull from getSiteSettings(): site title, tagline, logo image, favicon, timezone, and reading settings like posts-per-page. These are global values that propagate through your templates anywhere you reference them. Changing the site title here updates every page title generated by EmDashHead automatically — no template edits needed.
Menu Builder
The menu builder lets you create and edit named navigation menus. You add items (links to internal pages, external URLs, or taxonomy terms), reorder them by dragging, and nest them to create dropdown structures. In your Astro templates, you pull a menu by name using getMenu("primary"). The menu names are defined in your seed schema — the admin panel lets editors populate and reorder them, but adding a new named menu area requires a schema update.
What You Can't Customize Yet
I want to be direct about the current limits. In EmDash v0.1, the admin panel theme and dashboard layout are not customizable. You can't rearrange the sidebar, change the color scheme, or add custom dashboard widgets. Plugin pages appear in a standardized layout. These are on the roadmap — plugins will eventually be able to contribute dashboard panels — but it's not there yet.
The admin is also English-only in v0.1. If you're running a multilingual site, your public-facing content can be in any language, but the admin interface itself is English. Localized admin UI is a future consideration.
Extending via Plugins
The most powerful way to customize the admin experience is through plugins. EmDash plugins can contribute custom admin pages — these appear as additional items in the admin sidebar under the plugin's namespace. A plugin can add a full settings page, a data visualization panel, a translation management interface, or anything else that makes sense for your workflow. Plugin admin pages are React components rendered in the same admin shell, so they look native to the admin panel.
If you need something the built-in admin doesn't provide, building a plugin is the right path. The plugin system is well-documented and the admin contribution API is stable in v0.1.
Build Your First EmDash Site