Things I have built
Exhibit 01 / 03
desk-companion
Plugins run in a sandbox and never hold key material.
- Discipline
- Systems and device
- Built with
- Rust, Slint, JavaScript
- Year
- 2026
- Status
- Active
Desk Companion--:--Slot 1No plugin loaded
Drop a manifest and two files into plugins/ to fill it
BeaconBeat 1284
every 2s
EchoStalebeat 1283
4 min ago
Host readout0 · 0
pointer, in a 0×0 viewport
Exhibit 02 / 03
Zero Trust Architecture
Keys are derived in the browser, so the server never receives one.
- Discipline
- Web
- Built with
- TypeScript, React, Vue
- Year
- 2025
1 · Type a passphrase
Anything at all. It is not stored or sent anywhere. Watch what the browser builds from it, and watch the other column stay empty.
In this browser
- Saltnot derived yet
- PBKDF2not derived yet
- Derived keynot derived yet
- RSA-OAEP keypairnot derived yet
- RSA-PSS keypairnot derived yet
Sent to the server
Nothing. Not the passphrase, not a hash of it, not the key.
Which is also why a forgotten passphrase is unrecoverable here. There is no one else to ask.
2 · Move the trust score
Trust is a number, not a yes or no. Every request is scored against a threshold of its own, so the same action flips as this number moves.
40/ 100
3 · Attempt something
Derive the keys first. Type a passphrase above.
- needs 20 · low riskallowed now
- needs 40 · medium riskallowed now
- needs 60 · high riskneeds step-up
- needs 85 · severe riskneeds step-up
- no threshold grants this · impossible risknever
No request attempted yet.
4 · What the server holds, right now
- Ciphertext blobs3
- Saltpublic
- Encryption public keynone yet
- Signing public keynone yet
- Encryption private keynever uploaded
- Signing private keynever uploaded
- Derived keynever transmitted
- Passphrasenever transmitted
- Plaintext bytes seen0
Requests it saw
Nothing yet.
Every row above is either ciphertext or a public key. Own this server completely and that is still all you get.
Exhibit 03 / 03
neobank
A payment request is a claim the recipient settles, not a transfer the sender pushes.
- Discipline
- Web and mobile
- Built with
- TypeScript, React, Express
- Year
- 2025
Requestrecipient's viewNadia asks you for
RM 48.00
Dinner, Thursday
Pending your decision
The request is a claim. Until you settle it, no money has moved and nothing needs reversing; declining costs the sender a decline, not a refund.
More write-ups are on the way.