Skip to content

Admin Panel

The Stoa Admin Panel is a single-page application for managing your store. It is built with SvelteKit 5 and Tailwind CSS, compiled into a static bundle, and embedded directly in the Stoa binary — no separate deployment needed.

Access: http://localhost:8080/admin

Sections

SectionDescription
DashboardKPI cards (orders, customers, products, revenue) and recent orders
ProductsProduct catalog with variants, pricing, images, categories, and tags
CategoriesHierarchical category tree with drag-and-drop positioning
PropertiesProperty groups and options for generating product variants
CustomersCustomer accounts with order history
OrdersOrder management with status workflow and payment transactions
MediaImage and file uploads with drag-and-drop
DiscountsPromotional codes (percentage or fixed), validity windows, usage limits
TagsProduct tags for flexible categorization
TaxesTax rules by country with rates in basis points
ShippingShipping methods with pricing and tax rules
PaymentsPayment method configuration (Stripe, PayPal, etc.)
Audit LogActivity log tracking all admin actions

Dark / Light Mode

The admin panel supports dark and light themes. The toggle is in the top-right header bar.

  • Default: Dark mode
  • Persistence: localStorage key stoa_admin_theme
  • Fallback: Respects prefers-color-scheme when no preference is stored

Internationalization

The interface is available in German (de-DE) and English (en-US). The language can be switched via the globe icon in the header.

  • Persistence: localStorage key stoa_admin_locale
  • Formatting: Locale-aware price and date formatting via $fmt.price() and $fmt.dateTime()

Responsive Layout

The admin panel adapts to all screen sizes.

  • Desktop: Collapsible sidebar (full width or icon-only), persistent via localStorage
  • Mobile: Sidebar hidden by default, accessible via hamburger menu with backdrop overlay
  • Tables: Switch to card layout on small screens

Search and Filtering

List pages provide search and filter functionality:

PageSearchFilters
OrdersOrder numberStatus
CustomersName, email
ProductsName, SKU
CategoriesClient-side filter
Property GroupsClient-side filter

Order Management

Orders follow a strict status workflow:

pending → confirmed → processing → shipped → delivered → refunded
    ↓           ↓            ↓
 cancelled  cancelled    cancelled

The order detail view shows:

  • Order info, status badge, and totals
  • Shipping and billing addresses
  • Line items table
  • Payment transactions with status, amount, provider reference, and timestamp
  • Guest Session ID for guest orders — copyable with one click for payment provider reconciliation

See Orders Guide for details.

Plugin Extensions

Plugins can extend the admin panel UI at predefined slots:

SlotLocation
admin:payment:settingsPayment method configuration page
admin:order:paymentOrder detail, below payment transactions
admin:sidebarBottom of the sidebar navigation
admin:dashboard:widgetDashboard page

Plugins provide UI extensions in two ways:

  • Schema-based forms — declarative field definitions (text, toggle, select, etc.) rendered automatically
  • Web Components — custom HTML elements loaded from plugin assets for complex UIs

See UI Extensions for implementation details.

Authentication

Admin access requires a JWT token obtained via the login page. Tokens are stored in localStorage:

KeyPurpose
stoa_access_tokenShort-lived access token
stoa_refresh_tokenLong-lived refresh token

Unauthenticated users are redirected to /admin/login.

Product Import

Products can be imported in bulk via the import dialog:

  • CSV Import — Upload a CSV file with product rows. Variant rows follow the parent product row with an empty SKU column.
  • JSON Import — Paste a JSON array of product objects following the CreateProductRequest schema.

Both formats support variants, translations, categories, and tags.

Technical Details

FrameworkSvelteKit 5 (Svelte 5 runes)
StylingTailwind CSS with CSS custom properties
Iconslucide-svelte
ModeSPA (ssr: false, adapter-static)
Build outputEmbedded in Go binary at internal/admin/build/
Dev servermake admin-dev → Vite on :5173, proxies API to :8080

Released under the APACHE 2.0 License.