JA//SYSTEMS eagle mark JA//SYSTEMS

Engineering

Built so that the honest version is the easy version

Most of the engineering here is not analysis — it is the machinery that makes overstating a result harder than stating it accurately. A rule enforced by a person is a rule that eventually gets forgotten under deadline. A rule enforced by the build is a rule that holds.

This page is written for whoever has to decide whether the numbers on this site can be trusted.

The integrity model

Four layers, and none of them rely on remembering

Types

The component that renders any figure takes its provenance grade as a required argument and throws if it is missing. An unlabelled number fails the build, so the page never ships. Locked columns are absent from the query types entirely, which makes the typechecker the first line of leak prevention.

Schema

The four provenance grades are a database constraint, not a convention — there is no fifth grade and no default. Synthetic sources cannot be graded as anything but a demonstration. The analysis table refuses any row whose window extends past its own generation time.

Serialisation

Anything reaching the browser passes an allow-list, and it throws on a locked field at any nesting depth. An allow-list fails closed: a new database column is invisible to output until someone deliberately names it.

Audit scripts

The build checks that every internal link resolves, that no locked field name appears in the output, and that no forbidden placeholder text was shipped. These run as a gate rather than as advice.

Worked example · A figure derived from both paper-traded and backtested inputs does not render as Paper It resolves to the weakest of its inputs and renders as Backtested because the stronger label would overstate what is behind it. Aggregates group by grade in the database, so the two cannot be summed into one number in the first place.

The stack

Every choice, and the reason for it

Site
Astro 5, static output
Every page is pre-rendered. There is no server to fail and no runtime to attack.
Styling
Tailwind CSS 4, CSS custom properties
Two hand-built palettes; the light theme is a bespoke design rather than an inverted dark one.
Data
SQLite via Node's built-in driver
Queried at build time only, read-only. No native dependency, so nothing to compile on a deploy runner.
Validation
Schema validation at the ingest boundary
Malformed rows are recorded and excluded, never coerced into looking valid.
Charts
Hand-authored inline SVG
No charting library. A library's defaults are the fastest way to make a bespoke site look templated.
Interactivity
Vanilla TypeScript, no UI framework
The interactive needs are filtering a table and selecting a precomputed result. A framework would be weight without benefit.
Tests
Node's built-in test runner
The metric functions are pure and covered against hand-computed fixtures. A metric bug is indistinguishable from a fabricated number.

Deliberate omissions

What was left out, and why leaving it out was the decision

These are the choices most likely to be read as gaps, so they are stated rather than left to inference.

No live data feed

Trade data leaves MetaTrader 5 as a periodic export, so server-side rendering could not make a page fresher than that export. It would add a database reachable from the internet, credentials, and a runtime that can fail — in exchange for no additional freshness. Static generation was the correct answer, not a compromise.

No charting library

Every chart is inline SVG generated at build time from tested geometry functions. This keeps the client-side JavaScript budget near zero and keeps the visual language the site's own.

No model call at build or in the browser

The analysis layer generates its output offline and stores it, with the exact set of metrics it was shown recorded alongside. No API key ships, and no generated text reaches a page without having been read.

No fabricated demonstration data on results pages

It would have been easy to populate every module with plausible synthetic numbers. Modules that have no data say so instead, in the place the figure would appear. A reviewer can verify that claim in seconds; they cannot verify a number of unknown origin at all.

No account record without confirmed facts

The account table requires a starting balance. That figure is not among the facts observable from the terminal log, so no account record exists yet rather than one containing an invented balance.

Current state

What exists today, counted

Modules live
4 / 15
Modules scheduled
11
Systems tracked
3
Sources registered
2

These are counts of the platform's own structure, not performance statistics. The modules that depend on an exported trade history were specified and sequenced first so that the integrity model could be reviewed before any figure existed to be checked — which is the order that makes the review meaningful.

The validation work these constraints came from — including the audit that produced them — is written up as a case study.