About the project

Ember is a cloud waste finder. It scans an AWS account for idle EC2 instances, forgotten dev boxes, unattached EBS volumes, leftover Elastic IPs, and idle NAT gateways — then shows what you get back by shutting them down: dollars, kilowatt-hours, and kg of CO₂.

AWS will happily tell you the bill. It will not tell you the watts. Ember estimates the energy and carbon from published Cloud Carbon Footprint coefficients, then puts those numbers next to the money so idle cloud stops feeling abstract.

Click Sample ledger on the live app to see a full findings report with no AWS keys.

Inspiration

Data centers already use about 1.5% of global electricity, and that share is climbing. A lot of that is not “AI training.” It is a t3.large named dev that nobody stopped after a hack week. An unattached 200 GB volume. A NAT gateway that costs ~$32/month even with zero traffic.

I kept seeing two dashboards that never talk to each other: FinOps (dollars) and sustainability (carbon). Idle cloud is both. I wanted one scan that says, in plain language: your cloud is on even when you are not — and here is what you get back if you turn the unused part off.

What it does

  • Reads a live AWS account (boto3 + CloudWatch) or loads a bundled sample ledger for demos
  • Flags idle compute, oversized machines, forgotten dev/test/sandbox environments, stranded volumes, unused Elastic IPs, and idle NAT gateways
  • Prices the waste with on-demand list rates
  • Estimates monthly/annual kWh and kg CO₂e, plus human equivalents (miles driven, phone charges, trees)
  • Never stores keys. The hosted GitHub Pages app is static; live scans run against a throwaway demo account on a local/server API

CPU draw is interpolated between a min and max wattage per vCPU:

$$ P_{\text{CPU}} = n_{\text{vCPU}} \cdot \bigl(0.74 + (3.5 - 0.74) \cdot u\bigr)\ \text{W} $$

where (u) is CPU utilization from 0 to 1. Monthly energy includes memory and AWS overhead (PUE):

$$ \text{kWh} = \bigl(P_{\text{CPU}} \cdot h / 1000 + 0.000392 \cdot \text{GB} \cdot h\bigr) \cdot 1.135 $$

Carbon is that energy times the regional grid intensity (I) (g CO₂e / kWh):

$$ \text{kg CO}_2\text{e} = \text{kWh} \cdot I / 1000 $$

These are modeled figures, not per-instance meters from AWS.

How I built it

  • Backend: Python, FastAPI, boto3. A scanner walks EC2 + CloudWatch, a carbon module applies CCF / eGRID coefficients, a pricing catalog fills in dollars. A CLI prints the same findings in the terminal.
  • Frontend: React + TypeScript + Vite. Landing page, a short “scanning” beat, then a results ledger with count-up totals.
  • Demo path: a seeded sample ledger (and optional seed_waste.py on a throwaway AWS account) so judges can see a messy account without touching production keys.
  • Host: GitHub Pages for the static UI. Sample ledger works there always. Live AWS scan needs the API running locally.

Challenges I faced

AWS does not publish per-instance watts. That was the whole scientific hole. I used Cloud Carbon Footprint / SPECpower-style coefficients instead of pretending we had a meter. Being honest about “estimate vs. measurement” mattered more than a fake-precise number.

GitHub Pages has no Python. The pretty URL cannot run a live boto3 scan. I split the product: static sample ledger for anyone with a link, live scan only when the API is up. Keys never go in the frontend repo.

A clean main AWS account makes a boring demo. Real waste looks like forgotten names and quiet CPU. I built a sample ledger and a seed script for a throwaway account so the story shows up on stage.

CloudWatch can be slow or empty. New instances have no history. I treat missing metrics as “assume idle” carefully, keep lookback short (1–14 days), and still show evidence (avg CPU, age, tags) so a finding is not a black box.

What I learned

Idle cloud is a read problem more than a ML problem. The useful work is inventory + CloudWatch + a carbon model you can defend. I also learned to design for the worst demo: no keys, no backend, still a full ledger. And that putting dollars, kWh, and kg CO₂ on the same row changes how people see a leftover GPU box.

Built With

Share this project:

Updates

Submission history