Versi: 2.0.1
Project ini bertujuan untuk menilai kinerja karyawan per-divisi dengan role admin, leader, dan user. Penilaian per karyawan diharapkan mampu meningkatkan kinerja dan efisiensi tugas.
- Overview
- Fitur Utama
- Arsitektur & Teknologi
- Persyaratan & Instalasi
- Struktur Proyek (Frontend)
- Variabel Lingkungan (ENV)
- Menjalankan Aplikasi (Development & Production)
- API (ringkasan endpoint yang umum digunakan)
- Komponen Utama & Penjelasan
- Panduan Penggunaan singkat
- Troubleshooting & Tips
- Contributing
- Changelog singkat
- Lisensi & Support
VPBI-KPI-TRACKER adalah aplikasi dashboard yang memudahkan monitoring dan penilaian KPI karyawan per-divisi. Sistem mendukung beberapa role (admin, leader, user) dan menampilkan visualisasi menggunakan grafik untuk analisis cepat.
- Multi-role: admin, leader, user
- Penilaian KPI per karyawan dan per divisi
- Dashboard interaktif (grafik garis & batang)
- Manajemen user dan divisi
- Authentication (mis. Clerk, JWT, atau sistem yang Anda pilih)
- Notifikasi (toast) untuk aksi CRUD
- Dark Mode (jika template mendukung)
Frontend
- React 19 + Vite
- Tailwind CSS v4
- Recharts (visualisasi)
- lucide-react (ikon)
- axios (http client)
- react-router-dom v7 (routing)
- react-hot-toast (notifikasi)
Backend
- (Backend tidak disertakan di repo ini) — gunakan Node.js + Express / NestJS / Laravel atau framework lain.
- Basis data: PostgreSQL / MySQL / MongoDB (pilih sesuai kebutuhan)
Prerequisites
- Node.js 18.x atau lebih baru
- npm atau yarn
Clone repository
git clone <REPO_URL>
cd vpbi-frontendInstall dependencies
npm install
# atau
yarn installScript penting (package.json)
dev-> jalankan Vite (development)build-> build untuk productionpreview-> preview hasil buildlint-> jalankan eslint
Contoh package.json (ringkasan):
- React, Vite, Tailwind, Recharts, axios, lucide-react, react-router-dom, dll.
vpbi-frontend/
├─ public/
├─ src/
│ ├─ assets/
│ ├─ api/ # Untuk menghubungkan api CRUD
│ ├─ components/ # Reusable components (Button, Modal, Table, dll)
│ ├─ context/ # menimpan semua Context
│ ├─ layouts/ # Layouts (MainLayout, AuthLayout)
│ ├─ pages/ # Halaman (Dashboard, Users, Divisions, KPI)
│ ├─ store/ # Context atau state management
│ ├─ utils/ # Helper functions
│ └─ main.jsx
├─ tailwind.config.js
├─ vite.config.js
└─ package.json
Catatan: struktur bisa menyesuaikan kebutuhan tim. Jika menggunakan Inertia + Laravel, tempatkan folder frontend di dalam project Laravel.
Buat file .env di root atau .env.local (tidak commit ke git). Contoh variabel:
VITE_API_URL= "https://example.com"
VITE_CLERK_PUBLISHABLE_KEY=wkwkwkwkwkwkkwkwkwwkwkk
Penamaan VITE_ diperlukan agar Vite mengekspos variabel ke browser.
Development
npm run dev
# atau
yarn devAkses di http://localhost:5173 (atau port Vite default).
Build untuk production
npm run build
npm run previewDeployment
- Frontend dapat dideploy ke Vercel, Netlify, atau S3 + CloudFront.
- Pastikan variabel environment pada hosting diatur sesuai.
Catatan: endpoint backend tergantung implementasi. Berikut contoh pola REST yang biasa digunakan.
Users
GET /user/api/all— list usersGET /user/api/:id— detail userPOST /user/api/register— create userPUT /user/update/:id— update userDELETE /user/delete/:id— delete user
Divisions
GET /divisi/api/allPOST /divisi/api/addPUT/divisi/api/update/:idDELETE /divisi/api/delete/:id
KPI / Scores
GET /matriksKpi/api/all— list KPI entriesGET /matriksKpi/api/:idPOST /matriksKpi/api/add— create matriksPUT /matriksKpi/api/update/:id— updateDELETE /matriksKpi/api/:delete/id— hapus matriks
Detail / Scores
GET /detailPenilaian/api/all— list KPI entriesGET /detailPenilaian/api/:idPOST /detailPenilaian/api/add— create penilaianPUT /detailPenilaian/api/update/:id— updateDELETE /detailPenilaian/api/:delete/id— hapus penilaian
Karyawan / User
GET /karyawan/api/all— list Karyawan entriesGET /karyawan/api/:idPOST /karyawan/api/add— create KaryawanPUT /karyawan/api/update/:id— updateDELETE /karyawan/api/delete/:id— hapus Karyawan
Penilaian / Score
GET /penilaianKpi/api/all— list Penilaian entriesGET /penilaianKpi/api/:idPOST /penilaianKpi/api/add— create PenilaianPUT /penilaianKpi/api/update/:id— updateDELETE /penilaianKpi/api/delete/:id— hapus Penilaian
**Notifikasi **
GET /notifikasi/api/:userId— list Notifikasi entriesPOST /notifikasi/api/createNotifikasi— create NotifikasiPUT /notifikasi/api/markAsRead/:id— update
Contoh header
Authorization: Bearer <token>
Content-Type: application/json
- Dashboard: menampilkan ringkasan KPI, grafik (Recharts), dan indikator performa.
- User Management: CRUD user, assign role.
- Division Management: CRUD divisi.
- KPI Management: Form input KPI, list dan nilai karyawan, filter by period/divisi.
- Auth & Guard: Private route untuk role tertentu (admin/leader).
- Toasts: feedback aksi (sukses/gagal).
- Admin membuat divisi dan menambahkan user.
- Leader mengisi penilaian KPI anggota divisinya.
- Dashboard menampilkan ringkasan dan tren performa.
- Gunakan filter periode (bulan/tahun) untuk melihat tren.
- Jika ada error CORS, pastikan backend mengizinkan origin dari frontend.
- Jika
react-isatau paket lain error saat build, coba sinkronkan versi React dan dependensi. - Jika mengalami masalah
react-router-domversi 7, cek migrasi API (v6 -> v7 perubahan routing). - Saat menggunakan Clerk atau layanan auth lain, pastikan public key & client ID benar.
- Fork repository
- Buat branch feature:
git checkout -b feature/nama-fitur - Commit perubahan:
git commit -m "feat: tambah fitur X" - Push dan buat PR
Pastikan menulis deskripsi PR jelas dan menjalankan npm run lint sebelum submit.
- 2.0.1 (Feb 27, 2025) — upgrade Tailwind CSS v4, perbaikan kelas
- 2.0.0 (Feb 2025) — redesign UI, fitur baru (calendar, chat, collapsible sidebar)
- Lisensi: Team C
- Jika ingin dukungan: buka issue di repository atau contact maintainer lewat email di file
package.jsonatau README utama.
Dokumentasi ini dibuat sebagai baseline. Jika Anda ingin saya tambahkan bagian teknis lebih lanjut (contoh kode API call dengan axios, Context untuk auth, contoh komponen Dashboard, atau panduan deployment ke Vercel), beri tahu bagian mana yang ingin diperluas dan akan saya tambahkan.