Skip to content
Julien Bigot, home
Menu
All work

02/SaaS · E-invoicing compliance

Nette Factures

France’s 2026–2027 e-invoicing reform, automated for merchants.

Role
Product, architecture and full-stack development, solo
Period
Sep – Oct 2026
Status
In review on the Shopify App Store

Private code — demo on request. The repository is private. I am happy to demo the app on a call or in an interview.

Ask for a demo
Factur-X invoice with archived files (PDF and CII XML) and transmission tracking
lines of code
~70 k
test files
260
sources supported by the architecture
4
legal archive
10 yrs

Context

With the 2026–2027 reform, French businesses must receive and then issue electronic invoices and report their sales data (e-reporting). For a small online merchant, it is one more regulatory project.

The problem

An invoice is a legal document: continuous numbering, amounts exact to the cent, a tamper-proof archive, the EN16931 format. A rounding gap or a hole in the numbering is not a cosmetic bug.

What I did

  • Reading the regulation and turning it into testable business rules.
  • Architecture of the domain, the persistence layer and the archive.
  • Building the Shopify app (in review), the “direct sales” web app and the WooCommerce plugin (not deployed yet).
  • Test suite and App Store review preparation.

Architecture & technical choices

  1. 01

    A pure invoicing domain

    The core is TypeScript with no I/O at all: EN16931 rules, CII XML serialisation, amounts in integer cents and VAT in basis points. Never floats, and everything is testable in isolation.

  2. 02

    An immutable archive

    Every document is frozen as a canonical JSON snapshot, hashed with SHA-256 and chained to the previous one. PostgreSQL triggers forbid any change, and continuous numbering is assigned under a row lock in the same transaction.

  3. 03

    A multi-source architecture

    A SourceGateway / SourceFactory interface lets Shopify, WooCommerce, Stripe and manual entry share the same core. After the refactor, the Shopify output stayed byte-for-byte identical.

  4. 04

    Factur-X end to end

    PDF/A-3 rendered with Gotenberg, embedded EN16931 XML, B2B transmission through an accredited platform, fingerprint checked on every download. The WooCommerce plugin pairs through an HMAC signature, revised after two security reviews.

Highlights

  • Strict import validation: a file goes through entirely or not at all.
  • E-reporting prepared period by period according to the VAT regime.
  • About 220 commits.

Stack

  • TypeScript
  • React 18
  • React Router 7
  • Shopify App Bridge
  • Polaris
  • Shopify UI extensions
  • Prisma
  • PostgreSQL (triggers, séquences)
  • pg-boss
  • Zod
  • Gotenberg
  • Factur-X / CII
  • Stripe API
  • WooCommerce (PHP)
  • Vitest
  • Docker
  • Caddy
  • S3 Object Lock

Screenshots taken from demo stores, with fictitious data. Select an image to enlarge it.

  • 01Invoicing status at a glance, inside the Shopify admin.
  • 02Every invoice is a Factur-X (PDF/A-3 + EN16931 XML), archived for 10 years and checked against its SHA-256 fingerprint on every download. Fictitious identifiers blurred.
  • 03Continuous numbering, credit notes and B2B transmission status for every document.
  • 04E-reporting prepared period by period according to the VAT regime.
  • 05Receiving supplier invoices, with the answer sent through the accredited platform.
  • 06The same invoicing core outside Shopify (Stripe, manual entry, CSV import) thanks to the multi-source architecture. Not deployed yet.
  • 07Strict import validation: a file is imported entirely or not at all, and every error is explained.Screenshot in French
  • 08The dark theme of the web app UI kit.Screenshot in French
  • 09The invoice email sent to the customer on behalf of the merchant (fictitious data, legal footer removed).Screenshot in French
  • 10The public site factures.usenette.com, bilingual FR/EN.