PKM Explorer¶
Status: Live URL: pkm.mukhayyar.my.id Repo: github.com/PimoAI/pkm-pal Deploy: Cloudflare Pages (auto-deploy via GitHub Actions from v2.0+)
What it is¶
A searchable database of 29,000+ funded PKM (Program Kreativitas Mahasiswa) proposals from Simbelmawa (Kemdikbud). Runs entirely client-side — no backend, no server.
Built to help Indonesian university students research what kinds of proposals get funded, understand funding patterns, and write better titles.
Architecture¶
Browser
└── React + Vite + TypeScript SPA
├── sql.js (SQLite WASM) — full DB in browser
├── Zustand — state management
└── Leaflet — map visualization
Hosting: Cloudflare Pages
Data: Encrypted SQLite DB (WASM), loaded on first visit
Features¶
- Eksplor — full-text search + filters (skim, kampus, dosen, year range, dana, PIMNAS only)
- Analytics — title patterns, PIMNAS rates, skim distribution, heatmap, top dosen
- Dana — funding distribution per skim/kampus/year with percentile stats
- Leaderboard — kampus/dosen/skim ranking; spotlight card pinned above #1 with actual rank + top X%
- Keywords — most frequent words in funded titles, filterable by all dimensions
- Map — geographic distribution of PKM activity across Indonesia
- Profile — PKM personality quiz (10 archetypes)
- Tips — PIMNAS title analysis, pattern insights
Dataset¶
- v1.0: ~10k records, PKM-RE/KC/K/T/PM
- v2.0: 29k+ records, added PKM-PI and PKM-K skims
Key design decisions¶
- All filtering is client-side (no API calls after initial load)
DeferredTabpattern with rAF + 200ms fallback prevents loading stalls when page is backgrounded- Year range filter (from/to) across all tabs instead of single-year chips
- Collapsible filter panels on all heavy tabs (Keywords, Leaderboard, Analytics, Dana)
- Leaderboard pinned card:
Math.ceil((rank + 1) / total * 100)for "Top X%" — rank #1 = Top 1%