← Back to home

Case study · In production

SIM Wisma Asuhan Yatim Nurul Huda

An information system for finances, donations, reports, and education records at a foundation that runs an orphanage and an Islamic boarding school in Kartasura, Indonesia. I build and run it.

Role
Backend, web, mobile, servers
In use
Since 2025, 20 users
Stack
Go · React · Flutter · MySQL
Operations
VPS · Docker · GitHub Actions
SIM Wisma Asuhan architectureStaff use a web admin (React) and a phone app (Flutter). Both call a single Go API that stores data in MySQL. The API and database run in Docker containers on a VPS. Code in a private GitHub repository is built and shipped to the VPS by GitHub Actions.20 usersWeb adminReactPhone appFlutterVPS · DockerAPIGoDatabaseMySQLGitHub repoprivateGitHub Actionsbuild & deploy

Context

I’ve worked at this foundation since 2016, starting in administration. So before writing any code, I already knew how donations were recorded, how reports were put together, and where the process kept getting stuck.

The problem

Everything was manual. Finances and donations were recorded apart from the reports, and the children’s education records lived somewhere else again. Monthly reports often disagreed, and human errors only surfaced when the numbers didn’t add up at the end of the month.

What I built

One system with three modules sharing the same data: finances and donations, reporting, and education records.

A single Go API is the path for reading and writing data in MySQL. Office staff use a React web admin; staff on the move use a Flutter app. Because both call the same API, there are no longer two versions of the same number.

  • Finance & donations

    Recording income, expenses, and donations.

  • Reports

    Built from the same transaction data, not copied between files.

  • Education records

    Managing the children’s education data.

Deployment and operations

The API and database run in Docker containers on a VPS. Code lives in a private GitHub repository; every change is built and shipped to the server by GitHub Actions instead of being copied over SSH by hand.

For a foundation with no IT team, that matters: releases happen the same way every time and don’t depend on one person remembering the steps.

Outcome

The system has been in use since 2025 by 20 users. Because reports come from one database, the out-of-sync monthly reports are handled at the source.

A note on privacy: the system holds children’s data, so I don’t publish its code or real screens.

Need a similar system for your organization?

Send an email