AngularAdmin dashboardSaaS

elementar-admin — Angular Admin dashboard Template

By randrost

An Angular admin template based on the Elementar RT component library, featuring seven dashboards, sixteen application modules, and complete settings pages, all running on typed mock data and ready to connect to your own API.

Explore the design

Compare the page layouts and mobile experience. Open any screenshot for a closer look.

3 previews
Desktop homepage1 / 3
Desktop captureTop of page

Actual screenshot captured by the server browser.

All pages & views 3

Screenshots show visual appearance; interactive behavior may differ.

Recorded 2026-09-30View source

What stands out

A quick read of the recorded project description.

01

Seven dashboards, including a drag-and-drop dynamic dashboard based on @katoid/angular-grid-layout

02

Sixteen application areas covering calendar, chat, mail, file manager, kanban, notes, contacts, AI Studio, invoices, projects, courses, and more

03

A widget registry widgets/registry.ts maps ids to components and default grid sizes; the gallery, each dashboard, and the dynamic dashboard selector all render from the same list

04

Different presentations of the same dataset reuse the same component via route data.variant, avoiding maintaining two implementations

05

Styled with Tailwind v4 and Angular Material 3 tokens, charts based on ECharts, tables based on TanStack Table

06

axe-core audited across 38 routes in both color schemes with zero violations reported, and E2E re-runs the checks

Template Details

Elementar RT Admin is an open-source Angular admin front-end template whose interface is built on the Elementar RT component library rather than defining its own. The template covers seven dashboards, sixteen application areas, twelve widget directories, and common admin pages such as account, settings, and UI gallery. All screens are fully implemented, not placeholders.

The project runs entirely on typed mock data with no backend: each feature area includes its own mock-data.ts and root-level services, exposing data via signals. It is therefore suitable as a starting point to clone and point at your own API, or as a reference for how modules collaborate. The template was built according to an independent specification document docs/FEATURES.md written before the code; where the two disagree, the specification takes precedence.

It should be clear that this is not a production-hardened version: there is no authentication, no persistence beyond localStorage, and data resets on refresh. Licenses for third-party assets such as demo images, fonts, and icons must be checked separately and cannot be assumed from the code's MIT license alone.

AngularAdminSaaS

Is it right for your project?

Use Cases

  • Clone the template and replace each feature area's mock services with your own API to quickly build an admin front-end
  • Refer to the widget registry and route variant organization to design an extensible admin module structure
  • Use for demos or prototypes to directly showcase complete interactions of dashboards, application modules, and settings pages
  • Use as a learning reference for Angular standalone components, signals, and @ngrx/signals state management

Suitable For

  • Developers who need an Angular admin front-end starting point and plan to connect it to their own API
  • Teams looking to study how a complete admin page is organized and how component registration works
  • Projects that need to quickly produce admin interface demos or prototypes

Getting started & customization

Use these recorded setup notes alongside the repository instructions for your chosen version.

  1. 1

    Requires Node 20 or higher

  2. 2

    Run npm install to install dependencies, npm start to start the dev server (default http://localhost:4200)

  3. 3

    npm run build produces a production build in dist/, npm test runs unit tests, npm run e2e runs end-to-end and accessibility tests

  4. 4

    E2E tests start their own dev server on port 4300 and will not occupy an existing service on port 4200

  5. 5

    Deploy as a static SPA; nginx must fall back unknown paths to index.html, otherwise deep-link refreshes will 404

Read repository instructions

License & source material

Usage conditions & limitations

Free to use · keep license notice

This entry covers the free version in the public repository under the MIT license; the free scope is the code of this version and does not imply that external services or third-party assets are free.

Must comply with when using

  • You may use, modify, commercialize, and distribute the code of this version for free.
  • When distributing copies or substantial portions of the code, retain the original author's copyright notice and the full MIT license notice.
  • The code is provided as is; warranties and limitations of liability are governed by the original license and applicable law.

Additional costs & items to verify

  • The template itself is not a component library but depends on the external @elementar-rt/components library; before use, confirm the availability and license of that library.
  • Not a production-hardened version: there is no authentication mechanism, no persistence beyond localStorage, and data resets on refresh, so it is not suitable for direct production use.
  • Kubernetes deployment manifests are in the private repository tls-infra, not in this repository, so complete K8s deployment configuration is not directly available.
  • The AI Studio in-browser LLM feature depends on @mlc-ai/web-llm and requires WebGPU support, so it is unavailable in environments without WebGPU.
  • Demo images, fonts, icons, and other third-party assets must be checked against their respective licenses and cannot be assumed from the code's MIT license alone.
  • External services such as domain, hosting, database, payment, or AI may incur additional charges.
View Original Text Basis

Permission is hereby granted, free of charge

Original License Text

Not a component library — it consumes [`@elementar-rt/components`](https://elementar-rt.tulikas.de)

Original README

Not production-hardened: there is no auth, no persistence beyond `localStorage`, and the data resets on reload.

Original README

The Kubernetes manifest (nginx ingress, cert-manager TLS) lives in [`tls-infra`](https://github.com/randrost/tls-infra) (private), not in this repo

Original README

In-browser LLM | `@mlc-ai/web-llm`, WebGPU-gated

Original README
https://github.com/randrost/elementar-admin/blob/main/LICENSEhttps://github.com/randrost/elementar-admin/blob/main/README.md

Compiled by DeepSeek based on repository license and README ·2026-09-30. Results only cover the materials read; dependencies, images, fonts, and subsequent term changes are subject to their respective original texts.

Project checks & description sources

Template Information

Source platforms
GitHub
Documentation and maintenance reference score
More documented · 88 / 100
Technologies
Angular
Website type
Admin dashboard · SaaS
How this score is calculated

Our heuristic uses license records (up to 30), a demo link (12), a preview (10), stars (15), recorded maintenance (15), description completeness (8), feature records (5) and classification data (5). It is not a code, security or performance test, or a Google score. A link does not establish tested functionality.

What to verify for this project

Repository update recorded
2026-09-27
Screenshot last checked
2026-09-30

A demo link is listed. Check it with your own content and viewport sizes; its presence does not confirm that forms, authentication or payments work.

The catalog identifies Angular as the primary stack. Check the actual dependency manifest and lockfile for versions and hosting requirements. These notes use recorded metadata, not a code audit or a deployment test.

Use a selection guide →

How this description was prepared

AI-assisted description based on catalog records and repository material. Repository authors are not automatically the reviewers of this description.

Automatically checked against source and license rules; no manual editorial review.

Inspect the recorded source material

SHA-256: d14f00f0e798d58814ca7ee41512ed9daf34ade235487d13944ab873d126f150

2026-09-30T11:35:32.849Z

Source file / repository
# Elementar RT Admin

An open-source Angular 20 admin template. Every screen is built, not stubbed —
seven dashboards, sixteen application areas, a twelve-widget catalog, and the
settings, account, and UI-gallery pages an admin product actually needs.

**[Live demo](https://admin.elementar-rt.tulikas.de)** · MIT licensed

---

## What this is

A complete admin front end running entirely on typed mock data. There is no
backend: each feature area owns a `mock-data.ts` with its models and a
root-provided service exposing signals. That makes it a template you can clone
and point at your own API, and a reference for how the pieces fit together.

It is built against [`docs/FEATURES.md`](docs/FEATURES.md), an independent
specification written before the code. If the two disagree, the spec wins.

### What it is not

Not a component library — it consumes [`@elementar-rt/components`](https://elementar-rt.tulikas.de)
rather than defining one. Not production-hardened: there is no auth, no
persistence beyond `localStorage`, and the data resets on reload.

---

## Stack

| Concern | Choice |
|---|---|
| Framework | Angular 20, standalone components, `OnPush` everywhere |
| State | Signals; `@ngrx/signals` for shared stores |
| Styling | Tailwind v4 + Angular Material 3 tokens |
| Charts | ECharts, wrapped in a directive |
| Tables | TanStack Table |
| Calendar | FullCalendar 6 (core driven imperatively) |
| Editor | Milkdown Crepe (posts), plus an original block editor |
| Grid | `@katoid/angular-grid-layout` (dynamic dashboard) |
| In-browser LLM | `@mlc-ai/web-llm`, WebGPU-gated |
| Icons | Iconify (Solar, Logos, Circle Flags), self-hosted |
| Avatars | DiceBear, generated at runtime |

Every heavy dependency is confined to the lazy chunk of the route that needs it.
Opening the dashboard does not download the calendar, the editor, or the LLM.

---

## Getting started

```bash
npm install
npm start            # dev server on http://localhost:4200
```

Other scripts:

```bash
npm run build        # production build into dist/
npm run build:prod   # explicit production configuration
npm test             # unit tests (Karma + Jasmine, watch mode)
npm run test:ci      # unit tests once, headless
npm run e2e          # end-to-end and accessibility tests (Playwright)
npm run e2e:ui       # the same, in Playwright's UI mode
```

The E2E suite starts its own dev server on port 4300, so it never picks up
whatever you have running on 4200.

Node 20 or newer.

---

## Project structure

```
src/app/
  core/           # avatar service, app store
  shared/         # datatable, charts, sparkline, stepper, mock helpers
  shell/          # sidebar, header, page container
  auth/           # sign-in through to the setup wizard
  error/          # 404 / 500 / 403 / maintenance
  onboarding/     # first-run flow
  dashboards/     # seven dashboards, incl. the drag-and-drop one
  widgets/        # the widget catalog and its registry
  applications/   # calendar, messenger, email, kanban, invoice, …
  management/     # posts and site settings
  account/        # notifications and account settings
  user-profile/   # overview and talent profiles
  gallery/        # cards, prebuilt, tables, themes, pricing, integrations
```

Two conventions carry most of the weight:

**The widget registry.** `widgets/registry.ts` maps an id to a component plus its
default grid size. The galleries, every dashboard, and the dynamic dashboard's
picker all render from that one list, so registering a widget publishes it
everywhere.

**Route-supplied variants.** Where two routes are two presentations of one
dataset — `billing` / `billing-2`, `notifications` / `notifications-2`,
`cards/general` / `cards/users` — they are one component reading `data.variant`
from the route, not two implementations to keep in sync.

---

## Feature map

| Area | Routes |
|---|---|
| Dashboards | getting-started, basic, analytics, ecommerce, finance, explore, dynamic |
| Applications | calendar, messenger, email, file manager, content editor, kanban, notes, contacts, AI studio, help center, invoice, projects, courses |
| Management | posts (list/new/edit/details/categories/topics), site settings (5 areas) |
| Account | notifications, settings (9 pages) |
| Profile | overview, talent |
| UI gallery | widgets, cards, prebuilt, datatables, themes, pricing, integrations, service pages, public posts |
| Outside shell | auth (7), errors (7), onboarding |

---

## Accessibility

Audited with axe-core (WCAG 2.0/2.1 A and AA) across 38 routes in both colour
schemes, with zero violations at the time of writing. That covers landmarks,
heading order, form labelling, and contrast — the tool cannot judge whether the
reading order makes sense, so treat it as a floor rather than a guarantee.

Keyboard focus is visible everywhere via a `:focus-visible` ring, and scrollable
regions are reachable by keyboard.

`npm run e2e` re-runs the axe checks, so a regression fails CI rather than
shipping.

---

## Deployment

The app is a static SPA served by nginx.

```bash
docker build -t elementar-rt-admin .
docker run -p 8080:80 elementar-rt-admin
```

The Kubernetes manifest (nginx ingress, cert-manager TLS) lives in
[`tls-infra`](https://github.com/randrost/tls-infra) (private), not in this
repo — `Jenkinsfile` builds, pushes, and deploys from there on every push to
the default branch.

Because it is a SPA, the nginx config falls back to `index.html` for unknown
paths — without that, a refresh on any deep link would 404.

---

## Licence

MIT — see [LICENSE](LICENSE). Use it, fork it, ship it.

Built by [Rostyslav Tulika](https://tulikas.de).
Report a correction

Explore similar templates

Compare previews and descriptions within the same stack and category.