KILN.
← All work
Live · in productionDesign + buildexecuted.xyz

Executed

A subscription platform for a Singapore trading-education membership. Most of it is behind a door.

Scroll — the blade is drawn from the word it is made of

The door

What is sold here is mentorship, so the site is not a course. No modules, no lesson numbers, nothing to complete — a decision the interface has to keep in every place a progress ring would have been the obvious component.

Around that sit the three things a member pays for and a stranger must not reach: the recordings, a protected player, and a journal for their own trades. The whole build is the machinery for letting exactly the right people through one door — and for being straight, on every screen, about what it does and does not know.

01 · Whop Money moves a role is granted 02 · Discord The role the only source of truth 03 · Sign-in Read fresh never trusted from a token 04 · The gate can( ) a capability, not a role name yes → the member page no → a page that explains why, ungated No bot. Two OAuth scopes. The session is the only thing stored, and it is written at most once every ten minutes.
Fig. 01 — the access chain, end to end
Behind the door

Five of the six member pages answer a stranger with a redirect. You can open the front door of EXECUTED yourself; you cannot open these.

Six plates — drag or swipe the row 01 / 06
Plate 01 — the desk The signed-in member dashboard: a tab bar across the top, a watched counter reading zero of twelve, and a panel for the week reading No trades of your own yet.
An empty week is left empty. It offers to import some rather than filling itself with samples — dress it, and every figure on the page is part fiction.
Plate 02 — the player The protected player. A watermark reading at-member with a session code and clock sits over the picture, and a side panel lists the watermark handle, session, position and the time until it next moves.
The watermark follows the viewer. Handle, session and clock, repositioned on a timer so a screen recording carries the account that made it. It is written into the HTML at the gate rather than drawn by a script, so turning JavaScript off does not remove it. Picture is a stand-in — no file attached, and the page says so
Plate 03 — the import The CSV import, mid-map: a panel headed How the columns were read, pairing each journal field with a column from the uploaded file and an example value from its first row.
It reads columns, not formats. No broker publishes its export headers, so an adapter per broker is guesswork — and a parser that matches the wrong column writes plausible wrong trades and never says a word. This proposes a mapping, shows the member their own first row beside it, and changes nothing until they agree. A sample export, made for this figure
Plate 04 — the library The library: recordings filed by date with tag chips across the top, and no lesson numbering or progress indicator anywhere.
Filed by date, read by tag. Every count on it is generated from the library itself at build time — the moment a number like that is typed into copy, it starts going quietly out of date.
Plate 05 — the calendar A panel of the day's scheduled USD economic releases with forecast and previous values, stamped with the time the schedule was last read.
Relayed, and stamped with when it was read. If the source cannot be reached the panel says so rather than showing an empty day — an empty day is a trading decision and an HTTP error is not.
Plate 06 — locked out The locked-out page: a plain explanation that the account is signed in but has no active membership role, and what to do next.
Somebody has paid and still cannot get in. Role sync can lag, so this is a real page rather than a bare 403 — and it is deliberately not gated, because a member who cannot get in has to be able to read why.
What went into it
The watermark

Stamped before the page is sent

Written in by the middleware that already checked the session — no extra request, no flash of a placeholder, and nothing a client-side toggle can undo.

The journal

Nothing leaves the browser

Statistics are computed where they are read and the log is stored locally. Importing a year of trades makes no request at all: a privacy property first, a cost property second.

Running cost

Metered on writes, not bandwidth

Session touches throttled to one per ten minutes, and the static half of the site routed around the worker entirely. That turned a launch-day quota ceiling into a rounding error.

Proof

The build refuses to ship

A member page slipping out of the gate fails the build, as does a route rule that would let one bypass it. Every guard was checked by feeding it a wrong input and watching it fail.

The constraint that shaped it

EXECUTED publishes no performance figures. No win rates, no returns, no equity curves — not its own and not anybody else's. It is written into the product's footer, and it is the most useful constraint in the build.

It removes every element this category normally reaches for: the results banner, the profit screenshot, the ticker of members' wins. What is left has to persuade on substance. It decides small things too — the accent is red, and in this industry red is the loss colour, so it is chrome and never sits beside a number.

The same rule governs this page. A case study is supposed to answer what did it achieve, and for a trading product every tempting answer is one the product itself refuses to make. So the claims here are engineering ones: it ships, it is gated, and the gate is checked against production on every deploy.

Go and check

The public page is open to anyone — executed.xyz. The member area is not, and the plates above are the only way to see it without a membership. Every screenshot is of the real build; the numbers inside them are the product's own sample data, which it stamps as such.

Light the kiln

Something behind a login?

Gated products are their own kind of job — the half nobody sees is the half that has to be right. Tell me what you're building.

hello@studiokiln.space
  • Tell meWhat you're building, roughly when you need it, and a link or two you like.
  • You'll hear backWithin 48 hours, from me. There's nobody else here to route it through.
  • You'll getA tier recommendation, a timeline, and a fixed quote. No hourly billing.