About
What I build, and how I tend to go about it.
I'm Aris Jirat Kurniawan. I write software, and when the software needs something physical to run on, I usually end up building that too.
I study computer engineering at a university in Jakarta. The server this page comes from sits in my house and I look after it myself — so if the site is down, it's me.
01 — The elephant
There's an elephant sticker on my laptop lid. I didn't design it — it landed there, never came off, and has been my mark ever since. That is the entire story of the elephant.
What's worth saying instead is the habit under it: I'd rather take something apart down to the bottom than stop at the point where it starts working, and I'd rather finish one thing end to end than get three of them halfway.
Which is why the mathematics for the pothole classifier went onto paper before it went into code, why the keyboard ran from a 3D model to a soldered board to its own firmware, and why the build notes still record ten failed prints of one part, and the two reasons they failed. They're notes, not a highlight reel.
02 — What I've built
-
ArkButton
The keyboard I'm typing this on. I drew it, printed the parts, soldered every key by hand and wrote its firmware — mostly so the key I press most often could sit under my thumb, where I put it.
-
pothole-detection
A program that learns to recognise a damaged road from a photograph — and I worked out the mathematics behind it myself rather than calling a ready-made library, then checked it against the numbers to prove the working was right.
-
homelab-platform
The small cluster of machines in my house that serves this page, arranged so the only way to change anything is to write the change down first — if I edit the running system by hand, it quietly puts it back.
-
fate
A library that keeps track of which step a long process is currently on — the bookkeeping behind things like a checkout or an approval queue — with a companion tool, fate-studio , that draws the whole process as a diagram you can step through while it runs.
-
otm
A way to send someone a password without it sitting in a chat history forever: you get one link, and the link stops working the moment it is opened.
-
clowner
A small script that turns one Mac application into two separate copies of itself, so work and personal can run side by side without signing out of either.
03 — Worked on elsewhere
Most recent first. The arrowed line under each place is what carried into it from the one before.
-
BFI Finance now
-
Workflow-driven process services
Approval processes that run for days, executed as workflows that survive a restart. The interesting part is not that, but how the order is decided: every step declares which data fields it READS and which it WRITES, and the scheduler derives the execution order from those declarations rather than from a hand-drawn sequence. When an upstream value changes, the steps that already consumed it are rolled back and recomputed; the ones whose inputs turn out identical reuse the earlier result instead of running twice. Services pass messages over NATS JetStream and RabbitMQ, and each field keeps an append-only chain of its own changes. The operator screens are not a single-page app: forms are rendered on the server as HTML fragments, swapped into the page by HTMX, and only the genuinely interactive controls are hydrated as web components.
-
Developer tooling for the platform team
A CLI that assembles a dozen services from separate repositories into one local working environment: one worktree per feature, an HTTPS reverse proxy in front, and leftover processes from the previous session stopped automatically before new instances start. Mostly shell — what it manages really is processes, ports, certificates and directories — with Node for the parts that need more than that.
-
The customer platform, and drafts that must not be lost
Its web surface is built on the same stack as the onboarding web so components are shared. The more interesting part sits behind it: self-service verification is long, people abandon it midway and come back days later, so every keystroke autosaves into a fast key-value store. That content then moves to a relational database through a read-through — read from the new place first, fall back to the old one when it is not there yet — so the migration never loses anyone’s draft.
-
Mobile app for field agents
Used at the customer’s location rather than at a desk. Field connectivity is intermittent, so the flow is built to stay consistent when the connection drops mid-form. Firebase handles authentication, notifications, and syncing back.
-
Onboarding web for partners outside the company
A long application flow filled in from outside the office, usually on a phone and often interrupted. Answers persist across sessions, document uploads resume, and every screen has its own address so it can be reopened from the same link. The bulk of the first three years.
The order of the steps is not drawn by hand — it is derived from what each step declares it reads and writes, the way a spreadsheet recalculates the cells that depend on the one you just edited. state becomes a thing, not a pile of booleans
-
-
Ruangguru
-
A video player with quizzes inside it
The video pauses at defined points, shows a question, and resumes once it is answered. The source is not a single file: segments arrive progressively, quality switches with available bandwidth, and each segment is encrypted, so the player negotiates keys with a licence server and handles refused keys. That combination of conditions is managed as a state machine, so "buffering", "asking", and "answered" cannot be active at the same time.
-
The learning web for one of their products
Several web apps in one monorepo with a shared component set, so a fix is applied once and holds across all of them.
-
A CMS shared across several products
One editing interface serving several products, written in ReasonML — a strictly typed language compiling to JavaScript, so mismatched data shapes are caught at compile time. Server-rendered first so data-heavy pages still arrive quickly.
-
Cross-service contract registry
Shared definitions across many services, so compatibility-breaking changes surface before release. The work concentrated on the contract surface: per-caller authorisation rules and marking which fields may be empty.
State machines arrived through a video player in the browser, came back five years later as process orchestration on a server, and then stopped being someone else’s library. maintaining someone else’s player → building one
-
-
Mola TV
-
Maintaining 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.
-
Recurring payments and on-call rotation
Part of the recurring subscription billing team, where failures have to surface rather than pass silently. Included an on-call rotation for production incidents.
from pages to a product: dates, stock, people in the field
-
-
YukStay
-
Landing page and property search
Monthly apartment and room rental. The first screen is a location search showing available unit counts per area, bilingual from the start. Pages are server-rendered then hydrated in the browser, so search results are in the HTML before any JavaScript runs — which matters for a page that has to be indexed and has to be fast on a phone. An AMP version was served separately for Google results.
-
Availability calendar and admin panel
Availability is presented as a calendar because rentals are bound to date ranges rather than item lists. The admin panel connects to a React Native app used by field agents, with Firebase as the bridge between them.
fast is a decision made up front, not a patch applied at the end
-
-
Workmate
-
Maintaining the AngularJS client, new pages in Vue
A shift-work marketplace with demand that arrives in waves around events and training schedules. The existing AngularJS client stayed maintained while new pages were written in Vue alongside it, including a short sign-up flow shipped in a single sprint.
-
Revamp on React and Netlify
An interface rewrite in React, served through Netlify. Load-time budget and search-engine readability were set up front — an approach carried over from earlier AMP work — rather than optimised after release.
the first habit, handed down by a mentor: prove it, do not trust it
-
-
Docotel
-
Eproc
Their e-procurement system, built test-first. File structure and naming conventions followed the John Papa style guide, integration ran through CI, and the API followed REST consistently.
-
Calc the Game — analysis and solver
A numbers game analysed to work out its internal rules, then given a solver. Finding the operation sequence that reaches the target number is solved as a permutation problem.
-
Leading the front end side
Leading front end delivery in the later stretch: splitting the work, keeping code conventions consistent across the team, and landing features within project deadlines.
self-taught, with no shared conventions yet
-
-
Menjajaki bidang lain
-
Architecture, chosen for where it meets IoT
Buildings can carry sensors and be read from a distance, and that was the appeal of the subject. The programming itself stayed something learned outside the classroom.
-
An IT consultancy of my own
An IT consultancy built on earlier web development experience, run solo before returning to salaried work.
-
Automation for administrative work
Scripts for the repetitive part of my own job — the earliest form of the tooling later built for a team.
an interface is a sequence of states, not a stack of pages
-
-
Freelance
-
Self-taught PHP web applications
Started from a school assignment carried on into a complete application, then grown into freelance work. PHP learned independently through to Laravel.
-
A Flash-based client site
A client’s official site across four years: blog, achievements page, gallery and profile — all built inside a single Flash movie, so navigation, transitions and every page were written as ActionScript. The HTML document itself was only a wrapper.
A search engine saw the left-hand box; a visitor saw the right-hand one. That is why a whole generation of sites like this vanished from the web without a trace. -
04 — The rest
Beyond that: coursework, and the tools I use every day — keyboard, terminal, editor, the server — which are all written out on Gear. Every project above has a longer piece of its own, if you want the part I left out of this page.