AI
I build the systems that assist in the analysis
About a dozen systems in production. Not demos — they run on a schedule and produce work I use.
The approach
These are not chatbots. Each system takes a defined input — a filing, a transcript, a list of names — runs a fixed sequence of steps against it, and returns something I can use: a score, a draft, a report. The machine does the reading, the arithmetic, and the first pass. Judgment stays where judgment belongs.
They run on a schedule rather than on request, which is the part that makes them useful. A tool you have to remember to open is a tool you stop opening.
Four problems, not twelve tools
The systems group by the problem they solve rather than by the service they call.
-
Reads and rates what no one has time to read
Adverse-media research and earnings-call analysis, run against public sources.
More is published about any given company than one person can read, and almost none of it changes a view. The hard part is not the analysis, it is the triage.
These read public material on a schedule and hand back what is worth a person’s time. What they never do is reach the conclusion. That part does not delegate.
-
Turns filings and calls into a written view
Annual review and industry outlook generators that produce a draft analyst-style view from public disclosure.
Public disclosure is structured enough to be worked mechanically and long enough that working it by hand is expensive. An annual report plus four transcripts is a day of reading before a word is written.
These generators take that public material and produce a first draft in the shape a reader expects — what changed, what it implies, what to watch. A draft is not a view. It is the part of a view that does not require judgment, done in advance.
-
Runs a repeatable process end to end
Screening workflows, loss-estimate aggregation, structured multi-step review with checks built in.
Any process a person performs the same way every time is a process a system should perform. The value is not speed; it is that step four happens the same way in December as it did in March.
These workflows chain steps with validation between them, aggregate numbers from multiple inputs, and stop when something fails a check rather than passing the error downstream. Checks built in, not bolted on.
-
Makes the output presentable
Interactive HTML reports, and an infographic generator running against 600 templates.
Analysis nobody reads is analysis nobody acts on. The last mile — turning a result into something a busy person will actually look at — is usually the part that gets skipped.
The report generator emits self-contained interactive HTML. The infographic generator selects from about 600 layout templates and fills the one that fits the data, so the format follows the content rather than the other way round.
What keeps them honest
An analyst who is wrong gets corrected. A system that is wrong is wrong every time it runs, quietly, until somebody checks. So most of the work is not the analysis. It is the apparatus around the analysis.
Every figure a system reports carries the sentence it came from, so a claim can be traced back to the source text rather than taken on trust. Each step validates what it was handed before it runs, and stops rather than passing a bad value downstream. The parts of the documentation that describe the code are generated from the code and checked on every change, so a description that has drifted from the thing it describes fails the build instead of misleading the next reader.
Most of this code I did not write by hand. I specified the behaviour, defined the gates, and directed coding agents to build against them — which is a different skill, and a more honest description of what I do. The discipline is not optional overhead in that arrangement. It is the only thing standing between fast and wrong.
None of it appears in the output. It is the reason I am willing to use the output.
A worked example
Earnings call · public data
A worked example, published here: my pipeline, a public company’s public earnings call — Apple’s, for its Q1 FY2026 quarter — and the analysis it produced. Every figure carries the sentence it came from and is checked against the number as reported. It records how much of the call was actually read.
It reaches no conclusion about the company, and it is not meant to — no rating, no view, no recommendation. The subject is a company I have no professional involvement with, and the credit-opinion fields are removed before the report is published. Both are deliberate.
The stack
Two self-hosted n8n servers — a Mac mini and a Mac Studio — exposed through Cloudflare tunnels. Built with Claude Code, Codex, and Gemini. Deployed to Google Cloud Run.
Self-hosted is a deliberate choice, not a cost saving. The systems run on hardware I control, on a schedule I set, against accounts that are mine.
What is here, and what is not
Everything on this page is my own work, on my own accounts, from public inputs.
No employer, no counterparty, and no internal process appears anywhere on this site. Nothing here reaches a conclusion about a company, and where a worked example names one, it is a company I have no professional involvement with. Where a capability is described with no example attached, that is why.