Panduan lengkap DForm
Dokumentasi untuk pengguna, penyelenggara acara, dan developer. Semua yang perlu Anda ketahui ada di sini.
Pengenalan
DForm adalah platform web untuk membuat formulir pendaftaran acara, mengumpulkan data peserta, dan mengelola semuanya dari satu dasbor. Dibangun untuk DOSCOM (Dian Nuswantoro Computer Community) dan organisasi sejenis yang membutuhkan alur pendaftaran yang simpel, terstruktur, dan profesional.
Form Builder Visual
Drag & drop, tanpa coding.
Real-time Dashboard
Pantau data secara langsung.
Aman & Terverifikasi
Role-based access control.
Quick Start
Mulai dari nol hingga siap menerima pendaftar dalam 5 menit.
- 1
Buat akun
Daftar di
/auth/registerdengan email atau melalui Google/GitHub OAuth. - 2
Buat acara
Di dasbor penyelenggara, klik "Buat Acara". Isi judul, tanggal, lokasi, kuota, dan banner. Publikasikan acara.
- 3
Rancang formulir
Masuk ke Form Builder. Tambahkan field (teks, dropdown, checkbox, dsb.) dengan drag & drop. Atur validasi lalu simpan.
- 4
Bagikan & pantau
Bagikan link formulir. Lihat respons masuk secara real-time di dasbor. Ekspor data kapan saja.
Registrasi & Login
Registrasi Manual
Kunjungi /auth/register dan isi nama, email, serta password. Setelah berhasil, Anda akan otomatis login dan diarahkan ke dasbor pengguna. Akun baru secara otomatis mendapat role member.
OAuth (Google & GitHub)
DForm mendukung login melalui Google dan GitHub. Jika akun belum ada, DForm akan membuat akun baru secara otomatis menggunakan data dari provider. Akun OAuth tidak memiliki password lokal — Anda hanya bisa login melalui provider tersebut.
Reset Password
Kunjungi /auth/forgot-password, masukkan email Anda. Link reset akan dikirim ke inbox. Buka link tersebut untuk mengatur password baru. Fitur ini hanya tersedia untuk akun yang memiliki password lokal (bukan OAuth).
Menjelajahi Acara
Halaman publik /events menampilkan semua acara yang sudah dipublikasikan dan membuka pendaftaran. Anda bisa melihat informasi acara, status pendaftaran (Dibuka, Penuh, Ditutup), lokasi, dan kuota peserta.
Klik acara untuk melihat detail lengkap termasuk deskripsi, tanggal, dan tombol untuk mendaftar. Setelah login, Anda juga bisa menjelajahi acara dari dasbor pengguna melalui menu Browse Events.
Mengisi Formulir
Untuk mendaftar ke acara, Anda harus login terlebih dahulu. Setelah itu:
- Buka halaman acara dan klik Daftar.
- Jika acara memiliki lebih dari satu formulir, pilih formulir yang sesuai.
- Isi semua field yang wajib (ditandai required). Field akan divalidasi otomatis.
- Klik Kirim. Konfirmasi akan muncul sebelum data benar-benar terkirim.
Pendaftaran Tim
DForm mendukung tiga mode pendaftaran yang bisa diatur per formulir:
Single (Individual)
Satu orang mengisi satu formulir. Mode default.
Team
Ketua tim mengisi formulir utama lalu memasukkan email anggota tim. Anggota akan menerima undangan untuk konfirmasi. Kuota acara dikurangi sesuai jumlah anggota tim.
Bundle
Mirip dengan team, tetapi ketua mengisi data untuk semua anggota sekaligus. Field yang ditandai duplicatable akan digandakan per anggota (contoh: nama, email, ukuran kaos masing-masing anggota).
Status Pendaftaran
Setelah mengisi formulir, Anda bisa melihat status pendaftaran dari dasbor pengguna. Setiap pendaftaran memiliki status review:
Jika pendaftaran diterima, Anda mendapatkan kode registrasi unik dan QR code yang bisa digunakan untuk absensi di hari acara.
Profil Pengguna
Di halaman profil (/profile), Anda bisa:
- Mengunggah atau menghapus foto profil (avatar)
- Mengubah nama dan email
- Mengubah password (hanya untuk akun non-OAuth)
Dasbor Penyelenggara
Dasbor penyelenggara (/admin/dashboard) tersedia untuk pengguna dengan role admin atau super-admin. Halaman ini menampilkan:
- KPI Cards — Total acara, acara aktif, total pendaftar, tingkat penyelesaian
- Acara Terbaru — Daftar acara yang baru dibuat
- Grafik Analitik — Tren pendaftaran dan breakdown kategori
- Kalender — Timeline acara yang akan datang
Manajemen Acara
Penyelenggara bisa membuat, mengedit, dan menghapus acara dari dasbor.
Membuat Acara
Navigasi ke /admin/events/create. Field yang wajib diisi: judul, deskripsi, tanggal mulai dan selesai, lokasi, kuota peserta, dan banner. Slug URL otomatis digenerate dari judul. Anda bisa memilih untuk mempublikasikan acara langsung atau menyimpan sebagai draft.
Mengedit Acara
Dari halaman detail acara, klik Edit. Semua field bisa diubah termasuk banner dan tanggal. Perubahan kuota tidak otomatis menolak pendaftar yang sudah diterima.
Arsip & Restore
Acara yang dihapus menggunakan soft delete — masih bisa di-restore kapan saja melalui tombol Restore di halaman detail acara.
Form Builder
Form Builder adalah fitur utama DForm untuk merancang formulir secara visual. Builder terdiri dari tiga area:
Palette (Kiri)
Daftar semua jenis field yang bisa ditambahkan. Drag field dari sini ke canvas.
Canvas (Tengah)
Area kerja utama. Drop field di sini, atur urutan dengan drag, dan lihat preview langsung.
Inspector (Kanan)
Panel properti untuk field yang sedang dipilih. Atur label, placeholder, validasi, dan opsi.
Setelah selesai menambahkan field, klik Simpan untuk menyimpan formulir. Gunakan tombol Preview untuk melihat tampilan formulir seperti yang dilihat peserta.
Jenis Field
Field dikelompokkan berdasarkan kategori:
Teks
| Field | Keterangan |
|---|---|
| Short Text | Input teks satu baris. Cocok untuk nama, NIM, dsb. |
| Long Text | Textarea multi-baris. Untuk deskripsi, motivasi, dsb. |
| Input dengan validasi format email otomatis. | |
| Phone | Input untuk nomor telepon. |
| Number | Input angka dengan validasi numerik. |
Pilihan
| Field | Keterangan |
|---|---|
| Dropdown | Select menu. Hanya mendukung opsi teks. |
| Checkbox | Pilihan ganda (multiple select). Bisa teks atau gambar. |
| Radio | Pilihan tunggal. Bisa teks atau gambar. |
Media
| Field | Keterangan |
|---|---|
| Image Upload | Upload gambar (jpg, png, webp). Max size bisa diatur. |
| File Upload | Upload file umum. MIME type dan max size bisa dikonfigurasi. |
Tanggal & Waktu
| Field | Keterangan |
|---|---|
| Date | Date picker untuk memilih tanggal. |
| Time | Time picker untuk memilih waktu. |
Konten & Layout
| Field | Keterangan |
|---|---|
| Heading | Judul section dalam formulir (tidak mengumpulkan data). |
| Paragraph | Teks deskriptif/instruksi dalam formulir. |
| Divider | Garis pembatas antar section. |
| Rating | Star rating (jumlah bintang bisa dikonfigurasi). |
Pengaturan Formulir
Setiap formulir memiliki pengaturan berikut:
Judul & Deskripsi
Nama formulir dan penjelasan singkat yang dilihat peserta.
Banner
Gambar header dan caption yang ditampilkan di bagian atas formulir.
Batas Waktu (closed_at)
Tanggal dan waktu formulir otomatis ditutup. Setelah waktu ini, peserta tidak bisa mengisi.
Visibilitas (visible_for)
Mengatur siapa yang bisa melihat formulir: semua orang, hanya member, atau role tertentu.
Mode Registrasi
Single, Team, atau Bundle. Disimpan di metadata formulir. Lihat bagian Mode Registrasi.
Mengelola Submisi
Halaman submisi menampilkan semua jawaban yang masuk untuk sebuah formulir. Penyelenggara bisa:
- Melihat ringkasan jawaban setiap pendaftar dalam panel detail
- Accept — Menerima pendaftaran. Secara otomatis men-generate kode registrasi unik dan mengirim email konfirmasi
- Reject — Menolak pendaftaran. Email penolakan dikirim otomatis
KPI strip di bagian atas menampilkan jumlah total, pending, accepted, dan rejected.
Daftar Peserta
Halaman Registrants menampilkan peserta dari seluruh formulir acara (gabungan pengiriman), dengan kolom sumber form, pencarian nama/email/kode/judul form, dan filter status review serta filter per formulir.
QR & Absensi
DForm menyediakan fitur absensi digital melalui QR scan.
Untuk Peserta
Setelah pendaftaran diterima, QR code tersedia di halaman detail pendaftaran. Tunjukkan QR code ini ke penyelenggara saat check-in.
Untuk Penyelenggara
Buka halaman Scan (/admin/scan). Arahkan kamera ke QR peserta, atau masukkan kode registrasi secara manual. Sistem akan memverifikasi dan mencatat kehadiran. Setiap peserta hanya bisa di-scan sekali per acara.
Ekspor Data
Dua jenis ekspor CSV tersedia dari halaman detail acara:
Registrations CSV
Semua data pendaftaran termasuk ringkasan jawaban yang sudah di-humanize (label → value). URL: .../exports/registrations.csv
Attendance CSV
Log absensi (scan) termasuk waktu scan dan siapa yang men-scan. URL: .../exports/attendance.csv
Laporan Acara
Halaman Laporan (/admin/events/{event}/laporan) menyediakan ringkasan komprehensif per acara:
- KPI ringkasan (total pendaftar, accepted, attendance rate)
- Panel log absensi dengan pagination
- Link langsung ke CSV export untuk arsip
Tech Stack
| Layer | Teknologi |
|---|---|
| Backend | Laravel 11 (PHP 8.2+) |
| Frontend | Vue 3 (Composition API) + TypeScript |
| Bridge | Inertia.js (server-driven SPA) |
| Styling | Tailwind CSS v4 + shadcn-vue (reka-ui) |
| Auth | Laravel Session + Socialite (Google, GitHub) |
| Roles | Spatie laravel-permission |
| Database | MySQL / MariaDB (UUID primary keys) |
| Animations | vue3-lottie (LottieFiles) |
| Build | Vite |
Autentikasi & Otorisasi
DForm menggunakan Laravel session guard untuk autentikasi. OAuth via Laravel Socialite mendukung Google dan GitHub. Akun OAuth disimpan tanpa password lokal (password nullable).
Middleware utama:
| Middleware | Fungsi |
|---|---|
| auth | Memastikan user sudah login (redirect ke login jika belum) |
| organizer | Memerlukan permission events.list; redirect ke user portal jika tidak |
| member_portal | Memblokir pure organizer dari user portal (harus punya role member) |
| guest | Hanya untuk user yang belum login (halaman auth) |
Roles & Permissions
Menggunakan Spatie laravel-permission. Tiga role utama:
super-admin
Akses penuh ke semua fitur tanpa batasan. Semua permission otomatis diberikan.
admin
Penyelenggara acara. Bisa membuat, mengedit, dan menghapus acara & formulir. Bisa mereview submisi, scan absensi, dan mengekspor data. Tidak bisa mengelola user, role, atau permission secara langsung.
member
Peserta/pengguna biasa. Bisa menjelajahi acara, mengisi formulir, melihat status pendaftaran, dan mengelola profil. Diberikan otomatis saat registrasi.
Skema Database
Semua tabel menggunakan UUID sebagai primary key. Relasi utama:
users
id, name, email, password (nullable), avatar, google_id, github_id, soft deletes
events
id, title, slug (unique), description, start_date, end_date, registration_start/end, location, quota, registered_count, banner, price, session, status, category, soft deletes
forms
id, title, description, visible_for (JSON), closed_at, event_id (FK), banner_url, banner_caption, metadata (JSON), soft deletes
form_fields
id, input_type, label, description, name, metadata (JSON), form_id (FK), order, is_append, soft deletes
form_answers
id, answers (JSON), user_id (FK), form_id (FK), review_status, registration_code (unique), team/bundle columns (leader_form_answer_id, registration_role, invitation_token, group_token, member_confirmation_status, invited_email), soft deletes
event_attendances
id, event_id (FK), form_answer_id (FK), scanned_by_user_id (FK), scanned_at. Unique: (event_id, form_answer_id)
email_logs
id, form_answer_id, event_id, user_id, recipient_email, status, notification_type, error_message, sent_at
Mode Registrasi (Teknis)
Mode registrasi disimpan di forms.metadata.registration_mode:
| Mode | Behavior |
|---|---|
| single | 1 user = 1 FormAnswer. Kuota -= 1. |
| team | Leader mengisi form + menginput email anggota. Setiap anggota mendapat FormAnswer dengan registration_role = member, member_confirmation_status = pending, dan invitation_token. Kuota -= team_size. Anggota mengonfirmasi via link undangan. |
| bundle | Leader mengisi data semua anggota sekaligus. Field dengan is_append: true dan metadata.duplicatable: true digandakan per slot (bundle__{name}__{index}). Kuota -= max_team_size. Semua group_token sama. |
Metadata Field (Teknis)
Setiap form_fields.metadata (JSON) berisi konfigurasi field:
| Key | Keterangan |
|---|---|
| builderType | Tipe field di UI builder (short_text, dropdown, radio, dll) |
| type | Subtipe input HTML (text, email, tel, number) |
| placeholder | Teks placeholder pada input |
| content | Konten HTML untuk heading/paragraph |
| optionChoices | Array opsi untuk dropdown/checkbox/radio: [{ id, type, label, imageUrl }] |
| rules | Objek aturan validasi: required, min, max, mimes, max_size, email, url, in (CSV), is_checkbox, is_multiple |
| maxStars | Jumlah bintang untuk field rating |
| duplicatable | Boolean. Jika true, field digandakan per slot pada mode bundle |
Service Layer
Business logic dikelompokkan dalam service classes di app/Services/:
Event/EventService
Create, update, delete, restore events. Banner storage. Slug generation. Registration status.
Form/FormAccessGuard
Central access checks: visibility, closure time, registration window, quota, duplicate prevention.
Form/RulesBuilder
Converts field metadata into Laravel validation rules dynamically.
Registration/TeamRegistrationSubmitter
Team mode: creates leader + member FormAnswers, generates invitation tokens, dispatches email jobs.
Registration/BundleRegistrationSubmitter
Bundle mode: group token, per-member answers for duplicatable fields.
Registration/RegistrationCodeIssuer
Generates human-friendly unique registration codes on acceptance.
Registration/RegistrationQrPngGenerator
Generates QR code PNG from FormAnswer ID for attendance scanning.
Scan/GlobalScanResolver
Discriminates one raw scan payload into an event submission or a recruitment application (QR JSON, submission UUID, or registration code).
Reporting/EventReportingQuery
Trends, category breakdowns, global/event summaries, attendance pagination for reporting page.
Ada pertanyaan?
Hubungi tim DOSCOM atau buka issue di repository untuk bantuan lebih lanjut.