Fullstack engineer with two years shipping production React and TypeScript for laboratory-automation software: interfaces that configure and watch machines that physically move. Now writing the other half of the contract too, with Fastify, NestJS and PostgreSQL.
Formulatrix · Frontend Software Engineer · Jul 2024 to May 2026
- Design system. 417 commits to the company React/MUI component library, 2nd of 40+ contributors. Storybook docs, OTP/TOTP components, 86% test coverage. Eight product teams imported it, so every API change had to be right the first time.
- Real-time robotics UI. Fleet visualisation in React, Three.js and SignalR, holding 60fps through telemetry bursts. Built its Jenkins CI/CD pipeline.
- Employee portal. JWT with refresh-token rotation and role-based access, against ASP.NET Core contracts.
Binary Studio Academy 2026 · top contributor on the team monorepo (50 of 118 commits), mostly auth: password reset, token handling, rate limiting.
| Project | What it is | Stack |
|---|---|---|
| parish-booking-system · live | Meeting-room booking for a real parish in Surakarta. Parishioners request, the secretariat approves, a wall monitor shows today's schedule live. Double-booking is blocked at the database. | NestJS, Prisma, PostgreSQL, React PWA |
| bsa-2026-promtomat | Production-style monorepo from Binary Studio Academy. Zod schemas shared between API and client so neither side can drift. | Fastify, Objection/Knex, PostgreSQL, React 19, RTK Query |
| software-engineer-portfolio · live | My portfolio, rebuilt in code. Static routes, schema-validated content, Playwright across three browsers on every PR. | Next.js 16, React 19, GSAP, Vitest, Playwright |
| Project-Artemis | A modular component library: the problem I spent a year on at work, rebuilt where I can show it. | TypeScript, pnpm workspaces, Storybook 10, Vite |
Most of what I have shipped lives in company repositories, so what is public here is deliberately small.
Real-time: SignalR and WebSocket, with connection managers that recover without lying to the operator about machine state. Testing: Jest, Vitest, React Testing Library, Playwright. Tests go in with the component.
- If the UI shows something the server has not confirmed, the UI says so. Optimistic is fine. Silent is not.
- A prop that two teams keep misusing is a bug in the API, not in the teams.
- I would rather delete a component than add a fifth boolean to it.
Trained in mechanical engineering before I wrote any code, which is probably how I ended up writing software for machines. Surakarta, Indonesia · UTC+7.


