Skip to content

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)
  • DeferredTab pattern 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%