Raisal Ahmad

Full-Stack Software Engineer

Yogyakarta, Indonesia · Open to Opportunities

Build Anything. Go Deep Where It Counts.

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.

01 Personal Project · 2025–2026

RTDC — Drilling Telemetry Dashboard

React 19 · TypeScript · WebSocket · ECharts · MapLibre GL

RTDC · LIVE
CLICK TO PLAY
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

React · Node.js / Express · FFmpeg / HLS · OpenCV · PostgreSQL · Docker

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.

LanguagesTypeScript · JavaScript · Python · C# · SQL
FrontendReact 19 · Next.js · React Router v7 · Tailwind CSS
Backend.NET 9 / ASP.NET Core · Node.js / Express · QuestDB · PostgreSQL · Docker
VisionOpenCV · FFmpeg · PySide6 (Qt) · RTSP / HLS
EducationB.A.Sc. Internet Eng. Tech · UGM · GPA 3.79 / 4.00
CertsCCNA · Huawei HCIA (Cloud, AI) · MTCNA · IELTS Band 6

Open to software roles anywhere, on-site or fully remote.