Instalasi Laravel 12 + Breeze Inertia React TS

Instalasi Laravel 12 + Breeze Inertia React TypeScript

Lesson Overview

Estimasi Waktu:
- Pemula: 45-60 menit
- Intermediate: 25-35 menit
- Advanced: 15-20 menit

Prasyarat: PHP 8.2+, Composer, Node.js 18+, MySQL, Git
Output: Project Laravel + React yang bisa login/register

Di lesson ini, kita akan setup project HRIS dari nol hingga siap development. Ini adalah lesson praktik pertama - pastikan Anda sudah menyiapkan software dari checklist di Lesson 1! Bayangkan proses instalasi ini seperti membangun fondasi rumah - jika fondasinya kuat dan benar, seluruh bangunan di atasnya akan kokoh.

Laravel 12 adalah framework PHP paling populer yang akan menjadi "backbone" aplikasi HRIS kita. Dengan Composer, kita bisa mendownload Laravel beserta ribuan package pendukung dalam satu command. Breeze adalah "starter kit" yang menyediakan authentication siap pakai - artinya login, register, forgot password sudah jadi tanpa perlu coding dari nol.

Stack yang kita pilih adalah Inertia.js + React + TypeScript. Inertia memungkinkan kita membuat SPA (Single Page Application) tanpa perlu membuat API terpisah. React memberikan UI yang interaktif dan reusable. TypeScript menambahkan type safety yang mencegah banyak bug sebelum runtime.

Estimasi waktu bervariasi tergantung level Anda (lihat Overview di atas) dan kecepatan internet saat download dependencies. Jangan khawatir jika ada error - di akhir lesson ada tabel troubleshooting yang membahas error-error umum beserta solusinya.

Apa itu Instalasi Laravel + Breeze?

Bayangkan Anda ingin membangun rumah modern. Daripada membuat setiap komponen dari nol (batu bata, semen, rangka), Anda bisa membeli paket rumah prefabrikasi yang sudah termasuk fondasi, dinding, dan atap. Begitu juga dengan Laravel + Breeze!

Komponen Fungsi Analogi
Laravel 12 Framework PHP utama Fondasi dan struktur rumah
Breeze Authentication starter kit Pintu dengan kunci keamanan
Inertia.js Bridge backend-frontend Instalasi listrik
React + TypeScript UI interaktif + type safety Interior modern + quality control
Tailwind CSS Utility CSS framework Cat dan dekorasi
Yang Akan Dibuat (6 komponen):

No Komponen Fungsi
1 Laravel 12 Project Struktur folder dan backend
2 Breeze Authentication Login, Register, Forgot Password
3 Database MySQL Penyimpanan data aplikasi
4 Spatie Permission Role dan permission management
5 Frontend Packages Icons, Charts, Maps, Date utilities
6 Dev Server Laravel + Vite running

Diagram Alur Instalasi

Berikut adalah alur langkah-langkah instalasi yang akan kita lakukan:

ALUR INSTALASI:
STEP 1
Laravel
STEP 2
Breeze
STEP 3
Database
STEP 4
Migrate
STEP 5
Packages
STEP 6-7
Run & Test
Prasyarat - Pastikan sudah terinstall:

Buka terminal/command prompt dan jalankan command berikut untuk verifikasi:

Software Command Cek Hasil yang Diharapkan
PHP 8.2+ php -v PHP 8.2.x atau lebih tinggi
Composer 2.x composer -V Composer version 2.x.x
Node.js 18+ node -v v18.x.x atau lebih tinggi
NPM npm -v 9.x.x atau lebih tinggi
MySQL mysql --version mysql Ver 8.x.x

Jika ada yang belum terinstall: Kembali ke Lesson 1 dan ikuti panduan instalasi di bagian "Checklist Software".

Step 1: Buat Project Laravel

Langkah pertama adalah membuat project Laravel baru menggunakan Composer. Bayangkan Composer seperti "toko bangunan online" - Anda pesan Laravel, dan Composer akan mendownload semua material yang diperlukan (framework, library, dependencies) dalam satu paket lengkap.

Laravel 12 adalah versi terbaru yang membutuhkan PHP 8.2 atau lebih tinggi. Versi ini membawa banyak peningkatan performa dan fitur baru yang akan sangat berguna untuk aplikasi HRIS kita. Pastikan versi PHP Anda sudah sesuai sebelum melanjutkan.

Kita akan membuat project dengan nama HRISApp. Nama ini akan menjadi nama folder project sekaligus namespace dasar aplikasi. Pastikan Anda berada di direktori yang tepat sebelum menjalankan command - biasanya di folder htdocs (XAMPP), www (Laragon), atau direktori development Anda.

Proses instalasi akan memakan waktu 3-5 menit tergantung kecepatan internet. Selama proses berjalan, Composer akan menampilkan progress download dan instalasi package. Anda akan melihat banyak nama package yang terinstall - ini normal dan menunjukkan bahwa proses berjalan dengan benar.

Lokasi File: Terminal / Command Prompt
Aksi: [JALANKAN COMMAND]
Fungsi file ini: Membuat project Laravel 12 baru dengan nama HRISApp menggunakan Composer package manager.
Relasi dengan file lain: Akan membuat struktur folder project yang berisi app/, config/, database/, resources/, routes/, dan file-file konfigurasi.
Cara:
1. Buka terminal atau command prompt
2. Navigasi ke folder development Anda (misal: cd C:\xampp\htdocs)
3. Jalankan command Composer untuk membuat project
4. Tunggu proses selesai (3-5 menit)
# ========================================
# LANGKAH 1: BUAT PROJECT LARAVEL BARU
# ========================================

# LANGKAH 1.1: Download dan install Laravel 12
# - composer = package manager PHP
# - create-project = buat project baru dari package
# - laravel/laravel = nama package Laravel
# - HRISApp = nama folder project yang akan dibuat
composer create-project laravel/laravel HRISApp

# ========================================
# LANGKAH 2: MASUK KE FOLDER PROJECT
# ========================================

# LANGKAH 2.1: Pindah ke direktori project
# Semua command selanjutnya HARUS dijalankan dari folder ini
cd HRISApp

# ========================================
# LANGKAH 3: VERIFIKASI INSTALASI
# ========================================

# LANGKAH 3.1: Cek versi Laravel yang terinstall
# Hasil yang diharapkan: "Laravel Framework 12.x.x"
php artisan --version

Kode di atas mengimplementasikan proses pembuatan project Laravel baru. Beberapa poin penting yang perlu diperhatikan:

Penjelasan Command:

Command Fungsi
composer create-project Membuat project baru dari package Composer
laravel/laravel Nama package resmi Laravel di Packagist
HRISApp Nama folder project (bisa diganti sesuai kebutuhan)
php artisan --version Menampilkan versi Laravel untuk verifikasi
Penting - Jika Ada Error:

Error Solusi
composer: command not found Install Composer dari getcomposer.org
PHP version requirement Upgrade PHP ke versi 8.2+
Folder already exists Hapus folder HRISApp atau gunakan nama lain

Step 2: Install Laravel Breeze dengan React TypeScript

Laravel Breeze adalah authentication starter kit resmi dari Laravel yang menyediakan implementasi login, register, reset password, dan email verification dalam waktu singkat. Bayangkan Breeze seperti "paket furniture siap pakai" - daripada membuat meja, kursi, dan lemari sendiri, Anda beli paket yang sudah jadi dan tinggal pasang.

Yang membuat Breeze istimewa adalah tersedianya berbagai "stack" frontend. Anda bisa memilih antara Blade (PHP templating), Livewire (PHP + JavaScript), Vue, atau React sebagai frontend. Untuk kursus HRIS ini, kita memilih stack React dengan TypeScript karena memberikan pengalaman development yang paling modern.

TypeScript adalah "superset" dari JavaScript yang menambahkan static typing. Dengan TypeScript, kesalahan seperti typo nama variable atau salah tipe data akan terdeteksi SEBELUM kode dijalankan. Ini sangat membantu mengurangi bug dan meningkatkan produktivitas development.

Setelah instalasi Breeze selesai, Anda akan mendapatkan halaman Login, Register, Forgot Password, dan Dashboard yang sudah berfungsi. Semua halaman ini menggunakan React + TypeScript + Tailwind CSS, sehingga mudah untuk dikustomisasi sesuai kebutuhan aplikasi HRIS.

Lokasi File: Terminal (di dalam folder HRISApp)
Aksi: [JALANKAN COMMAND]
Fungsi file ini: Menginstall Laravel Breeze dengan stack React TypeScript dan semua dependencies frontend yang diperlukan.
Relasi dengan file lain: Akan membuat file-file di resources/js/Pages/, app/Http/Controllers/Auth/, routes/auth.php, dan mengkonfigurasi Vite.
Cara:
1. Pastikan terminal sudah berada di dalam folder HRISApp
2. Jalankan command composer untuk install Breeze package
3. Jalankan artisan command untuk setup React TypeScript
4. Jalankan npm install untuk download dependencies JavaScript
# ========================================
# LANGKAH 1: INSTALL BREEZE PACKAGE
# ========================================

# LANGKAH 1.1: Download Breeze dari Packagist
# - --dev = install sebagai development dependency
# - Artinya package ini tidak diperlukan di production
composer require laravel/breeze --dev

# ========================================
# LANGKAH 2: SETUP BREEZE REACT + TYPESCRIPT
# ========================================

# LANGKAH 2.1: Jalankan installer Breeze
# - react = gunakan React sebagai frontend
# - --typescript = aktifkan TypeScript untuk type safety
# Command ini akan:
# - Membuat halaman auth (Login, Register, dll)
# - Mengkonfigurasi Vite sebagai bundler
# - Setup Tailwind CSS
# - Install Inertia.js sebagai bridge
php artisan breeze:install react --typescript

# ========================================
# LANGKAH 3: INSTALL NPM DEPENDENCIES
# ========================================

# LANGKAH 3.1: Download semua package JavaScript
# Ini akan membuat folder node_modules dengan ribuan package
# Proses ini memakan waktu 2-5 menit tergantung internet
npm install

Kode di atas mengimplementasikan instalasi Breeze dengan stack React TypeScript. Proses ini akan menginstall banyak komponen sekaligus.

Apa yang Breeze Install?

Package Fungsi
Inertia.js v2 Bridge antara Laravel backend dan React frontend
React 18.2 Library UI untuk membangun komponen interaktif
TypeScript 5 Type checking untuk mendeteksi error sebelum runtime
Tailwind CSS 3.x Utility-first CSS framework untuk styling cepat
Vite 7 Build tool modern dengan hot module replacement
Auth Pages Halaman Login, Register, Forgot Password sudah jadi
Penting - Folder node_modules:

Setelah npm install selesai, folder node_modules akan berisi ribuan package JavaScript. Beberapa hal penting:

- Ukuran folder bisa mencapai 200-500MB - ini normal
- Folder ini TIDAK perlu di-commit ke Git (sudah ada di .gitignore)
- Jika folder hilang, cukup jalankan npm install lagi
- Jika ada error dependencies, hapus folder dan install ulang

Step 3: Setup Database

Sebelum aplikasi bisa menyimpan data, kita perlu membuat database MySQL. Bayangkan database seperti "lemari arsip digital" yang menyimpan semua data karyawan, absensi, gaji, dan informasi HRIS lainnya secara terstruktur dan mudah dicari.

Laravel menggunakan file .env untuk menyimpan konfigurasi database. Ini memungkinkan kita menggunakan database berbeda di development dan production tanpa mengubah kode. Konsep ini disebut "Environment Variables" - nilai yang berbeda-beda tergantung di mana aplikasi dijalankan.

Mengapa perlu database terpisah untuk development dan production? Karena di development kita bebas bereksperimen (hapus data, reset table), sedangkan di production data harus dijaga ketat. Dengan .env, kita cukup ganti nilai dan aplikasi otomatis terhubung ke database yang tepat.

3a. Buat Database MySQL

Ada dua cara untuk membuat database: via terminal MySQL atau melalui phpMyAdmin. Keduanya menghasilkan hasil yang sama - pilih yang paling nyaman untuk Anda.

Lokasi File: Terminal MySQL atau phpMyAdmin
Aksi: [JALANKAN COMMAND]
Fungsi file ini: Membuat database MySQL baru bernama hris_app untuk menyimpan semua data aplikasi HRIS.
Relasi dengan file lain: Database ini akan diakses oleh Laravel melalui konfigurasi di file .env. Semua Model Eloquent akan menggunakan database ini.
Cara:
1. Pastikan MySQL server sudah berjalan (cek XAMPP/Laragon control panel)
2. Pilih salah satu metode: terminal atau phpMyAdmin
3. Jalankan command/aksi untuk membuat database
4. Verifikasi database berhasil dibuat
# ========================================
# LANGKAH 1: BUAT DATABASE VIA TERMINAL
# ========================================

# LANGKAH 1.1: Buat database dengan nama hris_app
# - -u root = login sebagai user root
# - -p = prompt untuk password (kosongkan jika tidak ada password)
# - -e = execute SQL command langsung
mysql -u root -p -e "CREATE DATABASE hris_app"

# ========================================
# LANGKAH 2: ALTERNATIF VIA PHPMYADMIN
# ========================================

# LANGKAH 2.1: Buka browser dan akses phpMyAdmin
# URL: http://localhost/phpmyadmin

# LANGKAH 2.2: Klik "New" di sidebar kiri

# LANGKAH 2.3: Ketik "hris_app" di field Database name

# LANGKAH 2.4: Klik tombol "Create"

Kode di atas menunjukkan dua metode untuk membuat database. Pilih metode yang paling nyaman untuk Anda:

Perbandingan Metode:

Metode Kelebihan Kekurangan
Terminal Cepat, bisa di-script Perlu hafal command
phpMyAdmin Visual, mudah dipahami Lebih lambat

3b. Edit file .env

File .env adalah file konfigurasi environment Laravel. Bayangkan file ini seperti "kartu identitas aplikasi" yang berisi nama, alamat (URL), dan kredensial untuk mengakses berbagai layanan.

File ini tidak di-commit ke Git karena berisi credential sensitif seperti password database. Setiap developer bisa memiliki file .env berbeda sesuai environment masing-masing. Laravel menyediakan file .env.example sebagai template.

Lokasi File: HRISApp/.env
Aksi: [UPDATE - GANTI SELURUH]
Fungsi file ini: Menyimpan konfigurasi environment aplikasi seperti nama app, URL, database credentials, dan driver untuk session/cache/queue.
Relasi dengan file lain: Dibaca oleh config/*.php untuk mendapatkan nilai konfigurasi. Helper env() digunakan untuk mengakses nilai dari file ini.
Cara:
1. Buka file .env di folder HRISApp dengan text editor
2. HAPUS SELURUH isi file (Ctrl+A, Delete)
3. Copy-paste SELURUH konfigurasi di bawah ini
4. Simpan file (Ctrl+S)
# ========================================
# KONFIGURASI APLIKASI
# ========================================

# LANGKAH 1: Nama dan environment aplikasi
APP_NAME="HRIS Modern"           # Nama yang tampil di browser tab
APP_ENV=local                     # Environment: local, staging, production
APP_KEY=                          # Akan di-generate otomatis
APP_DEBUG=true                    # True untuk development (tampilkan error detail)
APP_URL=http://localhost:8001     # URL aplikasi (port 8001 agar tidak bentrok)

# ========================================
# LOKALISASI
# ========================================

# LANGKAH 2: Setting bahasa dan locale
APP_LOCALE=id                     # Bahasa default: Indonesia
APP_FALLBACK_LOCALE=en            # Bahasa fallback jika terjemahan tidak ada
APP_FAKER_LOCALE=id_ID            # Faker generate data dummy Indonesia

# ========================================
# DATABASE
# ========================================

# LANGKAH 3: Konfigurasi koneksi database
DB_CONNECTION=mysql               # Driver database (mysql, pgsql, sqlite)
DB_HOST=127.0.0.1                 # Host database (localhost)
DB_PORT=3306                      # Port MySQL default
DB_DATABASE=hris_app              # Nama database yang sudah dibuat
DB_USERNAME=root                  # Username MySQL
DB_PASSWORD=                      # Password MySQL (kosong untuk XAMPP default)

# ========================================
# SESSION & CACHE
# ========================================

# LANGKAH 4: Driver penyimpanan session dan cache
SESSION_DRIVER=database           # Session disimpan di database
SESSION_LIFETIME=120              # Session expired setelah 120 menit

QUEUE_CONNECTION=database         # Queue job disimpan di database
CACHE_STORE=database              # Cache disimpan di database

# ========================================
# VITE
# ========================================

# LANGKAH 5: Konfigurasi untuk bundler Vite
VITE_APP_NAME="${APP_NAME}"       # Nama app untuk JavaScript

Kode di atas adalah konfigurasi lengkap untuk file .env. Perhatikan bahwa APP_KEY dibiarkan kosong - kita akan generate nilainya di step berikutnya.

Penjelasan Konfigurasi Penting:

Konfigurasi Fungsi
APP_URL=localhost:8001 Port 8001 agar tidak bentrok dengan aplikasi lain
DB_PASSWORD= Kosongkan jika MySQL tanpa password (default XAMPP)
APP_FAKER_LOCALE=id_ID Data dummy menggunakan nama/alamat Indonesia
SESSION_DRIVER=database Session disimpan di database (lebih scalable)
Penting - Keamanan File .env:

- File .env berisi credential sensitif - JANGAN di-commit ke Git
- File ini sudah otomatis ditambahkan ke .gitignore oleh Laravel
- Untuk production, gunakan password database yang kuat
- Jangan share file .env ke orang lain

Step 4: Generate Key dan Migrate

Setelah konfigurasi .env selesai, ada dua hal yang harus dilakukan: generate application key untuk enkripsi dan menjalankan migration untuk membuat tabel-tabel database. Bayangkan application key seperti "kunci brankas" yang digunakan untuk mengamankan data sensitif.

Application key adalah string random 32 karakter yang digunakan Laravel untuk mengenkripsi session, cookie, dan data sensitif lainnya. Tanpa key ini, aplikasi tidak bisa berjalan dengan aman. Setiap instalasi Laravel WAJIB memiliki key unik.

Migration adalah cara Laravel mengelola skema database. Daripada membuat tabel secara manual di phpMyAdmin, kita membuat file migration PHP yang mendefinisikan struktur tabel. Ini seperti "blueprint rumah" - setiap developer menggunakan blueprint yang sama sehingga hasilnya konsisten.

Keuntungan menggunakan migration: mudah rollback jika ada kesalahan, bisa di-track perubahannya di Git, dan otomatis sinkron antar developer. Semua perubahan database tercatat dalam kode, bukan dikerjakan manual.

Lokasi File: Terminal (di dalam folder HRISApp)
Aksi: [JALANKAN COMMAND]
Fungsi file ini: Generate application key untuk enkripsi dan menjalankan migration untuk membuat tabel database.
Relasi dengan file lain: key:generate akan mengisi APP_KEY di .env. migrate akan membaca file di database/migrations/ dan membuat tabel sesuai definisi.
Cara:
1. Pastikan terminal berada di folder HRISApp
2. Jalankan command key:generate
3. Jalankan command migrate
4. Verifikasi tabel terbuat di phpMyAdmin
# ========================================
# LANGKAH 1: GENERATE APPLICATION KEY
# ========================================

# LANGKAH 1.1: Generate random 32-character key
# Key ini akan otomatis diisi ke APP_KEY di file .env
# Digunakan untuk enkripsi session, cookie, password reset, dll
php artisan key:generate

# ========================================
# LANGKAH 2: JALANKAN MIGRATION
# ========================================

# LANGKAH 2.1: Buat tabel-tabel database
# Migration membaca file di database/migrations/
# dan membuat tabel sesuai definisi di masing-masing file
php artisan migrate

Kode di atas menjalankan dua command penting. Setelah migrate selesai, database hris_app akan terisi tabel-tabel default Laravel.

Tabel yang Terbuat Setelah Migrate:

Tabel Fungsi
users Menyimpan data user (nama, email, password)
sessions Menyimpan session user yang sedang login
cache Menyimpan data cache aplikasi
jobs Menyimpan queue job (tugas background)
password_reset_tokens Menyimpan token untuk reset password
Penting - Jika Migration Gagal:

Error Solusi
SQLSTATE[HY000] [1049] Database belum dibuat - buat dulu di Step 3a
SQLSTATE[HY000] [2002] MySQL belum berjalan - start di XAMPP control panel
Access denied Username/password salah di .env


Step 5: Install Package Tambahan

Setelah setup dasar selesai, kita perlu menambahkan beberapa package yang akan digunakan di fitur-fitur HRIS. Package ini tidak wajib diinstall sekarang - Anda bisa install nanti saat dibutuhkan. Tapi lebih baik install sekarang agar tidak perlu bolak-balik.

5a. Backend Packages

Lokasi: Terminal (di dalam folder HRISApp)
Aksi: [JALANKAN COMMAND]
Fungsi: Install Spatie Permission untuk role & permission management.
Cara: Jalankan command berikut satu per satu:
# ========== INSTALL SPATIE PERMISSION ==========
# Package untuk mengelola role (Admin, HR, Employee) dan permission
composer require spatie/laravel-permission

# ========== PUBLISH CONFIG ==========
# Copy file konfigurasi ke folder config/
php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider"

# ========== MIGRATE PERMISSION TABLES ==========
# Buat tabel roles, permissions, model_has_roles, dll
php artisan migrate
Apa itu Spatie Permission?

Spatie Permission adalah package untuk mengelola siapa boleh ngapain di aplikasi:

Role Kelompok user: Admin, HR, Manager, Employee
Permission Aksi yang boleh dilakukan: create-employee, approve-leave, view-payroll

Contoh: Role "HR" punya permission "create-employee" dan "approve-leave", tapi tidak punya "view-payroll".

5b. Frontend Packages

Lokasi: Terminal (di dalam folder HRISApp)
Aksi: [JALANKAN COMMAND]
Fungsi: Install icons, date utilities, charts, dan maps untuk UI.
Cara: Jalankan command berikut (bisa sekaligus atau satu per satu):
# ========== ICONS ==========
# Lucide - library icon modern (pengganti Font Awesome)
# Digunakan untuk icon di button, menu, dll
npm install lucide-react

# ========== DATE UTILITIES ==========
# date-fns - library untuk format dan manipulasi tanggal
# Digunakan untuk format "1 Januari 2025", "2 hari yang lalu", dll
npm install date-fns

# ========== CHARTS ==========
# Recharts - library chart berbasis React
# Digunakan untuk grafik di dashboard dan reports
npm install recharts

# ========== MAPS ==========
# Leaflet - library peta interaktif
# Digunakan untuk geofencing (validasi lokasi absensi)
npm install leaflet react-leaflet @types/leaflet
Kapan Package Ini Digunakan?

Package Digunakan di Section
lucide-react Section 4+ (semua halaman)
date-fns Section 6+ (Employee, Attendance)
recharts Section 4 (Dashboard), Section 13 (Reports)
leaflet Section 8 (Attendance Geofencing)

Step 6: Jalankan Development Server

Apa itu Vite dan Mengapa Butuh 2 Terminal?

Vite adalah build tool modern yang menggantikan Webpack. Fungsinya:
- Hot Module Replacement (HMR) - Saat Anda edit file React, browser otomatis refresh tanpa perlu manual
- Fast Build - Compile TypeScript dan Tailwind CSS secara real-time
- Development Server - Serve file JavaScript/CSS ke browser

Mengapa 2 Terminal?
- Terminal 1 (Laravel) - Menjalankan PHP server untuk handle request HTTP dan API
- Terminal 2 (Vite) - Menjalankan JavaScript bundler untuk compile React + TypeScript

Keduanya harus berjalan bersamaan agar aplikasi bekerja dengan benar!

Buka 2 terminal terpisah:

Terminal 1 - Laravel Server
php artisan serve --port=8001
Terminal 2 - Vite (Hot Reload)
npm run dev
PENTING - JANGAN TUTUP TERMINAL!

Kedua terminal HARUS tetap berjalan selama development:

Jika Terminal 1 ditutup Website tidak bisa diakses (error connection refused)
Jika Terminal 2 ditutup Styling tidak muncul (error Vite manifest not found)

Tips: Gunakan terminal split/tab di VS Code agar mudah dipantau!

Step 7: Verifikasi Instalasi

Checklist Verifikasi:

1 Buka browser: http://localhost:8001
2 Klik Register untuk buat akun baru
3 Setelah register, Anda akan masuk ke Dashboard
4 Jika melihat Dashboard = Instalasi berhasil!

FAQ - Pertanyaan yang Sering Diajukan

Q: Apakah harus menggunakan XAMPP?
A: Tidak harus. Anda bisa menggunakan Laragon (Windows), MAMP (Mac), atau install PHP + MySQL secara terpisah. Yang penting PHP 8.2+, Composer, Node.js, dan MySQL sudah terinstall dan bisa diakses dari terminal.

Q: Apakah bisa menggunakan PostgreSQL atau SQLite?
A: Bisa, tapi kursus ini menggunakan MySQL. Jika ingin menggunakan database lain, ubah DB_CONNECTION di file .env dan pastikan driver PHP-nya sudah terinstall. Beberapa query mungkin perlu disesuaikan.

Q: Kenapa pakai port 8001, bukan 8000?
A: Port 8000 sering sudah dipakai oleh aplikasi lain. Menggunakan 8001 menghindari konflik. Anda bisa menggunakan port apapun yang tersedia dengan php artisan serve --port=XXXX.

Q: Apakah harus menggunakan VS Code?
A: Tidak harus, tapi sangat direkomendasikan. VS Code memiliki extension yang sangat membantu untuk Laravel, React, dan TypeScript. Alternatif lain: PHPStorm (berbayar), Sublime Text, atau Atom.

Q: Berapa lama proses instalasi?
A: Tergantung kecepatan internet. Estimasi:
- composer create-project: 3-5 menit
- npm install: 2-5 menit
- Total dengan konfigurasi: 15-25 menit

Q: Apakah perlu install Spatie Permission sekarang?
A: Ya, kita install sekarang agar tidak perlu mengulang migration nanti. Package ini akan digunakan di Section 3 (Authentication) untuk membuat sistem multi-role.

Troubleshooting

Error Solusi
SQLSTATE[HY000] [1049] Unknown database Buat database: mysql -u root -e "CREATE DATABASE hris_app"
Vite manifest not found Pastikan npm run dev berjalan di terminal terpisah
Class not found Jalankan composer dump-autoload
Port 8000 sudah dipakai Gunakan port lain: php artisan serve --port=8001
npm ERR! ERESOLVE Hapus node_modules dan install ulang (lihat command di bawah)
php artisan: command not found Pastikan terminal berada di dalam folder project HRISApp
SQLSTATE[HY000] [2002] Connection refused MySQL belum running. Start MySQL dari XAMPP/Laragon control panel
Hapus node_modules - Command Berbeda per OS:

Windows (CMD) rmdir /s /q node_modules lalu npm install
Windows (PowerShell) Remove-Item -Recurse -Force node_modules lalu npm install
Mac/Linux rm -rf node_modules && npm install

Struktur Folder Setelah Instalasi

Lokasi: HRISApp/
Fungsi: Struktur folder project Laravel + Inertia + React
HRISApp/
├── app/                    # Backend Laravel
│   ├── Http/
│   │   ├── Controllers/    # Controller files
│   │   └── Middleware/     # HandleInertiaRequests.php
│   └── Models/             # Eloquent models
├── database/
│   ├── migrations/         # Database migrations
│   └── seeders/            # Data seeders
├── resources/
│   ├── js/                 # Frontend React
│   │   ├── Components/     # Reusable components
│   │   ├── Layouts/        # Layout components
│   │   ├── Pages/          # Page components (Inertia)
│   │   └── app.tsx         # React entry point
│   └── css/
│       └── app.css         # Tailwind CSS
├── routes/
│   └── web.php             # Laravel routes
├── .env                    # Environment config
├── composer.json           # PHP dependencies
├── package.json            # NPM dependencies
├── tailwind.config.js      # Tailwind config
├── tsconfig.json           # TypeScript config
└── vite.config.js          # Vite config

Checkpoint - Verifikasi Instalasi

Sebelum melanjutkan ke lesson berikutnya, pastikan semua komponen terinstall dengan benar. Berikut adalah langkah-langkah verifikasi yang harus Anda lakukan:

Langkah 1: Verifikasi Laravel Server
Buka terminal di folder project dan jalankan php artisan serve --port=8001. Server harus berjalan tanpa error. Buka http://localhost:8001 di browser - homepage Laravel harus muncul.

Langkah 2: Verifikasi Vite Dev Server
Buka terminal kedua dan jalankan npm run dev. Vite harus running dengan output "VITE ready". Coba edit file React (misal tambah spasi), browser harus auto-refresh (hot reload).

Langkah 3: Verifikasi Database
Buka phpMyAdmin dan cek database hris_app. Harus ada tabel: users, sessions, cache, password_reset_tokens, jobs, roles, permissions, model_has_roles, model_has_permissions, role_has_permissions.

Langkah 4: Verifikasi Authentication
Klik "Register" di homepage, isi form, submit. Anda harus redirect ke Dashboard. Logout, lalu login kembali dengan kredensial yang sama - harus berhasil masuk.

Langkah 5: Verifikasi Spatie Permission
Jalankan php artisan tinker lalu ketik Spatie\Permission\Models\Role::all(). Harus return empty collection (akan diisi di Section Authentication). Ketik exit untuk keluar tinker.

Langkah 6: Verifikasi Frontend Packages
Buka file package.json dan pastikan dependencies berikut ada: lucide-react, date-fns, recharts, leaflet, react-leaflet. Jika ada yang missing, jalankan npm install [package-name].
Hasil Verifikasi yang Diharapkan:

1. Laravel server berjalan tanpa error di port 8001
2. Vite dev server menampilkan "VITE ready" dengan hot reload aktif
3. Database hris_app memiliki 10+ tabel (termasuk Spatie tables)
4. Register dan login berfungsi dengan redirect ke Dashboard
5. Spatie Permission terinstall (tinker bisa akses Role model)
6. Semua frontend packages ada di package.json
Jika Ada Error:

- Laravel error: Cek log di storage/logs/laravel.log
- Vite error: Hapus node_modules dan install ulang
- Database error: Pastikan MySQL running dan credentials di .env benar
- Auth error: Jalankan php artisan migrate:fresh untuk reset

Ringkasan

Yang Sudah Dilakukan:

1. Laravel 12 - Project baru dengan Composer
2. Breeze - Auth starter kit dengan React 18.2 + TypeScript 5
3. Database - MySQL setup dan migration
4. Spatie Permission - Role & permission management
5. Frontend Packages - Lucide icons, date-fns, Recharts, Leaflet
6. Dev Server - Laravel + Vite 7 running

Checklist Instalasi:
- [v] Laravel 12 terinstall
- [v] Breeze dengan React TypeScript
- [v] Database hris_app terbuat
- [v] Migration berhasil
- [v] Bisa register dan login
- [v] Dashboard muncul setelah login
Tips Development:

- Selalu jalankan 2 terminal (Laravel + Vite)
- Gunakan php artisan migrate:fresh --seed untuk reset database
- Gunakan npm run build untuk production build
Selanjutnya:
Di lesson berikutnya, kita akan Konfigurasi TypeScript & Tailwind CSS - setup path aliases dan custom theme untuk HRIS.