Skip to the article
Aniq-UI

E-CommerceThe admin dashboard

The admin dashboard

What the back office does: products, categories, orders, customers, the homepage, staff, roles and permissions, settings and notifications.

For the Full Stack package

Pages

Every page exists in English under /en and in Arabic under /ar. The dashboard opens at /en/dashboard, after the sign-in at /en/auth/login.

Sidebar itemPathWhat it does
Overview/en/dashboardThe shop at a glance, with the latest orders. The revenue, sales, goal, visitors, conversion and map cards show sample figures until you wire them to your own data.
AI Assistant/en/dashboard/ai-assistantA chat that answers questions about the shop and acts on it within the admin's permissions.
Products/en/dashboard/products/allThe product list, the product form with the AI studio, and the deleted products.
Categories/en/dashboard/categories/allThe category list and the deleted categories.
Orders/en/dashboard/ordersEvery order, and each order's detail page.
Users/en/dashboard/users/allThe shop's customers, and the deleted ones.
Home Page/en/dashboard/homepageWhat the storefront's home page shows, section by section.
Admin Management/en/dashboard/admins-managementStaff accounts.
Admin Roles/en/dashboard/admins-rolesRoles and their permissions.
Settings/en/dashboard/settingsThe signed-in admin's profile and password, and the app settings.

The bell in the top bar holds the notifications, and the "Go to storefront" link opens NEXT_PUBLIC_STOREFRONT_URL. The dashboard is never indexed by search engines: every page carries a noindex tag and robots.txt disallows every path.

What each admin can do

  • The API checks a permission on every admin route, so an admin can only read and change what their roles allow, whatever the screen shows.
  • The dashboard hides or disables each button its admin may not use, such as Add Product without products.create, and the AI Assistant page shows "No Access" without ai_chat.use.
  • Every item stays in the sidebar for every admin. A page the admin cannot read shows its empty or error state.
  • Permission changes reach a signed-in admin straight away, without signing out.

Products

Part of the formFields
DetailsName and short and long descriptions in English and Arabic (the English name is required), slug, SKU (required), category (required)
Price and stockPrice (required), compare-at price, cost price, stock quantity
MediaUp to 12 images and videos (MP4, WebM, MOV), in any order, one of them primary, each with alt text
VariantsOption type and value (such as Size and M, or Colour with its hex code), SKU, price adjustment, stock, active. Variant SKUs are unique.
Flags and tagsActive, featured, best seller, and free tags
  • A product with a compare-at price above its price counts as on sale in the storefront's filters.
  • The form saves a draft by itself while you type. Open the product again and the dashboard offers the draft back; saving the product removes it.
  • Deleting moves a product to Deleted, where it can be restored. Restoring needs the products.restore permission.
  • Featured and best-seller products can also be set from their own pages, /en/dashboard/products/featured and /en/dashboard/products/best-sellers, which the sidebar does not link.

Categories

A category has a name and description in English and Arabic, an image, a slug, a sort order and an active switch. Deleting moves it to Deleted, where it can be restored with the categories.restore permission.

The API stores a parent for each category and the list filters by it, but the form sets no parent: the shipped categories are one flat level.

Orders

The list searches and filters by order status and payment status, newest first. An order's page shows its items, totals, customer, addresses, note, timeline and tracking number, and downloads as a CSV file.

StatusMeaning
pendingPlaced. A card order stays here until Stripe confirms the payment.
confirmedPaid by card, or placed with cash on delivery.
processingBeing prepared.
shippedOn its way. Add the tracking number the customer will see.
deliveredReceived. The order is closed.
cancelledStopped. The order is closed.

The order page moves an order one step forward at a time, or cancels it before it is closed. The payment status (unpaid, paid, failed, refunded) is set by the payment, not by hand. Changing an order needs orders.edit.

Customers

  • The Users list searches and filters customers by name, email, phone, country, username, whether their email is verified, and dates.
  • An admin can create a customer, change their password, mark their email verified or unverified, and delete or restore them.
  • Customers edit their own details from their account on the storefront; the dashboard has no form to edit them.

The storefront's home page

Home Page picks the products and texts each section of the storefront's home page shows. Editing a section needs products.edit.

SectionItemsOn the storefront
CategoriesOrder onlyThe categories row, in the order set here
Style pillarsUp to 3Three style highlights
Editorial splitUp to 2A two-panel editorial block
New dropsUp to 6New arrivals; empty, it shows the newest products
Best sellersUp to 8The best-seller row
SpotlightUp to 6The spotlight gallery
Editorial sliderUp to 5The closing slider

The Lux difference editor has no section on the shipped storefront home page, so what you set there does not show.

Staff, roles and permissions

  • Admin Management lists the staff and creates, edits and deletes them. Assign roles sets which roles an admin holds.
  • Admin Roles creates, renames and deletes roles. View permissions opens a grid of checkboxes, grouped by module, to grant each permission.
  • Permissions are named <module>.<action>, such as products.edit or orders.view, and an admin holds every permission of every role they have.
  • The Settings profile tab saves through admins.edit, so a read-only admin cannot change their own details. The security tab, for a password change, needs no permission.
Seeded roleGrants
Super AdminEvery permission
ViewerEvery permission ending in .view, which leaves out the AI assistant
Admin, Manager, EditorNothing yet: tick their permissions in Admin Roles before giving them to staff

The seed signs the Super Admin in as admin@example.com and gives the eleven other staff accounts the Viewer role.

Settings

Settings has three tabs: Profile, Security and App settings. App settings is a table of key and value pairs, grouped by category, that an admin with settings.edit can change or delete.

CategorySeeded keys
paymentstripe_fees_percentage, stripe_fixed_fee, platform_commission_percentage
withdrawalminimum_withdrawal_amount, maximum_withdrawal_amount, withdrawal_processing_days
emailsupport_email, notification_email
generalsite_name, site_tagline, maintenance_mode
featuresreferral_program_enabled, referral_bonus_percentage

These are stored values for your own code to read. Nothing in the shipped storefront or API reads them yet, so changing one, maintenance_mode included, changes no behaviour on its own.

Notifications

  • A new order notifies every admin who can view orders, and a finished or failed AI studio generation notifies the admin who started it.
  • They arrive live, with a short message on screen, and stay in the bell's list until marked read or removed.
  • The live connection uses NEXT_PUBLIC_WEBSOCKET_BASE_URL, the API's address without /api, and the API accepts it only from FRONTEND_URL. On your own domains, set both.
  • On the sample store there is no live connection.

The AI assistant and the AI studio

  • AI Assistant is its own page in the sidebar. Without a Gemini key on the API it says "No AI model is connected".
  • The AI studio is the product form itself, opened from Add Product or a product's row. It has two modes, Assistant and Animate, and a "Remove background" button. Its fields work and save without any key; until its keys are set it says "Listing writer not connected" or "AI studio not connected".

The sample store

Without NEXT_PUBLIC_API_BASE_URL, the dashboard answers every request from a sample store in the browser and shows a "Sample data" notice, which can be dismissed until the next reload.

  • The sign-in form is prefilled with admin@example.com and Admin@123. Any valid email with a password of at least 6 characters signs in as the Super Admin.
  • Writes are real: creating a product, editing a category, moving an order and granting a permission are kept in the browser and survive a reload.
  • The AI assistant and the AI studio's tools are unavailable, and there are no live notifications.
  • yarn remove:mock deletes the sample store once your API is connected, and keeps public/mock-media/.

Demo mode

Included with your purchase. Sign in to read, or open it in your download.

Running a public demo: per-visitor accounts, what visitors can change, and bring-your-own-key.

How the dashboard's code fits together

Included with your purchase. Sign in to read, or open it in your download.

The code's structure, and the recipes for adding a page, a translation and an API service.

Stuck on a step?

Find a fix before you start over.

Troubleshooting

Cookie Preferences

We use cookies to enhance your browsing experience, analyze site traffic, and personalize content. By clicking "Accept All", you consent to our use of cookies for analytics and personalized advertising.