The agency dashboard
What the back office does: the overview with its map, the pages in the sidebar, the agency's settings, notifications and signing in.
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. Each sidebar item shows only when the signed-in admin holds its permission.
| Sidebar item | Path | Permission | What it does |
|---|---|---|---|
| Overview | /en/dashboard | overview.view | Properties, inquiries and viewings in focus, with the properties map. |
| AI assistant | /en/dashboard/ai-assistant | ai_chat.use | A chat that reads and acts on properties, inquiries and viewings, and draws charts. |
| Properties | /en/dashboard/properties | properties.view | The list with status tabs, search and filters, and the property editor. |
| Leads | /en/dashboard/leads | leads.view | Inquiries from the website, with a detail panel. |
| Viewings | /en/dashboard/viewings | viewings.view | Requested and confirmed visits. |
| Staging studio | /en/dashboard/studio | staging.view | Furnish empty rooms with AI previews and approve them for the website. |
| Settings | /en/dashboard/settings | None (each tab has its own) | Agency, Homepage, Neighborhoods, Profile and Security. |
| Admin management | /en/dashboard/admins-management | admins.view | Team accounts and their roles. |
| Admin roles | /en/dashboard/admins-roles | roles.view | Roles and permissions. |
A search palette in the top bar finds pages, properties, inquiries and viewings, the bell holds the notifications, and "View website" opens NEXT_PUBLIC_SITE_URL. A page opened by its address without the permission shows "This page is not part of your role" instead, the same refusal the API gives.
The overview
- Published properties, for sale and for rent, the inquiries received in the last seven days, the viewings in the next seven days and those still awaiting confirmation.
- The latest inquiries, the upcoming viewings, the three most recently updated properties and a featured property.
- A map of the published homes that have coordinates, up to 250, drawn with OpenFreeMap tiles.
Settings
Settings has five tabs. Profile and Security belong to the signed-in admin; the others need a permission to see and another to save.
| Tab | Permission | What it sets |
|---|---|---|
| Agency | settings.view, settings.edit to save | The agency's name, contact email and city, and its heading and short description in English and Arabic. The currency is AED and the time zone Asia/Dubai; the website always ships in both languages. |
| Homepage | settings.view, settings.edit to save | The three homes the website's home page features, in order (published homes only), and the showcase home whose approved staged room the home page shows. |
| Neighborhoods | neighborhoods.view, and create, edit or delete | Each area's name in both languages, slug, city, short description, cover photo, sort order, and whether it is featured and shown. Its homes keep existing when an area is deleted. |
| Profile | None: every admin saves their own | The signed-in admin's photo, first and last name, email and phone. |
| Security | None | The signed-in admin's password. |
The brand logo is not uploaded here: it comes from the project's brand files.
Notifications
- A new inquiry notifies every admin who can view inquiries, and a viewing request every admin who can view viewings. A finished or failed staging preview notifies the admin who started it.
- They arrive live, with a short message on screen, and the bell lists the newest 30. Each is kept for 30 days, until read or removed.
- Nothing is sent by email: there is no mail service in the template.
- The live connection uses
NEXT_PUBLIC_WEBSOCKET_BASE_URL, the API's address without/api. A reload always shows the latest rows; only the live updates depend on the connection.
Signing in
- The sign-in form starts empty. Remember me keeps the session after the browser closes, until the API's token expires (seven days by default); untick it and the session ends with the browser or the tab.
- A wrong email and a wrong password read the same, "Invalid email or password", so the form never tells anyone which addresses have an account. After ten failed attempts in fifteen minutes from one address, the form says to try again in a few minutes.
- When the API refuses a session (an expired or revoked token), the dashboard signs out and opens the sign-in page. A change to an admin's roles reaches them while they are signed in.
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.