Inspiration
We live in a world where financial privacy is the norm - where donations happen in the dark, lobbying is invisible, and the connections between money and power are deliberately obscured. We asked ourselves: what if that wasn't the case? What if every transaction was public? What if you could hover over a politician's name in a news article and instantly see who paid for their last election campaign?
Glass Ledger is our answer to that question. It's not a dystopia - it's a transparency utopia. A world where power is held accountable not by institutions, but by anyone with a browser.
What it does
Glass Ledger is a browser extension and web platform built for a world where financial privacy doesn't exist. As you browse the web, the extension silently scans every page for names of people in power: politicians, executives, lobbyists, journalists. When it finds one, it highlights them. Click a name and a profile card appears inline, showing their recent transactions, transparency score, and any flagged conflicts of interest, without ever leaving the page. Behind the extension is the Glass Ledger platform: a public financial registry where every person of influence has a profile. You can subscribe to people you want to watch, follow their financial activity in a live feed, and see the connections between donors and decisions that would otherwise stay hidden. In this world, the question isn't whether the information exists. It's whether you're paying attention.
How we built it
We built Glass Ledger over 24 hours using a stack we were mostly making up as we went. The browser extension is a Manifest V3 Chrome extension using vanilla JS that scans DOM text, highlights matched entities, and injects styled profile cards directly into the page. It communicates with our backend via a REST API and syncs user subscriptions through Firebase. The backend is a Flask API running on Python with a SQLite database seeded with fictional but plausible politicians, executives, lobbyists and journalists, complete with donation records, speaking fees, flagged conflicts of interest, and transparency scores. We added the Firebase Admin SDK to serve personalised watchlists directly from Firestore.
Challenges we ran into
Firebase Authentication took way longer than we expected. Getting Google sign-in to actually work was a wall of silent failures one after another. The login popup would close instantly, redirects would complete but not register the user, and nothing gave a useful error message. We spent a long time just staring at a screen that looked like it should be working but wasn't. Eventually we got there but it was probably the most frustrating hour of the hackathon.
Learning Svelte for the first time mid-hackathon was ambitious in hindsight. None of us had used it before which was already a risk, but we didn't realise we'd landed on a brand new version of the framework that worked completely differently from every tutorial online. Most of the code we found when searching for help was just wrong for our version. We went in circles for a while before figuring out that the framework itself had changed and we needed to unlearn what we thought we knew.
Getting the browser extension talking to the rest of the stack was trickier than it looked on paper. The extension, the website, and the backend all needed to share information like logins and subscription lists, but they each live in separate environments with different rules about what they can access. We had a plan that made sense in our heads but kept hitting walls when we tried to implement it. We rearchitected that part of the system a couple of times before landing on something solid.
Accomplishments that we're proud of
The browser extension genuinely works, and it's cool.
You open any webpage, names of people in the database get highlighted in colour based on their transparency score, and clicking one brings up a polished profile card right there on the page. Demoing it on our fake news article for the first time and watching all the names light up was a proper moment.
Building a full SvelteKit app with zero prior Svelte experience.
None of us had touched Svelte before this hackathon. Coming out the other side with a working multi-page app with Google authentication, live subscriptions, and dynamic profile pages is something we're proud of, especially given how much of the learning happened in real time.
The extension and the website actually talk to each other.
Subscribe to someone on the website and the extension starts highlighting their name as you browse. It feels like a complete product rather than two separate things stitched together for a demo.
What we learned
We learned that the most interesting technical problems aren't always the ones you expect. Going in, we thought the hard part would be the extension or the backend. It turned out to be the invisible plumbing in between: getting three separate environments to share state, trust each other, and behave consistently.
Log in or sign up for Devpost to join the conversation.