# 📦 Build & Publish Guide

Panduan build frontend, verifikasi paket, dan publish ke npmjs.com.

## Build Frontend

Frontend (Vue 3 + Vite) harus di-build ke `web/dist/` — server Node melayaninya sebagai file statis.

```bash
npm run build:web
```

Hasil: `web/dist/` berisi `index.html` (halaman publik), `admin.html` (dashboard), `assets/*` (JS/CSS hashed), plus favicon/gambar dari `web/public/`.

> Tanpa `web/dist/`, halaman `/` dan `/dashboard` akan 404 dengan pesan "Jalankan npm run build:web".

### Struktur Output

```
web/dist/
├── index.html        ← halaman donasi publik (/)
├── admin.html        ← dashboard (/dashboard)
├── favicon.ico, ex.jpeg, robots.txt
└── assets/           ← JS/CSS dengan hash (cache immutable)
```

## Sebelum Publish (Checklist)

1. **Isi `author`** di `package.json` (nama/npm username Anda).
2. **Naikkan versi**:

   ```bash
   npm version patch   # 1.0.0 → 1.0.1 (bugfix)
   npm version minor   # 1.0.0 → 1.1.0 (fitur baru)
   npm version major   # 1.0.0 → 2.0.0 (breaking change)
   ```

   > **Tips**: Jika git working tree belum di-commit, gunakan flag `--no-git-tag-version`, misal: `npm version 1.1.4 --no-git-tag-version`.

3. **Lint dan regression tests**: `npm run lint && npm test`
4. **Verifikasi isi paket** (yang penting — pastikan secret tidak ikut):

   ```bash
   npm pack --dry-run
   ```

   Yang boleh ikut: `index.js`, `server.js`, `src/`, `web/dist/`, `web/public/`, `env.example`, `README.md`, `package.json`.
   Yang TIDAK boleh ikut: `.env`, `*.sqlite`, `web/src/` (source frontend — pengguna cukup pakai dist).

   Whitelist dikontrol field `files` di `package.json`.

## Publish

```bash
npm login        # sekali saja
npm publish
```

Script `prepublishOnly` otomatis menjalankan **lint + regression tests + build:web** sebelum paket dibuat — build tidak akan basi.

Setelah publish, pengguna cukup:

```bash
npm install -g antigravity-tc
antigravity-tc
```

## Setelah Publish — Verifikasi Cepat

```bash
# di folder lain / mesin bersih
npm install -g antigravity-tc
antigravity-tc          # dashboard + tray jalan
antigravity-tc --hidden # mode tray langsung
```

Cek juga `~/.antigravity-tc/` terbuat dan halaman `/dashboard` terbuka.

## Catatan Build

- **Vite multi-page**: konfigurasi `web/vite.config.mjs` (entry `index` + `admin`).
- **Tailwind via PostCSS**: `web/postcss.config.js` mengarah ke `web/tailwind.config.js` secara eksplisit; content glob memakai path absolut.
- **`vue` & `vite` adalah devDependencies** — pengguna paket tidak mendownload dependency frontend sama sekali; mereka hanya menerima `web/dist/`.
- **Icon tray** dibaca dari `web/public/favicon.ico` — folder ini ikut di-publish demi itu.
- **Apple Silicon** memakai binary ARM64 yang disertakan di `bin/tray/`.
  Source, lisensi, dan petunjuk rebuild ada di [bin/tray/README.md](bin/tray/README.md).
  systray2 dikunci ke versi `2.1.4`; perubahan versinya perlu verifikasi ulang
  protokol dan direktori binary native yang sesuai.
- **Changelog**: tulis perubahan dan cara update di `CHANGELOG.md`; file ini
  disertakan dalam paket npm dan ditautkan oleh notifikasi dashboard/CLI.
