All projects
ERPBackend

Custom ERP and connected point of sale

Dolibarr 22 with 8 custom modules, a connected POS and e-invoicing

Key figures

custom modules
8
lines of code
~53,000
faster product list
4×

Context

The store needed complete sales management: point of sale, stock, inventory, and legal and electronic invoicing. All of it had to stay connected to the online store.

My role

Design, architecture, development of the custom modules, deployment and operations, fully autonomously.

Solution

The ERP runs on a containerised Dolibarr 22, extended with 8 custom-built modules (~53,000 lines). They cover supplier price list imports, multi-user inventory on handheld scanners with offline mode, Peppol e-invoicing, point-of-sale payments and bulk catalogue tools. A REST API feeds the online store with WebP images, stock levels and a notification queue.

For the point of sale, I took over an open-source module, migrated it from Dolibarr 12 to 22, then extended it: ESC/POS receipt printing, a card payment terminal, an automatic cash machine and gift cards. This work builds on a hardware integration study of the cash machine connector.

Key features

  • Offline multi-user inventory

    Several people count stock in parallel on handheld scanners, even without a network.

  • Peppol e-invoicing

    UBL 2.1, BIS Billing 3.0 and EN 16931, with backoff retries and incoming invoice handling.

  • Hardware-connected point of sale

    ESC/POS receipts, a card payment terminal, an automatic cash machine and gift cards.

  • Flexible in-store payments

    Card, cash through an automatic cash machine, bank transfer and parked sales.

Engineering challenges

  1. 1

    Measured, then optimised

    POS opening cut from 11 s to 3-6 s, product list from 2.8 s to 0.64 s.

  2. 2

    POS migrated from Dolibarr 12 to 22

    An open-source module taken over, ported to version 22 and then extended.

  3. 3

    Deduplicated Borg backups

    8.7 GB of data stored in 3.15 GB.

  4. 4

    Automatic health checks

    A health check automatically restarts the service when it fails.

Tech stack

Backend
Dolibarr 22PHP 8
Frontend
JavaScript
Data
PostgreSQL 16IndexedDB
Infrastructure
DockerNginxCloudflare TunnelTailscaleGitHub ActionsBorg

A project of this scale?

Let's talk about your context: I'll tell you frankly what is feasible, and how long it takes.