# Installation

## Debian packages (no install.sh)

Jabali ships as two Debian packages:

- `jabali-deps` — system dependencies (nginx, PHP, DB, mail, DNS, etc.)
- `jabali-panel` — the panel application + systemd services

### Build the packages

From the repository root:

```
./scripts/build-jabali-deps-deb.sh
./scripts/build-jabali-panel-deb.sh
```

This produces:

```
jabali-deps_<version>_all.deb
jabali-panel_<version>_all.deb
```

### Install on a server

```
sudo dpkg -i ./jabali-deps_<version>_all.deb
sudo apt-get -f install -y
sudo dpkg -i ./jabali-panel_<version>_all.deb
```

After install, systemd services are enabled and started:

- `jabali-agent`
- `jabali-queue`
- `jabali-health-monitor`

## Panel notifications (admin + user)

Jabali ships with a hardened Filament notifications setup that prevents Livewire
success hooks from breaking after the first toast.

What is included:

- `public/js/filament/notifications/notifications.js` is patched to guard the
  animation callback (prevents `TypeError: e is not a function`).
- `resources/views/vendor/filament-notifications/notifications.blade.php` adds
  a lightweight `wire:poll.2s` so toasts keep flowing even if a Livewire event
  is dropped.

If you update or rebuild assets, keep the guard in place and hard‑refresh the
browser (Ctrl+Shift+R) after deployment.
