# XAMXAM

(Anciennement *[Posterg](https://wiki.erg.be/m/#Posterg))*

Répertoire des travaux de fin d'études de l'[ERG](https://erg.be) (École de Recherche Graphique).

## Requirements

- PHP 8.4
- SQLite3 (`php8.4-sqlite3`)
- nginx (production)

## Development


### MacOS

Logiciels:

- un IDE pour éditer  → VSCode 
- git (ou une interface graphique) pour partager les modifications → git-gui (officiel) ou Github Desktop
- un server web avec PHP pour visualiser le project dans le navigateur → MAMP


### Workflow

0. Faire un changement dans ton IDE
1. Démarrer le site via MAMP, en sélectionnant le dossier `public`
2. Vérifier que ça marche sur le site en local, depuis ton navigateur
3. Une fois qu'un changement spécifique est fait, `commit` les changements sur les fichiers qui sont relatif à ce changement
4. Vérifier que vous avez syncroniser avec le `remote` → `pull` + `rebase` ! pas merge
5. `push` les changements vers le remote


```bash
just serve   # http://localhost:8000  (public) and /admin/
```

## Deployment

Files are pushed to the server with rsync — there is no repo on the remote.

```bash
just deploy     # rsync app files → xamxam:/var/www/xamxam/
just deploy-db  # push local xamxam.db → remote (only if remote DB is absent)
```

`deploy-db` refuses to run if a database already exists on the server, to avoid
accidental overwrites of production data.

### First-time server setup

```bash
ssh xamxam
sudo mkdir -p /var/www/xamxam
sudo chown www-data:xamxam /var/www/xamxam
sudo chmod 775 /var/www/xamxam
exit
```

Then deploy once and apply nginx config:

```bash
just deploy
just deploy-nginx
```

### Admin users (htpasswd)

```bash
just manage-admin-users
# Then on server:
ssh xamxam "sudo bash /tmp/manage-admin-users.sh"
```

## Security notes

- Admin panel protected by nginx `auth_basic` + PHP session (`AdminAuth`)
- Uploads stored outside webroot, served via controlled `media.php`
- Rate limiting on public search (`src/RateLimit.php`)
- See `nginx/docs/SECURITY_HEADERS.md` for security headers reference


