Everything you need to use, customise and ship Juno Nest.
What is inside
Quick start
A Vite project. Install Node.js 20.19+ or 22.12+, then:
npm install
npm run dev # http://localhost:5173, reloads as you edit
npm run build # production build in dist/
npm run preview # serve dist/The app uses addresses without .html (/admin/orders). On a static host, send unknown paths to index.html: public/_redirects does it on Netlify and Cloudflare Pages; on Nginx use try_files $uri /index.html;.
Folder structure
juno-nest/
├── index.html, package.json, vite.config.js
├── public/assets/ js (UI library), img
└── src/
├── main.js, App.vue, router.js, directives.js
├── stores/ui.js Pinia store: theme mode, sidebar
├── styles/ ui.css, theme.css, template.css, effects.css
└── pages/ one single-file component per pageChange colours, fonts and corners
Everything visual comes from the tokens in assets/css/theme.css. Change a value and every page follows:
:root {
--wt-primary: #2b1a9e;
--wt-primary-rgb: 43, 26, 158;
--wt-secondary: #8c19be;
--wt-accent: #d1ed1d;
--wt-radius: 0.125rem;
--wt-font-heading: "Hanken Grotesk", system-ui, sans-serif;
}Dark mode: the moon button switches data-ui-theme on the <html> element and remembers the choice. Set data-ui-theme="dark" in the markup to make dark the default.
Style guide: the style guide page shows every colour with its contrast, the type, corners, components and the pictures of this template.
Design tokens: design-tokens/tokens.json has the same colours (light and dark), fonts, corners, spacing and shadows in the W3C Design Tokens format - import it into Figma with the Tokens Studio plugin, or build tokens for other platforms with Style Dictionary. design-tokens/tokens.css has them as plain CSS variables for other projects in the same brand.
Charts
The dashboard charts are drawn by Chart.js 4.5.1: tooltips on hover and touch, theme colours that follow the light/dark modes and the colour switch. Each chart is an SVG picture first (so it shows without JavaScript and in print) that carries its numbers in data-wt-chart; assets/js/charts.js turns it into a Chart.js chart. Your own chart:
<div data-wt-chart='{"type":"bar","labels":["Mon","Tue","Wed"],
"series":[{"name":"Visits","data":[120,180,150],"color":0}]}'></div>Types: line, bar, doughnut, radar and bubble. A series colour is a theme colour number (0 primary, 1 accent, 2 secondary, 3 info, 4 warning, 5 success, 6 danger) or any CSS colour. Charts added by your own script start with Charts.init(document).
How the Vue version works
Vue 3 single-page app built with Vite: single-file components, vue-router (one route per page) and a Pinia store. Run npm install and npm run dev.
- Every page is a single-file component in
src/pages, loaded when it is first shown;src/router.jshas one route per page (the old.htmladdresses still work as aliases). - A Pinia store (
src/stores/ui.js) holds the theme mode and the sidebar state; the chrome hooks are Vue directives (v-theme-toggle,v-sidebar-toggle,v-menu-search,v-example-tab,v-copy-code) insrc/directives.js. App.vueapplies each page's direction and body class after every navigation and starts the template UI library (ui.js,data-ui-*attributes) on the new page.- Icons: Bootstrap Icons font. Fonts: Google Fonts (Hanken Grotesk, Inter).
Menus
The admin menu of this template is Combo menu - Section tabs in the top bar plus a sidebar with the pages of that section. All menus are driven by assets/js/menu.js (no dependencies, the same in every stack):
- Collapsed menu: the collapse button turns the sidebar into icons; every icon shows its name in a tooltip on hover and on keyboard focus, and a menu group opens as a flyout panel.
- Page finder: the search box in the admin top bar (or Ctrl + K) lists every page of the menus; type, use the arrow keys and press Enter.
- Phones: every admin layout opens the full menu as a drawer from the menu button.
- Colour switch: the paint bucket in the admin top bar switches the whole theme to one of 8 colour presets (remembered); a link with
?primaryPreset=tealopens a page in that colour and?primaryPreset=defaultbrings back the template colours. Presets live inassets/js/theme-init.js. - Attributes you can reuse:
data-wt-tip="Label"(tooltip),data-wt-sub="#id"(menu group),data-wt-flyout="#id"(flyout panel),data-wt-pane="#id"insidedata-wt-panes(tabs),data-wt-palette(page finder) anddata-wt-toggle="#id"(full-screen menu).
Browser support
| Browser | Supported versions |
|---|---|
| Chrome | Last 2 versions (111+) |
| Edge | Last 2 versions (111+) |
| Firefox | Last 2 versions (113+) |
| Safari (macOS, iOS) | 16.4+ |
| Opera | Last 2 versions (97+) |
Older browsers still show every page; only newer effects (such as @property animations) fall back to static styles.
Credits
- Vue - MIT licence
- Vite, Vue Router, Pinia - MIT licence
- Chart.js - MIT licence
- Bootstrap Icons - MIT licence
- Google Fonts - SIL Open Font License
- All illustrations in
assets/imgare original SVG artwork made for this template; their subjects are Bootstrap Icons shapes (MIT).