Sebagian besar lowongan kerja di Indonesia terbit sebagai post Instagram, bukan di job board: satu gambar, satu caption, dan nomor WhatsApp. Mengumpulkannya manual nggak mungkin di skala besar, dan hasil mentahnya nggak bisa langsung dipakai — akun yang sama mencampur lowongan asli dengan promosi, pengumuman acara, dan repost. Scraping juga pada dasarnya rapuh: selector berubah, akun kena rate-limit, dan proses yang mati di tengah jalan harus bisa didiagnosis setelahnya, bukan diulang diam-diam.
Kami bangun pipeline-nya di Bun dengan Puppeteer, memantau akun yang dikelompokkan per wilayah secara terjadwal. Setiap post hasil scraping diklasifikasikan Gemini untuk memisahkan lowongan asli dari noise sebelum apa pun ditulis ke PostgreSQL, dan field hasil ekstraksi divalidasi Zod supaya data cacat nggak pernah masuk dataset. Dashboard React 19 menampilkan sesi scraping sebagai objek utuh dengan log Pino terstruktur yang di-stream live via WebSocket — jadi kalau satu proses gagal, pertanyaan 'apa yang terjadi' terjawab di antarmuka, bukan di log server yang nggak bisa diakses siapa pun.
Klasifikasi konten hasil scraping dengan AI
Dashboard sesi WebSocket dengan log per proses
Dirancang & dibangun oleh Manggala Code