Skip to main content

Admin interface overview

After signing in, the admin opens on the dashboard with a permanent sidebar on the left, a topbar at the top, and the active page filling the rest. Everything else flows from there.

Layout

┌─────────────────────────────────────────────────────────────────┐
│ [Topbar] 🌐 EN [email protected] ⚙ │
├──────────────────┬──────────────────────────────────────────────┤
│ │ │
│ ☰ Logo │ │
│ │ │
│ 📊 Dashboard │ │
│ 📝 Posts │ Active page │
│ 📄 Pages │ renders here │
│ 🏷️ Taxonomies │ │
│ 🖼️ Media │ │
│ 🎨 Themes │ │
│ 🎭 Plugins │ │
│ 📑 Menus │ │
│ 👥 Users │ │
│ ⚙️ Settings │ │
│ │ │
│ ☀️/🌙 │ │
│ 🚪 Sign out │ │
│ │ │
└──────────────────┴──────────────────────────────────────────────┘

On mobile, the sidebar collapses into a slide-out drawer triggered by a hamburger button in the topbar.

The sidebar is the primary navigation. Sections in order:

IconLabelWhat's therePage
📊DashboardSite stats, plugin-contributed cardsDashboard
📝PostsList + edit of your postsPosts
📄PagesList + edit of static pagesPages
🏷️Categories & TagsTerm management for both taxonomiesCategories and tags
🖼️MediaMedia library — upload, browse, delete imagesMedia library
🎨ThemesTheme switcher + sync assetsThemes
🎭Theme settingsPer-theme settings page (only shown when active theme has one)Theme settings
🔌PluginsList + enable/disable + install/uninstall externalsPlugins
📑MenusHeader + footer menu builderMenus
👥UsersAdmin only — manage user accountsUsers and roles
⚙️SettingsSite title, language, performance, plugin/theme tabsSettings → General

Each menu entry highlights when you're on its route. The sidebar is sticky — scrolling the main content doesn't move it.

Topbar

The top of the screen always shows:

  • Page title on the left (matches the current section)
  • Locale switcher — pick the admin UI language (independent per user). See Language and theme.
  • Theme toggle ☀️/🌙 — switch dark / light mode (per browser, persisted in localStorage)
  • User menu — your email + a dropdown with profile and sign-out

On mobile, the topbar adds a hamburger button on the left to open the sidebar drawer.

Toasts

Any action that succeeds, fails, or needs attention surfaces a toast notification in the top-right corner. Toasts auto-dismiss after 3.5 s (info / success), 5 s (warn) or 6 s (error). You can hover to keep them visible, or click the × to dismiss immediately.

Common toasts:

  • "Saved" after editing a post / settings
  • "Published to /<category>/<slug>.html" after a publish
  • "Authentication failed. Check your Flexweg API key in Settings." if Flexweg returns 401
  • "Network error or CORS blocked. Check your connection." on transient failures

Toasts are emitted from any code path — service calls, event handlers, plugins. They're independent of the routed view, so navigating doesn't dismiss them.

Auto-save and live data

The admin uses live Firestore subscriptions for posts, pages, terms, media metadata, settings and users. That means:

  • Open the admin in two tabs → edit a post in tab 1, save → tab 2's list updates automatically without reload
  • Two editors saving the same post simultaneously: last-writer-wins. The admin doesn't currently lock posts during editing.
  • The dashboard's stat cards (post count, page count, online count, draft count) update in real time as content changes.

There's no auto-save during typing — you click Save draft or Publish explicitly. (Future versions may add periodic auto-save.)

Keyboard shortcuts

The post / page editor supports basic Tiptap keyboard shortcuts:

ShortcutAction
/Open the block inserter (FloatingMenu)
Cmd/Ctrl + BBold
Cmd/Ctrl + IItalic
Cmd/Ctrl + UUnderline
Cmd/Ctrl + KInsert link
Cmd/Ctrl + Z / Cmd/Ctrl + Shift + ZUndo / redo
Cmd/Ctrl + EnterSubmit form (where applicable)

Outside the editor, the admin uses native browser shortcuts (Tab to move focus, Enter to activate, Escape to close modals).

Errors and recovery

The admin wraps the entire UI in an error boundary that catches runtime errors and recovers automatically from common transient ones (e.g. React reconciliation race conditions caused by browser extensions). For unrecoverable errors, you see an error screen with the message — refresh the page to recover.

If Firebase auth fails or your session expires, you're redirected to the login page. Sign in again to resume.

Continue