Inspiration

Small companies keep getting handed ESG questionnaires by customers, banks, or procurement teams — and most of them have no ESG function at all. The evidence is real, it's just scattered: a utility bill in someone's inbox, a supplier spreadsheet nobody's updated in months, a sustainability policy PDF that's a year out of date. We built Samina for that person — someone like Aisyah, an admin exec with two weeks to respond to a customer's sustainability questionnaire and no idea where to start.

What bothered us most about existing "AI compliance" tools is that they sound confident about everything, even when the underlying data is thin. We wanted the opposite: a tool that's honest about what it actually knows.

What it does

Samina takes a small company's messy sustainability paperwork — PDFs, spreadsheets, CSVs, Word docs — and turns it into a categorised, evidence-tagged, prioritised ESG action plan.

Every fact it extracts gets tagged with a confidence state: Verified, Estimated, Conflicting, Outdated, or Missing — each with a visible source citation, so nothing is a black box. Findings are ranked by impact × urgency × confidence weight, so the highest-priority, best-evidenced gaps surface first. An in-app ESG Evidence Assistant lets you ask follow-up questions against the same evidence base, and the final report exports as a styled PDF, JSON, or CSV action list — ready to hand to a customer, auditor, or your own leadership team.

How we built it

The frontend is React + TypeScript, moving through four states — Source → Extract → Screen → Report — with facts streaming in live via Server-Sent Events as the LLM works through each document, rather than making the user stare at a spinner.

The backend is FastAPI with an in-memory, TTL-based session store — deliberately no database, since sessions only need to live for the length of a working session. Document extraction runs through OpenRouter against Gemini, with a chat endpoint doing hybrid RAG over the extracted evidence for the assistant panel.

For the design system, we leaned into three references at once: wabi-sabi restraint, Milton Glaser's "one bold gesture per screen," and Charles Eames' functional honesty — nothing decorative that isn't also carrying information. That translated into a warm light palette with a single signature pink accent, monospace type for every number (tying back to the "ledger" metaphor), and solid-fill confidence chips tuned to stay legible against a light background.

Challenges we ran into

Getting an LLM to extract structured facts from genuinely messy source documents — and to say "Missing" instead of quietly filling gaps — took real prompt iteration. It's easy to build a tool that guesses confidently; building one that knows when to say "I don't have this" is a different, harder problem.

Uploaded files were another sticking point. Passing a document straight from the browser to the backend worked in theory but broke down in practice — the frontend needed a stable, readable reference to the file, while the backend needed to process it without fighting over how it was stored. We ended up routing uploads through a storage bucket instead, giving the frontend a clean URL to read from while the backend could still pull and parse the same file for extraction. It's the kind of infrastructure detail that seems trivial until it's the thing blocking your demo the night before.

We also ran into API key trouble mid-build. Our OpenRouter key ended up exposed at one point, which meant scrambling to rotate it and rework how it was being loaded and referenced across the project so it never landed in a place it shouldn't have again. It cost us build time we couldn't really spare, but it forced us to get disciplined about secrets — environment variables only, nothing hardcoded, nothing committed.

Accomplishments that we're proud of

The Evidence Confidence Ledger is the thing we'd point to first — every other ESG tool we looked at either buries its uncertainty or doesn't surface it at all. Samina makes "we don't know yet" a first-class, visible state instead of a bug. We're also proud of getting live fact streaming working end-to-end under real time pressure, so the demo shows the system actually reading and classifying documents in front of the audience, not just a static result screen.

What we learned

We learned a lot about calibrating LLM confidence honestly rather than cosmetically — it's tempting to hardcode a "Verified" state to make a demo look cleaner, and resisting that temptation was part of the actual design work.

We also came out of this understanding file storage a lot better than we went in. None of us had a strong reason before this project to reach for a bucket instead of just handling files in memory or passing them directly between services — but once the frontend needed to display or reference an uploaded file independently of the backend's processing step, that separation stopped being optional.

And on the API key incident — we came away with a much sharper sense of how easily a key slips out and how quickly that turns into a rotate-everything scramble. It's a small-team hackathon lesson that applies well past this one project: treat every key as if it's already public, and build the loading path so a rotation is a one-line fix, not a re-architecture.

What's next for Samina — ESG Evidence & Action Ledger

Right now Samina scopes to the Environmental category as a proof of concept. Next is extending the same confidence-ledger approach to Social and Governance, mapping findings against recognised frameworks like GRI, and moving from an in-memory session store to persistent storage with proper accounts — so a company can track its evidence base over time instead of starting fresh every session.

Built With

+ 33 more
Share this project:

Updates