Adwin Chee

I'm a full-stack engineer. I write Rust for a small Linux device on my desk, TypeScript and C# for the web, and Kotlin and Swift for mobile, and I'm happy anywhere between the database and the screen.

Final year software engineering in Malaysia, currently shipping .NET and mobile work at SeeSharp Solutions.

Adwin Chee

Selected work

03 projectsAll projects
  1. 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 1free

    No plugin loaded

    Drop a manifest and two files into plugins/ to fill it

    Beacon

    Beat 1284

    every 2s

    EchoStale

    beat 1283

    4 min ago

    Host readoutlive

    0 · 0

    pointer, in a 0×0 viewport

  2. 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
    Vaulta working model · no real cryptography

    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.

  3. 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 view

    Nadia 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.

In industry

Software Engineering Intern, SeeSharp Solutions

April 2026 – present

Three streams of production work in three different stacks: a desktop and .NET test-automation platform, a multi-tenant web product, and native Android and iOS clients. Client and product names are under NDA. The responsibilities are not.

  • Systems

    Test-automation platform

    • Desktop client over a .NET service, with browser and load-test runner lanes
    • Containerised CI execution for test runs
    • Credential storage in the OS keychain, and per-environment base-URL resolution
    • API-key authentication and rate limiting on the service
    • A large integration suite kept green

    C# · .NET · Electron · Playwright · Docker

  • Web

    Multi-tenant messaging platform

    • Campaign delivery with per-recipient template variables and quota enforcement
    • Signed webhooks and automation triggers
    • Billing, plan management and tenant onboarding
    • The public marketing site

    C# · ABP / DDD · Next.js · TypeScript · Postgres

  • Mobile

    Native client delivery

    • Feature work across native Android and iOS clients
    • The TypeScript and Java services behind them

    Kotlin · Swift · TypeScript · Java

What I work in

Systems

  • Rustdesk-companion, five crates
  • C#test-automation and messaging platforms
  • .NETboth production services
  • C++systems coursework
  • Dockercontainerised CI execution

Web

  • TypeScriptfile storage, neobank, messaging front end
  • Reactfile storage, neobank
  • Vuefile storage
  • Next.jsmarketing site, this page
  • Expressfile storage and neobank servers
  • FastAPIPython services
  • Postgresproduction schemas

Mobile and device

  • Kotlinnative Android client
  • Swiftnative iOS client
  • Javabackend services, coursework
  • Slintthe Pi screen, cross-compiled
  • WebCryptofile storage key derivation
  • Playwrightbrowser runner lanes

Tell me what you're building.

A web app, a phone app, or something with a screen and a wire hanging out of it, I'd like to hear about it. I'm in Malaysia, so if you write over lunch, the reply may land with your morning coffee.

adwin.hansen@gmail.com