~/arisjirat
Aris Jirat Kurniawan
Craftsman Software Engineer
Currently Software Engineer @ BFI Finance
Trust me, this is nicer on a desktop: that is where you get the setup I actually work in. 🙂
Selected projects
-
Hardware
ArkButton
Designed, printed, soldered and flashed by me: 58 keys, two nRF52840s, ZMK. The tenting plate failed ten times because I printed it lying down; it had to stand up.
-
Temporal terminal UI
tmprl
A terminal UI for Temporal in Rust, built toward parity with its web UI: find workflows with a query bar that completes clauses from the cluster’s own search attributes, follow a history like tail -f or read it as a timeline, search the values inside its payloads, and see an activity being retried, when it tries again and why it last failed. A dashboard sums up a namespace’s statuses, failures and task queues, and gf opens the code behind an event. Payloads go through jq and a codec server; mutations, schedules, and batches work over a visual selection. Before any mutation runs, the screen shows the equivalent temporal CLI command, and a production profile can be locked read-only. Four crates, 1004 tests; installs from Homebrew or crates.io.
-
Go library
fate
Harel statecharts for Go: nested states, parallel regions, history, guards, delayed transitions. Zero dependencies, and CI fails the build if that changes. Timers are pulled, not pushed, so the engine is safe inside a Temporal workflow. v0.5.0 fixed parallel regions quietly running their neighbour’s Exit actions.
-
Visual simulator
fate-studio
Where fate is watched running: statechart diagrams you step through in the browser over Server-Sent Events. It opens snapshots from disk and redraws as the file changes, proxies the simulator to a machine inside another service, or runs it virtually with no backend at all. One Go binary, and the page makes no external request.
-
Applied cryptography
sirna
Encrypted messages and files whose KEY can be destroyed on demand, and once it is gone every copy of the ciphertext dies with it, including the copies you do not control. Rust, XChaCha20-Poly1305, and the server links the header parser only, so it cannot decrypt anything it holds.
-
AR game
Tombakan
Place a virtual water surface in your actual room through AR, then throw a spear at the fish matching the target colour. Unity URP + ARFoundation, 32 commits across seven weekly iterations, built for Android and iOS.
Tombakan -
Algorithms from scratch
pothole-detection
Not one framework import. LeNet-5 convolution, pooling, softmax, cross-entropy and backpropagation, derived by hand and written in NumPy. What proves the derivatives right is not the accuracy but a numerical gradient check: error under 1e-5.
Where I've worked
-
BFI Finance
now Software EngineerWorkflow-driven process services
Approval processes that run for days, executed as workflows that survive a restart.
-
Ruangguru
Senior Software EngineerA video player with quizzes inside it
The video pauses at defined points, shows a question, and resumes once it is answered.
-
Mola TV
Frontend EngineerMaintaining the streaming video player
Maintenance on a player already running in production: playback error handling, behaviour when bandwidth changes, and fixes along the paths that failed most often.