UjianGrid

Ujian lokal cepat, aman, dan siap dipakai sekolah.

UjianGrid adalah aplikasi web PWA untuk ujian sekolah lokal yang berjalan di jaringan internal sekolah, dibangun untuk guru, admin, dan siswa. Produk ini fokus pada manajemen data ujian, bank soal, token ujian, kehadiran, koreksi, dan hasil ujian dengan performa tinggi di server terbatas. Versi awal menargetkan 4 ruang kelas dan dipakai tanpa internet, dengan opsi sinkronisasi dan perluasan di masa depan.

Business Goals

  • MVP siap dipakai di 4 ruang kelas dalam 8 minggu dengan uptime minimal 99.5% di jaringan lokal.
  • Mengurangi waktu persiapan ujian guru minimal 60% dibanding proses manual dalam 3 bulan pertama.
  • Menurunkan error administrasi data peserta, ruangan, dan jadwal hingga di bawah 2% per sesi ujian dalam 2 bulan.
  • Mencapai 80% ujian sekolah awal berjalan melalui sistem ini dalam 1 semester.
  • Menjaga waktu respon halaman utama di bawah 300 ms pada beban 100 pengguna aktif bersamaan di LAN.

User Goals

  • Siswa bisa melihat identitas, jadwal, ruangan, token, dan mengerjakan ujian tanpa bingung.
  • Guru bisa membuat ujian, mengelola soal, mengacak paket, mengawasi, dan mengoreksi hasil dengan cepat.
  • Admin bisa mengelola data siswa, guru, mapel, dan token ujian dari satu dashboard.
  • Sekolah bisa menjalankan ujian lokal meski internet tidak stabil atau mati.
  • Kepala sekolah dan wakil sekolah bisa memantau pelaksanaan ujian dan hasil secara ringkas.

Non-Goals

  • Tidak membangun LMS penuh pada fase pertama.
  • Tidak membangun aplikasi Android native pada versi awal.
  • Tidak mencakup ujian online publik untuk peserta dari luar jaringan sekolah.
  • Tidak mencakup fitur anti-cheat tingkat lanjut seperti face recognition atau browser lockdown native pada MVP.

Guru Penguji Rina, 38 - Guru yang juga bisa berperan sebagai pengawas atau admin mata pelajaran. Ia butuh membuat ujian cepat, aman, dan mudah dikoreksi tanpa proses manual yang panjang.

Guru Penguji Rina, 38

  • As a guru, I want to membuat ujian dari bank soal, so that saya bisa menyiapkan ujian lebih cepat.
  • As a guru, I want to mengacak soal dan membuat beberapa paket, so that kecurangan antar siswa berkurang.
  • As a guru, I want to melihat jawaban dan nilai siswa, so that saya bisa koreksi dengan efisien.

Siswa Andi, 17 - Siswa yang mengikuti ujian di ruang kelas dengan perangkat sekolah atau perangkat yang diizinkan. Ia butuh akses sederhana, stabil, dan jelas saat ujian berlangsung.

Siswa Andi, 17

  • As a siswa, I want to melihat jadwal, ruangan, dan nomor peserta, so that saya tahu harus ujian di mana dan kapan.
  • As a siswa, I want to mengerjakan ujian di PWA tanpa banyak langkah, so that saya bisa fokus pada soal.
  • As a siswa, I want to melihat nilai dan review setelah diizinkan, so that saya bisa belajar dari hasil ujian.

Admin Sekolah Dini, 41 - Admin yang mengelola data master dan operasional ujian. Ia butuh kontrol penuh atas data siswa, guru, mapel, token, dan monitoring sesi.

Admin Sekolah Dini, 41

  • As a admin, I want to mengelola data siswa, guru, dan mapel, so that data ujian selalu valid.
  • As a admin, I want to membagikan token ujian dan memantau sesi, so that ujian dimulai serentak.
  • As a admin, I want to melihat aktivitas keluar aplikasi, so that pelanggaran ujian bisa terdeteksi.

Manajemen Data Ujian · High priority

  • Sistem harus memungkinkan admin dan guru membuat, menjadwalkan, dan mengelola ujian secara end-to-end.
  • Buat ujian dengan nama, mapel, kelas, durasi, jadwal, ruang, dan pengawas.
  • Set status ujian: draft, terjadwal, aktif, selesai, dibuka hasil.
  • Kelola peserta per ujian berdasarkan kelas atau seleksi manual.
  • Sediakan token ujian per sesi yang bisa diaktifkan dan dinonaktifkan.
  • Validasi konflik jadwal, peserta ganda, dan ruangan kosong.

Bank Soal dan Paket · High priority

  • Guru harus dapat membuat dan memakai bank soal yang fleksibel untuk berbagai ujian.
  • Dukung tipe soal pilihan ganda, isian singkat, dan penjodohan.
  • Impor soal dari Excel dengan validasi format dan error report.
  • Upload gambar satu kali lalu bisa dipakai di banyak soal.
  • Duplikasi soal dari ujian lain atau bank soal lain dengan opsi edit.
  • Buat beberapa paket soal dengan urutan acak dan komposisi berbeda.

Pelaksanaan Ujian PWA · High priority

  • Siswa mengerjakan ujian lewat PWA yang ringan, cepat, dan stabil di LAN.
  • Login siswa dengan identitas dan validasi peserta ujian.
  • Tampilkan data peserta, nomor ujian, ruangan, jadwal, dan token jika diperlukan.
  • Autosave jawaban secara berkala dan saat perpindahan soal.
  • Tangani refresh halaman, koneksi terputus, dan pemulihan sesi.
  • Blokir navigasi keluar aplikasi dengan deteksi fokus hilang dan peringatan admin.

Koreksi dan Hasil · High priority

  • Guru harus dapat menilai ujian otomatis maupun manual dengan alur yang jelas.
  • Auto-score untuk pilihan ganda dan penjodohan.
  • Koreksi manual untuk isian singkat dengan rubric atau kunci alternatif.
  • Tampilkan jawaban siswa, kunci, dan status koreksi per soal.
  • Rilis nilai dan review soal setelah guru mengizinkan.
  • Simpan histori hasil setiap ujian yang pernah diikuti siswa.

Admin, Pengawas, dan Monitoring · Medium priority

  • Admin dan pengawas harus bisa memantau pelaksanaan ujian dan mendeteksi anomali dasar.
  • Dashboard pengawas dengan status hadir, sedang ujian, selesai, dan terkendala.
  • Catat kehadiran peserta ujian per sesi.
  • Log aktivitas login, logout, pindah tab, reload, dan keluar aplikasi.
  • Aksi cepat untuk pause ujian, reset token, atau membuka akses ulang.
  • Role-based access control untuk guru, admin, kepala sekolah, wakil, dan bendahara.

Onboarding Ujian Pertama

  • Admin login dan mengimpor data siswa, guru, mapel, dan kelas.
  • Guru membuat bank soal atau mengimpor dari Excel.
  • Guru membuat sesi ujian, memilih peserta, dan menetapkan jadwal.
  • Admin mengaktifkan token dan menampilkan daftar peserta per ruang.
  • Siswa login di PWA, memeriksa identitas, lalu masuk ujian.
  • Target time-to-value: ujian pertama bisa siap dipakai dalam 30 menit setelah data master tersedia.

1. Login dan Role Routing

  • Pengguna masuk sekali lalu diarahkan ke dashboard sesuai peran.
  • Gunakan role-based routing untuk guru, siswa, admin, dan peran sekolah lainnya.
  • Tolak akses jika sesi login tidak valid atau akun tidak aktif.
  • Tampilkan pesan error yang jelas untuk kredensial salah atau akun belum terdaftar.

2. Setup Ujian

  • Guru atau admin membuat sesi ujian dari template sederhana.
  • Pilih mapel, kelas, durasi, jadwal, dan pengawas.
  • Validasi bentrok jadwal, peserta kosong, dan token belum aktif.
  • Simpan sebagai draft sebelum dipublikasikan.

3. Distribusi dan Check-In

  • Peserta masuk ke ujian dengan data yang sudah dipastikan benar.
  • Siswa melihat identitas, nomor peserta, ruangan, dan jadwal.
  • Token hanya aktif saat sesi dimulai.
  • Catat kehadiran otomatis ketika siswa membuka ujian.

4. Mengerjakan Ujian

  • Siswa menjawab soal pada antarmuka yang ringan dan responsif.
  • Autosave jawaban tiap beberapa detik dan saat pindah soal.
  • Tangani koneksi putus dengan cache lokal sementara lalu sinkron saat kembali online LAN.
  • Tampilkan timer, navigasi soal, dan status jawaban.

5. Koreksi dan Rilis Hasil

  • Guru memeriksa hasil, lalu membuka nilai dan review jika diizinkan.
  • Auto-grading untuk soal objektif, manual grading untuk isian.
  • Rilis hasil bertahap per sesi atau per kelas.
  • Simpan audit trail untuk perubahan nilai dan pembukaan review.

Fitur Lanjutan

  • Beberapa paket soal untuk satu ujian dengan randomisasi urutan dan komposisi.
  • Reuse soal dan gambar antar ujian dan antar guru dengan kontrol izin.
  • Mode pengawas untuk melihat status peserta real-time.
  • Deteksi keluar aplikasi melalui focus/blur, tab switch, dan fullscreen loss.
  • Ekspor hasil ujian ke CSV dan PDF.
  • Riwayat semua ujian yang pernah diikuti siswa dengan filter mapel dan tanggal.

Prinsip UI

  • Antarmuka minimal, kontras tinggi, dan bisa dipakai di monitor kelas biasa.
  • Navigasi besar dan jelas untuk penggunaan cepat di ruang ujian.
  • Responsif di desktop dan tablet melalui PWA.
  • Dukungan offline-first untuk cache aset aplikasi dan draft jawaban.
  • Aksesibilitas dasar: keyboard navigation, label jelas, dan status warna tidak bergantung warna saja.

Rina biasanya menyiapkan ujian dengan file terpisah, daftar peserta manual, dan pengecekan satu per satu. Saat ada 120 siswa, proses itu memakan waktu dan sering memunculkan salah jadwal atau salah ruang.

Dengan UjianGrid, Rina membuat bank soal, mengimpor soal dari Excel, lalu membentuk paket ujian dalam satu alur. Admin mengaktifkan token, siswa masuk lewat PWA di jaringan sekolah, dan ujian dimulai serentak di 4 ruang kelas.

Setelah ujian selesai, nilai pilihan ganda langsung muncul, soal isian tinggal koreksi manual, dan hasil bisa dirilis ke siswa setelah disetujui. Sekolah mendapat proses yang lebih rapi, lebih cepat, dan lebih aman tanpa bergantung pada internet publik.

User-Centric Metrics

  • 95% siswa berhasil login dan masuk ujian dalam 60 detik.
  • Kurang dari 3% sesi mengalami masalah sinkron jawaban.
  • Waktu rata-rata guru menyiapkan ujian turun menjadi di bawah 20 menit.
  • 90% guru menyelesaikan koreksi objektif tanpa bantuan teknis.
  • Skor kepuasan pengguna internal minimal 4.3/5 setelah 1 semester.

Business Metrics

  • 80% ujian internal sekolah memakai sistem ini dalam 6 bulan.
  • Tingkat pemakaian aktif guru per bulan minimal 70%.
  • Retensi penggunaan semester ke semester minimal 85%.
  • Waktu onboarding admin baru untuk data master turun 50%.

Technical Metrics

  • Uptime layanan LAN minimal 99.5%.
  • P95 latency halaman inti di bawah 300 ms di jaringan lokal.
  • Error rate API di bawah 1% per hari.
  • Zero data loss untuk jawaban yang sudah tersimpan dan tersinkron.

Tracking Plan

  • track_login_success
  • track_exam_created
  • track_token_activated
  • track_student_exam_started
  • track_answer_autosaved
  • track_exam_submitted
  • track_result_published

Technical Needs

  • Frontend PWA menggunakan SvelteKit dan service worker untuk cache aset dan offline behavior.
  • Backend API menggunakan Go dengan REST atau JSON over HTTP untuk performa ringan.
  • Database PostgreSQL untuk data master, sesi ujian, soal, jawaban, dan audit log.
  • Redis untuk cache sesi, token ujian, rate limiting, dan lock sederhana.
  • Nginx sebagai reverse proxy dan TLS terminator di depan backend.
  • Deploy di Proxmox dengan LXC terpisah untuk app, database, cache, dan monitoring.
  • Observability dasar memakai logs terstruktur, health check, dan metrics endpoint.

Integration Points

  • LDAP atau local user directory jika sekolah punya sumber identitas internal.
  • Import Excel dari file upload untuk soal, peserta, dan data master.
  • Email atau WhatsApp gateway opsional untuk notifikasi hasil di fase berikutnya.
  • NTP lokal untuk sinkronisasi waktu ujian.
  • SAML atau OAuth hanya jika dibutuhkan untuk integrasi sekolah lanjutan.

Data Storage & Privacy

  • Simpan data peserta, nilai, dan jawaban dengan akses berbasis peran.
  • Audit semua perubahan nilai, soal, dan token ujian.
  • Enkripsi password dengan algoritma modern seperti Argon2id.
  • Batasi retensi log sensitif dan hapus data sesuai kebijakan sekolah.
  • Siapkan prinsip privasi data siswa selaras dengan praktik GDPR/CCPA seperti minimisasi data dan hak akses internal.

Scalability & Performance

  • Optimalkan query PostgreSQL dengan index pada peserta, ujian, kelas, dan status.
  • Gunakan pagination dan lazy loading untuk bank soal dan hasil.
  • Cache data referensi yang sering dipakai di Redis.
  • Pisahkan read-heavy dashboard dari write-heavy submission flow.

Potential Challenges

  • Server terbatas bisa menjadi bottleneck saat banyak siswa submit bersamaan; mitigasi dengan batching, index, dan payload kecil.
  • Koneksi LAN antar kelas bisa tidak stabil; mitigasi dengan autosave lokal dan retry sinkronisasi.
  • Soal reuse dan gambar bisa menimbulkan duplikasi data; mitigasi dengan asset library dan reference-based storage.
  • Deteksi keluar aplikasi bisa menghasilkan false positive; mitigasi dengan threshold event dan mode toleransi.
  • Kesalahan impor Excel bisa merusak data; mitigasi dengan preview, validation report, dan draft import.

Team & resourcing - Small team - 2 engineers, 1 designer part-time, 1 PM part-time, dengan dukungan ops sekolah.

Phase 1: MVP Ujian Lokal · Weeks 1–4

  • Login dan role dasar untuk admin, guru, siswa.
  • Dashboard siswa dan guru terpisah.
  • Buat ujian sederhana, token, jadwal, peserta, dan kehadiran.
  • Pengerjaan ujian PWA dengan autosave dan submit.
  • Koreksi pilihan ganda otomatis dan tampilan hasil dasar.

Phase 2: Bank Soal dan Koreksi Lengkap · Weeks 5–8

  • Bank soal dengan tipe pilihan ganda, isian, dan penjodohan.
  • Import soal dari Excel.
  • Upload dan reuse gambar untuk beberapa soal.
  • Beberapa paket soal dan randomisasi urutan.
  • Koreksi manual, review hasil, dan riwayat ujian siswa.

Phase 3: Monitoring dan Admin Hardening · Weeks 9–10

  • Dashboard pengawas real-time.
  • Deteksi keluar aplikasi dan log aktivitas.
  • Manajemen data siswa, guru, mapel, kelas, dan ruang.
  • Audit trail perubahan data penting.
  • Ekspor hasil ke CSV dan PDF.

Phase 4: Performance and Scale Prep · Weeks 11–12

  • Optimasi query dan cache Redis.
  • Hardening deployment Proxmox, LXC, Nginx, dan backup PostgreSQL.
  • Load test untuk 100 pengguna aktif bersamaan.
  • Health check, metrics, dan alert dasar.
  • Dokumentasi operasional untuk penambahan server berikutnya.

Paste this into Cursor, Bolt, Lovable, or v0 to start building.

Build a local-first school exam web app called UjianGrid using SvelteKit for the frontend and Go for the backend API, with PostgreSQL as the primary database and Redis for caching/session/token control. The app must run in a school LAN behind Nginx and support PWA mode with offline-resilient autosave for answers.

Core roles: admin, teacher, student, and school leadership views. Teachers can create exams, manage question banks, import questions from Excel, upload reusable images, create multiple exam packages, randomize questions, reuse questions from previous exams, monitor attendance, and grade submissions. Students can see identity, participant number, room, schedule, take exams, view scores, and view reviews only when released by the teacher. Admin can manage students, teachers, subjects, exam tokens, and detect app exit events.

Primary screens: login, student dashboard, teacher dashboard, admin dashboard, exam list, exam creation wizard, question bank, import preview, exam taking screen with timer and autosave, attendance monitor, grading screen, result release screen, and audit logs.

Data model entities: users, roles, students, teachers, classes, subjects, rooms, exams, exam_sessions, exam_participants, questions, question_assets, question_packages, answers, submissions, grades, attendance, tokens, audit_logs, and exit_detection_events.

Functional requirements: role-based auth, exam scheduling, token-based exam start, answer autosave and recovery, question types multiple choice short answer matching, Excel import validation, reusable images and question library, grading workflow, result release controls, and monitoring with basic anti-exit detection.

Non-functional requirements: optimize for low-spec servers, keep API payloads small, use PostgreSQL indexes and Redis caching, provide structured logs and health checks, and ensure the UI is fast and simple for classroom use.

Use a clean, production-ready architecture with API endpoints, database migrations, seed data, and a responsive UI focused on speed. Generate the full app scaffold, key pages, reusable components, server routes, schemas, and sample data.

Business Idea

saya ingin membuat portofolio beberapa aplikasi yang sesuai dengan standart senior programmer di industri. saya berencana membuat aplikasi yang berjalan full lokal, lokal + online juga aplikasi online. saat ini baru ada 3 komputer dengan PC1 spek 12 core ram 32 nvme 200Gb, PC2 spek 4 core ram 12 gb hdd 500gb dan PC3 2 core ram 4 hdd 500gb yang akan digunakan sebagai server, kemungkinan bisa tambah komputer. untuk jaringan lokal sudah ada pakai AP ditiap kelas yang terhubung menggunakan TP-link TL-SG1024D yang dihubungkan langsung dengan modem utama indibiz. untuk jaringan lokal sekolah hanya diterapkan di 4 ruang kelas saja terlebih dahulu. aplikasi lokal yaitu manajemen arsip data sekolah, arsip surat, aplikasi rapor, ujian sekolah dan lms. ujian dan lms di awal berupa aplikasi web PWA menggunakan svelte dan golang. kedepan akan ada aplikasi android yang memiliki fitur tidak bisa keluar aplikasi seperti exambro. aplikasi arsip raport dan surat dapat online karena ada ttd barcode/ digital yang akan link dengan data di arsip sekolah, aplikasi portofolio siswa, dan aplikasi kecil lainnya untuk portofolio. untuk yang pertama yaitu membuat aplikasi lokal ujian, manajemen data sekolah dan arsip ujian. dengan taknologin PWA, sveltekit, golang, postgreSQL infrastruktur yang saya gunakan seperti proxmox, LXC, pfsense, nginx, redis dll. Buatkan PRD untuk membuat aplikasi pertama saya! user guru, dan siswa, guru juga bisa jadi kepala sekolah, wakil kepala sekolah, bendahara, admin dashboard guru dan siswa berbeda. siswa fitur melihat identitas, nomor peserta, ruangan, jadwal ujian, melakukan ujian. melihat nilai, melihat review soal setelah dibuka/di izinkan oleh guru, melihat semua ujian yang pernah diikuti dan hasil juga reviewnya. Guru Fitur manajemen data ujian, soal ujian kunci jawaban, jawaban siswa, login, logout, koreksi hasil ujian, fitur jenis soal pilihan ganda atau isian atau penjodohan, fitur input soal melalui excel, fitur upload gambar, 1 gambar bisa digunakan di beberapa soal, fitur acak soal, fitur ada beberapa paket soal, fitur menggunakan soal dari ujian sebelumnya atau ujian lain dan melakukan beberapa perubahan, fitur kumpulan soal dan gambar, soal dan gambar bisa digunakan oleh guru lain, FItur Pengawas Ujian, Majemen kehadiran peserta ujian, membagikan token ujian. Admin Fitur semua fitur dan manajemen data siswa, guru, mata pelajaran, token mulai ujian, fitur deteksi keluar aplikasi. Fokus pada performa karena spesifikasi server yang terbatas. tidak usah gunakan bahasa bertele tele.

Make My PRD

Design by The Resonance | Powered by GPC – The AI Transformation Company