Skip to content

Projects · Platform

Clarbon

Multi-tenant carbon accounting: a deterministic emissions engine, factor libraries, disclosure packs and evidence that can be kept.

A wind turbine and a low warehouse on a pale coastline

Clarbon calculates greenhouse-gas inventories for more than one company on one system, and keeps the working. The engine is a pure package. The database isolates tenants with row-level security. Evidence goes to object storage that can be locked. Reports are a separate package from the ledger.

Solutions

  • A deterministic inventory

    The engine covers Scope 1, 2 and 3, product footprints, CBAM, PCAF and SBTi, and can recalculate with the AR4, AR5 or AR6 global-warming-potential sets. The same activity is not silently given a new answer because a factor moved.

  • Factors with a source

    DEFRA, IEA, EPA and EXIOBASE sit in a registry, with Climatiq pinned to a known release. A number on a report can be traced to the factor that produced it.

  • The disclosure is not the ledger

    ESRS, IFRS S2, TSRS and CDP are mappings on top of the inventory. Disclosure packs, CSV and spreadsheet output, and an iXBRL stub, are generated from that mapping rather than typed beside it.

  • Evidence that stays put

    Supporting files go to S3-compatible storage with a write-once option. The point of the file is that a later run can still open the document the number came from.

Process

  1. 01

    Name the tenant on the request

    Every call carries the tenant, the user and the role. The API refuses to guess which company a row belongs to.

  2. 02

    Set the database context

    The data package applies the tenant with SET LOCAL and row-level policies. A query from one company does not read another company’s inventory. An enterprise tenant can move to its own schema.

  3. 03

    Run the engine

    The API and the worker both call the same versioned engine. A recalculation is a function of the activity, the factor and the GWP set, not of whichever process happened to run it.

  4. 04

    Map, then publish

    Framework mappings turn the inventory into the disclosure a regulator or a customer asked for. The reporting package writes the pack. The ledger is left alone.

Technology

  • Three apps, the logic in packages

    Next.js for the web, Fastify for the API, and a worker for the long jobs. The engine, the schema, the factors, the frameworks, reporting, integrations, translations and the UI contracts are packages, so the web app is not where the methodology lives.

  • PostgreSQL 17, with vectors and policies

    Drizzle models the schema and the row-level policies. pgvector is there for matching a messy activity description to a factor. Redis sits beside the database for cache and queues.

  • Eight languages, one glossary

    The i18n package carries eight locales, the official terms, and right-to-left layout. A disclosure term is not translated ad hoc inside a component.

  • Connectors are a first wave, not a promise of every ERP

    The integrations package starts with ERP, utility and cloud sources. Anything not in that wave is not implied.

  • Next.js
  • Fastify
  • TypeScript
  • PostgreSQL 17
  • Drizzle
  • pgvector
  • Redis
  • MinIO