
File Manager
A three-pane file browser with a folder tree, grid and list views, and a details panel.
- Drop files anywhere to upload, with progress
- Type filters, sorting, stars and search
- Multi-select with download, move and delete
Four dashboards, three apps and 50 ready-made pages in plain HTML, Bootstrap 5 and vanilla JavaScript. No jQuery, no build step β drop it into any back end.
Each one is a complete page with real-looking data, so you can see how cards, charts and tables work together.
Website traffic at a glance β who visits, from where, on which device and which pages they read.
Worldwide sales on an interactive map β pick a country to see its units, growth, prices and leading brands.
The home screen for a content site: visitors, traffic, and the messages people send through your forms.
Everything a shop owner checks in the morning β sales, orders, best sellers and what's about to run out.
A sales team's view of the pipeline β deals, leads, targets and who's doing what next.
A company's money in one place β revenue, costs and profit, cash forecast, budgets and unpaid invoices.
A help desk's day β ticket flow, response times against the SLA, busy hours and customer satisfaction.
Drag, drop, upload and filter β the interactions are already written, ready to connect to your API.

A three-pane file browser with a folder tree, grid and list views, and a details panel.

Tasks by date on FullCalendar, coloured by status, with overdue ones flagged.

A kanban board β Assigned, In Progress, Review, Completed β with summary blocks on top.

An inbox for the messages people send through your site's forms, with replies and private notes.

A help-desk queue with views, SLA timers and a side panel to answer a ticket without leaving the list.

A project timeline with phases, tasks, milestones and dependency arrows β no chart library needed.

Invoices from draft to paid β a filterable list, a printable preview and an invoice builder.

Who did what and when, grouped by day, with the changes before and after.
Each widget is a class that extends Odin.Component. It attaches to every element that matches its selector, reads options from data-* attributes and fires odin:* events your code can listen to.
Odin.init(container)class Counter extends Odin.Component {
static selector = '[data-counter]'; // elements it attaches to
static defaults = { step: 1 }; // merged with data-* options
init() {
this.value = 0;
this.on(this.el, 'click', () => {
this.value += this.options.step;
this.emit('counter-change', { value: this.value }); // odin:counter-change
});
}
}
Odin.register('counter', Counter);
/* One file sets the look of every page */
:root {
/* Sidebar */
--sidebar-bg: #0B132B;
--sidebar-text: #8D99AE;
/* Brand & states */
--primary: #00B4D8; /* change it, every button follows */
--primary-hover: #0096C7;
--success: #10B981;
--danger: #EF4444;
/* Surfaces */
--bg-body: #F8F9FA;
--bg-card: #FFFFFF;
}
<!-- The demo reads its figures from a JSON file -->
<div data-finance-dashboard
data-source="json/finance.json"></div>
<!-- Your app: the same shape, from your own route -->
<div data-finance-dashboard
data-source="/admin/finance/data"></div>
<!-- No server yet? An inline copy is the fallback -->
<script type="application/json" id="finance-data">
{ "months": [ β¦ ] }
</script>
// A card was dragged to another kanban column
document.addEventListener('odin:task-move', (event) => {
const { id, status, sort } = event.detail;
fetch(`/api/tasks/${id}`, {
method: 'PATCH',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ status, sort }),
});
});
// Same idea for every app: odin:invoice-save,
// odin:gantt-change, odin:permissions-save β¦
Plain files you can read in an afternoon, organised so you only change what you need.
Static HTML, CSS and JS. Copy the files into Laravel, Django, Rails, .NET or anything else.
Every widget is a small vanilla JavaScript class. Plugins chosen to match β Tom Select, not Select2.
Colours, sidebar and surfaces are variables in one file. Change the theme without touching components.
Split into base, layout, components, pages and vendor files β include only what a page uses.
Collapse the sidebar to an icon rail on desktop; on phones and tablets it slides in, and tables, boards and forms adapt.
ApexCharts and Chart.js, each with its own demo page, plus a world map. Charts are set up from data attributes.
Role cards and a module Γ action permission matrix with unsaved-change warnings β ready for your access rules.
Widgets fire events like odin:task-move, so saving changes to your API takes a few lines.
No framework to adopt and nothing to compile β your back end renders the pages, the template does the rest.
Put the css, js and images folders into your public folder. Bootstrap and the plugins load from a CDN.
Cut one page into your base template β sidebar, top bar, footer β and fill the content area from your views.
Point data-source at your own route and listen to the odin:* events to save changes to your API.
Every page shares the same sidebar, top bar and footer, so you can mix them freely.
Free also in the free version Compare Free and Pro
Well-known open-source libraries, each loaded only on the pages that need it.
Licensing, downloads and how the template fits into your project.