Snowleaf: every hour of compute, accounted for by Dickson DicksonSnowleaf: every hour of compute, accounted for by Dickson Dickson

Snowleaf: every hour of compute, accounted for

Dickson Dickson

Dickson Dickson

Snowleaf case study

Snowleaf: emissions reports an auditor can check without calling us

Snowleaf turns a site's grid, generator and solar readings into hourly emissions figures and signed-off reports. It's built for Nigerian companies that run their own servers, in a server room or a data centre. Every number in a report can be traced back to the reading, the factor and the sum behind it. Role: design engineer, solo. I designed the brand, site and app in Paper first, then built them: product, API, web app, site gateway software, marketing site. Stack: Go, PostgreSQL with row-level security (Neon), Next.js on Cloudflare Workers, TypeScript, Tailwind, an OpenAPI-first API in Docker on Hetzner, Go on Raspberry Pi for the gateway. Status: live at snowleaf.xyz, with the app at app.snowleaf.xyz, ahead of its first design partners.

The problem

Nigerian businesses that run servers pay for power three ways: the grid, diesel generators and, increasingly, solar. Few of them can say, hour by hour, how much of each they used or what it emitted. That number now matters to their customers, lenders and boards. Nigeria's Financial Reporting Council has adopted the IFRS sustainability standards (S1 and S2), with mandatory reporting for public interest entities from 2028. Spreadsheets and annual estimates don't hold up when someone asks "where did this figure come from?" Power is also usually the biggest running cost of a Nigerian data centre. The data that proves emissions is the same data that shows where the money goes.

What I built

Readings in, four ways. CSV uploads with column mapping, bills, a site key for systems that can push data, and a small gateway box that reads the meters directly.
An hourly emissions engine. Every hour of every source becomes Scope 1 (generators) or Scope 2 (grid), using a named emission factor and a versioned method. A year is 8,760 rows, all inspectable.
"Where did this come from?" on every figure. Click any hour to see the reading, the factor and the sum, for example 209.0 kWh × 0.4316 = 90.20 kg. You can link straight to that hour.
Reports that can't quietly change. A report is drafted, sent for approval, then approved and locked with a fingerprint. A change means a new version.
Auditor sharing. A private, expiring link gives an auditor the report, a PDF and an evidence pack. The pack holds the readings, original uploads, factors, method, audit trail and checksums, plus a script that re-runs the totals.
Running a business on it. Organisations with roles, two-step sign-in, single sign-on, an audit log, alerts and scheduled reports. Also scoped API tokens, signed webhooks, full data export and deletion, and billing in naira with VAT included.
Site gateway software. A Go program for an industrial Raspberry Pi that reads electricity meters over Modbus every hour, keeps readings through power and internet cuts, and sends them when it can.

How I designed it

I designed Snowleaf in Paper before writing code: three hero directions for the brand, one picked, then the app drawn screen by screen in order of importance. Three decisions shaped the whole thing.
Heat, made accountable. A server room is heat; Snowleaf turns it into something cool and measured. That one idea drives everything: the site opens on a thermal view of a sample site, and a year of hours, one cell each, coloured from frost to ember by where the power came from, is the hero, the site chart and the report. Colour is used only for data, so it always means something.
Every number shows its working. The buyers are finance teams and auditors, so trust is designed in, not claimed. Any figure opens its trail: the reading, the factor and the sum. Status is always visible: sample, illustrative factor, self-reported, draft or locked.
Funded-looking, never false. A calm, editorial system that reads like a serious company: wide Archivo headlines, paper and ink, evergreen only for actions and "done". The site and app share one set of components. No logos, customer counts or invented results: every claim is true of what's built.

Hard problems

Trust is the product, so the evidence had to stand on its own. An auditor shouldn't need my word or my servers. The evidence pack is everything needed to re-run a report independently, with checksums to prove nothing was altered.
One customer's data must never reach another. Isolation is enforced by PostgreSQL row-level security, not just application code. The app connects as a restricted database user that can't bypass those rules. A missed filter in a query returns nothing rather than someone else's data.
Power cuts are normal, not an edge case. The gateway writes every reading to disk before sending it. Missed hours are spread evenly and marked as filled, and a reset meter never produces a negative hour. One test runs a full day offline with a power cut halfway through. Every hour then arrives exactly once, with no energy lost or counted twice.
Updating boxes in plant rooms safely. The gateway only installs releases signed with Snowleaf's key. It keeps the previous version and rolls back if a new one can't check in within 15 minutes.
Checked like an attacker before launch. Before going public I ran dependency and code scanners and a line-by-line review of who can reach what. It found real holes: a customer could have given themselves Snowleaf staff rights through their own single sign-on, a crafted upload could have written files outside its folder, and forged headers could have dodged the sign-in rate limits. Each was fixed with a test that fails on the old code. Payments are now marked paid only when the amount actually covers the invoice.
Green software, measured. Go was chosen partly for energy use. The hot paths are written to do as little work as needed, because a carbon-reporting product should be light itself.

Where it is now

Designed and built in about three weeks. A full sample year runs end to end, from 8,760 hourly readings to an approved, locked report an auditor can open.
Like this project

Posted Oct 26, 2026

Designed in Paper, then built: hourly emissions reporting for companies running servers. Every figure traces back to its reading, so auditors can check it.