The workbench
The fourth program never ships to anyone. It launches the other three, watches them, tests them, backs them up and packages the release. It is the room the rest of the project was built in.
Its views are grouped by what you are doing rather than by what things are — building, operating, or shipping. That sounds like a cosmetic decision and is not: it is the rule that decides where a new tool goes, and having a rule is what stops a workbench turning into a drawer.
Workbench and design documents, an ideas board, a prompt repository, a diagnostics reader, an API tester, the dependency report, and the test-suite runner.
Live status of every service, the operator console for both backends, backups, background monitoring with history and alerts, and a finder for processes that should not be running.
The packager that produces the desktop build, and the changelog. Every build writes a record — version, channel, the addresses baked into it, checksums — so a release identity is never retyped from memory. A build runs on this machine or on a second build host, a Windows virtual machine, and the platform follows the host it ran on rather than a flag anyone could set wrongly.
The workbench keeps three lists that look alike and answer different questions, and they are never merged. The plan catalogue is a record of decisions — what is being built, and how far it got. The ideas board holds observations: what a scheduled review noticed on a given day that nobody has acted on yet. The prompt repository holds instructions not yet given — a request written now, filed with an urgency and a category, and submitted later.
Nothing on this site is investment advice or an offer of any product or service.
How it was built
The project is 543 numbered rounds long. Each one is written up before it closes — what changed, what broke, and what the mistake taught. A handful of those lessons ended up shaping everything after them.
The recurring failure across the whole project has been the same shape every time: two places that both claim to know something, drifting apart quietly until one of them is wrong and nothing notices.
changelog.json.
Same name, same shape, completely different meaning. Merging them is the
single most tempting wrong move in the codebase and there is a note about
it in three separate places.
The application draws profit in green and loss in red. The original pair measured a colour difference of 5.4 under simulated deuteranopia — the most common form of colour blindness, affecting roughly one in twelve men. In an application where those two colours mean gained money and lost money, that is not a styling preference. It is a defect.
Every value was solved for rather than picked, using perceptual colour distance and colour-blindness simulation. The rebuilt gain and loss pair measures 11.3 under the same simulation. It deliberately does not go further: deuteranopia collapses the red-green axis, so pushing for more separation forces the green toward lime and the red toward salmon until neither reads as its own meaning any more. Around eleven, plus the plus-and-minus signs the interface already prints, is the honest optimum.
The theme family eventually closed into a deliberate two-by-two — warm and cold, night and day — plus a frosted twin for each corner and a neutrals-only high-contrast mode. Every borrowed palette was retired on measurement rather than taste: an imported theme inherits semantic colours that were solved against a different ground, and two of the best-known ones turned out to draw their loss colour below the contrast floor on their own panels. The light corners were the harder problem: on a pale ground everything must darken to keep contrast, which collapses the palette into one band of lightness, and lightness is most of what a colour-blind viewer has left. Their money colours were re-solved from scratch rather than inverted.
if (false)
— a trap the project's own notes record more than a dozen times. Tests
now pin the guard rather than the name, and where the claim is a
sentence or a pixel, they render it.
A whole class of defect is invisible to any check that reads code. A control hidden by an attribute kept painting, because a stylesheet's display rule outranks the browser's own rule for hidden things; a legend wrapped onto several rows and was drawn over its own chart; a mark meant to show where a gap had been collapsed sat under a gridline and read as one. Each was found with every check green, by rendering the real page and reading it. The notes keep count of how many times that has happened, because the count is the best argument there is for looking.
The project has nearly seventy design documents. When I went to record which were finished, the obvious approach — read the status out of each document's own header — turned out to be worthless in both directions. One document still announced itself as "plan only, no code changed" eighty rounds after it had shipped end to end. Another carried no marker at all and had been fully built. Status is now tracked deliberately and separately, and nothing writes back into the documents, because two writers for one fact is the same failure as everything else on this page.
| Looked cosmetic | Was actually |
|---|---|
| A wrapping preformatted block | Every ASCII diagram in the documentation, broken. |
| Chart colours held in constants | All fourteen alternate themes — including the light ones — drawing profit and loss in dark-theme colours. |
| Reusing a saved zoom between views | A currency-scaled zoom applied to a percentage series, rendering a blank chart. |
| Recomputing a chart during a drag | A pan that ran away — a 240-pixel drag moving the view by 64,000 days. |
| Retiring an unused theme name | Users whose saved preference pointed at it stranded on a stylesheet that no longer existed. |
Standing note for the whole site. This is a personal engineering showcase. Nothing here is investment advice, a recommendation to trade, a performance claim, a term of service, or an offer of any product or service. The only figures anywhere on this site are a demonstration instance's own arithmetic over app-generated synthetic series, inside screenshots, as illustrations of the tools — none are results and none are implied to be. Trading involves risk of loss, and software that tests ideas against history cannot tell you what happens next.
A personal project. Not advice. Nothing for sale.
This site describes a personal engineering project, written and run by one person in their own time and published under the name Mithraeum Agora. There is no company behind it, no team and no other contributor. It is not a product and not a business. Nothing here is for sale — there is no account to open, nothing to buy, no subscription, no waiting list, and no service is being offered or solicited. Sending a message through the note form creates no customer, client or contractual relationship of any kind. The note form on the contact page is the way to reach me, and it is the only one.
Nothing on this site is investment advice, financial advice, tax advice, or a recommendation, solicitation or offer to buy or sell any security or financial instrument. I am not a financial adviser, a broker, an investment manager or a regulated firm, and nothing here should be relied on as though I were. If you are making decisions about money, take advice from someone qualified and regulated to give it.
Figures do appear on this site, inside screenshots, and none of them is a performance claim. Every one is a demonstration instance's own arithmetic over price series the application generated itself — synthetic data, with no real market behind it — shown to illustrate what the tools display. They are hypothetical and simulated: no capital was at risk, no orders were placed, and a result computed over history with the benefit of hindsight carries limitations that live trading does not forgive. Hypothetical results are not indicative of future returns, and past performance — real or simulated — predicts nothing.
No brokerage, market-data vendor or other company is named anywhere on this site, and where a name appeared inside a screenshot it has been redacted out of the image. Nothing here states or implies that any company is associated with this project, endorses it, sponsors it, supplies it or has reviewed it. None is, and none has.
What this site collects. Nothing, unless you write to me. There is no analytics, no tracking, no advertising, and nothing at all is loaded from another domain. If you use the note form it takes the name, address and message you type, stores them privately where only I can read them, and keeps them for up to a year before they are deleted — sooner if you ask, and you do not have to give a reason. Your IP address is not kept. One thing is stored on your own device: the colour theme you pick, remembered by your browser so the site does not change appearance every time you arrive. It is written only when you choose a theme, and it identifies nothing and nobody. The preference itself never leaves your browser, but the screenshots follow it, so the pictures your browser fetches from this site are the ones drawn in that palette. The contact page answers all of this in more detail.
Terms of use. This site is provided as is and as available, with no warranty of any kind, express or implied. It describes software under active development: anything here may be incomplete, out of date or simply wrong, and it may change or disappear without notice. Nothing on it is a contract, a term of service for any product, or a promise that anything described will be built, released or kept running. To the fullest extent the law allows, I accept no liability for any loss or damage arising from use of this site or from reliance on anything it says. Nothing here excludes or limits any liability that cannot lawfully be excluded or limited.
Trading involves risk of loss.