The organiser dashboard
What the organiser's back office does: the pages in the sidebar and who sees them, the overview, reports and CSV exports, the workspace 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 member's role holds its permission.
| Sidebar item | Path | Permission | What it does |
|---|---|---|---|
| Overview | /en/dashboard | overview.view | Sales for the chosen period, the live door and the next events. |
| Events | /en/dashboard/events | events.view | All, Published, Draft and Ended tabs, search and filters, the event editor and each event's attendees. |
| Orders | /en/dashboard/orders | orders.view | Orders with status totals and filters, each order's detail, refunds, and CSV export. |
| Check-in | /en/dashboard/check-in | checkin.scan | The door: camera or typed code, recent scans and alerts. |
| Venues | /en/dashboard/venues | venues.view | Venues on a map, the venue editor and the seat layout editor. |
| Reports | /en/dashboard/reports | reports.view | Paid sales by period, event, payment provider and category, with CSV export. |
| Team | /en/dashboard/team | admins.view | Workspace members, invitations, roles and check-in sessions. |
| AI assistant | /en/dashboard/ai-assistant | ai_chat.use | Answers about sales and doors, draws charts and drafts reminders for approval. |
| Venue studio | /en/dashboard/studio | studio.use | Turns a photo of an empty venue into an AI event concept. |
| Settings | /en/dashboard/settings | settings.view | General, Payments, Team and Notifications for the workspace; Profile and Security for every member. |
Roles opens from the Team page, and Inquiries (/en/dashboard/leads, leads.view) and Notifications open from the account menu, which also holds the member's own Profile and "View website" (NEXT_PUBLIC_SITE_URL). A search palette in the top bar finds pages. A page opened by its address without the permission shows that it is not part of the member's role, the same refusal the API gives. Each member lands on the first page their role opens: the overview for most, the door for the Check-in role.
The overview
- The ticket subtotal, paid tickets, check-ins and fees for the last 7 days, the last 30 days, this month or all time, with a ticket sales chart that has a point for every day of the period.
- The live door: the session with doors open, how many are in, how many are expected and how many remain, with a link to its check-in.
- The next five published events with sold against capacity and check-ins, and how many check-ins need attention (door alerts not yet looked at, plus orders waiting in review).
- Days are the workspace's days, in its time zone. Only paid orders count, on the day they were paid; free orders count as orders and add nothing to any amount.
Reports and exports
Reports shows the ticket subtotal, fees, what was collected and what was refunded for a period (the same four, or two dates of your choice) and one event or all, then the sales by event with each one's share, by payment provider (Stripe, PayPal, test payment and free) and by category.
- Export CSV on Reports and on Orders queues a file in the background and offers Download the file once it is ready. It holds the orders the current filters show, with reference, date, status, event, customer, email, tickets, subtotal, fee, total, refunded, currency and provider.
- The download link is the permission, works for one hour and only for the member who asked. The files hold buyers' names and email addresses and are kept in
EXPORT_DIR(./exportswithout Docker, the data volume with Docker). - Exporting needs
reports.export. The seeded Owner, Manager and Finance roles hold it.
Settings
Settings has six tabs. The four workspace tabs need settings.view to see and settings.edit to save; Profile and Security belong to the signed-in member, whatever their role.
| Tab | What it sets |
|---|---|
| General | The workspace's name, support email, currency (USD, EUR, GBP, SAR or AED), time zone and booking fee in percent (0 to 20, up to two decimals; 3 as seeded), which the attendee pays at checkout. The currency locks once the first ticket is paid for. The seat hold time and the per-order limit are not here: they are workspace columns seeded from the API's settings.json. |
| Payments | Shows whether Stripe, PayPal and the test payment are connected, in test mode or not configured, with the variables to set in the API's .env and each provider's webhook address. Keys are never typed or shown here. |
| Team | What each role may do with events, refunds, scanning and reports, with links to the team and the roles. |
| Notifications | Three switches for the team's notification bell: paid orders, refund requests and check-in alerts. They change only what the team is told: tickets, receipts and refund emails to buyers are always sent. |
| Profile | The member's photo, name, email and phone. |
| Security | The member's password. |
Someone who saved the settings after the page loaded wins: the page then shows their version and asks to check and save again. The brand logo is not uploaded here: it comes from the project's brand files.
Notifications
| Notification | Who gets it |
|---|---|
| An order is paid | Every member who can view orders, while the paid orders switch is on |
| A refund is requested | Every other member who can refund, while the refund requests switch is on |
| A ticket is refused at the door (shown twice, at the wrong event, or void) | Every member who can publish events, while the check-in alerts switch is on |
| A message arrives through the website's contact form | Every member who can read inquiries |
| A venue studio concept finishes or fails | The member who started it |
- They arrive live, and the bell lists the newest 30. Each is kept for 30 days.
- The live connection uses
NEXT_PUBLIC_WEBSOCKET_BASE_URL, the API's address without/api, and the API'sFRONTEND_URLmust be the dashboard's address. A reload always shows the latest rows; only the live updates depend on the connection.
Signing in
- Team members sign in here; attendees sign in on the website, never here. The seeded staff accounts are listed in the installation guide.
- Remember me keeps the session after the browser closes, until the API's token expires (seven days by default,
JWT_EXPIRATION); untick it and the session ends with the browser or the tab. - A wrong email and a wrong password read the same, so the form never tells anyone which addresses have an account. After ten failed attempts in fifteen minutes from one address, the API refuses for a while.
- When the API refuses a session (an expired or revoked token), the dashboard signs out and opens the sign-in page. A change to a member'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.