The web interface
Every page shares the same shell: a top navigation bar, a mobile menu, a toast stack, and a set of alert and dialog components. Individual pages render their own content inside this shell; no page inlines styles.
The navbar
Section titled “The navbar”The navbar shows the brand, the signed-in role (when authenticated), and links whose visibility depends on what the account may do:
| Link | Route | Visible when |
|---|---|---|
| Admin | /admin |
the account may manage at least one structural area |
| Permissions | /permissions |
the account may manage roles or users |
| Analytics | / |
always |
| Rates | /admin/ecb |
the account may read exchange-rate data |
| Import | /admin/import |
the account holds an insert grant on some data: object |
| Export | /admin/export |
the account holds a read grant on some data: object |
| Password | /password |
authenticated |
| Log out | POST /logout |
authenticated |
| Login / Register | /login, /register |
not authenticated |
The same links are repeated in the mobile menu, which is toggled with a
hamburger below the md breakpoint.
The navbar links are permission-driven rather than role-name-driven. A custom role with the right grants sees the same links an administrator does, and an account that lacks a grant does not see the link at all.
Feedback patterns
Section titled “Feedback patterns”The site answers every form in one of two ways:
- Errors render an inline alert and a dialog, both carrying the message, and the affected fragment is swapped back into the page with the reason shown.
- Success dispatches a self-dismissing toast through the toast stack and,
where the action changes where you are, redirects through an
hx-redirectheader rather than a3xxstatus.
Pages that fail to load (for example when the backend is unreachable) show a standalone error page. One-line notices are used where the full alert card is too heavy, such as the analytics endpoints.
Scopes: profiles and the global scope
Section titled “Scopes: profiles and the global scope”Selectors that list profiles offer a Global scope (__global) alongside
them. Global tables are shared by every profile and are browsed under this
scope rather than repeated under each profile. A profile’s own tables are the
ones it declares; the global scope’s tables come from the table catalog.
See Admin workspace and How table definitions work for how a selection travels between pages.
Where to go next
Section titled “Where to go next”- Analytics overview — the default landing page.
- Admin workspace — browsing profiles, tables, and columns.
- Roles and permissions — who sees which links.