How it fits together
The interesting decisions in this project are almost all about what is not allowed to travel, and which program is permitted to know what.
| Direction | What travels | What never does |
|---|---|---|
| App → Agora | Who you are: a sign-in, a session, a support message you chose to send. | Positions, orders, balances, symbols, strategy logic. |
| Agora → App | A signed entitlement saying which features your account may use, and for how long. | Anything about anyone else's account. |
| Agora → Control Plane | Subscription questions, on a server-to-server channel that never touches your browser. | Market data. The Agora has none to send. |
| App → Control Plane | "Is there a newer version?" — answered with a signed manifest. | Any identifying detail about what you are running or trading. |
The two programs on the right of the line each get their own treatment: the Agora — the community site, its screenshots and the strategy library — on its own page, and the Control Plane in the section below this one.
A recurring rule across all four programs: when something cannot be determined, the answer is never a cheerful default. An unreachable data source records absence rather than zero, because "there were none" and "we could not tell" are different facts and only one of them is evidence. Charts draw the gap as a break rather than joining the line across it. A permission check that cannot resolve denies. A monitoring reading that cannot be taken is missing rather than invented.
It sounds obvious written down. It is surprisingly easy to get wrong, and a system that quietly reports zero when it means "unknown" will eventually convince you that nothing is wrong at exactly the moment something is.
Note. This page describes architecture at the level of shape and intent. It deliberately omits internal addresses, file layouts, credential handling and other operational specifics — a public description of a system's interior is a convenience for the wrong reader. Nothing here is investment advice or an offer of any product.
Licensing and releases
The smallest of the four programs, and the only one that holds a signing key. It answers two questions: what is this account entitled to, and what is the current version of the software.
When the application asks what features an account may use, the answer comes back cryptographically signed with a key the application has already pinned. That has a few consequences that shaped the rest of the design.
A release is one version shipped as several binaries — the application now builds for two desktop operating systems — and the signed manifest carries each platform's entry inside the signature, so no platform's download can be swapped without breaking it. The application reads its own platform's entry and nothing else: a manifest with no entry for it is answered with nothing, and a platform name outside the known set is refused rather than matched loosely. A manifest from before there was a second platform is read as describing the original one, and only that.
Administrative actions — issuing, lapsing, granting, rotating a key, publishing a release — are appended to a hash-chained log. Each entry commits to the one before it, so removing or altering a line is detectable rather than invisible, and the log reports the exact point where the chain breaks. It is appended to and never rewritten, because a record that can be tidied afterwards is not evidence of anything.
The service answers to three kinds of caller: anyone at all, for the small number of things that must be public before any credential exists; the identity service, for the specific questions it is allowed to ask; and me, for administration. Which caller may reach which capability is decided by a single explicit map, and anything not named in it is treated as administrative — so a newly added capability is unreachable by a lesser credential by default, rather than reachable until someone remembers to restrict it.
That default was the fix for a real hole rather than a precaution. The map used to name the restricted paths, which meant every capability added afterwards was public until somebody noticed — and one of them, added later, would have let any caller at all close any account. Naming the permitted ones instead inverts the failure: the mistake you can now make is a capability that refuses a caller it should have allowed, which is visible immediately, rather than one that admits a caller it should have refused, which is visible only afterwards.
Descriptions on this page are deliberately general. Specific endpoints, credential handling, key storage and deployment details are omitted — publicly documenting the interior of a security boundary mostly assists people you would rather not assist. Nothing on this site is investment advice or an offer of any product or service.
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.