I'm a software engineer based in Yogyakarta. I build real-time
monitoring tools: software that takes live data from sensors and
cameras on industrial sites and turns it into something an
operator can watch and act on.
I graduated from Universitas Gadjah Mada in 2025 (Applied Bachelor
/ D4, Internet Engineering, GPA 3.79). Most of my work sits around
drilling and geothermal operations: dashboards, telemetry servers,
and computer-vision tools. I work full stack, React and TypeScript
on the front, .NET and Node on the back, and I do my best work on
problems with hard real-time constraints, where a dropped reading
or a late alarm has real consequences.
Fig. 1 The dashboard (01) running live on the WITSML server
(02). One demo covers both.
A control-room dashboard for live drilling data. It connects to a
telemetry server over a WebSocket and reads sensor frames ten
times a second, for 12 wells across 3 pads.
The data shows up in three views: log charts (depth, pressure,
RPM, and the rest), a panel of live gauges, and a map of the wells
you can click into. Operators can acknowledge alarms, and the
layout changes depending on who logs in: driller, geologist, or
data scientist. If the connection drops, it reconnects on its own
and waits a little longer before each retry.
02 Personal Project · 2025–2026
WITSML Telemetry Server
.NET 9 · ASP.NET Core · C# · WebSocket · QuestDB
The backend that feeds the dashboard above. It's a WebSocket server
in .NET 9 that broadcasts rig telemetry as binary frames at 10 Hz
and stores every reading in QuestDB, a time-series database.
The tricky part is keeping the live stream smooth while still
writing everything to disk. I split the two paths: readings go onto
a bounded queue headed for the database, so when the database slows
down, the broadcast doesn't stutter. The server also pings clients
to check they're alive, drops the ones that fall behind, and refuses
any connection without a valid token. It serves history
pre-summarised at different zoom levels, but
always keeps the minimum and maximum, so a safety-critical
spike like H₂S never gets averaged away.
03 Undergraduate Thesis · 2025
EyeLog Desktop — Shale-Shaker Monitoring
Python · OpenCV · PySide6 (Qt) · RTSP · Nuitka
EYELOG · CAM
CLICK TO PLAY
Fig. 2 Live video with coverage detection overlay and the
trend chart.
For my thesis I built a desktop app that watches shale-shakers (the
machines that sieve drilling mud) through cameras and works out how
much material is covering them. It runs fully offline, which matters
on remote sites where the internet isn't dependable.
It handles three 1080p streams at 25 frames per second on one
machine and loses less than 0.01% of frames. The detection is
classical computer vision rather than deep learning: background
subtraction plus some shape cleanup, which gets to about 85% F1 and
fires an alert before the mud overflows. Multithreading and a Nuitka
build keep CPU around 70%, and it writes one reading per second to a
CSV you can open later.
04 Internship Project · PT Parama Data
Unit · 2024–2025
EyeLog Web — Real-Time Drilling-Cuttings Dashboard
EyeLog Web is the same idea as my thesis, only in the browser and
built for a real client: a full-stack dashboard for watching
drilling cuttings in real time. It streams 1080p video to the
browser over FFmpeg and HLS, and an OpenCV pipeline on the backend
measures the cuttings and writes timestamped results to PostgreSQL,
so the logs stay continuous and easy to download.
I built it during a six-month software-engineering internship at PT
Parama Data Unit, a geothermal mud-logging company. On top of the
core pipeline I added authentication and role-based access (OAuth
2.0, user management), history filters by date and time, and Docker
packaging. I tested it end to end and demoed it to stakeholders, who
signed off on follow-on work including an ML-based prediction step.