Business Matching — Kemenperin, Ministry of Industry
Eight years, four stacks, one mission — the complete development history of Kemenperin’s Business Matching platform, from a PHP 5 monolith to the Svelte + Go system running at bm-online.id today.
- Year
- 2025
- Focus
- Government
- Reading
- 4 min· 8 sections
- Published
- Web


Project Overview
"The program never stopped running through four complete rewrites. Each era kept the matching workflow intact while the technology underneath changed entirely."
The Evolution — Four Stacks, One Mission
Every rewrite preserved the program’s core workflow while replacing the foundation underneath it.
01. PHP 5 — The First Platform · 2018 — 2020
The original Business Matching platform: a server-rendered PHP 5 monolith where company registration, product catalogs, and matchmaking requests all flowed through a single codebase backed by one MySQL database.
02. PHP 8 — The Modernized Monolith · 2020 — 2022
A ground-up rebuild on PHP 8: typed signatures, Composer dependencies, PDO prepared statements throughout, and a proper admin panel for curating participants and scheduling matching sessions.
03. React + Hono — The Decoupled Era · 2022 — 2024
The system split in two: a React single-page app for participants and a TypeScript API built on Hono. JWT auth replaced server sessions and PostgreSQL replaced MySQL — a real API for the first time.
04. Svelte + Go — bm-online.id · 2024 — Present
The current production system: a SvelteKit frontend and a Go backend in one deploy story. Shared validation schemas, single-binary Go deploys, and the fastest, cheapest version of the platform to run.
Complete rewrites across the platform’s lifetime.
Continuous operation since the first PHP 5 release.
PHP, TypeScript, Svelte, and Go across the eras.
The current Svelte + Go system in production.
Era 01 — PHP 5 — The First Platform
Legacy admin dashboard
Company directory
Matching request form
Era 02 — PHP 8 — The Modernized Monolith
Curated admin panel
Product catalog
Event reports
Era 03 — React + Hono — The Decoupled Era
React participant app
Hono API surface
Company profile, decoupled
Era 04 — Svelte + Go — bm-online.id
bm-online.id today
Matching workflow, current
Participant dashboard
Lessons Carried Forward
What four rewrites of the same government platform teach you.
Rewrite Beats Patch
Each era replaced the foundation rather than patching it. Migrations were planned around program milestones — never mid-event — so the platform never went dark for participants.
Decouple Only When It Pays
The React + Hono split was right for its moment — real mobile usage, multiple API consumers. When the team no longer needed that flexibility, the Svelte + Go era consolidated again.
Type the Contracts
Every era tightened the contract between frontend and backend: PHP 8 types, then TypeScript end-to-end, then shared schemas between Svelte and Go. Each step deleted a class of integration bugs.
Own the Deploy
From FTP uploads on shared hosting to single-binary Go deploys — each era made shipping safer. The current stack deploys in minutes with a rollback story that actually works.