Dashboard overview

The current operator routes and the boundary between dashboard UI and commerce operations.

The dashboard is the signed-in operator surface at /dashboard. Route files in app/dashboard/(admin)/platform/<route>/page.tsx import a screen from features/platform/<slice>. Models and custom mutations stay in features/keystone. The sidebar groups come from features/platform/lib/navigation.ts.

Platform pages

Route under /dashboard/platformSliceWhat operators do there
/orders, /orders/[id]ordersOrder list with status tabs; order detail with payments, fulfillment history, returns and claims
/orders/[id]/fulfillordersGet rates, buy labels and create fulfillments for unfulfilled lines
/orders/createordersBuild a cart for a customer and complete it as an order
/analyticsanalyticsSales, customer, product and cart reports by date range
/markets, /regions-managementregionsRegion list (both routes render the same screen)
/regionsregionsRegional settings with Regions, Countries and Currencies tabs
/countries, /currenciescountries, currenciesCountry and currency lists
/storestore-settingsStore name, logo SVG, logo color, homepage title and description
/products, /products/create, /products/[id]productsProducts, variants, options, prices, images and stock counts
/product-categories, /product-collectionsproduct-categories, product-collectionsCatalog organization
/inventoryinventoryInventory list. See the limitation below.
/usersusersCustomers and staff users
/business-account-requestsbusiness-account-requestsReview, approve or reject business account requests
/invoicesinvoicesBusiness accounts (the nav calls this "Business Accounts"), their line items and invoices
/discounts, /price-lists, /gift-cardssame namesPromotions and alternate prices
/shipping-optionsshipping-optionsCustomer-facing shipping options per region
/shipping-providers, /shippingshipping-providersShipping provider records (both routes render the same list)
/payment-providerspayment-providersPayment provider records and regions
/claimsclaimsClaim list and status
/appsappsOAuth apps: suspend, activate, edit redirect URIs, delete
/api-keysapi-keysCreate, edit and revoke of_ API keys with scopes and IP limits
/order-management-systemorder-management-systemOAuth install page used when an external order system requests access
/systemsystemTabs for settings, stores and payment providers

Lists without a dedicated page (for example Role, Team, TaxRate, WebhookEndpoint, Return, StockMovement) use the generic /dashboard/<list-key> pages, which follow each list's access rules.

Current limitations

  • /dashboard/platform/inventory queries an inventoryItems list that does not exist in the current schema, so it shows a load error. Stock is stored on ProductVariant.inventoryQuantity. The adjustInventory mutation writes a StockMovement, but no platform screen calls it.
  • The "Create draft order" button on /orders/create is a placeholder. It waits two seconds and shows a success message without saving anything.
  • The order-level "new shipping provider" form and the "Custom Provider" option in the provider drawer do not set working adapter fields. See Shipping providers.

Setup order

  1. Create the first user at /dashboard/init.
  2. Run onboarding on an empty database.
  3. Check store, region, currency, country and price relationships.
  4. Review products and stock.
  5. Configure only the providers you can test end to end.
  6. Run cart, checkout, order, fulfillment and refund once end to end.

Customization

Change screens inside the relevant features/platform/<slice> and keep route files thin. If you build a separate dashboard, keep using the same session or bearer token, and call the named lifecycle mutations (createOrderFulfillment, transitionOrderStatus, processReturnRefund and others) instead of editing status fields directly.

On this page