Pantau Anggaran
Public dashboard monitoring 3M+ government procurement records for anomalies — regional maps, agency rankings, risk clusters.

Indonesian government procurement publishes millions of records, but the public has no practical way to spot anomalies — the data is too large, too messy, and spread across regions.
Solo build: data pipeline, backend, ML clustering, frontend, and deployment.
PostGIS as the analytical core
Region geometry lives in PostGIS with GiST indexes; map GeoJSON is served from materialized views (province_map_geoms, region_year_stats) refreshed by the deploy pipeline — the API never assembles geometry per request.
Search that survives dirty data
Package names are indexed three ways: tsvector GIN for full-text, gin_trgm_ops for fuzzy matching against typo-ridden entries, and JSONB GIN over raw payloads.
Clustering with an ablation study
K-Means over agency spending profiles with spatial-lag features; K chosen via inertia, Silhouette, and Davies-Bouldin, and a spatial-feature ablation documents what the geography actually contributes. Results land in region_clusters and are served via the API.
Ethical framing as a product decision
Everything is labeled "potential anomaly / needs review" — the platform surfaces signals for scrutiny, it does not accuse.
- 3M+ procurement records browsable by region, agency, and risk cluster
- The only project in the fleet with CI running a real test gate (Go tests + svelte-check + compose validation) separate from deploy
- Optional Redis cache degrades gracefully when absent
- Live at pantauanggaran.ryanprayoga.dev