Sistem Penerimaan Peserta Didik Baru (PPDB) SMK Muhammadiyah 1 Prambanan Klaten
Aplikasi web responsif untuk formulir pendaftaran siswa baru dengan validasi form yang canggih, penyimpanan data otomatis, dan integrasi dengan Google Apps Script untuk pengelolaan data pendaftaran.
- Data Pribadi Siswa: Nama, jenis kelamin, tempat/tanggal lahir, agama, NISN, NIK, No. KK
- Informasi Kontak: Nomor handphone dengan validasi format Indonesia (628xxx), email
- Pilihan Kompetensi: Dual choice system dengan pilihan utama dan cadangan
- Data Orang Tua: Informasi lengkap ayah dan ibu termasuk pekerjaan dan alamat
- Validasi Real-time: Validasi input saat pengguna mengetik
- Format Validation: NISN (10 digit), NIK/KK (16 digit), nomor HP Indonesia
- Age Validation: Validasi umur 13-20 tahun
- Auto-Save: Penyimpanan otomatis data form di localStorage
- Form Recovery: Pemulihan data form jika browser ditutup secara tidak sengaja
- Responsive Design: Optimal di desktop, tablet, dan mobile
- Progressive Enhancement: Bekerja bahkan tanpa JavaScript
- Loading States: Indikator loading dan feedback visual
- Success Confirmation: Konfirmasi pendaftaran dengan nomor registrasi
- Error Handling: Pesan error yang jelas dan helpful
- Google Apps Script: Integrasi dengan Google Sheets untuk penyimpanan data
- Duplicate Prevention: Sistem pencegahan pendaftaran ganda
- Registration Number: Generate nomor registrasi otomatis (format: 26XXXX)
formulir/
βββ index.html # File HTML utama
βββ script/ # Folder JavaScript modules
β βββ config.js # Konfigurasi aplikasi & konstanta
β βββ main.js # Entry point & controller utama
β βββ form-handler.js # Handler untuk event form
β βββ validation.js # Modul validasi form
β βββ storage.js # Manajemen localStorage
β βββ modals.js # Sistem modal & dialog
β βββ appscript.js # Google Apps Script integration
βββ style/ # Folder CSS modular
β βββ main.css # CSS utama (import semua modul)
β βββ base.css # Reset & base styles
β βββ layout.css # Layout & grid system
β βββ forms.css # Styling komponen form
β βββ header-footer.css # Header & footer styles
β βββ responsive.css # Media queries responsif
β βββ utilities.css # Utility classes
β βββ README.md # Dokumentasi CSS
# Clone atau download project
git clone [repository-url]
cd formulir
# Buka dengan web server lokal (opsional)
python -m http.server 8000
# atau
npx serve .Jika ingin menggunakan integrasi Google Apps Script:
-
Buat Google Apps Script Project:
- Buka script.google.com
- Buat project baru
- Copy code dari
script/appscript.js
-
Setup Google Sheets:
- Buat Google Sheets untuk menyimpan data
- Setup header kolom sesuai dengan field form
-
Deploy Web App:
- Deploy sebagai web app
- Set permission "Anyone"
- Copy URL dan update di
script/config.js
const PPDB_CONFIG = {
// Ganti dengan URL Google Apps Script Anda
SCRIPT_URL: "https://script.google.com/macros/s/YOUR_SCRIPT_ID/exec",
// Kustomisasi validation rules
VALIDATION: {
MIN_AGE: 13,
MAX_AGE: 20,
// ... other settings
},
};<select id="kompetensi1" name="kompetensi1" required>
<option value="Farmasi Klinis & Komunitas">Farmasi Klinis & Komunitas</option>
<option value="Teknik Komputer dan Jaringan">
Teknik Komputer dan Jaringan
</option>
<!-- Tambah opsi sesuai jurusan sekolah -->
</select>File: style/base.css
:root {
--primary-color: #2563eb; /* Biru utama */
--primary-light: #3b82f6; /* Biru terang */
--success-color: #10b981; /* Hijau success */
--error-color: #ef4444; /* Merah error */
--warning-color: #f59e0b; /* Kuning warning */
}Font utama menggunakan Inter dari Google Fonts dengan fallback ke system fonts.
- Mobile: < 768px
- Tablet: 768px - 1024px
- Desktop: > 1024px
{
"namaLengkap": "string",
"jenisKelamin": "string",
"tempatLahir": "string",
"tanggalLahir": "string", // Format: DD/MM/YYYY
"agama": "string",
"nisn": "string", // 10 digits
"nik": "string", // 16 digits
"nomorKK": "string", // 16 digits
"nomorHP": "string", // Format: 628xxxxxxxxx
"alamatEmail": "string",
"kompetensi1": "string",
"kompetensi2": "string",
"namaAyah": "string",
"pekerjaanAyah": "string",
"namaIbu": "string",
"pekerjaanIbu": "string",
"alamatOrangTua": "string"
}// Success Response
{
"status": "success",
"message": "Data berhasil disimpan",
"registrationNumber": "26XXXX"
}
// Error Response
{
"status": "error",
"message": "Error description"
}- NISN: Exactly 10 digits
- NIK/No.KK: Exactly 16 digits
- Phone: Format 628xxxxxxxxx (8-10 digits after 628)
- Email: Valid email format
- Age: 13-20 years old
- Birth Date: Between Jan 1, 2000 and today
- Form Validation: Coba input data invalid di setiap field
- Auto-Save: Refresh halaman dan cek data tersimpan
- Responsive: Test di berbagai ukuran layar
- Duplicate Prevention: Coba submit form yang sama 2x
- Network Error: Test dengan koneksi internet terputus
- Cek console browser untuk error JavaScript
- Pastikan semua field required telah diisi
- Verify format input sesuai validasi
- Cek URL Google Apps Script di
config.js - Verify Web App sudah di-deploy dengan permission "Anyone"
- Check quota limit Google Apps Script
- Pastikan semua file CSS ada di folder
style/ - Cek import statements di
main.css - Verify web server serve static files dengan benar
- Cek localStorage support di browser
- Verify tidak ada error di console
- Test dengan private/incognito mode
- Modular JavaScript: Setiap functionality dalam module terpisah
- Event-Driven: Menggunakan event listeners untuk interaksi
- Progressive Enhancement: Fallback untuk browser yang tidak support JavaScript
- Mobile-First: CSS ditulis dengan pendekatan mobile-first
- CSS Minification: Bisa di-minify untuk production
- JavaScript Bundling: Modules bisa di-bundle jika diperlukan
- Image Optimization: Menggunakan SVG icons via Font Awesome
- Lazy Loading: Auto-save menggunakan debouncing
- Input Sanitization: Validasi di frontend dan backend
- XSS Prevention: Escape user input saat display
- CSRF Protection: Google Apps Script provides built-in protection
- Created by: UTDI (Universitas Teknologi Digital Indonesia)
- GitHub: Catur Setyono
- Institution: SMK Muhammadiyah 1 Prambanan Klaten
Project ini dibuat untuk keperluan edukasi dan dapat digunakan secara bebas dengan tetap mencantumkan credit kepada pembuat asli.
- Testing: Selalu test di multiple browser dan device
- Validation: Implementasi validasi di frontend DAN backend
- Error Handling: Berikan pesan error yang jelas dan actionable
- Performance: Monitor dan optimize loading time
- Security: Jangan simpan data sensitif di localStorage
- Internet Connection: Pastikan koneksi stabil saat submit
- Browser Support: Gunakan browser modern (Chrome, Firefox, Safari, Edge)
- Data Accuracy: Double-check data sebelum submit
- Mobile Usage: Form fully responsive untuk penggunaan mobile
π§ Contact: Untuk pertanyaan atau support, silahkan hubungi tim pengembang melalui repository GitHub atau website UTDI.