Kamali · Story
Building for one organisation first
I'm building software with one organisation first, on real files. The first lesson: stop templating from PDFs and go find the originals.
Organisations that live on grants and gifts spend a surprising part of their week writing: reports, letters, proposals, the same facts told again for each reader.
I'm building Kamali with one organisation first. Not for a market segment on a slide, but on real files, with real people telling me when it's wrong.
The dashboard I'm not going to build
The first version looked like every SaaS demo: a dashboard, a funders page, a programmes page, charts. Twelve nouns, all filled with data I made up. It looked busy and it didn't save anyone an hour.
The real work is one set of facts turned by hand into many documents, one per reader. Most of each document is the same as the last one. The part that differs is the part that matters to the reader. That's the product. Everything else is furniture.
Don't template from the PDF
My first attempt at documents went through PDFs. Take last year's report, extract the layout, fill it with new text. The results were nowhere near the original. Text boxes drift, fonts get swapped, pictures land in the wrong place.
The fix wasn't a better extractor. It was asking a different question: where are the originals? The PowerPoint and Word files almost always exist somewhere. Working on those changes everything. A deck becomes another language by replacing only the text and leaving every shape, picture and colour exactly where it was.
Translate paragraphs, not runs
Office files split a sentence into "runs", one per change of formatting, and often for no visible reason at all. Translate run by run and you get word salad. So I translate whole paragraphs, a whole deck's worth in one model call, and put the new text back into the paragraph's first run. Everything around it is deterministic code.
The boxes that aren't a bug
The first translated PDF in a non-Latin script came out as empty squares. The translation was correct: the words were there in the file and in the PDF's text layer. The problem was fonts. Office keeps separate font slots for Latin, East Asian and complex scripts, and the server had no font for that script at all. Set the right slot for the script of the text, install a font that has it, and the squares turn into words.
That's going to be the pattern, I think. Most of what looks like an AI problem here is a documents problem underneath.