Skip to content

Cookies are off until you say otherwise

Non-essential cookies stay off unless you accept them, and rejecting them leaves the site fully usable. What runs either way is only what the site cannot work without: the anti-abuse check on our forms, the record of the choice you make here, and the access cookie on internal routes. Site analytics is cookieless and loads only after you accept. Cookie policy

Infrastructure

Every piece of the stack with its real status — what this build runs today, what the product design calls for, and what nobody has contracted yet.

What we're built on

This page is a list of parts with their real status attached. Three of those statuses do the work. In this build means the piece is wired and deployed in this repository today, and you can hold us to it — it does not mean a product feature is sitting on top of it, and where the piece is bare the note says so. Planned is in the product design and has not been built, contracted, agreed or paid for. Estimate is our own calculation with the assumptions stated. Nothing here is a claim of a commercial arrangement, and there are no logos on this page for exactly that reason.

Read the two together before you read anything else on this page: the infrastructure is real and the product on top of it is mostly not. Everything below that describes strategy creation, validation or execution is design — the contract those parts will have to satisfy — and the table says which phase builds each one.

Two speeds

A language model on every tick is the most expensive and least stable way to watch a market. So the system is designed to run at two speeds, and they are never allowed to mix. Neither speed runs today; both are Phase 5.

The top row is to run on every tick, in deterministic code, with no model in the loop: the market feed reaches a quantitative engine that computes signals, holds the stop-loss, enforces position limits, tracks drawdown and owns the kill switch, and only then reaches the broker.

The bottom row is to run in minutes, by interval or by event, and that is where the models go. A small scheduled model reads the current state and the knowledge base and proposes an adjustment as structured JSON. A larger reasoning model is woken only by an event — a volatility break, a drawdown, a regime change, a piece of news. Either way the engine has to validate the proposal against the limits before anything happens, and a proposal that violates a limit is discarded, not negotiated.

Three reasons for the split, none of them about price. Latency: a full model decision takes longer than a market decision has. Rate limits: one request per second per user, at the scale the product is designed for, is beyond the tiers we have priced. Determinism: risk rules have to be reproducible and auditable, and a sampled model is neither.

Models by task

One expensive model to think; one cheap model to watch. A frontier model costs materially more per token than a small one, so putting the same model in both places is a choice that buys nothing. None of these assignments is wired yet; they are how the work is meant to be split.

  • Strategy creation — a frontier reasoning model, with strong open-weight alternatives.
  • Scheduled review — a small, fast model in a non-reasoning mode.
  • Rebalancing and risk — rules in code, with a mid-sized model invoked by event.
  • Retrieval — an embedding model plus a reranker.

The rule that survives every one of those choices: the model writes and explains; the engine in code produces every number. Language models are not evaluated as financial analysts and we do not rely on them for arithmetic, and models trained on the open internet already know how the past turned out, which is exactly the bias a backtest exists to avoid. Two language agents propose and interpret; an engine in code produces every number; a human approves.

That rule is a contract, not a description of today. There is no engine in this build, so no number on this site comes out of one — the numbers you see here are parameters we declare and market figures we cite, each with its source. What exists is the shape the engine will have to fit.

Where the models run, and what is retained

There are four honest routes — direct provider APIs, hyperscaler endpoints, open-weight inference services, and rented or owned GPUs — and the criterion that decides between them is data retention, not list price, because the knowledge base holds proprietary material.

Zero-retention arrangements are repeated here only as each provider documents them, and never as a general property of the category. Where a provider states it, we say so and name the provider; where it is a contract term rather than a default, we say that too.

Brokers

You bring your own account. Quant24 connects to the futures broker or prop firm where your money already sits, and never holds funds and is never in the path of the money.

Four routes are in the design — Rithmic, CQG, Tradovate and Interactive Brokers — and none of them has been contacted. They appear on this page as planned integrations, with no logos and no suggestion of an arrangement, because there is nothing to suggest. Broker connect is designed as a complete interface sitting in a waitlist state; it is built in Phase 5, and it will be declared as a mock in the build ledger when it exists.

Market data

This build has no market data of any kind. The synthetic generator is Phase 5, so there are no bars yet — and there is no exchange data either: none is downloaded, shown or redistributed, and there is no market data subscription and no exchange license behind this build. When bars do exist they will be synthetic, labeled SYNTHETIC-DATA in the interface, in the code and in storage, and the label is enforced by the components rather than remembered by a person.

That is not only a cost decision. Redistributing exchange data to users requires a distributor license, so the design keeps the user's data arriving through the user's own entitlement at their broker rather than through us — which is the same shape as the rest of the product: your account, your data, your approval.

What this build actually uses

Next.js on Cloudflare Workers through OpenNext, with D1, R2, KV, Queues, Durable Objects and Workflows underneath; Workers AI behind an AI Gateway, wired and probed with nothing built on it; the skeleton of Auth.js; Stripe in test mode; Resend for email; Turnstile on the forms; the design system that renders every component; and the content pipeline that refuses to publish a figure without a source. Built on Cloudflare.

What this build does not have, and what the rest of this page describes as design: the Strategist, the deep-reasoning pass, the validation engine for E1 to E6, and the synthetic data generator. All four are Phase 5.

The table on this page is the complete list, and the status column is the part worth reading.

What we're built on
LayerPieceStatusNote
Layer: Application runtimePiece: Cloudflare Workers, Next.js through OpenNextStatus: In this buildNote: Every page and every API route in this build runs on Workers. Built on Cloudflare.
Layer: InferencePiece: Cloudflare Workers AI behind AI GatewayStatus: In this buildNote: The binding and the gateway are wired and deployed, and a smoke probe exercises them end to end. Nothing is built on top of them yet — no agent, no conversation, no number.
Layer: Conversational StrategistPiece: A language agent on Workers AI, through the gateway aboveStatus: PlannedNote: Phase 5 builds it, together with its prompts and its schema. Nothing runs on the gateway today.
Layer: Deep reasoningPiece: Claude, through the same AI GatewayStatus: PlannedNote: Reserved in the design for an ambiguous Goal Spec and for the adversarial pass over a strategy's logic, never for arithmetic. Phase 5 routes it. Nothing calls it today.
Layer: Validation enginePiece: Deterministic TypeScript, E1 to E6Status: PlannedNote: The package does not exist in this repository. Phase 5 builds it. Until it does, no number on this site or in this app comes out of an engine, because there is no engine.
Layer: DatabasePiece: Cloudflare D1 with Drizzle migrationsStatus: In this buildNote: Every write goes through one data layer; the schema only changes through a migration file.
Layer: Object storagePiece: Cloudflare R2, private bucketStatus: In this buildNote: The bucket is wired and private, reachable only through a binding or a short-lived signed URL. What it is meant to hold — strategy packages, evidence ledgers, synthetic datasets — arrives with the engine in Phase 5.
Layer: Cache, flags and rate limitsPiece: Cloudflare KVStatus: In this buildNote: Also where a flag like the pricing catalog switch lives, so turning one off needs no deploy.
Layer: Background workPiece: Cloudflare Queues, Cron, Durable Objects and WorkflowsStatus: In this buildNote: All four are bound and deployed, with a dead-letter queue behind the queue. The rule they exist to enforce — the validation engine never runs inside a request or inside the session object — takes effect when that engine arrives in Phase 5.
Layer: Market dataPiece: Synthetic generator, labeled SYNTHETIC-DATAStatus: PlannedNote: Phase 5 builds it. This build generates no bars at all, and no exchange data is downloaded, displayed or redistributed anywhere in it.
Layer: Market data, product designPiece: CME Globex through a licensed vendor feedStatus: PlannedNote: Priced per the provider's published plans. Nothing is quoted and nothing is contracted.
Layer: Broker connectionPiece: RithmicStatus: PlannedNote: A first target because it sits behind most futures brokers and prop firms. Not contacted; vendor licensing would come first.
Layer: Broker connectionPiece: CQGStatus: PlannedNote: The other first target, reached through the broker the user already has. Not contacted.
Layer: Broker connectionPiece: TradovateStatus: PlannedNote: Second priority. Streaming through the API also needs an exchange license. Not contacted.
Layer: Broker connectionPiece: Interactive BrokersStatus: PlannedNote: Second priority, through third-party authorization from the user's own account. Not contacted.
Layer: PaymentsPiece: Stripe in test modeStatus: In this buildNote: No card is charged in this build and no paid plan is on sale.
Layer: Transactional emailPiece: ResendStatus: In this buildNote: One verified sending domain; the address you reply to is a person's, not a robot's.
Layer: AccountsPiece: Auth.js with a Drizzle adapterStatus: In this buildNote: The skeleton is wired — session handling and the adapter against D1. The sign-in routes a person actually uses are built in Phase 5, and no account exists yet.
Layer: Form defensePiece: Cloudflare TurnstileStatus: In this buildNote: Wired and tested against the Cloudflare verification API; this build publishes no forms yet, so nothing calls it until Phase 5. It checks that a submission came from a browser, and it is not identity and not a credential check.
Layer: InterfacePiece: The design system, its tokens and its StorybookStatus: In this buildNote: Every component the site renders comes from here, and each one is a test with an accessibility check attached.
Layer: ContentPiece: The MDX and JSON pipeline behind every word on this siteStatus: In this buildNote: Copy lives outside the application, and three checks refuse to build it — forbidden vocabulary, unsourced figures, and generated files that drifted.
Layer: RetrievalPiece: Warren, the internal knowledge baseStatus: PlannedNote: Not indexed. The design substitutes a static parameter table labeled ESTIMATE; that substitution is built with the engine in Phase 5, so nothing consumes it today.
Layer: Model hosting, product designPiece: Direct model APIs and hyperscaler endpointsStatus: ESTIMATEour own calculation, not a measurementNote: Chosen by data retention rather than by list price, because the knowledge base holds proprietary material. Retention is described only as each provider documents it.

What each status means

In this build
Wired and deployed in this repository today; not the same as a product feature sitting on top of it.
VERIFIEDchecked against a primary source
Checked against a primary source we opened and read.
PROXYan indirect figure standing in for one we do not have
An indirect figure standing in for one we do not have.
ESTIMATEour own calculation, not a measurement
Our own calculation, with its assumptions stated. Not a measurement.
Planned
In the product design. Not built, not contracted, not agreed and not paid for.