# Deploy ke cPanel (Node.js Selector / Passenger)

Paket ini sudah ditambahkan `server.mjs`: jembatan kecil yang menjalankan hasil
build aplikasi (`dist/server/index.js`, format Cloudflare Worker) sebagai
server Node.js biasa, supaya bisa dipasang lewat menu **Setup Node.js App** di
cPanel. Fitur database bersama (D1) otomatis nonaktif di mode ini — aplikasi
tetap berfungsi penuh untuk kalkulasi, menyimpan data di browser dan lewat
ekspor/impor JSON (lihat README.md).

## Langkah

1. **Upload & extract** seluruh isi folder ini ke `Application root` yang akan
   dibuat di cPanel (misalnya `mep-engineer-ai`), lewat File Manager atau FTP.
   Jangan upload folder `node_modules` atau `dist` kalau ada — biar di-build
   ulang di server.
2. Di cPanel, buka **Setup Node.js App → Create Application**:
   - **Node.js version**: pilih **22.23.0** (paling tinggi yang tersedia; minimal 22.13).
   - **Application mode**: Production.
   - **Application root**: path folder tempat upload tadi.
   - **Application URL**: domain/subdomain yang diinginkan.
   - **Application startup file**: `server.mjs`
   - Klik **CREATE**.
3. Setelah dibuat, cPanel menyediakan tombol **Run NPM Install** — klik itu
   dulu (ini menjalankan `npm ci`/`npm install`).
4. **Build aplikasinya.** Tombol cPanel hanya install dependency, belum build.
   Kalau ada akses SSH atau Terminal di cPanel:
   ```bash
   cd ~/mep-engineer-ai        # sesuaikan application root
   source /home/USERNAME/nodevenv/mep-engineer-ai/22/bin/activate   # cPanel biasa kasih tahu path persisnya di halaman app
   npm run build
   ```
   (Path `nodevenv` persisnya bisa dilihat di halaman detail aplikasi Node di
   cPanel — ada tombol "Enter to virtual environment" yang menampilkan
   perintah `source` yang tepat.)

   Kalau **tidak ada akses SSH**, build harus dilakukan di komputer lain
   dengan Node 22.13+ (`npm ci && npm run build`), lalu folder `dist/` hasil
   build di-upload manual ke Application root lewat File Manager/FTP.
5. Balik ke halaman **Setup Node.js App**, klik **Restart** pada aplikasi ini.
6. Buka Application URL di browser — pastikan halaman Bab I–XII terbuka dan
   kalkulasi jalan normal.

## Setelah update kode di kemudian hari

Setiap kali source diubah: upload ulang perubahan → `npm run build` lagi →
**Restart** aplikasi dari cPanel.

## Catatan

- `env.DB` dan `env.IMAGES` (binding Cloudflare) tidak tersedia di mode Node
  ini, jadi endpoint `/api/projects` dan `/api/master-projects` akan
  mengembalikan data kosong (bukan error) — sesuai desain di `worker/index.ts`.
  Riwayat project tetap tersimpan per-browser dan lewat ekspor JSON.
- Endpoint optimasi gambar `/_vinext/image` tidak aktif di mode ini; ini hanya
  memengaruhi optimasi otomatis gambar dari `next/image`, bukan fungsi
  kalkulasi.
