Lewati ke konten
Dokumentasi

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. 1

    Buat akun

    Daftar di /auth/register dengan email atau melalui Google/GitHub OAuth.

  2. 2

    Buat acara

    Di dasbor penyelenggara, klik "Buat Acara". Isi judul, tanggal, lokasi, kuota, dan banner. Publikasikan acara.

  3. 3

    Rancang formulir

    Masuk ke Form Builder. Tambahkan field (teks, dropdown, checkbox, dsb.) dengan drag & drop. Atur validasi lalu simpan.

  4. 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:

  1. Buka halaman acara dan klik Daftar.
  2. Jika acara memiliki lebih dari satu formulir, pilih formulir yang sesuai.
  3. Isi semua field yang wajib (ditandai required). Field akan divalidasi otomatis.
  4. Klik Kirim. Konfirmasi akan muncul sebelum data benar-benar terkirim.
Catatan: Setiap pengguna hanya bisa mengisi formulir satu kali per acara. Jika kuota sudah penuh atau periode pendaftaran sudah ditutup, formulir tidak bisa diakses.

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:

PendingMenunggu review dari penyelenggara.
AcceptedPendaftaran diterima. Kode registrasi dan QR code tersedia.
RejectedPendaftaran ditolak oleh penyelenggara.

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.
Email 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
BackendLaravel 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)
RolesSpatie laravel-permission
Database MySQL / MariaDB (UUID primary keys)
Animationsvue3-lottie (LottieFiles)
BuildVite

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)
placeholderTeks 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.