Available for contracts

GAMEDEVELOPER

Thanuka Sehasna
PERERA

GPU ArchitectureGame DevelopmentSystems Engineering

IN PROGRESS

Technical Stack

C++
RDNA
Ghidra
Arch Linux
Unity
TypeScript
Python
Rust
Nobara KDE
Blender
HLSL
Cloudflare
Tauri v2
Ubuntu
PhysX
UE5
Wireshark
After FX
Garuda
Compute Shaders

Short opinions

Things I have an opinion on after building with them. Mostly short. Sometimes wrong. Drafts get updated rather than republished.

I stopped reaching for npm or pnpm. Bun is the default. Here is the math.

Cold install on this portfolio repo: bun 1.4s, pnpm 6.2s, npm 11.8s. That's 8× faster than npm, 4× faster than pnpm. The numbers compound — every fresh clone, every CI run, every "delete node_modules and try again" gets that gap back.

But speed alone wouldn't have moved me. The thing that did: bun is the script runner, the package manager, the test runner, the bundler, and a node-compatible runtime. One tool. No ts-node for scripts, no jest config, no tsx shim, no pnpm exec. bun foo.ts just works.

bun add three           # install
bun run dev             # next dev
bun test                # vitest-compatible
bun foo.ts              # run TS directly, no compile step
bun --hot server.ts     # hot reload, no nodemon

The gotchas are real but small. Some packages still ship CJS-only with sketchy ESM shims that confuse Bun's resolver. Workaround: bun add --trust for postinstall scripts, and bun pm ls to see what's actually resolved.

Where I still reach for npm: publishing to npm registry (Bun publishes too but the npm cli is more battle-tested for that one flow). Where I still reach for pnpm: large monorepos with workspace protocol weirdness (Bun handles workspaces, but pnpm's resolution is more predictable for 50+ package trees).

For everything else — new project, CLI script, Next.js app, Tauri sidecar — bun init and move on.

Core Identity

Profile

Thanuka Sehasna Perera

Game Developer · GPU Architecture · Systems Builder

FOCUS

GPU / Game Dev / Systems

ENGINES

Unity · UE5 · Ka3d

STATION

BitByBit (Part-time)

STATUS

Open — new contracts

I build at the intersection of game development, GPU architecture, and systems engineering. Whether it's shipping a Unity game, reverse-engineering NVR firmware with Wireshark, or orchestrating Cloudflare microservices for a live client platform — I care about the full stack from silicon to screen.

Currently embedded at BitByBit and driving CROW — a unified customer interaction intelligence platform built by a 6-person team for two live clients. I write TypeScript, C++, Python, and enough Rust to be dangerous.

3+

Years building

3K+

Commits shipped

2

Active clients

6

Team @ CROW

Field Notes
Intel · XE

The Graphics Command Center lies by default

Drop brightness by 10, push contrast by 10. The panel looks more honest immediately — Intel ships everything biased toward "punchy at the showroom."

VMD is a one-way trap on dual-boot

Windows turns Intel VMD on by default. Install Linux on top without disabling VMD first in BIOS and the friendliest outcome is a corrupted partition table. Disable it before partitioning, not after.

Arc is shockingly good at AV1

The A-series hardware encoder beats consumer-tier NVENC at AV1 quality-per-bitrate. The catch: the entire stack — drivers, Quick Sync runtime, ffmpeg plugin chain — has a worse vibe than NVIDIA. Worth it for archive use, painful for live.

cycle the theme in nav · these change

Let's build

something sharp.

Open to game dev contracts, GPU-adjacent engineering, systems research, and high-craft creative tech projects. If you're building something that needs both depth and polish — let's talk.

Or hit ⌘K for everything in one place.