01
Government — Public Sector

Kemenperin
Programs.

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

03 Programs
09 Stack Eras
2018 — 2026 In Service
17 Technologies
01
Program — 4 Eras

Business Matching

Four stack eras since 2024 — 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 2024
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 — early interface, February 2024

Early PHP 5 interface — February 2024

Business Matching PHP 5 — platform view, March 2024

PHP 5 platform — March 2024

Business Matching PHP 5 — admin view, March 2024

PHP 5 admin — March 2024

Recap — Era 01

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

02 2024 — Early 2025
PHP 8MySQLComposerPDO

PHP 8 — The Modernized Monolith

The second era rebuilt the platform on PHP 8 — same monolith shape, professional internals, developed through 2024 and running into early 2025. 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 — dashboard, January 2025

PHP 8 dashboard — January 2025

Business Matching PHP 8 — company management

Company management

Business Matching PHP 8 — matching workflow

Matching workflow

Business Matching PHP 8 — event scheduling

Event scheduling

Business Matching PHP 8 — participant list

Participant list

Business Matching PHP 8 — reports

Reports

Business Matching PHP 8 — settings

Settings

Business Matching PHP 8 — February 2025 view

PHP 8 platform — February 2025

Recap — Era 02

Same shape, professional internals — the modernization that bought the platform time.

03 Late 2025
ReactTypeScriptHonoPostgreSQLJWT

React + TypeScript → Hono — The Decoupled Era

Era three, landing at the end of 2025, 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, December 2025

React participant app — December 2025

Business Matching React — company profile

Company profile, decoupled

Business Matching React — matching interface

Matching interface

Business Matching React — directory view

Directory view

Business Matching React — detail view

Detail view

Business Matching React + Hono — December 2025

React + Hono — December 2025

Business Matching React + Hono — dashboard

React dashboard

Business Matching React + Hono — final build

React + Hono final build

Recap — Era 03

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

04 2026 — Present
SvelteKitTypeScriptGolangPythonPostgreSQL

SvelteKit + TypeScript → Go → Python — bm-online.id

Era four is the current production system at bm-online.id — a service constellation, not another monolith. SvelteKit is the primary application server: it owns Better Auth sessions, SSR, the public REST API, and every write to Neon Postgres via Drizzle. The Go backend mirrors the hot read paths at higher throughput and runs the realtime aggregation layer — a 3-second watermark poller feeding Phoenix Channels and SSE.

Python owns the compute-heavy ML work through two dedicated services: ONNX embeddings behind a Rust LRU/TTL cache for codification similarity, and a Prophet forecast service with Indonesian holiday regressors. Go calls them over typed internal APIs and stays the single public gateway — one binary in front, purpose-built services behind.

Recap — Era 04

Not a rewrite — a constellation. SvelteKit serves, Go mirrors, Python thinks.

02
Program — 1 Eras

P3DN Fasilitasi

The facilitation arm of Kemenperin’s P3DN program — built greenfield in 2025 on SvelteKit + TypeScript + Supabase, the stack the older platforms spent years earning.

01 2025 — Present
SvelteKitTypeScriptSupabasePostgreSQL

SvelteKit + Supabase — Built Right the First Time

P3DN Fasilitasi — the facilitation arm of Kemenperin’s P3DN program (Peningkatan Penggunaan Produk Dalam Negeri) — is the youngest of the three systems and the only one with no migration story. Built from scratch in 2025, it went straight onto SvelteKit + TypeScript with Supabase handling auth, the PostgreSQL database, and storage for facilitation documents.

The facilitation pipeline — request, document review, verification, facilitated, reported — was designed in from day one instead of being reverse-engineered out of a monolith. Companies submit requests and track them through the stages; staff work a typed review queue; Supabase’s managed layer kept the team focused on the program’s workflow instead of infrastructure.

P3DN Fasilitasi — platform home

P3DN Fasilitasi home

P3DN Fasilitasi — request flow

Facilitation request flow

P3DN Fasilitasi — tracking view

Request tracking

P3DN Fasilitasi — document review

Document review

P3DN Fasilitasi — staff queue

Staff review queue

P3DN Fasilitasi — admin console

Admin console

Recap — Era 01

The platform Business Matching took eight years to reach — P3DN started there.

03
Program — 4 Eras

TKDN Website

The public face of domestic-content certification — from a PHP 5 certificate bulletin to an instant, API-verifiable registry on the shared Svelte + Go platform.

01 2018 — 2020
PHP 5MySQLjQueryServer-rendered

PHP 5 — The Certificate Bulletin

The TKDN (Tingkat Komponen Dalam Negeri — domestic content level) website began on the same PHP 5 stack as the other Kemenperin systems. Companies submitted certification requests, uploaded supporting documents, and looked up issued TKDN certificates through server-rendered pages backed by a single MySQL database.

Public visitors could verify certificate numbers — a critical trust function for government procurement — but the lookup was a plain table scan behind a form, and every certificate cycle meant staff keying in results by hand.

TKDN PHP 5 — certificate lookup form

Certificate lookup

TKDN PHP 5 — certification submission

Certification submission

TKDN PHP 5 — admin list

Admin certificate list

Recap — Era 01

Put the certificate registry online — lookup worked, but nothing was built to scale trust.

02 2020 — 2022
PHP 8MySQLComposerPDO

PHP 8 — The Structured Registry

The PHP 8 rebuild gave the TKDN registry real structure. Certification requests moved through explicit verification stages, required documents became typed checklists, and certificates themselves became first-class records — number, product scope, validity window, and the calculation breakdown behind the TKDN percentage.

The public lookup became an indexed search instead of a table scan, and staff gained batch tools for issuing certificates at the end of each verification cycle.

TKDN PHP 8 — certificate registry

Structured certificate registry

TKDN PHP 8 — verification pipeline

Verification pipeline

TKDN PHP 8 — public certificate search

Indexed public search

Recap — Era 02

Certificates became data — searchable, structured, and auditable for the first time.

03 2022 — 2024
ReactHonoTypeScriptPostgreSQLJWT

React + Hono — The Public Verification API

Era three moved TKDN to the decoupled stack shared across Kemenperin systems: a React portal where applicants tracked their certification status in real time, and a Hono API that exposed certificate verification as a public endpoint — so procurement systems and buyers could validate a TKDN number programmatically, not just by reading a PDF.

Behind the portal, staff worked from a typed review queue with the same staged pipeline, now fed by asynchronous document uploads instead of single form posts.

TKDN React — applicant portal

Self-service applicant portal

TKDN React — public verification

Public certificate verification

TKDN React — staff review queue

Staff review queue

Recap — Era 03

Verification became an API — trust in TKDN certificates stopped depending on a phone call.

04 2024 — Present
SvelteSvelteKitGolangPostgreSQL

Svelte + Go — The Consolidated Registry

The current TKDN website runs on the consolidated Svelte + Go platform shared with Business Matching and P3DN Fasilitasi. The SvelteKit frontend serves the public certificate lookup with SSR speed, while the Go backend handles application intake, the verification pipeline, and the public verification API from a single binary.

Three Kemenperin programs now share one stack and one deployment story — the TKDN registry benefits from every platform improvement the other systems drive, and certificate verification stays fast enough for procurement systems to call in-line.

TKDN — current platform home

Current platform home

TKDN — instant certificate lookup

Instant certificate lookup

TKDN — staff console

Staff console

Recap — Era 04

Three programs, one platform — the certificate registry that procurement can actually depend on.

04
kemenperin.go.id — in production

Three programs.
One mission.
Still running.

Kemenperin's programs — from PHP 5 monoliths to the modern stacks carrying them into the next era.