Lab

Sedang Dibangun · 45%

ApplyOnce

Chrome extension local-first yang mengingat jawaban lamaran kerja dan menggunakannya kembali di berbagai career website, dengan bantuan AI yang sifatnya opsional.

Automation

Gambaran umum

Status
Sedang Dibangun
Kemajuan
45%
Tingkat kesulitan
Challenging
Mulai
28 Agu 2026

Stack & alat

Teknologi
JavaScriptHTMLCSSChrome Extensions Manifest V3Chrome Active Tab APIChrome Scripting APIChrome Storage APIOpenAI Responses APINode.js test runner
Perangkat lunak
Google ChromeGitGitHubCodex

01 / ALASAN DIBUAT

Kenapa gue bikin ini

Apply kerja sering kali berubah jadi kerjaan isi form. Tiap company punya career website, struktur, dan format pertanyaannya sendiri, padahal informasi yang diminta kurang lebih sama. Copas dari CV atau application sebelumnya memang bisa, tapi tetap melelahkan kalau lagi apply ke banyak posisi. Waktunya habis buat mengulang data administratif yang sebenarnya sudah pernah gue isi. Dari situ gue bikin ApplyOnce dengan ide sederhana: untuk pertanyaan yang sama, user seharusnya cukup jawab sekali. Setelah itu browser bisa mengingat dan menggunakan jawabannya lagi saat menemukan field serupa.

02 / MASALAH YANG DIEKSPLORASI

Apa yang ingin gue pahami atau selesaikan

Nggak ada format yang konsisten di antara platform lamaran kerja. Satu website menulis “email address”, website lain memakai “personal email”, sementara platform lain punya struktur field internal yang berbeda lagi. Masalahnya juga bukan sekadar mengisi text input. Ada select, radio button, checkbox, komponen custom, sampai pertanyaan yang terlihat mirip tetapi sebenarnya membutuhkan jawaban berbeda. Kalau automation-nya terlalu agresif, risikonya juga besar. Jawaban yang salah bisa lebih buruk daripada field yang belum terisi, terutama untuk gaji, work authorization, identitas, demografi, dan informasi sensitif lainnya. Karena itu ApplyOnce tidak mengambil alih proses review dan submit.

03 / PENDEKATAN

Gimana idenya dibawa jadi sesuatu yang bisa dicoba

ApplyOnce memindai field yang didukung di tab aktif setelah user membuka extension. Extension membaca beberapa petunjuk seperti label yang terlihat, nama field, placeholder, autocomplete value, tipe input, dan pilihan jawaban yang tersedia. Informasi itu dinormalisasi lalu dibandingkan dengan jawaban yang sudah tersimpan di Chrome. Variasi umum seperti “e-mail address” dan “email” bisa dikenali sebagai pertanyaan yang sama tanpa harus memanggil AI. Kalau belum ada jawaban yang cocok, user bisa menjawab langsung dari popup. Jawaban itu disimpan bersama beberapa alias agar pertanyaan serupa bisa dikenali di application berikutnya. AI sifatnya opsional. User bisa memasukkan OpenAI API key lalu upload CV atau LinkedIn profile dalam format PDF atau CSV. Model digunakan untuk mengekstrak fakta dan membuat seed data awal. Untuk field ambigu, AI juga bisa memberi suggestion, tetapi user tetap harus mengecek sebelum jawaban disimpan dan diisikan. ApplyOnce sengaja melewati password, file upload, dan tombol submit. Bulk fill untuk informasi sensitif membutuhkan konfirmasi tambahan, dan versi public repository tidak berisi seed atau data pribadi gue.

04 / CATATAN LAPANGAN

Masalah utamanya ternyata repetisi

Keresahan awalnya bukan karena form lamaran kerja sulit dipahami. Masalahnya adalah pekerjaan administratif yang sama terus muncul lagi.

Nama, informasi kontak, riwayat kerja, link profile, pendidikan, kemampuan bahasa, dan notice period sebenarnya sudah pernah gue tulis. Tetapi setiap application system memperlakukannya seperti informasi baru. Saat lagi massive apply, aktivitas copas yang kelihatannya kecil akhirnya tetap terasa melelahkan.

Mulai dari matching yang deterministic

Gue nggak ingin setiap field selalu membutuhkan request ke AI. Banyak variasi label form yang masih bisa dipahami dengan rule sederhana.

ApplyOnce menormalisasi label dan mengenali beberapa sinonim umum. Satu jawaban bisa memiliki beberapa alias, kemudian extension menghitung similarity score sebelum menganggap sebuah field cocok. Match threshold-nya juga bisa diubah kalau hasil default terlalu ketat atau terlalu longgar.

Dengan pendekatan ini, alur yang paling sering dipakai tetap berjalan lokal, cepat, dan tanpa biaya token.

Memory yang tumbuh dari setiap jawaban

Saat menemukan field baru, ApplyOnce nggak langsung menebak. Popup akan menampilkan pertanyaannya dan meminta user mengisi atau memilih jawaban.

Ketika disimpan, extension juga merekam label, nama field, placeholder, dan autocomplete value yang relevan. Website berikutnya mungkin memakai wording berbeda, tetapi alias tersebut memberikan konteks tambahan untuk proses matching.

Semua memory lokal ini bisa dilihat, diedit, dihapus, di-export, di-import, atau dibersihkan sepenuhnya oleh user.

AI sebagai interpreter opsional

Menurut gue AI paling berguna saat initial setup dan ketika deterministic matching nggak cukup untuk memahami sebuah field.

Profile importer menerima CV atau LinkedIn profile yang dipilih langsung oleh user. Model diminta mengekstrak informasi faktual tanpa menebak hal-hal seperti gaji, identitas, demografi, work authorization, atau data sensitif lain yang nggak tersedia di dokumen.

Untuk field ambigu, AI menerima structured profile, saved answers, label field, dan pilihan jawaban yang tersedia. Hasilnya hanya menjadi suggestion, bukan keputusan yang langsung dijalankan.

Fitur ini memakai OpenAI API key, bukan login atau session token ChatGPT. Penggunaannya mengonsumsi API token dan tidak memberikan akses ke percakapan ChatGPT milik user.

Memisahkan personal build dan public build

Selama development, gue memakai CV dan LinkedIn profile sendiri untuk membuat personal build yang sudah memiliki seed data.

Data itu nggak boleh ikut masuk ke public repository karena source extension bisa dilihat oleh siapa pun. Karena itu versi public selalu dimulai dengan profile dan memory kosong. Setiap user harus memasukkan atau meng-import datanya sendiri.

API key disimpan di Chrome session storage dan tidak ditanam di source code. Untuk public release yang lebih serius, gue masih ingin mengganti pendekatan ini dengan authentication dan backend proxy agar user umum nggak harus mengelola API key sendiri.

Browser ternyata nggak punya standar form yang seragam

Versi sekarang mendukung native HTML input, textarea, select, checkbox, dan radio group.

Masalah berikutnya adalah banyak recruitment platform memakai komponen form custom. Sebuah dropdown bisa terlihat normal, tetapi sebenarnya dibangun dari banyak nested element dan dikontrol oleh JavaScript framework tertentu.

Platform seperti Workday dan SuccessFactors masih membutuhkan adapter khusus serta compatibility testing yang lebih luas. Jadi versi sekarang adalah fondasi yang sudah bekerja, tetapi belum bisa dianggap sebagai automation universal untuk semua career website.

NGOBROL YUK

Ada yang menarik untuk dibahas?

Soal product, system, sesuatu yang lagi lo bangun, atau sekadar pengen tukar pikiran? boleh banget diobrolin.