Skip to the work

Independent software studio · Three apps live · More in the workshop

We build AI products that refuse to make things up.

A golf tournament console, a futures signal tracker, and a food atlas — three unrelated worlds built to one discipline. Every number on the screen is a real number, and where the evidence is thin, the app says so out loud.

The work — 01

Three apps,
in the world.

Each one is a finished product with real users' problems in it, not a demo. They share no code and no market. What they share is the argument below each title — the thing the app refuses to do, which is usually the thing that makes it trustworthy.

TourneyHQ

From registration to recognition.

A console for running a golf event end to end — registration, flights, round-robin and stroke rounds, qualification, brackets, live standings. Organisers set up on a desktop; players carry the phone app onto the course and enter their own cards.

The scoring sits in a pure tournament engine with its own test suite, separate from the screens, because a leaderboard and a bracket that disagree about the same cut are worse than no leaderboard at all. Handicaps freeze at the first returned card, so a number cannot move under a round that is already being played.

Runs on
Web + installable phone app. Organisers on desktop, players on mobile — one codebase, role-gated.
Built with
Next.js · TypeScript · Prisma · a dependency-free scoring engine
Money
Recorded, never moved. Clubs and courses leave the cash with the shop; societies can run a float or a split.
Won't do
Call a club handicap a WHS Index. Store a forfeit that counts for nothing.
Open the app Source
Flight 1 · Round 3 Live
PairThruNetPts
Rourke / Vasil18−47.5
Okafor / Lund18−16.0
Haines / Cho16+24.5
Bianchi / Reyes16+34.0
Novak / Adeyemi3.5

A dash means no card has been returned — not a zero. The app never scores a hole nobody played.

Ajent Signals

Tracked honestly, or not shown at all.

A mean-reversion signal tracker and paper-trading app for index futures, metals, energy and crypto. Two strategies run side by side: a daily long-only book validated across a decade and five walk-forward windows, and a faster intraday book that is labelled provisional everywhere it appears, because its sample is sixty days.

Trend-following was built, tested, and thrown away at a 30% win rate. The markets that lost money are named and excluded rather than quietly dropped. When the data feed is down the app says no trade — it will not invent a confident one.

Runs on
Installable phone app + web. Signals, a live paper book, and the strategy's own rulebook.
Covers
ES · NQ · RTY · YM · SX5E · DAX · TSX · N225 · XJO · HSI · BTC · ETH · SI · CL
Method
Connors-style mean reversion. RSI(2) entry, ATR stop, rule-based exit. No black box.
Won't do
Fabricate a win rate, a P&L or a testimonial. Ship an overfit tweak because it backtests well.
Open the app
Signal card Structure
ES · 15m Long
RSI(2) 8.4
Stop 2 × ATR
Exit RSI 50
HSI · 15m No trade

No live feed. The app shows nothing rather than a guess.

Shape of the card, not a live quote. Paper trading and research only — not financial advice.

WikiFoodia

How the world actually cooks.

A free atlas of the world's dishes — around 17,700 records built from Wikipedia, Wikidata, Wikimedia Commons and regional open data, readable in twelve languages. Its job is to hold traditions still long enough to be recognised, in a world that rewrites recipes for engagement.

So the rules are strict. A dish's name, its traditional ingredients and its equipment are never translated — a gloss sits alongside the original word, because swapping in the familiar local equivalent is how a tradition quietly disappears. Modern substitutes live in their own labelled box, never in the authentic list. Fusion dishes carry no authenticity score at all, only an explanation and a link to the tradition they borrow from.

Runs on
Phone-first web app. Built with React Native and Expo; the same build serves web and the stores.
Sources
Open and citable, every record. No scraped social posts.
Costs
Free to read, and close to free to run. Any donations would go to an Open Collective, which publishes its ledger.
Won't do
Rank a cook's video by view count. Substitute an ingredient to suit a filter.
Open the atlas Source
Record · reading in French fr

Mole negro oaxaqueño

Nom conservé · Oaxaca, Mexique

  • Chilhuacle negro piment séché d'Oaxaca
  • Hoja de aguacate feuille d'avocatier, grillée
  • Metate pierre à moudre

Substitution moderne
Un mixeur remplace souvent le metate. Noté ici — jamais dans la liste authentique.

Names, traditional ingredients and equipment stay in the original. The reader's language gets a gloss, not a replacement.

The rules — 02

How the studio
actually works.

These are not values on a wall. Each one was written down after a specific thing went wrong or nearly did, and each one has cost a feature at least once. They are the reason the apps behave the way they do.

From the audit log

One rule, read in one place.

Nearly every serious defect found in these apps has been the same shape: a second implementation quietly disagreeing with the first. A ranking compared two ways. A handicap computed twice in two units. So a rule gets one home, and everything asks it.

From the phone

Look at the screen.

Almost nothing important was ever caught by a test. It was caught by opening the app on a phone: a scroll trap, an invite link with no token, a full field showing zero entries. Tests protect the engine. Only looking protects the person using it.

From Ajent Signals

Where the evidence is thin, say so.

A sixty-day sample is labelled provisional. An empty screen says which records are missing rather than implying the world is empty. Confidence is a claim like any other, and it needs the same backing.

From WikiFoodia

Cost is a design decision.

Anything that adds a recurring bill gets flagged with its price before it is built, not after. WikiFoodia's machine translation shipped switched off, capped, and cached, so a second reader of the same page costs nothing for ever.

Across all three

AI where it earns its place.

Drafting a tournament write-up, reading a scorecard photograph, translating a recipe on the page somebody actually opened. Not a chat box bolted to a product that did not ask for one, and never a model's guess wearing the clothes of a fact.

From Sunday mornings

Ship it, then live with it.

Every one of these apps is in the world and used, including by the person who built them. A tournament that has to run on Sunday is a better specification than any document.

In the workshop — 03

And many
more to come.

What is genuinely in progress, stated the same way the apps state everything else. No roadmap theatre, no dates the studio cannot keep. When something ships, it moves up the page.

Building
Shared costs for a golf society Trip expenses, sweeps and payouts recorded end to end — who owes what, settled on a phone at the bar. Still recording money, still not moving it.
TourneyHQ
Building
Community contributions, opening carefully Readers proposing and confirming records, with one confirmation per person enforced properly. Deliberately read-only until the identity check is provably sound.
WikiFoodia
Testing
A forward-tested record, not a backtest The intraday book runs live on paper until the real record is long enough to stand on its own. Whatever it says is what gets published.
Ajent Signals
Designing
Metered features, switched on with the paid tier Text broadcasts, scorecard photo reading and AI drafting are built and tested but switched off — they are the only parts that cost per use, so they wait for the revenue that covers them.
TourneyHQ
Reserved
The next one Nothing to announce yet, and nothing invented to fill the space. If you have a problem worth this kind of stubbornness, the studio is listening.

Get in touch — 04

Bring a hard, small problem.

The studio is one builder shipping AI-native products end to end — design, engine, app, deployment. It works best on the kind of problem where getting the answer right actually matters to somebody.

Notes — 05

Sources for
this page.

A studio that asks its apps to cite their numbers should cite its own. Every marked claim above is listed here with what it rests on. Nothing on this page is a projection, and no figure appears without its sample.

  1. [1] The three products share no code. The discipline described is a set of written constraints applied to each one, quoted in notes 2–4.
  2. [2] Ajent Signals standing constraint: no fabricated win rates, P&L, profit factors, trades or testimonials. Every performance figure shown in the app is either a backtest result or the live paper record.
  3. [3] WikiFoodia domain rule, enforced in the data layer rather than in the interface: view count and authenticity are separate fields and are never combined into a single ranking.
  4. [4] TourneyHQ money model. Clubs and courses are configured not to track cash at all — the pro shop takes the entry fee and pays the winner, so the app records the result only. Societies may run a float or a split; the app still never moves funds.
  5. [5] TourneyHQ is a Next.js web app that installs to a phone home screen. Organiser and player see the same deployment, gated by role.
  6. [6] A per-round handicap is frozen at the first returned card of that round, across every scoring path. Changing an index mid-round cannot retroactively alter a card already in.
  7. [7] Two strategies. The daily long-only book was validated over roughly a decade, positive across five walk-forward windows and four of five out-of-sample indices. The intraday book is a much shorter sample and is marked provisional in the app, on its landing page and here.
  8. [8] Trend-following entries were tested and rejected on results, not on taste. Markets that lost money in testing are excluded and named. Where a feed is unavailable, the app renders "no trade" rather than a signal.
  9. [9] Roughly 17,700 dish records compiled from Wikipedia, Wikidata, Wikimedia Commons, Wikibooks and regional open data. The interface is translated into twelve languages, compiled into the app, at no running cost.
  10. [10] Enforced as invariants in the data layer: preserved terms, disclosed substitutes, and fusion records that carry no authenticity score. A translation that drops a step, renames a preserved term or changes a number is rejected before it can be shown.
  11. [11] Drawn from the studio's own audit log. The recurring failure has been duplicate logic disagreeing with itself — a ranking comparator, an unordered fetch, membership of a side pot read three different ways, a handicap computed twice in two units.
  12. [12] WikiFoodia translates a record only when somebody opens it in a language it does not yet have, caches the result permanently, and stops at a hard daily ceiling. The counter is charged only after a successful call.

Ajent Signals is research and paper-trading software. Nothing on this page or in that app is financial advice, and past results — real ones included — do not predict future results.