A reimagined WordPress admin experience. Fast, focused and beautiful.
Minn Admin serves a modern, minimal dashboard at /minn-admin/ on your WordPress site. It's a
single-page app built on the WordPress REST API with no React, no build step, and one
vanilla-JS file. It lives alongside the classic wp-admin, which stays fully available.
- Overview — stat cards, a real Traffic chart with hover details when an analytics plugin is installed (Koko Analytics, WP Statistics, Burst, Independent Analytics, AnalyticsWP, or Google Analytics through Site Kit), and a recent-activity feed
- Content — posts, pages and custom post types sorted by publish date (scheduled posts lead with their go-out dates), with search, category/tag filters, status pills, bulk actions (set status or trash, with shift-click range select), and row actions: right-click or hover for quick publish/draft/trash, view, and a block-editor escape
- Media — grid/list library, uploads, drag-and-drop, a preview overlay with arrow-key navigation and in-place title, alt text, caption & description editing, bulk select and delete (shift-range, on the grid and the list), a right-click menu, and a built-in image editor: rotate and crop, saved as a new copy with originals untouched
- Comments — full moderation (pending / approved / spam / trash) with bulk moderation (each tab offers its own verbs), inline replies and a right-click menu for the same verbs
- Orders — WooCommerce orders with summary cards, line-item detail, status changes, and invoice / packing-slip downloads when PDF Invoices & Packing Slips is active
- Users — directory with search, a role filter, create/edit users, roles, passwords, bulk role change, per-user login sessions with one-click sign-out, and Switch to this user when the User Switching plugin is active
- AI Access — generate revocable application passwords for AI agents plus a site-tailored agent guide (markdown REST reference) to hand to a coding agent; configuration work stays out of Minn by design
- Extensions — install plugins and themes from WordPress.org or zip upload, activate, deactivate, delete, per-item and bulk updates, a Themes tab with screenshots, and cards wearing real wp.org icons (linked to the directory) with linked author lines
- Structure — post types, taxonomies and terms on one page. See every registered post type and taxonomy and manage definitions through whoever owns them (ACF, Custom Post Type UI, or Minn's own store when neither is active; code-registered ones shown read-only), and a full terms manager: rename, re-parent, merge (posts move to the survivor through core's own reassignment) and delete across every taxonomy, with an indented tree for hierarchical ones
- Settings — reorganized by intent: Site (identity, locale, admin, with timezone picker),
Visibility (search engines, maintenance mode, membership), Homepage, Content
(new-content defaults + permalinks with automatic rewrite flushing), Comments (discussion +
spam) and Design (the Customizer's Additional CSS, validated before saving), under a sticky
section nav. The Spam page shows who filters comment spam (Akismet, Antispam Bee,
CleanTalk, WP Armour) with safe toggles and blocked counts. Site-visibility warnings: an
Overview banner and a persistent topbar chip appear whenever a maintenance plugin, password
gate or "discourage search engines" is hiding the site, with inline fix controls where Minn
can safely flip the setting (third parties register via
minn_admin_visibility_providers) - Editor — a calm, block-aware writing surface that stores native Gutenberg markup
(zero lock-in: open any post in the block editor, any time). Markdown typing conventions
(
**bold**,`code`,## headings, lists, quotes, fences, dividers…), a link popover on ⌘K, text alignment, table & image controls in island-style cutouts, complex blocks preserved byte-for-byte as configurable islands with real front-end styles (and full height; previews no longer clip tall grids). Slash commands stay curated and type-to-filter; Browse all or ⌘/ opens the block picker, grouped by source (basics, plugin blocks, design libraries, patterns). Dynamic third-party blocks that render standalone auto-appear in search (no adapter); Stackable, Kadence, and GenerateBlocks free design/pattern libraries insert as valid Gutenberg markup with images sideloaded; block patterns from core, the theme, and plugins join the same search. Island content is editable: text runs and an Images section rewrite only what you change; block settings scale (used fields first, the rest behind More settings); every island links out to the block editor for layout controls. Previews pick up lazy CSS and auto-warm browser-compiled styles when needed. Syntax-highlighted code blocks, word count · reading time, scheduling and one-click publish. Paste cleanup turns Word / Google Docs / web HTML into the safe subset; paste or drag an image uploads at the caret with an inline caption. The publish sidebar edits the slug, visibility (public / password / private), per-post discussion, sticky and post format (when the theme supports formats). Deleting an embed offers an Undo toast; table add/delete row and column undo with ⌘Z. Revision diffs open a side-by-side, word-marked diff against the current content. An outline panel lists headings as a live table of contents; focus mode (⌘⇧D) fades all but the current paragraph; outline mode (⌘⇧O) leaves just the writing and the outline. The internal link picker searches your own posts from the link popover, and a themed date-time picker handles scheduling. Find & replace (⌘⇧F) matches across inline formatting, never touches protected islands, and every replace is a native undo step. ⌘⏎ publishes; the help dialog documents every shortcut. Where this is heading: the editor roadmap - Never lose work — post locking on WordPress's own
_edit_lock(Minn, the classic editor and Gutenberg all honor each other, with takeover), plus a localStorage crash net that snapshots every edit within ~1.2s (before the first autosave) and offers recovery on the next open. Status-aware autosave: drafts save in place, published posts back up to revisions (only Update goes live), with a backup-restore banner. - Page builders — build a page with Divi, Elementor, Brizy, Beaver Builder, Etch, Bricks
or WPBakery and keep managing it from Minn: builder-owned pages are marked, edited through
the builder's own chrome-free surface via Edit in ⟨builder⟩ (no wp-admin screen), and
fenced so a stray Minn edit can't break the builder's canvas. + New can start a page in any
active builder. Third parties register via the
minn_admin_page_buildersfilter - System — a developer diagnostics page with a sticky section jump bar: a health strip
over WordPress / PHP / database / server facts, plus loopback and REST self-checks, site
visibility, Wordfence firewall & scan posture, SSL enforcement (Really Simple SSL),
backups and licenses; the autoloaded-options breakdown and cron health expand into
full-detail modals (every option by size, every scheduled event with its next run); the real
login URL (honoring login-hiders), an installed extensions manifest, a Tools card
linking wp-admin's one-shot jobs (Site Health, export/import, GDPR tools), live debug
toggles that safely rewrite
wp-config.php, a clickable debug-log viewer, and one-click Copy report as markdown - Licenses — every paid plugin and theme on one System card, classified valid / expired /
invalid / missing from the vendor's own locally stored state (read-only: no network calls,
no seat burn), with paste-to-activate, deactivate and re-verify wired through each
vendor's own code for more than twenty vendors (Elementor Pro, ACF PRO, WP Rocket, Gravity
Forms & SMTP, Divi, Beaver Builder, Brizy, Etch, Bricks, The Events Calendar family, Kadence
Blocks Pro, WPMU DEV, SearchWP, Gravity Perks, GP Premium, Perfmatters, WP All Import/Export,
Slider Revolution, LayerSlider), plus generic Freemius / EDD / SureCart / StellarWP detection.
A pasted key rides one request and is never stored or logged; failures never auto-retry;
inactive components can be turned back on in place. Third parties register via
minn_admin_license_providers - SEO panel — Yoast SEO, Rank Math, All in One SEO, SEOPress or SiteSEO title, meta description and focus keyword in the editor sidebar (first active plugin wins)
- Menus & Widgets — classic nav menus with drag-to-reorder (children travel with their parent); classic sidebars with drag grips to reorder widgets in an area, plus move between areas and in-place edit for block/text/HTML widgets
- Surfaces — Minn's answer to plugin sprawl: one sidebar item per job, not per plugin, with every capable plugin layered in behind it and a provider switcher when more than one is active. Forms (Gravity Forms, Fluent Forms, Elementor Pro, Contact Form 7 via Flamingo or CFDB7) shows entries as contact cards with real field labels and ←/→ stepping; Email Log (Gravity SMTP, FluentSMTP, WP Mail SMTP, Post SMTP) shows sent mail with HTML previews and resend; Activity Log (Simple History, WP Activity Log, Aryo, Stream, Wordfence login security) reads like an audit feed; Redirects (Redirection, Safe Redirect Manager, Simple 301 Redirects, 301 Redirects) lists, searches, creates and edits; Snippets (Code Snippets, WPCode, FluentSnippets) lists, toggles and edits; Backups (UpdraftPlus, Disembark) below. The sidebar organizes into Workspace / Tools / Manage groups so daily inboxes stay separate from site plumbing
- Backups — with UpdraftPlus: every backup set listed, a System health check answering
"is my site backed up?", and Back up site now from ⌘K through UpdraftPlus's own
background machinery. With Disembark: a status card (last scan, database size, working
files), the exact
disembark connectcommand click-to-copy, scan sessions with cleanup, and token regeneration - Notifications that respect you — comments, plugin/theme/core updates and new users in one panel, plus an admin-notice digest: the notices other plugins print in wp-admin are extracted as structured data (never their HTML or JavaScript) into a Notices tab, their action links run in the background, and any notice can be hidden with Undo. The Updates tab pins Update everything: plugins, themes and core in one click, with poll-verified core completion. A pending WordPress update also shows as an amber topbar chip and Overview banner
- Command palette — ⌘K / Ctrl-K everywhere, with site-care actions built in: Clear site cache purges every layer the site runs (Kinsta, LiteSpeed, WP Super Cache, W3TC, WP Rocket, WP Fastest Cache, SiteGround, Autoptimize, WP-Optimize, Cache Enabler, Hummingbird, Elementor CSS), each in its own isolated request
- Extending — one-filter APIs for any plugin to register views (with status cards, tabs, detail layouts and actions), editor panels, traffic data, cache purgers, spam providers, license providers, visibility providers, design libraries, page builders or block-inspector forms; the System page's Integrations card shows everything registered and flags descriptor problems instead of failing silently. The full coverage map lives in docs/plugin-support.md
- Dark & light themes (follows your OS setting until you choose), bundled fonts, zero external requests from the app, responsive down to phones
- Download or clone into
wp-content/plugins/minn-admin. - Activate through the Plugins screen.
- Visit
/minn-admin/. It's also linked from the admin bar and the wp-admin menu.
Pretty permalinks recommended (clean routes like /minn-admin/content); without them the app
falls back to /?minn_admin=1 with hash routing. Updates are delivered through the normal
WordPress updates UI via GitHub Releases.
Any plugin can add a view to Minn with one filter: a declarative descriptor, no JavaScript required. See docs/for-plugin-authors.md, and docs/extension-api.md for the design rationale.
- Project goals
- Editor direction
- Editor roadmap
- Block inspector
- Block-suite lab notes
- For plugin authors
- Changelog
Edit and go. There's no build step. Lint with node --check assets/js/app.js and
php -l minn-admin.php. Commit messages follow Emoji-Log.
