Discover powerful Dolibarr extensions designed to automate your business processes

Wooble is a premium theme-module for Dolibarr ERP/CRM. It replaces the whole back-office chrome - top bar, sidebar, dashboard, lists, cards, forms and login screen - with a modern SaaS interface built around a full-width violet gradient header, a light navigation rail and soft-shadowed white cards on a pale blue-grey canvas.
Wooble ships three complete, interchangeable demos. Each one is a full identity - its own accent palette, KPI card treatment, dashboard composition and login layout - and the administrator switches between them from the configuration screen in a single reload, without reinstalling anything and without touching a single file of the Dolibarr core.
|
Demo |
Focus |
Signature KPI cards |
Primary data sources |
|
Wooble Analytics |
Audience and activity intelligence |
Wide cards with a share percentage and a progress track |
Users, third parties, proposals, agenda |
|
Wooble Projects |
Delivery and project cockpit |
Sparkline cards over an ongoing-projects table |
Projects, tasks, orders, invoices, agenda |
|
Wooble Finance |
Treasury and revenue |
Full-bleed gradient wallet cards |
Bank accounts, invoices, payments, projects |
Every figure displayed comes from a live SQL query against the standard Dolibarr tables. Nothing on any dashboard is hardcoded or simulated.
Wooble is delivered as a Dolibarr module (a "theme-module"), not as a CSS theme. A CSS-only theme can recolour stock Dolibarr but cannot recreate the interface structure the design calls for: a custom sidebar rendered from the native menu tree, a full-width gradient top bar carrying the brand, and a bespoke dashboard. The module form makes all three possible while leaving the core untouched.
|
Property |
Value |
|
Commercial name |
Wooble |
|
Technical name |
theme_wooble |
|
Folder name |
wooble |
|
Descriptor class |
modWooble |
|
Module id ($this->numero) |
10000480 |
|
Version |
1.0 |
|
Configuration prefix |
WOOBLE_* |
|
Package file |
module_wooble-1.0.zip |
|
Editor |
DoliResources - https://www.doliresources.com |
|
Licence |
GPL-3.0-or-later |
· Reproduce the reference design faithfully: gradient top bar, light sidebar, white cards, soft shadows, generous spacing and a geometric sans-serif type scale.
· Ship three distinct professional identities from a single codebase, so a customer can pick the one that matches their business without a bespoke development.
· Keep every figure real: map each metric of the design onto a documented Dolibarr equivalent rather than inventing a number.
· Never modify the Dolibarr core: only official extension points (module_parts, hooks, forced menu managers, configuration constants).
· Stay fast: one dynamic stylesheet and one script, both cached, no heavy framework, no external CDN dependency.
· One visible surface at a time. Inner containers are transparent and the parent row carries the styling, so no card ever sits inside another card.
· A single clear active state: soft primary plate, left accent bar and a coloured bullet, applied to the whole clickable row rather than to the label alone.
· Data first. The figure is the largest element of a KPI card and never wraps; long amounts step down a size rather than breaking across two lines.
· Empty states, never empty boxes. A panel with no data renders an icon, a title, a one-line explanation and a call to action.
· Colour is never the only signal: priorities and statuses carry a label next to their coloured marker.
Audience and activity intelligence. Three wide KPI cards, each with a headline figure, its share of a meaningful whole and a progress track, sit above a six-up metric strip with sparklines and a large multi-series turnover curve.
The reference design shows web-analytics metrics. An ERP has no page views or bounce rate, so each is mapped onto its closest business equivalent and the label displayed names the business metric - the interface never claims to measure web traffic:
|
Design metric |
Wooble metric |
Computation |
|
Total visitors |
Active users |
Enabled users over total users |
|
New signups |
New customers |
Third parties created in the period |
|
Email enquiries |
Open requests |
Proposals still open |
|
Visits |
Visits |
Agenda events recorded in the period |
|
Page views |
Documents |
Invoices + orders + proposals created |
|
Pages / visit |
Docs / customer |
Documents over active customers |
|
Average time |
Average delay |
Mean order-to-invoice delay, in days and hours |
|
Returning visits |
Returning |
Customers with more than one invoice |
|
Bounce rate |
Conversion |
Signed proposals over decided proposals |
The conversion rate deliberately divides by proposals that reached a decision (signed or refused) rather than by every proposal: including still-open proposals in the denominator would drag the rate down and misrepresent commercial performance.
A delivery cockpit. Three sparkline KPI cards head the page, followed by the ongoing-projects table: reference and title, the responsible user with their avatar, a priority badge and a progress bar with its percentage.
· The responsible user is the internal PROJECTLEADER contact of the project; when a project has none, the creator is shown instead.
· The priority is derived from the deadline: due within a week (or overdue) is High, within a month is Medium, beyond that is Low.
· The progress is averaged over the project tasks; a project with no task falls back to its opportunity percentage so the bar is never misleadingly empty.
· Rows are ordered by nearest deadline first, and undated projects sort last.
Treasury and revenue. Three full-bleed gradient wallet cards - turquoise, soft violet and blue - carry the headline financial figures, above the projects table and the revenue charts.
The reference design shows cryptocurrency wallets. Those have no place in an ERP, so each card is replaced by its business equivalent, as specified:
|
Design card |
Wooble card |
Computation |
|
Bitcoin wallet |
Treasury |
Balance of all open bank accounts |
|
Dollar wallet |
Turnover |
Invoiced over the selected period |
|
Crypto wallet |
Collections |
Payments actually received over the period |
|
Referrals |
Revenue by channel |
Turnover split by customer type / origin |
· Period selector (week / month / year) that drives every KPI, chart and tile link.
· Quick-action tiles for the six most common creations (invoice, proposal, order, customer, product, event).
· A turnover curve comparing the current year against the previous one.
· A commercial pipeline panel with proposals grouped by status.
· Latest invoices, today's agenda and a recent-activity feed.
· Native Dolibarr widget zone (FormOther::getBoxesArea) so users keep their own boxes.
One markup, five looks. The dashboard stamps a style class on the KPI grid and each tile carries its own tint or gradient as inline CSS custom properties, so switching demo restyles the row with no conditional HTML.
|
Style |
Used by |
Description |
|
progress |
Analytics |
Outline icon, large figure, share percentage, full-width track |
|
spark |
Projects |
Icon and label on one line, figure below, sparkline at the bottom |
|
wallet |
Finance |
Full-bleed gradient, white type, large watermark glyph |
|
solid |
Optional |
Full-colour tile |
|
soft |
Optional |
White card with a tinted icon chip |
Every KPI card is clickable through a stretched-link overlay, and its destination is a Dolibarr list pre-filtered to exactly the same scope - same period, same statuses - so the list total always matches the number shown on the tile.
· Rendered from the NATIVE Dolibarr menu tree, so it automatically reflects the enabled modules and the current user's permissions. It is never a static list.
· Accordion groups that fold in place, with a chevron that is a separate click target from the module link.
· A level-encoded active id so the highlighted entry stays correct across pages and across browser tabs.
· Menu search, bookmarks/favourites and a recently-opened section.
· Seven modes: preset, mini rail, large, floating, dark, light and coloured.
· Collapsed state persisted in localStorage and applied before the first paint, so a reload never flashes the wrong layout.
The signature Wooble element: a full-width violet-to-purple gradient bar carrying the brand on the left, then the sidebar toggle, the global search pill, and on the right the language, entity selector, print, help, dark-mode switch, user avatar and logout.
The brand block is MOVED into the bar from the sidebar rather than duplicated, so the logo keeps coming from Dolibarr through dol_buildpath and a customer logo is honoured automatically.
The search pill submits to the theme's own results page, which searches third parties, products, invoices, orders, proposals and projects in one pass and groups the results by type. Keyboard shortcut: "/" focuses the field from anywhere.
The dashboard exposes the native Dolibarr widget zone alongside the Wooble panels, so users keep the boxes they already configured (base statistics, account balances, low stock alerts, per-month graphs). On first visit the personal zone is seeded with a sensible default set so the add-widget selector is available immediately.
· Inline SVG only - no charting library is loaded, so there is no extra network cost and no external dependency.
· Turnover curve with a hover crosshair, a marker dot and a tooltip.
· Sparklines on KPI cards and on the Analytics metric strip.
· A donut for the commercial pipeline, with zero-length arcs skipped so no stray dot is painted on the ring.
· Progress bars in the project tables and on the Analytics KPI cards.
· Every chart follows the demo palette and re-tints automatically in dark mode.
Native Dolibarr lists are restyled: clear headers on a tinted plate, airy rows, hover highlight, rounded card corners without white notches, and a filter bar in its own card. The theme's own tables add avatars, priority badges and progress bars. Wide tables scroll inside their own container so the page itself never scrolls sideways.
Text, number, select, date, autocomplete, checkbox, radio, switch, upload, textarea and monetary fields are restyled to the Wooble input language: soft border, themed focus ring, comfortable height. select2 dropdowns get a solid themed background and a readable highlighted option - the stock override leaves it white on white. Required markers, error and validation messages follow the semantic palette. All native Dolibarr form components keep working unchanged.
Each demo brings its own login layout, resolved SERVER-side in the stylesheet: the login screen is pre-session, so neither localStorage nor the pre-paint script is available and the administrator default is the single source of truth there.
|
Demo |
Layout |
Treatment |
|
Wooble Analytics |
centered |
Light canvas, violet gradient panel, white form card |
|
Wooble Projects |
split |
Split screen, turquoise and violet accents |
|
Wooble Finance |
card |
Gradient card presentation, cyan / blue / violet |
All three carry the logo, username, password, remember-me, forgotten-password link, error messages and are fully responsive.
· Large screens, laptops, tablets and phones, verified down to a 390 px viewport.
· The sidebar becomes an off-canvas drawer on phones; the folded rail is a desktop-only state and is never applied on mobile.
· The top bar simplifies on phones to brand, menu and user - the native tool row is otherwise 684 px wide and would force the page to scroll sideways.
· KPI grids collapse to a single column; tables scroll inside their own container.
· Verified programmatically: document.scrollWidth equals window.innerWidth at 390 px on all three demos.
A true dark mode, not a tinted light mode. The whole surface family is redefined: canvas, cards, sidebar, tables, forms, dropdowns, charts and modals. Two specific corrections matter:
· Pastel tiles are NOT reused. An orange or red at 11 % opacity renders brown over a navy canvas and a green renders olive, so in dark mode the tile drops to the card surface and the colour moves into the icon chip.
· Core rules that hardcode a hex colour instead of a CSS variable - notably the #f0f0f0 odd-row separator - are re-tinted to the theme border token, otherwise they draw a harsh near-white line across dark tables.
Dark mode can be toggled from the top bar, set as the default in the configuration, and the stored preference is applied before the first paint so a reload never flashes.
A single grouped configuration screen drives everything. Its defaults and the stylesheet defaults are read from the SAME preset array, so a "reset" can never restore a palette the CSS no longer knows about.
|
Group |
Settings |
|
Demo |
Wooble Analytics / Wooble Projects / Wooble Finance |
|
Palette |
Preset, Purple, Blue, Cyan, Turquoise, Green, Orange, Red, Pink, Indigo, Custom; success / danger / warning colours; custom top-bar gradient |
|
Layout |
Wide, Boxed, Compact, Fluid, Comfortable |
|
Sidebar |
Preset, Mini, Large, Floating, Dark, Light, Coloured; rail width |
|
Top bar |
Preset, Gradient, Transparent, Light, Dark, Coloured |
|
KPI cards |
Preset, Progress, Sparkline, Wallet, Solid, Soft |
|
Typography |
Poppins, Nunito Sans, Inter, Figtree, Roboto, System; base size |
|
Effects |
Card radius, shadows, borders, animations, dark-mode default |
|
Dashboard |
Turnover basis (HT / TTC), abandoned invoices, hidden panels |
The custom gradient is validated against a strict character whitelist before it is written into a CSS declaration - braces, semicolons, quotes and url() are rejected, so a configuration value cannot close the rule and inject arbitrary CSS.
Settings are stored per entity, so a multi-company installation can give each entity its own look. On top of the administrator defaults, each user keeps their own dark-mode choice, sidebar collapsed state and recently-opened list, held client-side so no database write happens on every page view. A per-request "?woobledemo=" preview lets a demo be shown or screenshotted without changing the stored configuration.
· Text and interface contrasts follow WCAG AA on both light and dark surfaces.
· Full keyboard navigation with visible focus rings on every interactive element.
· ARIA labels on icon-only controls; decorative glyphs marked aria-hidden.
· Stretched links carry an explicit accessible name, so a KPI tile is announced.
· Click targets are at least 40 px on touch devices.
· Status and priority are never conveyed by colour alone - each carries a text label.
· Animations honour the operating system's reduced-motion preference, and can be switched off entirely from the configuration.
· One dynamic stylesheet and one dynamic script for the whole back office, both served with a one-hour cache and a revision-based cache-buster.
· No charting library, no icon font beyond the Font Awesome that Dolibarr already ships, no external CDN - the strict-CSP-safe choice and one fewer network hop.
· All charts are inline SVG generated server-side.
· Expensive counts are cached in the session.
· Web fonts are optional and can be disabled to fall back to a system stack.
· No file of the Dolibarr core is modified, added to or patched.
· Configuration writes go through dolibarr_set_const with CSRF tokens; the reset action is token-protected and confirmed.
· The configuration page is view-only for non-administrators and every mutating action is blocked server-side, independently of the interface.
· All output is escaped with dol_escape_htmltag; all GET parameters are read through GETPOST with a filter chosen to preserve the value.
· The custom gradient - the only free-text setting rendered into CSS - is validated against a character whitelist, not merely escaped.
· The sidebar renders the native menu, so Dolibarr permissions are enforced by construction: a user never sees an entry they cannot open.
Wooble uses only official extension points:
|
Mechanism |
Use |
|
module_parts[css] / [js] |
Inject the theme stylesheet and script on every page |
|
module_parts[menus] |
Register the custom menu manager |
|
MAIN_MENU*_FORCED |
Force the Wooble sidebar on standard, front and smartphone |
|
Hook "main" |
Redirect the home page to the Wooble dashboard |
|
Hook "addHtmlHeader" |
Pre-paint state script and print stylesheet |
|
Hooks "toprightmenu" / "searchform" |
Top-bar and search integration |
|
print_eldy_menu / print_left_eldy_menu |
Read the native menu tree |
|
FormOther::getBoxesArea |
Native widget zone on the dashboard |
The descriptor declares need_dolibarr_version = array(16, 0) and phpmin = array(7, 0). Every core API used was checked for existence and for an unchanged signature across the supported range. The theme was built and verified on Dolibarr 17.0.3 with PHP 8.1, and is compatible with Dolibarr 20 and 21. It works with native modules, with well-behaved external modules, in multi-entity environments and with left-to-right and right-to-left languages.
The theme uses CSS custom properties, flexbox and grid - all baseline in every currently supported browser. It was verified in a Chromium 148 engine (the base of Google Chrome and Microsoft Edge) at desktop and mobile viewports, in light and dark mode. Firefox and Safari are supported by construction: no engine-specific property or prefix-only feature is used. See the Technical Validation Report for exactly which browsers were executed and which were not.
A single resolved preset drives everything. core/wooble_presets.php is a pure library - it never bootstraps Dolibarr and never prints - so the dynamic CSS, the dynamic JavaScript, the dashboard, the sidebar renderer and the configuration page all include it and all resolve the same values. Adding a fourth demo is one entry in that array.
The active demo is resolved in TWO mirrored places - the pre-paint header script and the module script - because a setting applied in only one of them is a dead setting. The script never overwrites what the pre-paint already stamped on the document element: the script may be served from an hour-old cache while the pre-paint is always fresh.
|
Path |
Role |
|
core/modules/modWooble.class.php |
Module descriptor, init() and remove() |
|
core/wooble_presets.php |
Preset and design-token engine (single source of truth) |
|
core/wooble_dashdata.php |
Per-demo dashboard queries |
|
core/menus/standard/wooble_menu.php |
Menu manager |
|
core/menus/standard/wooble.lib.php |
Sidebar renderer |
|
class/actions_wooble.class.php |
Hooks: redirect, pre-paint header |
|
class/wooble_demo.class.php |
Demo dataset generator |
|
css/wooble.css.php |
Complete dynamic stylesheet |
|
js/wooble.js.php |
Theme toggle, drawer, accordions, top-bar injection |
|
index.php |
The three dashboards |
|
search.php |
Global search results |
|
admin/setup.php |
Configuration screen |
|
langs/<lang>/wooble.lang |
Translations (7 languages) |
Summary - the full procedure is in Wooble_Installation_Guide.pdf.
· Home > Setup > Modules > Deploy an external module, and upload module_wooble-1.0.zip.
· Find "Wooble" in the module list and enable it.
· If the Wooble sidebar does not appear at once, disable and re-enable the module once so init() re-registers the forced menu managers.
· Open the module configuration and choose one of the three demos.
Upload the new package over the previous one and enable it. When the module version changes, init() bumps the asset revision, so browsers pick up the new stylesheet and script on an ordinary reload. Configuration is preserved: every setting is a Dolibarr constant and no upgrade step deletes them. After changing the module id or version, disable and re-enable once so init() runs again.
· Most needs are covered by the configuration screen: demo, palette, layout, sidebar, top bar, KPI style, font, radius, shadows, borders and animations.
· To add a fourth demo, add one entry to wooblePresets(); it appears in the selector automatically and needs no new stylesheet.
· To change a colour outside the ten palettes, choose the Custom palette and set the primary and accent colours, or supply a full CSS gradient for the top bar.
· To extend the dashboard, add a query to core/wooble_dashdata.php and a panel to index.php - both follow one documented pattern.
All interface text goes through the Dolibarr translation system; nothing is hardcoded, including every label, hint and option on the configuration screen. Seven languages ship with the theme:
|
Language |
File |
|
English |
langs/en_US/wooble.lang |
|
French |
langs/fr_FR/wooble.lang |
|
Spanish |
langs/es_ES/wooble.lang |
|
German |
langs/de_DE/wooble.lang |
|
Italian |
langs/it_IT/wooble.lang |
|
Portuguese (BR) |
langs/pt_BR/wooble.lang |
|
Dutch |
langs/nl_NL/wooble.lang |
All seven files carry exactly 248 keys with identical names, verified automatically. Module keys are prefixed to avoid silently colliding with a core key of the same name, which Dolibarr would resolve in favour of the core file.
27 screenshots ship with this package, nine per demo, captured at 3200x1980 pixels (1600x990 at 2x) from a live Dolibarr instance with the theme's own demo dataset:
|
File |
Content |
|
*_01_dashboard.png |
Demo dashboard, light mode |
|
*_02_thirdparties.png |
Third-party list |
|
*_03_invoices.png |
Invoice list |
|
*_04_projects.png |
Project list |
|
*_05_products.png |
Product list |
|
*_06_agenda.png |
Agenda |
|
*_07_setup.png |
Theme configuration screen |
|
*_08_dark.png |
Dashboard in dark mode |
|
*_09_mobile.png |
Dashboard at a 390 px mobile viewport |
· Three professional identities for the maintenance cost of one codebase.
· Every figure is real Dolibarr data, queried live - the dashboards are usable, not decorative.
· The sidebar follows the native menu and the user's permissions automatically, so it never drifts out of step with the installed modules.
· No core modification: upgrading Dolibarr does not conflict with the theme.
· A true dark mode across the whole back office, including native pages.
· Deep configuration without touching a file.
· Light footprint: no charting library, no external CDN.
· Only one theme-module can own the forced menu managers at a time. If another theme-module is installed, the last one enabled wins, and both injecting their own top bar produces a duplicated chrome.
· The Treasury and Collections cards of the Finance demo require the Bank module; without it they legitimately read zero.
· The average order-to-invoice delay needs orders and invoices to be linked; unlinked documents cannot be measured and are excluded rather than counted as zero.
· Right-to-left languages are supported through the standard Dolibarr RTL mechanism but were not visually verified in this release.
· Very old browsers without CSS custom-property support are not supported.
· Additional demos built on the same preset engine.
· Per-user demo selection in addition to the per-entity default.
· Drag-and-drop dashboard panel arrangement, persisted per user.
· Chart export to PNG and CSV.
· A visual theme builder that writes the JSON configuration.
· A verified right-to-left pass.
Wooble is published and maintained by DoliResources. Support requests, bug reports and customisation enquiries go through https://www.doliresources.com. Please include the Dolibarr version, the PHP version, the active demo, the browser and a screenshot of the problem.
Copyright (C) 2026 DoliResources - https://www.doliresources.com - Licence GPL-3.0-or-later. All rights to this development belong exclusively to DoliResources. The reference screenshots were used as a visual reference only: no third-party source code, proprietary logo, protected image or unlicensed icon has been reused.