Discover powerful Dolibarr extensions designed to automate your business processes

Smart is a premium interface theme for Dolibarr ERP/CRM aimed at schools, universities, training centres and academies. It replaces the whole application shell — sidebar, top bar, dashboard and sign-in page — and ships three complete, switchable dashboard compositions on one shared technical architecture.
Smart is a theme, not a school-management module. Every academic figure it displays is derived from data a standard Dolibarr already holds: students are third parties, teachers are users, courses are services, fees are invoices, homework are project tasks, exams are agenda events and library loans are stock movements. No companion module is required, and no core file is modified.
Two rules govern every widget in the product:
· A widget whose Dolibarr module is disabled is not rendered at all. It never degrades into a grid of zeros that would read as "this school has no students"; a short, non-blocking line names the module to enable instead.
· A ratio computed over an empty population renders as an em dash, never as 0 %. "0 % attendance" and "nobody has been recorded yet" are opposite statements and must not share a rendering.
The theme was validated on a live Dolibarr 17.0.3 instance holding 4 228 third parties, 1 989 invoices, 1 851 products and 84 project tasks. Fifty-one screenshots were captured from that instance; the figures visible in this document are real query results, not mock-ups.
|
Property |
Value |
|
Commercial name |
Smart |
|
Technical name |
theme_smart |
|
Folder |
smart |
|
Module class |
modSmart |
|
Module number |
10000800 |
|
Version |
1.0.0 |
|
Distribution file |
module_smart-1.0.zip |
|
Licence |
GPL-3.0-or-later |
|
Editor |
DoliResources — https://www.doliresources.com |
|
Validated on |
Dolibarr 17.0.3, PHP 8 |
|
Declared support |
Dolibarr 16 and above |
Smart integrates through two official mechanisms only: the module_parts css/js declaration, which injects its stylesheet and script on every page, and a MenuManager that re-renders the left menu. The native menu tree is reused verbatim, so every module's entries, permissions, entity restrictions and translations behave exactly as they do in the standard Eldy theme.
· Reproduce the visual identity of the three reference designs: white sidebar, white top bar, very light blue-grey page background, white cards, hairline borders, soft shadows and generous corner radii.
· Ship three complementary dashboard compositions that share one architecture, one permission model and one configuration screen.
· Read real Dolibarr data everywhere; never display a placeholder figure.
· Degrade gracefully and silently when an optional module is absent.
· Stay usable for long working sessions: high contrast, calm palette, no motion that cannot be disabled.
· Remain a generalist Dolibarr theme usable on an instance with no school module.
Smart follows a simple rule: the interface must never state something it cannot prove. Three consequences shaped the implementation.
· Each KPI tile carries its own variation or none at all. Borrowing another metric's delta — printing a staff head-count trend under an attendance rate, for instance — labels a figure as something it is not.
· Growth measured from an empty previous period is reported as "new", not as "+100 %": a finite percentage would invent a comparison that never existed.
· Semantic colour is reserved for semantics. Outstanding fees are drawn in neutral grey, never in the success green used elsewhere for collected money.
Visually the theme favours flat surfaces, one accent colour per demo and a single elevation level. Gradients appear only on the headline KPI tiles, where the reference designs use them, and every text child inside those tiles re-declares its colour so a saturated background can never produce unreadable text.
The academic front office: admissions, teaching-staff attendance, homework, fees, student attendance, exam performance, library loans and a student ranking.
|
Element |
Content |
Dolibarr source |
|
KPI 1 |
New admissions, variation, enrolled population |
Third parties created in the period |
|
KPI 2 |
Teaching-staff attendance rate, present/total |
Active users, Holiday module when enabled |
|
KPI 3 |
Homework submitted, completed and overdue counts |
Project tasks and their progress |
|
KPI 4 |
Students with unpaid fees, amount, overdue count |
Unpaid customer invoices |
|
Ring |
Present / absent split, total, attendance rate |
Third-party status |
|
Bars |
Collected vs outstanding fees, twelve months |
Invoices and payment status |
|
Curves |
Exam sessions, current vs previous year |
Agenda events |
|
Curves |
Books issued vs returned, twelve months |
Stock movements |
|
Table |
Student ranking by number of enrolments |
Invoices grouped by third party |
Filters. The period selector in the page header (week, month, year) drives every dated figure on the dashboard. Chart panels link through to the matching Dolibarr list, where the full native filter set — class, level, payment mode, academic year as recorded in your data — remains available.
An analytical reading for universities and training organisations: population counters with their variation, a large enrolment survey curve, per-subject homework progress and a financial summary.
|
Element |
Content |
Dolibarr source |
|
Total students |
Enrolled population and variation |
Customer third parties |
|
New students |
Admissions in the period |
Third parties created in the period |
|
Total courses |
Course catalogue and variation |
Services |
|
Visitors |
Recorded visits and enquiries |
Agenda events |
|
Survey |
Cumulative enrolment vs new enrolments |
Third-party creation dates |
|
Homework |
Completion rate and deadline per subject |
Projects and their tasks |
|
New admissions |
Admissions and applicant pool |
Third parties, prospects |
|
Student results |
Completion rate per subject |
Average task progress per project |
|
Fee summary |
Collected, outstanding, overdue, expected |
Invoices and payments |
A management overview for an establishment: headline counters, grouped fee bars, enrolment trend, an assigned-task board and the teaching staff list.
|
Element |
Content |
Dolibarr source |
|
KPI 1 |
Total students, active and inactive |
Customer third parties and status |
|
KPI 2 |
Total teachers, registered and inactive |
Users and status |
|
KPI 3 |
Total courses, open and closed |
Services and their sale flag |
|
KPI 4 |
Fees collected and outstanding balance |
Paid invoices |
|
Bars |
Collected vs outstanding, twelve months, with totals |
Invoices |
|
Area |
Cumulative enrolment and new enrolments |
Third-party creation dates |
|
Board |
Task, assignee, status, progress |
Project tasks and their contacts |
|
List |
Teaching staff with role and status |
Active users |
A single preset library (core/smart_presets.php) is the only source of truth for the stylesheet, the script, the dashboard, the sidebar and the configuration page. The CSS defaults and the admin defaults are literally the same array, so a reset on the configuration screen can never restore a stale palette.
Resolution order for every request:
· the stored demo (SMART_DEMO), or the session preview when one is armed;
· the palette override, if the administrator selected one;
· individual facet overrides: layout, sidebar mode, header mode, KPI family, navigation orientation, radius, font, shadows, borders, animations;
· the resulting token set is emitted once as CSS custom properties.
Only the active demo's markup and datasets are produced. A widget belonging to another demo is never queried, never rendered and costs nothing.
Two card families ship with the theme and a third and fourth are selectable.
|
Family |
Used by |
Appearance |
|
gradient |
Academic Overview, Education Management |
Full-bleed colour gradient, oversized watermark glyph, white typography |
|
plain |
University Analytics |
White card, tinted icon chip, ink typography |
|
outline |
selectable |
Hairline border, no shadow |
|
soft |
selectable |
White card with a tinted round icon pill |
On gradient tiles every text child re-declares its colour explicitly. Setting the colour on the card alone is not sufficient: the theme's own link and label rules are more specific and would repaint the label in ink on a saturated background.
A card may carry a title, a value, a period, a variation with direction, a descriptive sub-line, an icon, a badge and a link to the matching Dolibarr list.
Students are customer third parties. The theme reports the enrolled population, the active/inactive split, the attendance ring, the enrolment trend and a ranking by number of enrolments. Each entry links to the third-party record.
Ranking note. The ranked measure is the number of enrolments, and the column header says exactly that. It is not presented as an academic merit ranking, which Dolibarr holds no data for.
Teachers are Dolibarr users. Smart reports the total and active head-count, the attendance rate, and a staff list with avatar, job title and status. When the Holiday module is enabled, approved leave spanning the current day is subtracted from the present count; when it is disabled, leave is reported as unknown rather than assumed to be zero.
Admissions are third parties created during the selected period; applicants are prospects. Dolibarr encodes the role as 1 = customer, 2 = prospect and 3 = both, so the applicant count covers 2 and 3 — counting only 2 silently drops every third party that is both, and would under-report the pool.
The attendance ring shows the present/absent split of the enrolled population, the total in the centre and the resulting rate underneath. Slices with no data are omitted rather than drawn at zero, and the rate is suppressed entirely when the population is empty.
Fees are customer invoices. The theme reports collected, outstanding, overdue and expected totals, the collection rate, the number of students carrying an unpaid invoice, and a twelve-month grouped bar chart.
· Overdue is measured against each invoice's own due date, not its issue date: using the issue date would flag a freshly issued invoice as late.
· Outstanding amounts are drawn in neutral grey. Green is reserved for money actually collected.
· Bars use a square-root scale, because one month holding many times another flattens every other bar into an invisible hairline on a linear scale.
Exam sessions are agenda events. The chart compares the current academic year with the previous one on a single shared scale so the two series are directly comparable. When the Agenda module is disabled, the panel is replaced by a one-line notice naming the module to enable.
Courses are services. Smart reports the catalogue size, the open/closed split and the variation against the previous period, and links through to the service list filtered on type.
Library loans are stock movements: an outgoing movement is a book issued, an incoming one a book returned. The twelve-month chart reports both series with their totals. The widget is hidden when the Stock module is disabled.
The sidebar carries the Smart mark, a profile card with the user's avatar, name and role, a live module filter, the navigation tree and a customisation button.
The navigation tree is the native Dolibarr menu, re-rendered. It therefore inherits, without any additional code, every active module's entries, the user's permissions, entity restrictions, translations and badge counters. It is not a static list.
· Width modes: preset, mini (folded), large, floating.
· Surface: light, dark or coloured, independently of the demo.
· Collapse with state memorised per browser; hover-to-open when folded.
· Live filter over menu labels; favourites; internal scrolling.
· SMART_NATIVE_MENU restores the untouched native left menu as a safety hatch.
The top bar hosts the sidebar toggle, the global search field, the dark-mode switch, and Dolibarr's own login block (notifications, messages, entity selector, user menu, logout), restyled to match.
Contrast is resolved from the active variant. The search field and icon buttons have two declared families: translucent white on a dark, coloured or gradient bar, and ink-on-surface on a light bar. This matters: painting them white unconditionally renders the global search white-on-white and effectively invisible on the light bar the three education demos use.
The search page queries third parties, contacts, users, products and services, invoices, orders, proposals, projects, tasks and agenda events, honouring the caller's permissions and entity. Results are grouped by object type, each row carrying an icon, a reference, a label, a status and a direct link.
Every chart is inline SVG rendered by the theme. No charting library is bundled, downloaded or required, which removes both a licensing question and a network dependency.
|
Chart |
Used for |
|
Dual curve |
Exam performance, library loans, enrolment survey |
|
Area curve |
Student enrolment trend |
|
Grouped bars |
Monthly fee collection |
|
Ring / donut |
Student attendance |
|
Progress meter |
Homework completion, task progress |
|
Sparkline bars |
Admissions trend |
Charts follow the active palette and the dark-mode tokens, and are redrawn at any viewport width because they carry no fixed pixel geometry.
Dolibarr's native lists are restyled rather than replaced, so sorting, filtering, pagination, mass actions, column selection, import and export all keep working exactly as the application defines them.
The dashboard's own tables add avatars, status badges and inline progress bars, and scroll horizontally inside their panel so a wide table never pushes the page sideways.
Text, numeric, monetary, date and time inputs, selects, autocompletes, checkboxes, radios, switches, text areas, file uploads and action buttons are restyled through Dolibarr's own markup. No form is rebuilt, so validation, CSRF tokens and server-side behaviour are untouched.
Each demo ships its own sign-in layout: split screen (Academic Overview), minimal flat (University Analytics) and hero (Education Management). All three carry the Smart mark, the native identifier and password fields, the entity selector, the password-reset and help links, and inherit dark mode.
Authentication is entirely Dolibarr's. The theme contributes styling only. The core sign-in page renders a fixed logo image and offers no hook to replace it, so Smart collapses that image in CSS and paints its own mark in its place — the markup and the core file are untouched.
The layout is fluid from large desktop screens down to portrait phones. The sidebar becomes a sliding drawer with a backdrop, KPI tiles stack, charts rescale and wide tables scroll inside their own container.
Horizontal overflow is asserted, not assumed: every captured page is measured at 1600, 820 and 390 pixels and fails the screenshot run if the document is wider than the viewport. On an earlier theme the offending element turned out to be the demo switcher itself, not the tables, which is why the check probes the document rather than any particular component.
Dark mode is a full token swap, not a filter. It covers the sidebar, the top bar, the page background, cards, tables, forms, charts, Dolibarr's native drop-downs and dialogs, notifications and the sign-in pages.
The native overlays deserve a specific mention: Dolibarr's drop-down menus, autocompletes and dialogs ship hard-coded light surfaces, so without an explicit rule they open as a white sheet over a dark page. Smart darkens them, scoped to the dark attribute so light mode is untouched.
It can be toggled from the top bar, forced from the configuration screen, or left to follow the operating system preference. The choice is remembered in the browser.
A single configuration screen drives the theme. Every setting it writes is read back by the theme, and every setting the theme reads is offered on the screen — the two lists are checked against each other as a build step, because a value offered in the interface but never read is an unreachable setting that silently stays at its default.
|
Group |
Settings |
|
Demo |
Demo selection, palette, KPI family, dark by default |
|
Layout |
Fluid / boxed / compact / full width, navigation orientation, gap |
|
Sidebar |
Light, dark, coloured, mini, large, floating; width |
|
Top bar |
Light, dark, coloured, gradient, transparent |
|
Cards |
Radius, shadow, borders, animations |
|
Typography |
Family, base size, optional web fonts |
|
Dashboard |
Core widget zone, turnover basis, hide dashboard |
|
Data |
Turnover base (net/gross), include abandoned invoices |
Import and export. The configuration can be exported to JSON and re-imported. The import validates strictly against a whitelist: an unknown key or a value outside the allowed list is rejected rather than stored.
Settings are stored as Dolibarr constants, so they are per-entity by construction and survive sign-out. The demo preview (?smartdemo=) is per-session and never touches the stored configuration, which makes it safe for demonstrations.
Dark mode is remembered per browser, in local storage. It is therefore a per-device preference rather than a per-user one, and this document states it plainly rather than implying a server-side setting that does not exist.
The core widget zone under the dashboard is Dolibarr's own box system: users add, hide and drag-reorder those widgets, and Dolibarr persists the layout per user.
· Text and interface contrast targets WCAG AA on both light and dark surfaces; the top-bar controls were reworked specifically because a white-on-white combination made the global search unreadable.
· Focus is always visible: focused fields take an accent border plus an offset ring.
· Touch targets on the sidebar, the top bar and the demo switcher are at least 40 px.
· Status is never carried by colour alone — badges pair a colour with a text label.
· prefers-reduced-motion is honoured: transitions and transforms are disabled.
· The navigation is the native menu tree, so its semantics and link text are Dolibarr's own and remain screen-reader friendly.
Full assistive-technology certification has not been carried out; see Limitations.
· One stylesheet and one script, both generated from the token set, both cacheable.
· Only the active demo's markup and queries are produced; the other two cost nothing.
· No charting library, no icon font beyond the Font Awesome already bundled with Dolibarr, and no external image.
· Web fonts are optional and can be disabled, after which the theme makes no external network request at all.
· Charts are inline SVG, so they add no request and scale without re-fetching.
· Assets carry a version-stamped URL, so an upgrade busts the cache.
While a demo preview is active both assets are served Cache-Control: no-store. This is necessary rather than cautious: the stylesheet URL does not change during a preview, so a cached sheet would paint one demo's markup under another demo's chrome.
· Permissions are Dolibarr's. The menu is the native tree, already filtered; the dashboard links to native pages that re-check rights server-side.
· Multi-entity is honoured through getEntity() on every query.
· All output is escaped with Dolibarr's escaping helpers.
· Configuration writes go through the native constant API and carry the CSRF token the framework validates.
· The JSON import validates against a strict whitelist; unknown keys and out-of-range values are rejected.
· Authentication is entirely native. The theme contributes styling only and never handles credentials.
· No core file is modified, no core table altered, and the theme ships no secret.
Smart detects the active modules and adapts. When a module a widget depends on is absent, the widget is skipped and replaced by a short non-blocking line naming the module to enable — no PHP notice, no JavaScript error, no hole in the layout.
|
Academic concept |
Dolibarr source |
Module |
|
Students |
Third parties, client role 1 or 3 |
Societe |
|
Applicants |
Prospects, client role 2 or 3 |
Societe |
|
Teachers, staff |
Users |
core |
|
Departments |
User groups |
core |
|
Courses |
Services |
Product / Service |
|
Classes |
Categories |
Categorie |
|
Fees, payments |
Customer invoices and payments |
Facture |
|
Homework |
Project tasks and progress |
Projet |
|
Exams |
Agenda events |
Agenda |
|
Library loans |
Stock movements |
Stock |
|
Staff leave |
Approved holiday requests |
Holiday |
|
Documents |
ECM documents |
ECM |
The theme declares a minimum of Dolibarr 16 and was fully installed, activated and exercised on Dolibarr 17.0.3 with PHP 8, which is the version of the validation instance available for this work.
It uses only documented extension points — module_parts, a MenuManager, the hook system and the constant API — none of which changed in Dolibarr 18 to 21. Forward compatibility with 20 and 21 is therefore expected but, as stated in the validation report, has not been executed on those versions here; the manual verification procedure is given there.
Smart uses CSS custom properties, flexbox, grid, color-mix() and inline SVG. These are supported by all current versions of Chrome, Edge, Firefox and Safari.
Rendering was executed in this project on Chromium (Google Chrome engine) on macOS at desktop, tablet and phone viewports. Firefox, Edge and Safari were not executed here; see the validation report for what that means and how to reproduce the check.
|
File |
Role |
|
core/modules/modSmart.class.php |
Module descriptor: module_parts, menu manager, constants |
|
core/smart_presets.php |
Preset library and token resolution — single source of truth |
|
core/menus/standard/smart_menu.php |
MenuManager entry point |
|
core/menus/standard/smart.lib.php |
Sidebar and chrome rendering over the native menu tree |
|
class/actions_smart.class.php |
Hook: routes the home page to the Smart dashboard |
|
class/smart_demo.class.php |
Demo/preview helper |
|
css/smart.css.php |
Generated stylesheet, driven by the resolved tokens |
|
js/smart.js.php |
Top-bar injection, sidebar behaviour, dark-mode toggle |
|
index.php |
The three dashboards and the academic data layer |
|
admin/setup.php |
Configuration screen, JSON import/export |
|
search.php |
Global search |
|
langs/* |
Translations, five languages |
|
img/smart-logo.svg |
Original brand mark |
There is no SCSS build step, and this is a deliberate architectural choice rather than an omission: the stylesheet is generated per request from the preset tokens, which is exactly what allows a demo, a palette or a radius to change without recompiling anything. A pre-compiled SCSS bundle could not do that.
smart/
admin/setup.php
class/actions_smart.class.php
class/smart_demo.class.php
core/modules/modSmart.class.php
core/smart_presets.php
core/menus/standard/smart_menu.php
core/menus/standard/smart.lib.php
css/smart.css.php
js/smart.js.php
img/smart-logo.svg
langs/{en_US,fr_FR,es_ES,it_IT,de_DE}/smart.lang
index.php
search.php
README.md CHANGELOG.md LICENSE
Summary; the full guide is Smart_Installation_Guide.pdf.
· Home > Setup > Modules > Deploy external module, upload module_smart-1.0.zip.
· Enable Smart in the module list.
· Home > Setup > Display: select the Smart menu manager.
· Open the Smart configuration screen and pick a demo.
· Optional: palette, sidebar and top-bar variants, dark mode, typography.
· Deploy the new ZIP over the previous one; the folder name does not change.
· Stored settings are preserved: they are Dolibarr constants, untouched by a redeploy.
· The asset version constant is bumped on activation, which busts the browser cache.
· No database migration is required — the theme creates no table.
· Colours: pick a predefined palette, or Custom and set the primary and accent values.
· Shape: radius, shadow, borders and animations are individual settings.
· Typography: family, base size, and an option to disable external web fonts.
· Layout: fluid, boxed, compact or full width; vertical or horizontal navigation.
· Adding a demo: add one entry to smartPresets() — palette, KPI family, dashboard key, sign-in layout. The configuration screen, the stylesheet and the switcher pick it up with no further change.
· Local overrides survive upgrades if placed in a separate module's stylesheet rather than edited into smart.css.php.
All user-facing strings go through Dolibarr's translation system. Five languages ship complete: English, French, Spanish, Italian and German.
Every key is prefixed with Smart. This is not cosmetic: Dolibarr merges all active modules' language files into one table, and a generic key resolves to whichever module loaded last — on a busy instance a shared key silently renders another module's wording. A build-time check asserts that every key the code requests exists in each of the five files; it currently reports zero missing keys in all five.
Adding a language means copying langs/en_US/smart.lang to the new locale folder and translating the values. No code change is required.
Fifty-one screenshots ship with the theme, seventeen per demo, captured at 1600x990 at a device pixel ratio of 2 from a live Dolibarr 17.0.3 instance. They contain no personal data beyond the demonstration records already present in that instance.
|
File |
Content |
|
00-login.png |
Sign-in page in the demo's own layout |
|
01-dashboard.png |
Main dashboard |
|
02-configuration.png |
Theme configuration screen |
|
03-students.png / 04-student-card.png |
Student list and record |
|
05-teachers.png / 06-teacher-card.png |
Teaching staff list and record |
|
07-courses.png |
Course catalogue |
|
08-fees.png |
Fees and payments |
|
09-homework.png |
Homework (project tasks) |
|
10-exams-agenda.png |
Exam sessions (agenda) |
|
11-admissions.png |
Admissions pipeline |
|
12-projects.png |
Projects |
|
13-search.png |
Global search |
|
14-dark-mode.png |
Dashboard in dark mode |
|
15-tablet.png / 16-mobile.png |
Tablet and phone viewports |
Each capture is asserted at capture time: the page must not be the sign-in form, must not contain a PHP error, and the dark-mode shot must show a background colour that actually changed. That last check exists because comparing two files is not sufficient — live data makes them differ anyway, so a mis-set attribute would otherwise ship three light-mode images labelled dark mode.
· Three complete dashboards on one architecture, one permission model, one configuration screen.
· Real Dolibarr data everywhere; no placeholder figures, no fabricated series.
· Works on a standard Dolibarr with no school module installed.
· Graceful, explicit degradation when an optional module is absent.
· No core modification, no database table, no external runtime dependency.
· Five complete languages with collision-proof keys.
· Full dark mode including Dolibarr's own overlays.
· Native lists keep every native capability: filters, sorting, export, mass actions.
Stated plainly, so the reader can judge scope.
· Smart is a theme. It does not add academic objects: there is no student record, no timetable, no grade book and no attendance register. It reads what Dolibarr already holds through the documented mapping.
· Consequently some figures are proxies. Student attendance derives from third-party status, not from a daily register; exam performance counts agenda sessions rather than marks. Where a proxy is used, the widget's own wording says what is being counted.
· Per-role configuration is not implemented: Dolibarr constants are global or per-entity, and no per-role constant scope exists. Per-user variation is limited to Dolibarr's own widget zone and the browser-level dark-mode preference.
· Widget drag-and-drop, resize and collapse apply to Dolibarr's core widget zone, which provides them. The three demo dashboards themselves are fixed compositions, not a free-form grid.
· Dark mode is remembered per browser, not per user account.
· Rendering was executed on Chromium only, and on Dolibarr 17.0.3 only.
· No formal accessibility audit with assistive technology was carried out.
· A companion module contributing genuine academic objects — student records, timetables, attendance registers, grade books — that Smart would read natively.
· Per-user dashboard composition persisted server-side.
· A free-form widget grid for the three demos, with saved layouts.
· Additional languages beyond the five shipped.
· Execution of the browser matrix and a formal accessibility audit.
Editor: DoliResources — https://www.doliresources.com
Support covers installation, configuration, upgrades and defect correction for the supported Dolibarr versions. When reporting an issue, please include the Dolibarr version, the PHP version, the active demo, the browser, and a screenshot; the combination of those five is usually enough to reproduce a rendering defect on the first attempt.
Smart is distributed under GPL-3.0-or-later. Copyright (C) 2026 DoliResources.