Sistem presensi karyawan berbasis Laravel dengan QR Code, GPS tracking, dan laporan absensi lengkap.
- Absensi QR Code - Absen masuk dan absen pulang dengan scan QR Code
- GPS Tracking - Validasi lokasi karyawan dengan radius kantor
- Multi-Role System - Admin, Resepsionis, dan Karyawan
- Laporan Excel - Ekspor laporan absensi bulanan
- Notifikasi Otomatis - Reminder checkout otomatis 10 menit sebelum dan saat jam pulang
- Kalender Riwayat - Visualisasi kehadiran bulanan
- Pengaturan Fleksibel - Konfigurasi jam kerja dan potongan
- Backend: Laravel 11
- Frontend: Blade Templates + Tailwind CSS + Alpine.js
- Database: MySQL
- Notifications: Firebase Cloud Messaging
- PHP >= 8.2
- Composer
- MySQL >= 8.0
- Node.js >= 18.x
- NPM atau Yarn
git clone https://github.com/yourusername/absence-backend.git
cd absence-backend# Install PHP dependencies
composer install
# Install JavaScript dependencies
npm install# Copy environment file
copy .env.example .env
# Generate application key
php artisan key:generateEdit file .env:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel_absence_backend
DB_USERNAME=root
DB_PASSWORD=your_password_here- Download
firebase-auth.jsondari Firebase Console - Letakkan di folder
storage/app/firebase-auth.json - Update
.env:
FIREBASE_DATABASE_URL=https://your-project.firebaseio.com
FIREBASE_CREDENTIALS=storage/app/firebase-auth.jsonphp artisan migrate:fresh --seedDefault Login Credentials:
- Admin: admin@gmail.com / password
- Resepsionis: resepsionis@gmail.com / password
- Karyawan: user@gmail.com / password
npm run buildphp artisan storage:linkphp artisan serveAkses: http://localhost:8000
Untuk mengaktifkan reminder checkout otomatis:
# Windows - Buat task scheduler yang menjalankan setiap menit:
# Buat file run-scheduler.bat dengan isi:
# cd d:\KP\Absence-Backend && php artisan schedule:run
# Atau jalankan manual untuk testing:
php artisan schedule:runLihat panduan lengkap: NOTIFIKASI_CHECKOUT.md
- Copy
.env.productionke.envdi server - Update semua konfigurasi (database, APP_URL, dll)
- Set APP_DEBUG=false dan APP_ENV=production
- Setup HTTPS/SSL Certificate
- Run optimization:
composer install --optimize-autoloader --no-dev
php artisan config:cache
php artisan route:cache
php artisan view:cache- Set proper permissions:
chmod -R 775 storage bootstrap/cache
chown -R www-data:www-data storage bootstrap/cache- Rate Limiting - Login dibatasi 5 percobaan per menit
- CSRF Protection - Aktif di semua form
- Password Hashing - BCrypt dengan 12 rounds
- SQL Injection Protection - Eloquent ORM dengan prepared statements
- Input Validation - Validasi ketat di semua input
PENTING saat production:
- Set
APP_DEBUG=false - Set
SESSION_SECURE_COOKIE=true(jika pakai HTTPS) - Gunakan database password yang kuat
- Setup HTTPS dengan SSL certificate
- Hapus atau amankan route
/fix-lateness
- Multi-role system (Admin, Resepsionis, Karyawan)
- Laravel Sanctum untuk API authentication
- Session-based auth untuk web
- QR Code harian yang di-generate resepsionis
- Validasi token dan tanggal
- GPS radius checking
- Auto-calculate keterlambatan
- Terlambat 1: 08:01 - 08:30 (Potongan GPH 25%)
- Terlambat 2: 08:31 - 09:00 (Potongan GPH 30%)
- Terlambat 3: 09:01 - 12:00 (Potongan GPH 35%)
- Setengah Hari: > 12:00 (Potongan GPH 100%)
- Threshold dan persentase potongan bisa diatur admin
- Filter berdasarkan tanggal dan nama
- Ekspor ke Excel dengan format lengkap
- Perhitungan otomatis potongan gaji
- Visualisasi calendar view
- Responsive design (Desktop to Mobile)
- Real-time attendance monitoring
- Interactive calendar
- Badge status berwarna
- Toast notifications
# Clear all cache
php artisan cache:clear
php artisan config:clear
php artisan route:clear
php artisan view:clear
# Recreate database
php artisan migrate:fresh --seed
# Build assets for production
npm run build
# Run tests (jika ada)
php artisan testtail -f storage/logs/laravel.logchmod -R 775 storage bootstrap/cachenpm run build
php artisan view:clearThis project is proprietary software. All rights reserved.
Developed for Kantor KASAU Sinar Samudera
© 2025 - All Rights Reserved