
The idea we threw away and one region lock: shipping PanoptiCoal on AWS
How our hackathon team dropped ideas before building PanoptiCoal, and the six things that went wrong while getting it live on AWS.
Suhani Jain · Team 404 Not Found · WeMakeDevs × AWS Environmental Hacks 2026, Air track
Most hackathon blogs talk about the model. My teammate Krish has already written that one for PanoptiCoal , so I won't repeat it. I want to talk about the two things that almost finished us before the model even mattered: deciding what to build, and getting it live.
What PanoptiCoal does
Every coal plant in India reports how much electricity it generated each day. The government puts this in the CEA daily reports. At the same time, the Sentinel-5P satellite measures the NO2 in the air above the plant. A plant can't easily fake either of these numbers.
PanoptiCoal compares the two. If the air above a group of plants stays dirtier for months than what the reported generation and the weather can explain, the Audit Risk Score of that cluster goes up.
One example. In May 2026, going by the reported generation, Talcher in Odisha should have had around 58 units of NO2. The satellite saw 91. So Talcher is now first on our inspection list. This doesn't prove anything. It only means somebody should go and check.
But this is not what we started with.
The idea we almost built
Our first idea was fraud detection on OCEMS data. OCEMS are the sensors on the chimney that plants use to report their own emissions. For about an hour we were very excited about it.
Then we went to find the data and there wasn't any. Real OCEMS data is not public. So we would have to make fake sensor data ourselves. And that is where the idea died, because if we put the fraud into our own fake data and then "detect" it, what have we proved? Nothing. A judge would catch this in one question. We caught it ourselves, thankfully.
Next we looked at an electricity bill and solar decoder idea. We dropped that also.
What finally helped was changing the question. We asked: which numbers already exist that the plant doesn't control? Coal was the only industry where India publishes daily data for each plant, and where the pollution is big enough for a satellite to see. So we made one rule for the whole project: real public data only. OCEMS tamper detection is still on our roadmap, for the day that data becomes public.
Those first few hours of arguing felt like a waste then. Now I think they saved the project. Even if we had built the OCEMS idea perfectly, it would still have been a weak idea.
Getting it live on AWS
The plan was simple and serverless, in ap-south-1 (Mumbai). This is what we used:
Job | Service |
|---|---|
Store 37 precomputed result files | Amazon S3 (private bucket) |
API, 9 routes | AWS Lambda (Python 3.12, arm64) |
Public front door | Amazon API Gateway (HTTP API, CORS, throttling) |
Website | AWS Amplify Hosting |
Everything as code | AWS CDK (Python) |
Guardrails | IAM, CloudWatch Logs, AWS Budgets |
We precompute everything because the satellite jobs take minutes to hours to run. And for 37 read-only files, we really don't need a database.

Looks like one afternoon of work, right? It was not.
1. My account could not deploy
My AWS account had a region lock from an organisation policy (SCP). So I could not deploy in the region we needed. I kept searching for some setting to change, but there is none. You can't remove an SCP from inside the account. In the end we shifted the whole deployment to Krish's account.
I should have checked this on day one. I checked it on the day of deployment.
2. cdk deploy got stuck
The first deploy froze while uploading an asset of around 21 MB. It just sat there for more than ten minutes, so I restarted it and it went through. Later we found out the big asset was the AWS CLI layer that CDK adds on its own for the bucket deployment.
3. "Unable to find Route by key"
CloudFormation rolled back with this error. The API stage was getting created before its routes existed. We added an explicit dependency so that the stage is created after the routes, and it was fixed.
4. Amplify needed some hand-holding
Our repo is a monorepo. So we had to tell Amplify to look in the frontend folder, give it the API URL as an environment variable, and add a rewrite rule so that deep links in the single-page app don't give a 404.
5. The site opened but showed nothing
This one was the worst. The site was live, but every number on it was just a dash. The API was working fine when we called it directly. The site was also working. Only they were not talking to each other.
The reason was one letter. In the CORS allow-list we had typed "ddebut". The actual Amplify URL has "ddbebut". That's all. We fixed the spelling and moved the allowed origin into the CDK config, so now it is only in one place.
6. Budget alerts before sharing the link
Before sharing the link with anyone, we added budget alerts at $10 and $50. Cost Explorer is still showing $0.00.
The frontend
Apart from the deployment, I worked on the frontend too. My part was making sure a person opening the site for the first time can actually understand what they are looking at, and connecting it to the live API so that it works for everyone and not only on our laptops.
What I'd tell the next team
- Pick a problem where the data already exists. We wasted hours on ideas that needed fake data, and the real-data idea turned out better anyway.
- Check what your cloud account is allowed to do on day one. A policy that you didn't write can block you completely.
- When something "should work" but doesn't, compare the strings letter by letter. Our worst bug was one missing "b".
- Precompute if you can. No database, no servers to look after, and almost zero cost.
Try it
- Live site: https://main.ddbebutv5mmwf.amplifyapp.com
- Demo video: https://www.youtube.com/watch?v=O-tL-XRi43A
If the air over a town stays dirtier than the numbers say it should, somebody should go and check. That is all PanoptiCoal is asking for.
Enjoyed reading this content? Let the author know!
Your likes, comments, shares, and saves help creators reach more builders.
Loading recommendations
Loading article