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, the access cookie on internal routes and, once you sign in, the cookies that keep you signed in. Site analytics is cookieless and loads only after you accept. Cookie policy

Infrastructure

Every part of the stack with its real status: running in this build, planned, or an estimate. No logos, and no implied deals with providers.

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 so are the Strategist and the validation engine, which have run end to end on synthetic data in our test environment. The app is not open, execution is not built, and there is no broker and no exchange market data. Everything below that describes execution is design — the contract that part will have to satisfy — and the table gives the status of each piece.

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 belong to execution, which is not built.

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. Strategy creation runs today on a model served by Workers AI, with the frontier route wired and switched off; the other three 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 enforced in code: a guard rejects any metric a language model tries to supply. No number on this site comes out of a run, though. The app is not open, so the numbers you see here are parameters we declare and market figures we cite, each with its source.

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 not built, and when it is, it will be declared as a mock until a real connection exists.

Market data

This build has no exchange market data. The only bars in it come from the synthetic generator, 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. No exchange data is downloaded, shown or redistributed, and there is no market data subscription and no exchange license behind this build.

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, which the Strategist runs through; the validation engine and the synthetic data generator; Auth.js with email-link and Google sign-in; 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 Executor, broker connections, exchange market data, the knowledge base, and the deep-reasoning route, which is wired and switched off. And the app is not open, so nothing that is built can be used from this site yet.

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

What Quant24 is built on, part by part
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 the Strategist runs through them. No number comes out of them, by design.
Layer: Conversational StrategistPiece: A language agent on Workers AI, through the gateway aboveStatus: In this buildNote: Built, with its prompts and schemas, and run end to end on synthetic data in our test environment. It proposes and explains; a guard in code rejects any metric it tries to supply.
Layer: Deep reasoningPiece: Claude, through the same AI GatewayStatus: PlannedNote: Not built as a feature. The gateway route is configured and switched off, and nothing calls it.
Layer: Validation enginePiece: Deterministic TypeScript, E1 to E6Status: In this buildNote: Built, seeded and repeatable. It runs in background steps, never inside a request, and has run end to end on synthetic data in our test environment. The app is not open, so no number on this site comes out of it.
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. It holds what a run produces — the strategy package, the Evidence Ledger, the synthetic dataset — under a prefix per account.
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 enforce is that the validation engine runs in workflow steps, never inside a request or inside the session object.
Layer: Market dataPiece: Synthetic generator, labeled SYNTHETIC-DATAStatus: In this buildNote: Built. Every bar it produces carries the label in code and in storage, and no exchange data is downloaded, displayed or redistributed anywhere in this build.
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: Sign-in by email link is built and verified in our test environment. Google sign-in is wired and its client checked against Google; a full sign-in through Google has not yet been exercised.
Layer: Form defensePiece: Cloudflare TurnstileStatus: In this buildNote: Wired and tested against the Cloudflare verification API, and every form on this site goes through it. 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. In its place, the research step reads a fixed table of instrument parameters labeled ESTIMATE.
Layer: Model hosting, product designPiece: Direct model APIs and hyperscaler endpointsStatus: ESTIMATE — our 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.
VERIFIED — checked against a primary source
Checked against a primary source we opened and read.
PROXY — an indirect figure standing in for one we do not have
An indirect figure standing in for one we do not have.
ESTIMATE — our 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.