Membangun CBTKita: Aplikasi CBT Sekolah yang Tetap Jalan Saat Internet Putus

Oleh Admin Sismora · 20 Oktober 2026 · 6 menit baca

Ringkasan: CBTKita, aplikasi CBT buatan SISMORA, menyimpan setiap jawaban ke outbox IndexedDB sebelum dikirim sehingga jawaban tidak hilang saat internet putus; menyediakan server ujian lokal untuk lab offline; mengenkripsi kunci jawaban dengan AES-256-GCM; memisahkan data sekolah dengan PostgreSQL Row Level Security; dan memakai Claude untuk skor awal uraian yang selalu dikonfirmasi guru.

Ujian berbasis komputer (CBT) sudah jadi kebutuhan sekolah — tapi siapa pun yang pernah jadi proktor tahu masalah klasiknya: internet putus di tengah ujian, jawaban siswa hilang, dan ujian harus diulang. Itulah alasan kami di SISMORA membangun CBTKita, aplikasi SaaS CBT untuk PAUD sampai perguruan tinggi yang dirancang agar ujian tetap berjalan meski koneksi tidak bisa diandalkan.

Artikel ini membahas masalah yang ingin kami selesaikan, keputusan arsitektur di baliknya, dan pelajaran yang bisa dipakai siapa pun yang sedang membangun aplikasi untuk sekolah di Indonesia.

Masalah Nyata Ujian Sekolah di Indonesia

Sebelum menulis kode, kami mengumpulkan keluhan yang paling sering muncul dari operator dan guru:

  1. Koneksi tidak stabil. Ratusan siswa login bersamaan di satu jaringan sekolah — koneksi melambat atau putus.
  2. Kunci jawaban bocor. Formulir online gratis menyimpan kunci di tempat yang bisa dibaca, dan siswa bebas membuka tab lain.
  3. Koreksi manual. Soal uraian ratusan siswa butuh berhari-hari untuk dinilai, lalu nilainya masih diketik ulang ke rapor.
  4. Data tersebar. Soal di file Word, data siswa di Dapodik, nilai di Excel — tidak ada yang terhubung.
  5. Biaya kertas. Sekolah 300 siswa dengan 10 mapel dan 4 kali ujian setahun menghabiskan jutaan rupiah hanya untuk fotokopi.

Prinsip #1: Offline-First, Jawaban Tidak Boleh Hilang

Keputusan terpenting di CBTKita adalah memperlakukan koneksi internet sebagai bonus, bukan syarat.

  • Setiap kali siswa memilih jawaban, jawaban itu ditulis dulu ke outbox di IndexedDB perangkat, baru dikirim ke server. Jawaban hanya dihapus dari outbox setelah server mengonfirmasi.
  • Penyimpanan di server bersifat idempoten: kalau jawaban yang sama terkirim dua kali karena koneksi putus-sambung, hasilnya tetap satu. Nomor urut dari klien memastikan jawaban lama tidak menimpa jawaban baru.
  • Waktu ujian ditetapkan server, bukan perangkat. Jawaban yang diketik saat offline sebelum waktu habis tetap diterima ketika perangkat kembali online.
  • Paket soal di-cache oleh service worker, sehingga siswa yang tidak sengaja me-refresh halaman tetap bisa melanjutkan ujian tanpa internet.

Untuk sekolah yang ingin ujian serentak di lab tanpa internet sama sekali, tersedia server ujian lokal berbasis Docker. Server ini menjalankan ujian di jaringan lokal, lalu menyinkronkan hasilnya ke cloud. Menariknya, server lokal tidak menyimpan kunci jawaban — penilaian tetap dilakukan di cloud, sehingga mencuri perangkat server pun tidak membocorkan kunci.

Prinsip #2: Kunci Jawaban Tidak Pernah Bocor

Keamanan soal kami tangani berlapis:

  • Kunci jawaban dienkripsi AES-256-GCM di level aplikasi. Dump database saja tidak cukup untuk membacanya.
  • Tabel opsi jawaban sengaja tidak punya kolom "jawaban benar", sehingga tidak ada query yang bisa tidak sengaja ikut mengirim kunci ke browser.
  • Di sisi siswa: mode layar penuh, deteksi pindah jendela, blokir salin-tempel, dan kunci otomatis setelah batas pelanggaran. Untuk tingkat keamanan lebih tinggi, ada aplikasi Android mode kiosk, dukungan Safe Exam Browser, dan aplikasi ujian khusus untuk PC lab.

Prinsip #3: Satu Platform, Banyak Sekolah, Data Tetap Terpisah

Sebagai SaaS, CBTKita melayani banyak sekolah sekaligus. Setiap sekolah punya alamat sendiri (namasekolah.cbtkita.com) atau bahkan domain sekolah sendiri.

Isolasi data dijamin di level database dengan PostgreSQL Row Level Security (RLS). Setiap request membuka transaksi yang "mengetahui" sekolah mana yang sedang diakses, dan database sendiri yang menolak membaca baris milik sekolah lain. Artinya, seandainya ada developer yang lupa menulis filter WHERE di sebuah query, data sekolah lain tetap aman.

Database berada di pusat data Jakarta, sejalan dengan UU PDP No. 27/2022, dan sekolah dapat mengekspor atau menghapus datanya kapan saja.

Arsitektur: Cloudflare di Depan, PostgreSQL di Belakang

Kami memilih kombinasi yang murah di hari biasa tapi kuat di hari ujian:

Lapisan Teknologi
API & hosting SPA Cloudflare Workers + Hono (modular monolith)
Frontend React 19, Vite, Tailwind CSS v4, TanStack Query
Database PostgreSQL 16 lewat Cloudflare Hyperdrive
File & antrean Cloudflare R2 dan Cloudflare Queues
Realtime Trigger PostgreSQL → LISTEN/NOTIFY → WebSocket
AI Claude API untuk koreksi uraian dan varian soal
Mobile Capacitor + plugin kiosk Android

Lalu lintas aplikasi ujian itu unik: hampir nol di hari biasa, lalu melonjak saat seluruh sekolah ujian serentak. Arsitektur edge di Cloudflare Workers otomatis menyesuaikan beban tanpa server yang harus disiapkan berlebihan. Sebelum hari ujian, kami menjalankan uji beban dengan target simpan jawaban p95 di bawah 300 ms.

Realtime Tanpa Biaya Tambahan

Layar pengawas perlu tahu secara langsung siapa yang sudah mulai, siapa yang terkunci, dan siapa yang sudah selesai. Alih-alih memakai layanan realtime berbayar, kami memanfaatkan fitur bawaan PostgreSQL: setiap perubahan data memicu pg_notify, sebuah relay kecil meneruskannya, dan Worker mengirimkannya ke browser lewat WebSocket. Hasilnya, dashboard, layar pengawas, dan daftar data diperbarui instan tanpa perlu refresh.

AI yang Membantu, Bukan Menggantikan Guru

Koreksi uraian adalah pekerjaan yang paling menyita waktu guru. CBTKita memakai Claude untuk memberi skor awal berdasarkan rubrik, tetapi dengan dua aturan tegas:

  1. Skor AI selalu berstatus draf — guru yang memutuskan nilai akhir.
  2. Jawaban siswa diperlakukan sebagai data, bukan instruksi, sehingga siswa tidak bisa "menyuruh" AI memberi nilai sempurna.

Proses AI berjalan di antrean dengan retry otomatis, jadi lonjakan koreksi setelah ujian tidak membuat aplikasi melambat.

Mudah untuk Guru yang Belum Terbiasa Teknologi

Fitur canggih tidak berguna kalau guru kesulitan memakainya. Karena itu:

  • Soal cukup di-import dari template Word atau Excel, termasuk rumus matematika.
  • Data siswa dan guru bisa di-import langsung dari file ekspor Dapodik.
  • Siswa masuk dengan NISN atau QR kartu ujian yang dicetak otomatis.
  • Nilai bisa diekspor ke format e-Rapor, dan laporan per siswa bisa dicetak sebagai PDF.
  • Setiap halaman punya panduan singkat, dan sekolah dapat mendaftar sendiri lalu siap ujian pertama dalam kurang dari 24 jam.

Pelajaran yang Kami Petik

  • Desain untuk kondisi terburuk. Di Indonesia, "internet putus" bukan edge case — itu skenario utama yang harus diuji.
  • Taruh keamanan di lapisan terdalam. RLS di database dan enkripsi kunci di aplikasi jauh lebih andal daripada mengandalkan setiap developer untuk selalu ingat.
  • Bagikan kontrak API. Monorepo TypeScript dengan skema bersama membuat perubahan API langsung gagal di compile time, baik di backend maupun frontend.
  • Otomatiskan rilis. Gerbang deploy kami memastikan skema database cocok dengan kode sebelum rilis, ditambah backup harian terenkripsi dan uji pemulihan setiap bulan.

Ingin Membangun Sistem Serupa?

CBTKita adalah contoh bagaimana SISMORA membangun sistem sekolah digital dan aplikasi SaaS yang siap dipakai di kondisi nyata Indonesia. Lihat studi kasus lengkapnya di portfolio CBTKita, coba langsung di cbtkita.com, atau pelajari layanan Digital School System kami.

Punya ide aplikasi untuk sekolah, yayasan, atau bisnis Anda? Konsultasikan gratis dengan tim SISMORA lewat WhatsApp.

Pertanyaan yang Sering Diajukan

Apa itu aplikasi CBT?

CBT (Computer Based Test) adalah ujian yang dikerjakan di komputer, laptop, tablet, atau ponsel, bukan di kertas. Soal, jawaban, penilaian, dan laporan dikelola secara digital.

Apakah CBTKita bisa dipakai tanpa internet?

Bisa. Jawaban disimpan di perangkat dan dikirim otomatis saat koneksi kembali. Untuk lab tanpa internet, sekolah dapat memakai server ujian lokal yang nanti tersinkron ke cloud.

Bagaimana CBTKita mencegah siswa curang?

CBTKita memakai mode layar penuh, deteksi pindah jendela, blokir salin-tempel, kunci otomatis setelah batas pelanggaran, aplikasi Android mode kiosk, dan dukungan Safe Exam Browser. Kunci jawaban juga dienkripsi sehingga tidak bisa dibaca dari browser.

Apakah nilai dari AI langsung menjadi nilai akhir?

Tidak. AI hanya memberi skor awal untuk soal uraian; guru yang mengonfirmasi atau mengubah nilai akhir.

Berapa lama sekolah bisa mulai memakai CBTKita?

Sekolah bisa mendaftar sendiri dengan trial 14 hari tanpa kartu kredit dan biasanya siap menjalankan ujian pertama dalam kurang dari 24 jam.

Topik: CBT, Sekolah Digital, SaaS, Offline-First, Cloudflare, Studi Kasus

Terakhir diperbarui: 20 Oktober 2026