# CV Personal Website

Laman web CV peribadi dengan sistem admin untuk pengurusan kandungan dan fungsi export ke PDF.

## Ciri-ciri

- ✅ Reka bentuk moden & minimalis
- ✅ Susun atur 2 kolum (Profil kiri, Kandungan kanan)
- ✅ Sistem login admin dengan PHP session
- ✅ CRUD lengkap untuk semua modul:
  - Tentang Saya (dengan upload gambar profil)
  - Pengalaman
  - Pendidikan
  - Inovasi
  - Kemahiran
- ✅ Export ke PDF (A4 format)
- ✅ Responsive design (desktop & tablet)
- ✅ Secure (prepared statements, password hashing)

## Keperluan Sistem

- PHP 7.4 atau lebih tinggi
- MySQL 5.7 atau lebih tinggi
- Apache web server (XAMPP/MAMP/WAMP)
- Composer (untuk install dompdf library)

## Pemasangan

### 1. Clone atau Copy Projek

Pastikan semua fail berada dalam folder `htdocs/cv` (untuk XAMPP).

### 2. Setup Database

1. Buka phpMyAdmin (http://localhost/phpmyadmin)
2. Import fail `database/schema.sql` untuk membuat database dan jadual
3. (Pilihan) Import `database/sample_data.sql` untuk data contoh

Atau jalankan melalui command line:
```bash
mysql -u root -p < database/schema.sql
mysql -u root -p < database/sample_data.sql
```

### 3. Konfigurasi Database

Edit fail `includes/config.php` dan sesuaikan maklumat database:
```php
define('DB_HOST', 'localhost');
define('DB_NAME', 'cv_db');
define('DB_USER', 'root');
define('DB_PASS', ''); // Masukkan password MySQL anda
```

### 4. Install PDF Library (dompdf)

Jalankan command berikut dalam folder projek:
```bash
cd /Applications/XAMPP/xamppfiles/htdocs/cv
composer require dompdf/dompdf
```

Atau jika tiada Composer, download manual dari:
https://github.com/dompdf/dompdf

### 5. Buat Folder Upload

Pastikan folder untuk upload gambar wujud dan boleh ditulis:
```bash
mkdir -p assets/images/uploads
chmod 755 assets/images/uploads
```

### 6. Akses Laman Web

- **CV Frontend**: http://localhost/cv/
- **Admin Login**: http://localhost/cv/admin/login.php

### 7. Login Admin

**Default credentials:**
- Username: `admin`
- Password: `admin123`

⚠️ **PENTING**: Tukar password selepas login pertama kali!

## Struktur Fail

```
/cv
 ├── index.php                 # Halaman utama CV
 ├── assets/
 │   ├── css/
 │   │   ├── style.css        # Styling utama
 │   │   └── admin.css        # Styling admin
 │   ├── js/
 │   │   └── admin.js         # JavaScript admin
 │   └── images/
 │       └── uploads/          # Folder untuk gambar profil
 ├── admin/
 │   ├── login.php            # Halaman login
 │   ├── logout.php           # Logout handler
 │   ├── dashboard.php        # Dashboard admin
 │   ├── actions/             # Action handlers untuk CRUD
 │   │   ├── about_action.php
 │   │   ├── experience_action.php
 │   │   ├── education_action.php
 │   │   ├── innovation_action.php
 │   │   └── skill_action.php
 │   └── tabs/                # Tab content untuk dashboard
 │       ├── about_tab.php
 │       ├── experience_tab.php
 │       ├── education_tab.php
 │       ├── innovation_tab.php
 │       └── skills_tab.php
 ├── includes/
 │   ├── config.php           # Konfigurasi
 │   ├── db.php               # Database connection
 │   └── auth.php             # Authentication functions
 ├── export/
 │   └── pdf.php              # PDF export handler
 ├── database/
 │   ├── schema.sql           # Database schema
 │   └── sample_data.sql      # Data contoh
 └── README.md                # Dokumentasi ini
```

## Penggunaan

### Mengemaskini Kandungan CV

1. Log masuk ke admin panel: http://localhost/cv/admin/login.php
2. Pilih tab yang ingin dikemaskini (Tentang Saya, Pengalaman, dll)
3. Isi borang dan klik "Kemaskini" atau "Tambah"
4. Untuk edit item sedia ada, klik butang "Edit"
5. Untuk padam, klik butang "Padam" (akan ada pengesahan)

### Export ke PDF

1. Pergi ke halaman utama CV: http://localhost/cv/
2. Klik butang "Export to PDF"
3. PDF akan dimuat turun atau dibuka dalam browser

## Keselamatan

- ✅ Password hashing menggunakan `password_hash()`
- ✅ Prepared statements (PDO) untuk mencegah SQL injection
- ✅ Session management dengan timeout
- ✅ File upload validation
- ✅ Input sanitization dan output escaping

## Troubleshooting

### PDF tidak berfungsi
- Pastikan dompdf library telah diinstall
- Semak folder `vendor/` wujud
- Pastikan PHP extension `gd` dan `mbstring` enabled

### Gambar tidak boleh upload
- Semak folder `assets/images/uploads/` wujud
- Semak permission folder (chmod 755)
- Semak `MAX_FILE_SIZE` dalam `config.php`

### Database connection error
- Semak maklumat database dalam `config.php`
- Pastikan MySQL service berjalan
- Semak database `cv_db` telah dibuat

## Teknologi Digunakan

- PHP 7.4 (Native, tanpa framework)
- MySQL
- HTML5, CSS3
- JavaScript (Vanilla)
- dompdf (untuk PDF export)

## Lesen

Projek ini adalah untuk kegunaan peribadi.

## Sokongan

Jika ada masalah atau soalan, sila semak dokumentasi atau buat issue dalam repository.

---

**Dibangunkan dengan ❤️ menggunakan PHP Native**

