SINGAPORE — DIGITAL & ECOMMERCE MARKETING

Lucas Lim Kai Yi

Growth · eCommerce · AI-augmented marketing · tap to skip

BUILD — APPLICATION ENGINE

An AI writer that is not allowed to make anything up about me

The failure mode of AI-written applications is well known: plausible, fluent, and quietly inflated. This one is built the other way round. A structured fact base is the only thing the generator is allowed to draw on, every figure in the output has to trace back to it, and the checks run at generation time rather than as a proofread afterwards.

Personal build. Local dashboard, nothing hosted publicly.

3
live listing sources swept
1
fact base every claim must trace to
0
documents ever sent automatically
Re-checkable
after a hand edit, by command

Why I built it

Two problems, one system. Finding relevant roles is a repetitive sweep across boards that all present the same jobs differently. And tailoring an application well is genuinely slow — while tailoring one badly, with a generic model and no guardrails, produces exactly the confident, unverifiable prose that makes hiring managers distrust the whole format. I wanted the speed without the inflation, so I made verification a build step instead of a habit.

How the grounding works

One file holds the verified facts — roles, dates, metrics, and where each metric came from. The generator composes only from it. At generation time the document is checked: every number traces to the fact base, no authoring notes or banned phrasing survived, contact details are intact, the document is ATS-parseable (no tables, no headers, no images — the three things that most reliably break a parser), and it fits the page cap. The subtle part is what happens after. The generated file is an ordinary Word document, so a hand edit walks straight past every one of those guarantees. That's what the re-check command is for: it re-extracts the text from the edited file and re-runs every check it can, exiting non-zero if the edit broke one. If I want a change to survive the next run, I edit the fact base — not the output.

The send gate

Generating an application writes files to a folder and stops. The mail path creates an unsent draft in the Drafts folder with the documents attached, and that's where it stays until I open it and press send myself. This is enforced in the code twice, not just documented as a convention — because 'the tool never sends automatically' is only true if nothing in the tool can send.

What it proves

It's the same discipline as the rest of these builds, pointed at the highest-stakes possible target: my own claims about myself. Everything on this site — every percentage, every revenue figure — comes from the same fact base this generator reads, and can be traced back to its source. If you want to test that, ask me about any number on this page and where it came from.

Stack

TypeScriptNext.jsDrizzle + SQLiteAdzuna APIMyCareersFuturedocx generationMicrosoft Graph