Mira Santoso

Product engineer · Jakarta and remote

Quiet software, arranged like a still life.

I’m Mira Santoso. I build calm, reliable software for teams that run on data. Four projects are set out on one table below.

Taking one new project from March

A tight still life on a linen-covered table in soft side light: a large sage vase, a tall slate bottle, a white jug, a dusty-rose flask, an ochre tin and an umber pot, with a phone leaning against two books topped with five keycaps, and a few river stones, all in matte chalk paint against a plaster wall.
Still life with software, 2026 Vase, tall bottle, jug, flask, tin, umber pot, a phone and keycaps on books. Chalk paint on everything. Side window · path-traced

The table · four objects

Each project is an object on one table.

  1. No. 01 · 2022 to now · Keycaps on books

    Keelson

    The design system behind every internal product.

    It started as a folder of copied buttons. It is now one package of shared tokens and documented components, with a review step before anything new joins it.

    Medium
    React, Tailwind CSS, Storybook
    Decision
    Keyboard first. Every component works without a mouse before it gets a hover state.
  2. No. 02 · 2023 · The phone, leaning

    Plotkeep

    A survey app that keeps working when the signal doesn’t.

    Survey teams spend whole days out of range. Everything is saved on the phone first and synced when a connection comes back, so the form never waits on the network.

    Medium
    React Native, SQLite, Supabase
    Decision
    Conflicts are shown, never overwritten. A person picks.
  3. No. 03 · 2021 · The sage vase

    Leafward

    A thesis on spotting leaf disease in greenhouse photos.

    I compared single detection models with a small ensemble. The ensemble was the most accurate and the slowest, so the right choice depends on the greenhouse’s hardware.

    Medium
    Python, PyTorch, OpenCV
    Finding
    Report the speed next to the score.
  4. No. 04 · 2024 · The umber pot

    Ledgerline

    Invoicing and bank reconciliation for small design studios.

    Before Ledgerline, the team matched payments to invoices by hand at the end of every month. I led the product and built most of it, from the data model to the review screens. Like the pot, it holds everything and goes unnoticed.

    Medium
    TypeScript, React, Node.js, PostgreSQL
    Decision
    Nothing is matched silently. Every automatic match shows the rule behind it.

Evening · the table, after hours

The studio · try it

Repaint the table.

Pick a chalk paint, then click a piece. The paint takes the object’s own light and shadow, the way a real coat would.

Chalk paint

Pick a paint, then click an object.

A close study of a dusty rose bottle between a sage vase and a white jug, soft focus.
Study of a bottle, 202685 mm · f/2.8

Wall text

I like the unglamorous parts of software.

Data models, edge cases and the screens people use every day without thinking about them. Like the bottles on this table, good tools are plain, a little heavy, and always where you left them.

Now
Independent. Product and engineering for small teams.
Before
Product engineer at a logistics company, then a studio of eight.
Tools
TypeScript, React, Node.js, PostgreSQL, React Native, Python.
Based
Jakarta. Working with teams in UTC+7 to UTC+1.
  1. iStart with the data. The model decides what the screens can say, so I draw it first.
  2. iiShip small, weekly. You see working software on Friday, not slides.
  3. iiiLeave it readable. Every project ends with docs your team can keep.

Reading list

Writing

Automation should never be silentEssay · 2025

When software matches, merges or moves something on its own, it should say so, and show the rule it used. The second time a person has to guess what the machine did, they stop trusting all of it.

Offline first is a product decision, not a libraryTalk notes · 2024

Picking a sync engine is the easy part. The hard part is deciding, screen by screen, what a person may do while the network is gone and what happens when two of them did it.

One set of tokens, four productsCase note · 2023

How Keelson moved four products onto one set of colour, type and spacing tokens without a freeze week: one component at a time, with a review step at the door.

Put the speed next to the scoreResearch · 2021

A model nobody can run in the greenhouse is not the best model. From the Leafward thesis: report inference time on the target hardware beside every accuracy number.

Visitor’s book

Have a workflow that still runs on a spreadsheet?

Leave a line. I reply within two working days, and each case study runs longer than a label: ask, and I’ll send the full deck.

[email protected]

Send me the deck for

Example form. With no endpoint set, nothing is sent.