TL;DR:
Over our years running on Odoo Community, we've accumulated 19 in-house modules that we use at Blue Fox and at our clients.
We publish them under open-source licences at github.com/bluefoxconsultant/odoo-modules.
Every module was born from a real need, not a product plan: Nextcloud integration, Law 25 compliance, hour bank, timesheet timer, managed hosting, cross-cutting search, SMS and call archive, and more.
Our clients inherit the catalog: if they leave us tomorrow, their instance keeps running on code any integrator can maintain.
Our Odoo Community instance runs with 19 in-house modules in production. Some are peripheral, others are part of Blue Fox's operational core. We wrote them one at a time, as needs came up, because Odoo Community is immensely capable but every organization eventually trips on the same three or four gaps.
At some point we asked ourselves why we were keeping all of this to ourselves. Short answer: we weren't keeping it intentionally, we just hadn't taken the time to publish it cleanly. That's now done. Here's a tour of the catalog.
Why open up the code
Blue Fox uses dozens of open-source modules every day: the OCA, community projects, individuals' code. It's thanks to that ecosystem that we can offer Odoo Community to our clients at a reasonable cost. Giving back what we can is the normal counterpart.
There's also a question of client sovereignty. When an organization picks Odoo Community with us, it doesn't want to end up captive to a provider. By publishing our modules under open-source licences (LGPL-3 for most, MIT or AGPL-3 for some, all OSI-approved), we guarantee their instance stays operable even if Blue Fox disappears tomorrow. Another integrator can clone the repo, read the code, and take over. That's what we'd want for ourselves as clients.
Last and more prosaic motive: publishing forces better hygiene. A module destined for GitHub gets better documentation, better tests, cleaner dependency lists. External users also find bugs we'd never have spotted from inside our own bubble.
The Odoo ↔ Nextcloud bridge
Three modules that make Odoo and Nextcloud talk to each other directly, without going through a middleware. We pulled them out because existing solutions often relied on n8n or Zapier, adding an external dependency for something the standard protocols (CardDAV, CalDAV, WebDAV) handle perfectly well.

contacts_nextcloud_sync.
Syncs Odoo contacts with a Nextcloud address book via CardDAV. The sync is bidirectional, with ETag change detection, exclusion-tag filtering, automatic recovery of orphan UIDs, and credentials encrypted at rest. Concretely, your Odoo contacts show up in your phone's Contacts app, and edits flow back to the ERP without anyone thinking about it.

calendar_nextcloud_sync.
Same bridge, for calendars. Standard CalDAV, recurring event support (RRULE), incremental sync with RFC 6578 sync-tokens, and webhook propagation for real-time. Calendar colors are preserved. Useful when you want to see your Odoo meetings in Thunderbird or on iOS, or the other way around.

bf_document_nextcloud_sync.
Moves files off the Odoo disk and onto Nextcloud. Odoo keeps the metadata, versioning and workflows, but the file lives on NC. This lets you share a document with a client via a password-protected Nextcloud link, from inside the Odoo interface. It also solves the classic problem of attachments bloating the database.
Governance, compliance, Law 25
Four modules where we've invested the most work, because compliance with Law 25 is not optional for our Quebec clients. Two of them have a full corporate presentation (pitch deck) we share with clients ahead of a project.

project_knowledge_matrix.
Our most ambitious module. A complete system for organizational knowledge management: versioned documents with a decision matrix, register of resolutions (Board and shareholders), register of directors, annual compliance calendar, encrypted credential vault, distribution tracking and acknowledgement of receipt. Ten levels of documentation maturity, branded PDF generator, integration with Odoo's project module. We use it at most of our SME clients to structure their internal documentation without forcing them to pick between ten different tools. A corporate pitch deck details the approach when we kick off a mandate.

privacy_consent.
The end-to-end Law 25 tool: consent management with granular per-channel preferences, retention schedules, document destruction register (with immutable SHA256 fingerprints), three-criteria anonymization assessments, right-to-be-forgotten handling, DocuSeal/LibreSign integration for signatures. The destruction register is forensic: impossible to retroactively falsify. Used by our clients with serious obligations around personal information. Pitch deck available as well.

audit_ti.
IT security audit management for vendors, still in the Law 25 lens. 14-element grid per vendor, client × vendor matrix with assessment statuses, OWL dashboard with stacked KPIs, two-phase workflow (In progress, Delivered), watchpoint tracking and batch PDF report printing. This is the mechanism that produces the IT audit syntheses we deliver to our clients, notably in the network of Quebec CPEs (early-childhood centers).

bf_sms_archive.
Archives SMS and call logs directly into Odoo, with unified search and automatic association with contacts and tasks. Useful for organizations that want a centralized trace of mobile communications: under Law 25, SMS channels also need to be documentable in case of an access request or investigation. A pitch deck accompanies the module, as it does for project_knowledge_matrix and privacy_consent.
Small daily wins
Five modules that aren't much to look at individually, but together change the day-to-day experience of using Odoo.

bf_hour_bank.
Automates flat-rate billing with an hour bank. Per client, you configure filters (project, company, product). The balance is computed automatically: debits from timesheets, credits from invoices, manual adjustments. The PDF/Excel report has four tabs (timesheets, project summary, monthly summary, billable hours) and goes out to the client on a schedule. Self-serve client portal. It puts an end to end-of-month negotiations about "how many hours do I have left."

bf_timesheet_timer.
An OWL timer that lives in Odoo's systray. Start, pause, resume, with multi-timer support. The 10 most recent tasks at the top of the list (pinned favorites first). On stop, a dialog with configurable rounding (1, 5, 10 or 15 minutes) and quick-fill descriptions. Ctrl+Shift+T keyboard shortcut. A visual indicator that changes color with duration, to remind you when a task might be running longer than it should.

bf_universal_search.
Cross-cutting search via the command palette (Ctrl+K then *). Searches simultaneously across contacts, projects, tasks, hosted services, documents, credentials, helpdesk tickets and events. Dynamic detection of installed modules, so no hard dependency. Respects ORM permissions: you only see what you're allowed to see. End of menu-hopping.

daily_todo_digest.
Sends a 4 a.m. recap email every morning: activities and tasks overdue or due today, a seven-day grid, weather (emoji, temperature, precipitation) and an inspirational quote pulled from a pool of 120. Times shown in America/Montreal. Branded Blue Fox. It replaces the "I open Odoo to figure out what to do today" routine with a direct overview in the inbox.

bf_task_unblock_notify.
Fixes a classic project-management irritant: a task that gets unblocked and stays invisible because its assignee doesn't know. The module detects when a blocker is completed (or removed from the list) and automatically notifies the people assigned to the newly unblocked task. Standard email pipeline, so each user's notification preferences are respected.
Email and communication
Four modules around email management and appointment booking.


bf_email_management.
Adds a centralized view (sent + received) with auto-categorization (Client, Internal, Vendor, Notification, Marketing), status tracking and response-time metrics. OWL dashboard with date filters, KPI cards, top contacts, volume chart. Incremental sync every 5 minutes. Deduplication by RFC 2822 Message-ID. It partially replaces the habit of constantly opening a separate mail client.
bf_mail_import.
A button in the chatter of any Odoo record: drop one or more .eml files in, and they integrate into the history as if they had arrived through Odoo. Chronological sort before import, deduplication by Message-ID, automatic author resolution, threading via In-Reply-To. Useful for reconstructing a file's history when the initial emails arrived somewhere other than the ERP.

bf_webmail.
The simplest of the 19: a systray icon that opens SnappyMail (or any webmail) in a modal, without leaving Odoo. Configurable URL. Zero data persistence. Designed for people who live in Odoo and want a mental shortcut to their email without switching tabs.
bf_appointment.
Extends OCA's resource_booking with public booking pages, automatic client-side timezone detection, custom intake questions, configurable email schedule (confirmation, day-before reminder, follow-up, cancellation), portal cancellation link. We use it for our own bookings, as an open-source alternative to Cal.com or Calendly.
Internal operations
Three modules for infrastructure operations and the daily ERP experience.

hosting_management.
Our managed-hosting module, and the backbone of the Blue Fox managed-services offering: service lifecycle (draft, active, expired), software catalog with version checking (GitHub, Docker Hub, GitLab), HTTP health checks with rapid retry, uptime, email and ntfy alerts, maintenance windows, storage-quota monitoring, domain and SSL expiry tracking, per-software maintenance templates, backup integration with SHA256 verification, client-branded emails. This is what lets us manage our entire hosted-services fleet without losing the thread.

bf_dark_mode.
A sun/moon button in the systray that flips Odoo's entire backend into dark mode. Blue Fox grey palette (#2E3132, accent #29ABE2). Persistent preference via browser cookie. Exhaustive Odoo 18 coverage: Bootstrap 5 variables, views, chatter, alerts, mobile responsive. Zero impact when off. Users' eyes thank them at 10 p.m.

bf_gamification.
A gamified layer on Odoo, fox-themed: 10 levels (Renardeau to Kitsune, 0 to 20,000 XP), configurable XP rules (timesheets, tasks, documents, hosting, messages, helpdesk, activities, streaks), 15 default badges in six categories, leaderboard, real-time popups via the Odoo bus, systray widget (XP, streak, progress), reward shop with redemption flow. Not essential to operations, but it injects a bit of joy into an ERP.
If you already run on Odoo Community and one of these modules matches a need, here's our recommended try order:
- bf_timesheet_timer and daily_todo_digest: immediate gains, zero risk.
- bf_hour_bank or bf_universal_search, depending on whether your irritant is flat-rate billing or cross-cutting search.
- contacts_nextcloud_sync or calendar_nextcloud_sync if you already use Nextcloud.
- project_knowledge_matrix and privacy_consent: structural modules, plan for some hand-holding.
The limits to know about
These modules are opinionated: they reflect Blue Fox's workflows and those of our Quebec clients. Some fields, some labels, some default behaviors match our reality. If yours is different, expect to make adjustments.
Several depend on other pieces of our ecosystem (Nextcloud, LibreSign, ntfy, SnappyMail). We've tried to isolate those dependencies as much as possible, but a module that syncs with Nextcloud obviously assumes you have Nextcloud.
The active branch is 18.0, matching Odoo 18 Community. Migration to Odoo 19 (released September 2025) and 20 (expected September 2026) will happen over time, but we don't guarantee automatic backward compatibility. No official commercial support: code is provided as-is under its respective licence. We answer GitHub issues when we can, but that's not a contractual commitment.
At Blue Fox
When a client picks Odoo Community with us, they don't need to ask for access to our modules: they're on GitHub, under open-source licences, cloneable without an account. We install them on their instance when relevant, document them in their knowledge matrix, and transfer the understanding to their internal team.
It's what we'd want for ourselves from another provider: the certainty that the code we use stays accessible, even if the relationship changes. Ownership of know-how shouldn't be hostage to a service contract. We consider that a minimum condition for a healthy IT relationship, not a generous gesture on our part.
One of these modules resonates with an irritant of yours? Let's explore it together. And if you have a need none of them covers, that's often the start of a 20th module.
Sources
- Our public repo: github.com/bluefoxconsultant/odoo-modules
- Odoo Community Association (OCA): the ecosystem of open-source Odoo modules
- LGPL-3 licence text
- Related articles: The role of the OCA in the Odoo ecosystem, Strategies for a successful ERP implementation in an SME