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/platform | Slice | What operators do there |
|---|---|---|
/orders, /orders/[id] | orders | Order list with status tabs; order detail with payments, fulfillment history, returns and claims |
/orders/[id]/fulfill | orders | Get rates, buy labels and create fulfillments for unfulfilled lines |
/orders/create | orders | Build a cart for a customer and complete it as an order |
/analytics | analytics | Sales, customer, product and cart reports by date range |
/markets, /regions-management | regions | Region list (both routes render the same screen) |
/regions | regions | Regional settings with Regions, Countries and Currencies tabs |
/countries, /currencies | countries, currencies | Country and currency lists |
/store | store-settings | Store name, logo SVG, logo color, homepage title and description |
/products, /products/create, /products/[id] | products | Products, variants, options, prices, images and stock counts |
/product-categories, /product-collections | product-categories, product-collections | Catalog organization |
/inventory | inventory | Inventory list. See the limitation below. |
/users | users | Customers and staff users |
/business-account-requests | business-account-requests | Review, approve or reject business account requests |
/invoices | invoices | Business accounts (the nav calls this "Business Accounts"), their line items and invoices |
/discounts, /price-lists, /gift-cards | same names | Promotions and alternate prices |
/shipping-options | shipping-options | Customer-facing shipping options per region |
/shipping-providers, /shipping | shipping-providers | Shipping provider records (both routes render the same list) |
/payment-providers | payment-providers | Payment provider records and regions |
/claims | claims | Claim list and status |
/apps | apps | OAuth apps: suspend, activate, edit redirect URIs, delete |
/api-keys | api-keys | Create, edit and revoke of_ API keys with scopes and IP limits |
/order-management-system | order-management-system | OAuth install page used when an external order system requests access |
/system | system | Tabs 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/inventoryqueries aninventoryItemslist that does not exist in the current schema, so it shows a load error. Stock is stored onProductVariant.inventoryQuantity. TheadjustInventorymutation writes aStockMovement, but no platform screen calls it.- The "Create draft order" button on
/orders/createis 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
- Create the first user at
/dashboard/init. - Run onboarding on an empty database.
- Check store, region, currency, country and price relationships.
- Review products and stock.
- Configure only the providers you can test end to end.
- 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.