# CMS Velo Teknologi

Panel admin bawaan untuk mengelola seluruh konten situs tanpa menyentuh kode.

## Cara pakai

1. Pastikan `.env.local` ada di root project (lihat `.env.example`):

   ```
   ADMIN_PASSWORD=password-anda
   SESSION_SECRET=hex-acak-minimal-32-karakter
   ```

2. Jalankan situs seperti biasa (`npm run dev` atau `npm run build && npm start`).
3. Buka **`/admin`** (mis. http://localhost:3000/admin) dan masukkan password.
4. Edit konten di tab yang tersedia lalu tekan **Simpan Perubahan** —
   perubahan langsung tampil di homepage.

## Yang bisa diedit

| Tab | Isi |
| --- | --- |
| Proyek | Judul, klien, tipe, deskripsi, screenshot (upload), urutan, rasio kartu |
| Klien | Nama + logo (upload) — tanpa logo tampil sebagai ikon |
| Layanan | 4 layanan utama, alur kerja, sub-layanan kiri/kanan |
| Testimoni | Nama, jabatan, inisial, rating, kutipan |
| FAQ | Pertanyaan & jawaban |
| Beranda | Slogan, statistik, tonggak perjalanan, tech stack, rekognisi, liputan media |
| Kontak | Email, WhatsApp, alamat, website |

## Cara kerja & batasan

- Konten disimpan di **`data/content.json`**; beranda membacanya saat setiap
  request (`force-dynamic`), jadi hasil simpanan CMS langsung terlihat.
- Gambar upload tersimpan di **`public/uploads/`**.
- Jika `data/content.json` dihapus, sistem otomatis menabulkan ulang konten
  default dari `lib/contentStore.ts` (DEFAULT_CONTENT) — file itu adalah
  "benih" konten.
- **Penyimpanan berbasis file = cocok untuk server/komputer sendiri.** Jika
  kelak di-deploy ke platform serverless (Vercel dsb.), penulisan file tidak
  akan persisten — perlu migrasi `lib/contentStore.ts` ke database
  (mis. SQLite/Postgres) dengan API yang sama.
- Struktur folder terkait:
  - `lib/contentTypes.ts` — tipe & konstanta (aman untuk komponen client)
  - `lib/contentStore.ts` — baca/tulis + validasi `content.json` (server only)
  - `lib/auth.ts` — sesi admin (cookie HMAC) + rate-limit login
  - `app/api/admin/*` — login, logout, content, upload
  - `app/admin/page.tsx` + `components/admin/*` — UI CMS
