Fig. 07 · EU carbon border reporting

GetCBAM

Turns a non-EU manufacturer's production data and utility bills into an EU CBAM embedded-emissions report, with a QR code linking to a public verification page.

Role
Sole engineer
Team
Solo
When
Dec 2025 – Jan 2026
Stack
Laravel 12, Inertia + React, LarAgent, OpenAI, DomPDF, Ably, Stripe

01The problem

EU importers of steel, cement, aluminium and fertiliser must report the emissions embedded in what they buy. That data has to come from manufacturers outside the EU who usually have no carbon accounting, so they pay consultants or fall back on EU default values.

02How it works

6 steps
  1. 01 · Person approves

    The importer invites a supplier

    The supplier uploads products, production batches and utility bills. Only bills a person approves are used.

  2. 02 · AI proposes

    Normalise and classify

    Bills are normalised and products classified against 1,095 CN codes.

  3. 03 · AI proposes

    Allocate energy

    Bill energy is allocated to each product from the overlap between billing and production periods, checked against energy benchmarks.

  4. 04 · AI proposes

    Look up factors

    Grid intensity for 86 countries, plus fuel, process and material factors.

  5. 05 · Rules decide

    Calculate and re-check in code

    Scope 1, 2 and 3 plus process emissions. PHP enforces required fields, recomputes any scope the model leaves out, and re-sums the totals so the headline numbers always add up.

  6. 06 · System moves data

    Issue the report

    PDF and XML with a QR code to a public verification page. One report per product, and the data locks once it's sent.

  • AI proposes
  • Rules decide
  • Person approves
  • System moves data

03Hard problems

3 of them
01

LLMs doing regulatory arithmetic

The model returns a structured breakdown, but the job validates every numeric field, fills gaps from allocation × factor, and always re-sums totals in PHP.

02

Bills and production never line up

Allocation takes each approved bill's overlap with the production period, compares it with expected energy, and records its reasoning on the report.

03

Integrity after submission

A database constraint allows one report per product, data locks once it's sent, failed reports retry from step one, and the QR code points to a public verification URL.

04By the numbers

CN codes in the reference data
1,095
countries' grid intensity
86
queued stages per report
5
solo build
2 wks

05What I'd do differently

For a regulatory number, code should be the calculator and the model only the researcher, picking factors with a citation from a versioned table. Today it's model-first with a code fallback, which is the wrong way round. A qualified person should also sign off before a report is issued.
Next · Fig. 08BlazeMail.aiCold email with self-healing inboxes