01
Government — Public Sector

Kemenperin
Programs.

Programs for the Ministry of Industry, Republic of Indonesia — rebuilt across eight years. PHP 5 to PHP 8, React + Hono, and the Svelte + Go + Python platform running today.

02 Programs
09 Stack Eras
2018 — 2026 In Service
16 Technologies
01
Program — 5 Eras

Business Matching

Eight years, five stacks, one mission — the complete development history of Kemenperin’s Business Matching platform, from a PHP 5 monolith to the Svelte + Go + Python system running at bm-online.id today.

01 2018 — 2020
PHP 5MySQLjQueryServer-rendered

PHP 5 — The First Platform

The first incarnation of Business Matching for Kemenperin ran on PHP 5 — a classic server-rendered monolith where every page was generated on request. IKM (small & medium industry) actors could register a company, list products in a catalog, and submit matching requests ahead of ministry-run business matching events.

It did the job. Manufacturers adopted a digital matching channel for the first time, and ministry staff gained an admin view over participants. But the stack was aging fast: no dependency isolation, legacy mysql_* patterns in places, and an increasingly brittle deployment on shared hosting.

Business Matching PHP 5 — admin dashboard

Legacy admin dashboard

Business Matching PHP 5 — company directory

Company directory

Business Matching PHP 5 — matching request form

Matching request form

Recap — Era 01

Proved the model — industry would match online — but the runtime had no headroom left.

02 2020 — 2022
PHP 8MySQLComposerPDO

PHP 8 — The Modernized Monolith

The second era rebuilt the platform on PHP 8 — same monolith shape, professional internals. Typed function signatures, Composer-managed dependencies, and PDO prepared statements replaced the legacy patterns. The registration and matching flows gained server-side validation that actually held up under real ministry events.

For the first time the codebase had tests covering the critical paths, and ministry staff got a dedicated admin panel to curate participants, approve companies, and schedule one-on-one matching sessions between buyers and producers.

Business Matching PHP 8 — admin panel

Curated admin panel

Business Matching PHP 8 — product catalog

Product catalog

Business Matching PHP 8 — reports

Event reports

Recap — Era 02

Same shape, professional internals — bought the platform years of stable service.

03 2022 — 2024
ReactHonoTypeScriptPostgreSQLJWT

React + Hono — The Decoupled Era

Era three split Business Matching in two: a React SPA for participants and a Hono-powered TypeScript API serving the data. Decoupling unlocked a genuinely mobile-friendly experience for factory-floor users and let the API serve more than one consumer.

JWT-based auth replaced server sessions, PostgreSQL replaced MySQL, and the matching workflow became an explicit API contract instead of implicit page logic. The trade-off was real though — two codebases, two deploy pipelines, and validation rules duplicated on both sides.

Business Matching React — participant home

React participant app

Business Matching Hono API — endpoints

Hono API surface

Business Matching React — company profile

Company profile, decoupled

Recap — Era 03

A real API and a real SPA — but double the maintenance for a small team.

04 2024 — 2026
SvelteSvelteKitGolangPostgreSQL

Svelte + Go — bm-online.id

The current production system at bm-online.id consolidates every lesson from the earlier eras. A Svelte/SvelteKit frontend delivers SSR speed with SPA ergonomics in a single codebase, while a Go backend serves the matching API with a tiny footprint and single-binary deploys.

Validation lives in shared schemas instead of duplicated client/server rules, the admin and public experiences share one deployment story, and infrastructure cost dropped to the lowest point in the platform’s history.

bm-online.id — current platform home

bm-online.id today

bm-online.id — matching workflow

Matching workflow, current

bm-online.id — dashboard

Participant dashboard

Recap — Era 04

One frontend, one backend, one deploy — the architecture the earlier eras were reaching for.

05 2026 — Present
SvelteSvelteKitGolangPythonPostgreSQL

Svelte + Go + Python — The Intelligent Platform

Era five keeps the consolidated Svelte + Go shape and adds a Python service for the work Go shouldn’t do. The Svelte/SvelteKit frontend and Go API are unchanged in structure — Go still owns auth, the matching workflow, and ministry reporting — while a Python service handles document extraction, industry-sector classification, and embedding-based buyer–supplier recommendations.

Go calls the Python service over a typed internal API and stays the single public gateway, so the deployment story barely changed: one binary in front, one purpose-built service behind it. The result is the first era where the platform actively improves matches instead of just recording them.

bm-online.id — 2026 platform home

Current platform, 2026

bm-online.id — AI-assisted matching

Embedding-based matching recommendations

bm-online.id — dashboard with insights

Dashboard with match insights

Recap — Era 05

Same deploy story, new brain — Go serves, Python thinks.

02
Program — 4 Eras

P3DN Fasilitasi

The facilitation arm of Kemenperin’s P3DN program — from paper-shaped request forms to a self-service portal running on the shared Svelte + Go platform.

01 2018 — 2020
PHP 5MySQLjQueryServer-rendered

PHP 5 — The Facilitation Desk

P3DN Fasilitasi — the facilitation arm of Kemenperin’s P3DN program (Peningkatan Penggunaan Produk Dalam Negeri) — started on the same PHP 5 stack as the early Business Matching platform. Companies submitted facilitation requests for TKDN certification and domestic-product verification through server-rendered forms, with documents tracked by hand inside a shared MySQL database.

The workflow was linear — request, review, facilitate, report — and a monolith could carry it. But document-heavy processes strained the simple upload pipeline, and every ministry reporting cycle meant manual exports assembled by staff.

P3DN Fasilitasi PHP 5 — facilitation request form

Facilitation request form

P3DN Fasilitasi PHP 5 — request tracking

Manual request tracking

P3DN Fasilitasi PHP 5 — admin list

Admin request list

Recap — Era 01

Digitized the front door of the facilitation program — the paperwork behind it stayed paper-shaped.

02 2020 — 2022
PHP 8MySQLComposerPDO

PHP 8 — Structured Facilitation

The PHP 8 rebuild gave the facilitation workflow real structure. Requests moved through explicit stages — submitted, document review, field verification, facilitated, reported — instead of freeform status text. Document checklists became typed data rather than informal attachments, and staff could finally export the reports the ministry asked for every cycle.

Underneath, the same modernization as its sibling platform: Composer dependencies, PDO prepared statements, and tests around the review pipeline.

P3DN Fasilitasi PHP 8 — staged pipeline

Staged review pipeline

P3DN Fasilitasi PHP 8 — document checklist

Document checklist

P3DN Fasilitasi PHP 8 — reporting exports

Ministry reporting exports

Recap — Era 02

Facilitation became a pipeline, not a pile — stages and checklists staff could trust.

03 2022 — 2024
ReactHonoTypeScriptPostgreSQLJWT

React + Hono — Self-Service Facilitation

Era three moved facilitation to the decoupled stack: a React portal where companies could watch their own requests move through the pipeline, upload documents asynchronously instead of in one giant form post, and get notified on status changes — backed by the same Hono TypeScript API family as Business Matching.

Staff got a typed review queue with filters by stage, sector, and region. The API-first design meant the facilitation data could feed other ministry dashboards without scraping screens.

P3DN Fasilitasi React — self-service portal

Self-service portal

P3DN Fasilitasi React — live status tracking

Live status tracking

P3DN Fasilitasi React — staff review queue

Staff review queue

Recap — Era 03

Companies stopped calling for status updates — the portal told them first.

04 2024 — Present
SvelteSvelteKitGolangPostgreSQL

Svelte + Go — The Consolidated Platform

The current P3DN Fasilitasi system runs on the consolidated Svelte + Go platform shared with bm-online.id. The SvelteKit frontend handles the public request flow and the staff console in one codebase, while the Go backend serves document uploads, the review pipeline, and ministry reporting from a single binary.

Consolidating the two Kemenperin systems onto one stack cut the maintenance surface in half — one deploy pipeline, one set of shared validation schemas, one operations story for both programs.

P3DN Fasilitasi — current platform home

Current platform home

P3DN Fasilitasi — facilitation request flow

Facilitation request flow

P3DN Fasilitasi — staff console

Staff console

Recap — Era 04

Two programs, one stack — the platform both systems were converging toward.

03
kemenperin.go.id — in production

Five eras.
One platform.
Still running.

Kemenperin's programs — started on PHP 5, consolidated on a Svelte + Go + Python stack built to carry them into the next era.