Software engineer. I build Android apps, real-time web platforms, and an RTS game engine on the side.

Projects

DRT Bids

A marketplace where sellers list auctions, fixed-price items and stock, and buyers bid live.

A full marketplace: live bidding with proxy bids and anti-sniping, custom seller storefronts, a seller dashboard for orders and stock, disputes with evidence from both sides, one-tap posting of listings to TikTok, and an admin back office to run it all.

  • Next.js
  • Hono
  • PostgreSQL
  • Drizzle
  • Socket.io
  • AWS
  • TikTok API
Visit drtbids.com
  • The home page, with search and quick filters

  • A listing, with stock, buy now and the seller's store

EscapeRope

AirDrop for Android and Mac.

Move files, text, clipboard and notifications between an Android phone and a Mac over your local Wi-Fi. End-to-end encrypted, with no cloud, no cables and no account. Two native apps that find each other on the network.

  • Kotlin
  • Jetpack Compose
  • Swift
  • Network Service Discovery
Visit the EscapeRope site

Rousr

The alarm you can't swipe off.

An Android alarm that keeps ringing until you prove you're awake: pushups counted by on-device pose detection, matching a photo, reading a line aloud, solving math or repeating a colour pattern. Skipping breaks your streak.

  • Kotlin
  • Jetpack Compose
  • CameraX
  • ML Kit
  • Room
  • RevenueCat
Visit the Rousr site

Vanguard

An RTS engine you install as a library.

Write the rules, the look and a map, then launch a game. Babylon.js renders the world, Solid draws the HUD, and the simulation is plain TypeScript that runs headless for tests and on a server for online play. A map editor and a starter project come with it. Inspired by Warcraft III.

  • TypeScript
  • Babylon.js
  • Solid
  • Ark UI
  • WebSockets

In development

  • A hero selected: portrait, stats, abilities, inventory

  • Box-selecting a group of workers

  • Melee on a generated map

  • The dev sandbox: heroes, auras and a fight

  • The map editor on a generated map

  • Placing units from the editor's content browser

  • The editor's map generator, with a live preview

  • Lanes, a second game built on the engine

@drt/event-emitter

A tiny, type-safe event emitter for TypeScript.

Typed events, async listeners with error handling, and an unsubscribe function for every listener. No dependencies, and it runs in Node, Deno, Bun, browsers and Cloudflare Workers. It's the event bus behind DRT Bids' backend, and the demo next to this text is running it too.

  • TypeScript
  • JSR score 100%
View on JSR
pings 0
latest release none yet
log

    More work

    Toolbox

    Languages

    • TypeScript
    • JavaScript
    • Kotlin
    • Java
    • Go
    • SQL
    • HTML
    • CSS

    Frameworks

    • React
    • Next.js
    • Node.js
    • Jetpack Compose
    • Android
    • NestJS
    • Hono

    Tools

    • PostgreSQL
    • Docker
    • AWS
    • Linux
    • MongoDB
    • Firebase
    • Git

    Technical details

    DRT Bids

    A Next.js 16 client and an event-driven Hono + Socket.io backend in one Turbo monorepo, talking through tRPC and sharing Drizzle types and Zod schemas. PostgreSQL underneath; S3, CloudFront, SES and SQS on AWS, provisioned with Terraform; Cloudflare, nginx and PM2 in front.

    What it does

    Buyers

    • Bidding with automatic proxy bids and anti-sniping
    • Buy now, or make an offer and counter-offer
    • Checkout with pickup or shipping quotes and an address book
    • Watchlist, saved searches with alerts, and followed stores
    • Order progress, receipts, and reviews of sellers

    Sellers

    • Custom storefront: link, banner, logo, color theme, featured listings and sections
    • Dashboard with sales trends, per-listing performance and urgent actions
    • Order management from payment to dispatch, with CSV export
    • Stock with per-order limits, restored when an order is canceled
    • Listing wizard with live preview, drafts, scheduling and bulk CSV import
    • Post a listing to TikTok in a few taps, with a preview, privacy settings and a branded-content disclosure

    Disputes and trust

    • Disputes with evidence from both sides and a requested outcome
    • Automatic escalation, and disputes opened for missed deadlines
    • Weighted, expiring strikes with automatic bans
    • Reports, and review-before-publish for chosen sellers

    Admin

    • Overview with metrics, health tiles and an audit-log activity feed
    • Moderation, user approval, dispute resolution and category editor
    • Push campaigns and featured listings on the home page

    Engineering highlights

    Quality and tooling

    Technical details

    EscapeRope

    Two native apps, Kotlin on Android and Swift on macOS, that find each other over Bonjour (_escaperope._tcp) and transfer over one direct, encrypted TCP connection. No server in between. Each side keeps its protocol in a platform-free core module, matched byte for byte.

    Engineering highlights

    Quality and tooling

    Technical details

    Rousr

    A clean-architecture Android app: Jetpack Compose on Navigation 3, Koin, Room and DataStore, with a pure-Kotlin domain layer that takes an injected clock so it can be unit tested. Live on Google Play, with subscriptions through RevenueCat.

    Engineering highlights

    Quality and tooling

    Technical details

    Vanguard

    A TypeScript monorepo where the engine is a pure simulation that runs in Node with no renderer. A Babylon.js client with a Solid HUD sees the game only through a session of snapshots in and commands out, so the same client runs a local game, a worker, a server, a replay or a spectator.

    Engineering highlights

    Quality and tooling

    Technical details

    @drt/event-emitter

    One generic class, about 70 lines, published to JSR with a 100% score. The event map is a type parameter, so event names and listener arguments are checked at compile time with no casts.

    Engineering highlights

    Quality and tooling

    Technical details

    Orgad

    A React PWA on Firebase Hosting, with Firestore for data, Cloud Storage for photos and signatures, and Cloud Functions in TypeScript for anything that must not trust the client.

    Engineering highlights

    Quality and tooling

    Technical details

    Compound Interest Playground

    A React 19 app compiled with the React Compiler, built on shadcn over Base UI with Tailwind v4. A month-by-month simulation applies the user's rules and feeds a Recharts chart.

    Engineering highlights

    Quality and tooling