Thoughts

Someone else had our idea


A week after Daytona I went to my second hackathon, Rebuild Private Markets, run by Ylookup and Encode Club at Encode Hub on Pitfield Street. This one was a full weekend, with about 100 builders working on problems that fund managers actually have. We got anonymised industry data, live interviews with fund managers, and mentors around the whole time.

I was on a team of four with Weiyi, Arkajyoti and Rochak: a future quant, a product manager, a cybersecurity specialist and me.

Four thousand PDFs

Picture being a junior at a private equity fund. Your firm is thinking about buying a company, and you have been given access to its data room, which is a folder with a few thousand documents in it. Management decks, customer contracts, cap tables, spreadsheets, board minutes, and PDFs that are scans of other PDFs. You have a few weeks, and several other deals going at the same time.

Nobody reads all of it. The big numbers get checked properly and the rest gets skimmed, or taken on trust. That is a problem, because deals rarely go wrong in the numbers everyone is looking at. They go wrong in a clause on page 40 of a contract nobody opened.

Catching management out

Winback reads the whole data room so the junior does not have to. You drag everything in, and it builds a profile of the company, lines it up against its peers, and then does the part I liked most: it checks what management says against what the documents say.

Say the pitch deck proudly announces that 80% of revenue is recurring. Winback goes and reads the customer contracts, finds that those customers can walk away with 30 days' notice, and puts the two next to each other. Recurring, technically. For about a month.

What it does not do is tell you whether to invest. No risk score, no traffic light. Every finding goes past an analyst, who accepts it, edits it or bins it, and only then does Winback write the memo. The goal was to give investors better evidence, not to make the decision for them.

No receipt, no claim

The obvious worry with putting a language model anywhere near an investment decision is that it will make things up, confidently, in a nice font. So Winback does not give it the chance.

Every document gets chopped into blocks, and each block gets a permanent id built from the document, the page and where it sits. Whenever the model says something, it has to attach the block it got it from, like a receipt. Before anything reaches the screen, the server checks every receipt against the real blocks, and if the model has cited a line that does not exist, the claim gets thrown out. You cannot click a citation in Winback and land on nothing.

The model is not allowed to do maths either, which after watching language models do maths felt like the right call. It pulls the numbers out of the documents, and the benchmarks are worked out in plain code. Everything going in and out gets checked against a schema, so if Gemini hands back something malformed it fails loudly instead of quietly ending up in front of an investor.

All of it was Next.js 15, TypeScript, Supabase and Gemini, built over one weekend.

Going home

On Saturday we built the whole flow against demo files we wrote ourselves: a made-up company with a management presentation, customer contracts and a cap table. By the evening it sort of worked, but only on those files, and a fair amount of it was broken underneath.

The hub closed at nine and I went home. There was nothing heroic about Sunday morning. From about quarter to five, most of what I did was fix bugs in code other people on the team had written, and then get it to take real uploads instead of our own test files: parsers for PDFs, Word documents and spreadsheets, somewhere to store each document block by block, and the upload screens. By the deadline it was deployed.

Too many cooks

The team was the hardest part of the weekend, and not in a good way.

Rochak was our product manager, and I do not think it went well. The way I work through a problem is to think out loud and move fast: say the idea, try it, and throw it away if it is wrong. That is how you win a hackathon, because you get through ten bad ideas before lunch and keep the one that works. Every time I got going, I got interrupted. Decisions that should have taken a couple of minutes turned into long, slow explanations, and then the same explanation again. It felt like working with an agent stuck in a loop with no stop condition, regenerating the same answer at temperature zero and never calling the tool.

I do not think anyone was trying to make it worse. Four people from very different backgrounds meant four different ideas of what we were building, and a lot of the weekend went on agreeing with each other instead of building. Hackathons reward the opposite: one clear idea, fast decisions, and someone willing to cut things.

The biggest thing I took from it is that too many cooks really do spoil the broth. If I did that weekend again on my own, I genuinely believe I would have built something a lot better.

Someone else had our idea

Before the results were announced, the organisers walked through the architecture of one of the other projects. The four of us looked at each other. It was going in almost exactly the same direction as ours.

We did not win, and I was gutted, more than after Daytona. At Daytona I knew I had built a worse version of something that already existed. This time we had a real problem and roughly the right approach, and came away with nothing.

Thanks to Ylookup and Encode Club for putting it on.

Third place

Third place in the product track went to Samuel Parke, for a product called Streamline.

When a fund manager moves to a new fund administrator, all of their historical transaction and investor data has to move too, and it is almost never in the shape the new administrator's systems need. Someone has to map it by hand before it can go across. Streamline maps the old data onto the new schema automatically. For anything it cannot resolve, the administrator can ask Gemini, send a request to the previous administrator, or map it themselves in a few clicks. It also won a pair of AirPods.

Samuel and I spoke for about a minute at the end. I said congratulations, and that was about it.

I did not know it then, but that was the most useful conversation of the whole weekend.

Back to Thoughts