TRIVELA Business Plan - In Class Exercise - 1
TRIVELA Business Plan · Revision 2 · 2026-10-01

A football board that shows its evidence and refuses to pick for you

It shows; it does not decide.

TRIVELA is a decision-support platform for football. It puts ratings, form, and live market prices side by side — eight club leagues on one board, three national-team competitions on another — and never tells the reader what to do with them.

Updated 2026-10-01 · first issued 2026-09-10

Revision 2 (2026-10-01): what changed since Sep 10
  1. 09-15Four leagues joined the board — Bundesliga, Serie A, Ligue 1, Eredivisie — making eight league columns (declared 09-08, live 09-15).
  2. 09-24Pinned-Pass Field replaced the old ratings page: one corpus of 18,718 fixtures and 1,602 clubs, every rating published at a stated pass count.
  3. 09-25/26Championships board behind a Leagues | Championships switch: UEFA Nations League, CONCACAF Nations League, AFCON.
  4. 09-26/28First sealed tests of a machine-learning main model all failed, and were published as failed. Production models stay; a second sealed test is filling.
  5. 09-27Match archive began recording every fixture of the eleven competitions, and work was focused solely on those eleven.
  6. 09-30“Nothing on the Mac”: agents run in cloud sessions; data and capture jobs move to Railway; heavy agents are budget-gated.
  7. 10-01Integrity anomaly tripwire merged (market facts only; it changes nothing on the board), with a national venue fix and archive fixes.
Scale of the change: 128 pull requests merged in three weeks (73 backend, 55 frontend). In this document: sections 1–4 are updated in place; sections 5 (operations and costs), 6 (risks) and 7 (roadmap) are new.
1

Executive Summary

1.1Business Concept

TRIVELA is a web application that assembles, for every fixture across a set of football competitions, the evidence a person would need to form their own view — and stops there.

The football information market is split between two unsatisfying products. At one end sit raw data sources: fixture lists, historical results, expected-goals tables. They are accurate and unopinionated, but they leave the reader to do all the assembly. At the other end sit tipsters and prediction services, which deliver a verdict — back this team, avoid this match — with no visible reasoning, no record of when they were wrong, and a business model that often rewards volume of picks over accuracy.

TRIVELA occupies the space between. It does the assembly work — cross-league ratings, tier placement with stated uncertainty, recent form, live market prices, order-book depth — and presents it as one readable card per fixture. What it will not do is collapse that evidence into a recommendation.

Behind the board sits one research question: “Is there information the betting market hasn’t already priced in?” So far the measurements have found no evidence that there is. Every model-versus-market test so far has failed: in every market tested, no model has beaten the exchange price. The World Cup 2026 model matched the market without beating it: the model and the market favourite each called 38 of 43 settled markets (model Brier score 0.095). The project’s own summary still holds: “Our models got better. The market is still ahead.” That result supports the product’s choice to offer evidence rather than verdicts.

The founding constraints

“It shows; it does not decide.” This is not a marketing line. It is enforced in the codebase by automated tests that fail the build if prescriptive language appears in the product’s wording: no cash out, no sell, no you should. And the product never calls a gap an edge.

Missing is never zero. A measurement the system could not take is named as missing, never rendered as a zero or a blank that a reader might mistake for a measured value.

A stale reading is never shown as current. A price or match state that has stopped refreshing is marked stale, or withheld, rather than presented as live.

These constraints are the product’s competitive position as much as its engineering discipline. They make TRIVELA useful to a reader who distrusts confident strangers, and they keep the product clear of the regulatory and reputational exposure that attaches to giving betting advice. Money is locked: TRIVELA handles no money and places no orders, and no code path enables either.

1.2Target Market

The primary user is the self-directed football analyst: someone who follows multiple leagues, has an opinion about matches, and wants better inputs rather than someone else’s conclusion. Concretely this covers three overlapping groups.

Coverage now reaches beyond Europe’s major leagues: MLS and Liga MX in North America, and national-team windows — the UEFA and CONCACAF Nations Leagues and AFCON with its qualifiers. That widens the “cross-league question” audience to international football.

The unifying characteristic is not risk appetite. It is a preference for evidence over verdicts — a segment that existing products systematically underserve because verdicts are easier to sell. As in the first edition, this plan states no market size (see the note on figures at the end).

1.3Proposed Solution

The product is two boards behind one switch. The Leagues board has eight columns — Premier League, La Liga, Bundesliga, Serie A, Ligue 1, Eredivisie, MLS and Liga MX. The Championships board has three — UEFA Nations League, CONCACAF Nations League, and AFCON with its qualifiers. Fixtures sit in day-major matchday bands, in kickoff order by default; the measured gap is the tiebreak, and each matchday’s sort can be overridden. The board’s header says what it is not: no model runs there, and nothing on it is a probability, an edge or a recommendation.

Each card carries:

A reader can scan a column in seconds and open any card’s match page for the full reasoning.

The technically distinctive piece is cross-league rating. Two clubs in different domestic leagues have no shared scale: being first in one league and first in another says nothing about which is stronger. TRIVELA solves this by fitting ratings across one corpus of 18,718 fixtures, 1,602 clubs and 2,970 bridges — the matches that connect leagues to each other: European and CONCACAF cups, the Club World Cup, and domestic cups played across divisions. Leagues that no bridge connects stay apart: ratings in different connected components cannot be compared, so the site never ranks them together. Today the six European leagues form one component and MLS with Liga MX another, so clubs from the two are never ranked against each other. Every rating is published at a stated pass count (10 for the league field) and refused if it does not state one: the project learned on 23 September that the same club’s rating could move by 198.97 Elo between one pass and ten. The result is a ladder on which clubs from different countries can be compared wherever bridges connect them — and where that measurement is not possible, the number is withheld rather than estimated.

1.4Team

TRIVELA is built and operated by Son, a student and the project’s solo developer, working with AI coding agents. Son sets direction and makes the product’s declarations — which competitions get a column, for example, is his call and is never derived from what data happens to exist. Agents do most of the building; anything that changes production’s shape (database migrations, new jobs, new public routes) is listed in the pull request for Son to approve.

Between 10 September and 1 October, 128 pull requests merged (73 backend, 55 frontend). The codebase carries 8,767 backend tests (passing on main, 1 October) and 1,127 end-to-end browser tests in 63 suites (27 September), which is the mechanism that makes solo operation of a system this size tractable. Agents work in their own git worktrees, since 30 September in cloud sessions, under a budget gate of at most three heavy agents at a time (section 5).

Three roles are identified as the first hires, in priority order:

2

Product Overview

2.1Core Features

As of 1 October 2026:

2.2Technology Stack

Backend

  • Python · FastAPI, NumPy
  • PostgreSQL · SQLAlchemy, Alembic
  • Railway · hosting, persistent volumes, match archive
  • pytest · 8,767 tests (main, Oct 1)

Frontend

  • Next.js · React, TypeScript
  • Tailwind CSS · design tokens
  • Vercel · hosting (cs4800.namson.dev)
  • Playwright · 1,127 tests / 63 suites

Data sources

  • API-Football · paid PRO plan, 7,500 req/day: absences, team stats, live player ratings, odds from 33 bookmakers
  • ESPN · fixtures, results, per-match lineups, live state, commentary, standings
  • Market · live order book on cards; the T−10 book is the comparator
  • Sportec · official MLS xG
  • ClubElo · reference only

Modelling

  • Cross-league Elo · 18,718 fixtures, pinned pass count
  • Poisson goals model · attack / defence
  • Season blending · current-season weight GP/(GP+10)
  • Jackknife intervals · over bridge fixtures, 200 replicates
  • ML research hierarchy · partial pooling, bivariate Poisson; market price not an input; judged only on sealed, preregistered hold-outs

Three engineering choices deserve note in a business context. First, the entire system is read-only with respect to money — it holds no user funds and places no orders, which removes an entire category of regulatory and custodial risk. Second, the test suite is the substitute for headcount: guard tests enforce the product’s editorial rules mechanically, so the founding constraints survive contributors who have never read the charter. Third, research is preregistered and sealed: pass rules are written before data is read, evaluation uses walk-forward splits only, sealed files are fingerprinted, opened once and logged, and every research bundle the site serves is SHA-256 sealed and checked on load. Failures are published as failures.

3

Market Analysis

3.1Industry Overview

Three structural shifts define the opportunity.

Regulatory expansion. The US Supreme Court’s 2018 decision striking down the federal prohibition on sports betting moved the activity from a single state into a majority of them, creating a large legal audience for sports analysis that previously had no lawful commercial outlet. Legal markets bring mainstream users, and mainstream users bring demand for tools that explain themselves.

Regulated prediction markets. Exchange-style contracts on sporting outcomes are now listed on venues supervised as financial markets rather than as sportsbooks. This matters to TRIVELA specifically: exchange venues publish live order books, so market prices become a data source with visible depth and spread, rather than an opaque bookmaker line. The project’s own measurement says these prices are hard to beat: in every market tested, no model beat the exchange price (national 1X2: Δ +0.0005 [−0.0037, +0.0035], n = 208 — no evidence of information beyond the price). That is evidence for offering evidence rather than verdicts.

Data availability. Per-match expected-goals data, once proprietary to clubs and broadcasters, is now available through commercial APIs. The analytical work that distinguished specialist firms a decade ago is now a question of engineering effort and of paid data plans (TRIVELA uses API-Football’s paid PRO plan). One catch shapes the business: the provider deletes pre-match odds about seven days after kickoff, so a price history exists only if it is captured going forward. The project now captures prices going forward in two ways: a capture of the provider’s pre-match bookmaker odds runs every three hours, and the match archive records the market’s home/draw/away quotes at T−60 and T−10 for every fixture of the eleven competitions that market lists.

The corresponding headwind is saturation at the low end. The barrier to publishing football predictions is near zero, and the market is crowded with services whose accuracy is unverifiable. This is why TRIVELA’s positioning is deliberately narrow: the crowded segment is verdicts, not evidence.

What three weeks of measurement changed about the positioning

Measured honesty. A machine-learning main model was built and put through its first sealed exams. Every scope failed, so production models stay everywhere — and the failures were published. The ML model’s longer walk-forward log-loss gains over production (+0.018 to +0.030 per league) are supporting, not confirmatory: in 2026-Q3 alone it ties the frozen model (−0.0004), so the verdict is “not shown”, not “absent”.

Preregistered sealed tests. The pass rule is written before the data is read, so a failure is a verifiable result rather than an opinion. A second sealed test is now filling from the archive.

Anomaly avoidance. An integrity anomaly check came back null: calibration slopes 0.8–1.3, late steam in 4 of 610, and the avoid rule excludes about 0% today. The live tripwire keeps watching, as market facts only.

First sealed exam (scope)nML log-loss gain over production, 95% CIResult
Nations493+0.0008 [−0.0028, +0.0046]Failed
MLS170+0.0181 [−0.0227, +0.0568]Failed
MLS + Liga MX240+0.0119 [−0.0242, +0.0460]Failed
Liga MX alone70−0.0029 [−0.0603, +0.0526]Failed
Six European leagues224+0.0001 [−0.0266, +0.0275]Failed

Gain is the production model’s log-loss minus the ML model’s, so a positive value favours the ML model. Every interval includes zero; every scope failed, and the production models stay. All figures use fixtures that kicked off on or before 2026-09-27.

3.2Target Market & Competitive Analysis

Target market. The segment is the self-directed analyst described in section 1.2, now reached across eight club leagues on two continents and three national-team competitions. What competes for that reader’s attention falls into four categories, and each leaves a gap:

CategoryWhat they give the readerThe gap
Raw data sites Fixtures, results, xG tables, downloadable history. Accurate, free or cheap. No assembly. The reader does all comparative work, and cross-league questions are unanswerable from league tables alone.
Odds comparison The same fixture priced across many bookmakers; best available price. Price only, no independent view of team strength. Answers “where”, never “whether”.
Tipster services Explicit selections, often with claimed historical returns. Reasoning is hidden, records are self-reported and rarely auditable, and incentives favour volume over accuracy.
Rating publications Rigorous public models with published methodology. Typically single-league or single-tournament, editorially infrequent, and not built as a working tool for a specific fixture on a specific day.
TRIVELA Assembled per-fixture evidence across eight leagues and three national-team competitions; ratings at a stated pass count; live market prices in the same view. Deliberately withholds the verdict — which is the position, not a missing feature — and runs preregistered sealed tests whose failures are published.

The defensible advantage is cross-league comparability. Any competitor can publish a league table or an odds feed. Producing an honest ladder from a corpus of 1,602 clubs requires fixtures that connect the competitions, a fitted bridge between them, a stated pass count, and a disciplined answer for the cases where the measurement genuinely cannot be made — two leagues that no bridge connects are never ranked together. That last part is the hardest to copy, because it requires being willing to show less.

The second advantage, new since the first edition, is measured honesty. A service that sells picks has every reason not to publish that its own model failed to beat the market; TRIVELA’s positioning lets it publish exactly that, and the publication is the credibility.

4

Marketing and Sales Strategy

4.1Marketing Channels

4.2Customer Acquisition

Acquisition is free-tier-led. The boards themselves are open: any visitor sees the current slate, the ratings and the gaps, with no account required. This is a deliberate inversion of the tipster model, where the pick is the paywalled asset.

Conversion is meant to be driven by depth and continuity rather than by withholding the core read — historical rating movement, watchlists that persist, alerts on fixtures a user is following, full cross-league detail, and access to the underlying data. None of the account-based pieces exists yet: today there are no user accounts, and match declarations and alerts are operator-only. Persistent watchlists and alerts remain future Member features.

Two acquisition principles follow from the charter. TRIVELA does not take bookmaker affiliate revenue, because a per-signup commission creates an incentive to encourage betting that directly contradicts the product’s stated refusal to advise. And it does not advertise on outcome claims — no returns, no strike rates — because such claims are the thing the product exists to be an alternative to.

4.3Growth Strategy & Monetization

Open Live
Free
Both boards, the Field, ratings, gaps and tiers. No account. The acquisition surface and the credibility proof.
Member Not built
Subscription / month
Watchlists that persist, alerts, rating history and full cross-league detail. Needs user accounts, which do not exist yet.
Data Seed exists
API / usage
Programmatic access to ratings and fixture readings for analysts, media and fantasy platforms. The append-only match archive, already a public read-only feed, is the seed.

Growth runs along three axes, in sequence.

The long-term position TRIVELA is playing for is to become the citable cross-league rating: the number a journalist quotes when comparing clubs from different countries — always with its pass count and its interval. That status is won by public methodology, published misses, and consistent refusal to overclaim — the same three behaviours that constitute the marketing strategy.

5

Operations, Team and Costs

New in Rev 2

5.1How the work gets done

One person, many agents. Son — a student, the solo developer and the product owner — declares what the product shows and approves migrations, new jobs and new public routes. AI coding agents do most of the building, each in its own git worktree. Since 30 September they run as cloud sessions. Standing rules keep this workable:

5.2Running the data

Three capture jobs run alongside the match archive. Pre-match odds are captured every three hours plus a final pass, running locally until 16 October or until a Railway job replaces them. In-play odds capture is capped at 4,800 calls a day. A player-rating history harvest (16,110 fixtures so far) is moving to Railway. The match archive grows by about 1 MB a week.

5.3Cost items

Only real cost lines are listed, with no prices: this plan quotes no amount it has not measured. Where the project’s records do not say how a service is billed, the table says so.

ServiceWhat it pays forBilling basis
API-Football · paid PRO plan 7,500 requests a day, shared by production and the capture jobs: absences, team stats, live player ratings, odds from 33 bookmakers. Monthly plan period. Renewed 2026-09-30; the current period ends 2026-10-30T11:30Z.
GitHub Pro The account plan behind both repositories, activated about 15 September after the CI allowance ran out. Fixed monthly.
GitHub Actions minutes CI for the backend repository. The frontend repository is public, so its minutes cost nothing. Metered beyond the plan allowance: 2,836 of 2,000 minutes used by 14 Sept; about 5,000 minutes over 282 runs in September; billing refused runs from 28 Sept until minutes returned on 1 Oct.
Railway Backend hosting, PostgreSQL on a persistent volume, the match archive, and (moving there) the capture jobs and cold storage. Not recorded in the project’s sources. Storage is the line that grows; it is alerted by days until full.
Vercel Frontend hosting for cs4800.namson.dev. Not recorded in the project’s sources.
AI coding agents Claude Code agents, local and in cloud sessions. Usage-limited by a 5-hour budget (hence the budget gate); plan terms not recorded in the project’s sources.

Two lines are deliberately absent. There is no capital at risk: money is locked, so no funds are at risk. And there is no revenue: no user accounts exist and pricing has not been tested.

6

Risks

New in Rev 2

Most of these are not hypothetical; they happened between 10 September and 1 October, and the response is already in place.

RiskWhat happenedResponse
The market stays ahead Every first sealed exam failed; no model beat the exchange price in any market tested. The product offers evidence, not verdicts. Production models stay; a second sealed test is the next honest measurement.
Provider outages 23 Sept: a ClubElo outage held 20-second sockets and took the whole site down while the database was healthy. 25 Sept: production hung three times with its 40-thread pool full. Single-flight fetches; provider calls may hold at most 24 of 40 threads, then answer “busy” (peak now 6 of 40); retries only in the background; the last good value is served marked stale.
Provider drift and throttling ESPN stopped answering multi-day date ranges (15 Sept); the market answered with 429 “too many requests” storms. The board asks ESPN one day at a time, and form sweeps moved to month requests (whole-board ESPN requests fell from 502 to 112); one market throttle at 8 requests a second, burst 12, with 3 reserved for the T−10 lock; failures shown as plain sentences.
Paid quota and plan end API-Football’s 7,500 daily requests are shared by production and capture; the plan period ends 30 Oct. In-play capture capped at 4,800 calls a day; a per-caller usage counter is in review; the renewal decision is due before 30 Oct.
CI budget Allowance exhausted by 14 Sept; about 5,000 minutes used in September; runs refused 28 Sept – 1 Oct. Superseded branch runs cancelled (main never), job timeouts, bundled pull requests, local validation against SQLite and throwaway PostgreSQL, no-CI branches.
Agent attrition 54 agents died at the 5-hour usage limit. The budget gate in section 5.1.
Storage and the local machine Volume-full incidents on 25 July and 1 September; a restart of the developer’s computer on 30 Sept wiped working files. Storage alerts by days until full, not percent full; “nothing on the Mac”.
Sealed-data discipline Two early reads, both disclosed: a market test read 380 of 495 sealed nations matches through a logged loader; three list calls returned fixtures from 28 Sept. Results reported with and without the early reads; the stray fixtures deleted unanalysed and logged; sealed files opened once and logged.
Security A 25 Sept audit found 296 of 614 path-traversal attack paths escaping the site’s proxy. The public site forwards only an allowlist of exact read paths: 0 escapes after the fix.
Regulatory and reputational Any product near betting risks reading as advice, and integrity work risks reading as accusation. Money locked with no code path to placing orders; no affiliate revenue; integrity signals are called anomalies, are market facts only, and never name a team or a person.
One developer The whole system depends on a single person. The test suite as the substitute for headcount, approval gates written into pull requests, and the first hires in section 1.4.
7

Roadmap and Milestones

New in Rev 2

Dates marked “~” are estimates.

Done · 10 Sept → 1 Oct

  • 09-15Eight league columns live.
  • 09-24Pinned-Pass Field replaces the ratings page.
  • 09-25/26Championships board settles at UNL, CNL, AFCON.
  • 09-26/28First sealed exams run Failed — published; production stays.
  • 09-27Match archive begins; focus set on the eleven competitions.
  • 10-01Integrity tripwire, national venue fix and archive fixes merged.

October 2026

  • Land live player ratings with an ESPN commentary layer (dark until enabled), then the per-caller API-Football usage counter, then the odds-archive change (needs Son’s approval; off by default).
  • Finish the current preregistration amendment (statistical design): round 6 and its sixth integrity review, then pin it.
  • Move capture to Railway — player-rating harvest, in-play capture, encrypted cold storage — and retire local processes only after verification. 10-16local pre-match odds loop ends.
  • 10-19GitHub’s runner image moves to Ubuntu 26.
  • 10-30API-Football PRO period ends; renewal decision before it.

Running from 1 October

  • Red-card forward test: evaluated at 150 red-card matches (~14 weeks) or on 2027-06-30.
  • The second sealed test fills from the archive; each scope opens at n ≥ 300.

First honest looks · November → January

  • ~11-08Six European leagues: first look, plus the deferred in-seal statistics.
  • ~mid-NovNational teams: first look, plus the deferred in-seal statistics. The public estimate for the nations scope as a whole is 2027, after several international windows.
  • ~JanMLS + Liga MX first look.

Waiting on Son, data or an amendment

  • Decisions: the live view on match pages (a “+/−” strip and an “is this lead safe?” panel), the tripwire’s channel, thresholds and tiers, and live-ratings storage.
  • Candidates: a player-form model (needs the 2024–26 harvest) and a CNL totals recalibration.
  • Saved ideas: label the form / H2H panel display-only (measured non-predictive); news and social-opinion layers, display-only first, then measured against a preregistered floor.

The central question has not changed: can anything beat the market price after fees? The second sealed test is the next honest measurement.

Note on figures. This plan deliberately contains no market sizing estimates or revenue projections. The industry shifts described in section 3.1 are directional and publicly documented; converting them into an addressable-market figure requires primary research not yet undertaken, and a fabricated number would sit poorly in a document whose subject is a product built on refusing to state what it has not measured. Pricing is likewise shown as structure rather than as specific amounts, pending willingness-to-pay testing, and section 5.3 names cost lines without prices for the same reason. Every project figure in this revision comes from the project’s dated change log for 10 September – 1 October 2026; results statistics use only fixtures that kicked off on or before 27 September 2026.