CLAUDE.md
changeset 21 48c4eec2b7e6
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/CLAUDE.md	Fri Sep 05 18:40:08 2025 +0200
@@ -0,0 +1,136 @@
+# CLAUDE.md
+
+This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
+
+## Project Overview
+
+This is a WordPress multisite installation for the ENMI Conference website (enmi-conf.org) running in a containerized environment. The project uses Docker Compose with Caddy as a web server, MariaDB for the database, and PHP-FPM for processing.
+
+## Architecture
+
+- **`wp/`**: Primary WordPress installation (production-like)
+- **`wordpress/`**: Secondary WordPress installation (backup/staging)
+- **`enmi12/`**: Legacy conference materials from 2012
+  - `freemind/`: Mind mapping files
+  - `glossaire/`: Glossary with graph visualization
+- **Docker services**:
+  - `web`: Caddy server (port 8080)
+  - `fpm`: PHP-FPM container
+  - `db`: MariaDB database
+  - `wpcli`: WordPress CLI (dev profile only)
+
+## Development Environment
+
+The project uses Nix for development dependencies and direnv for environment management.
+
+### Prerequisites
+- Docker and Docker Compose (or Podman Compose)
+- Nix (optional, for development shell)
+
+### Development Setup
+
+1. **Start the environment:**
+   ```bash
+   docker compose pull
+   docker compose build
+   docker compose up -d
+   ```
+
+2. **Access the site:**
+   - Local URL: http://enmi-conf.127.0.0.1.nip.io:8080
+
+### Database Operations
+
+**Import database backup:**
+```bash
+zcat ../dev/enmi-conf_db_export_2022-09-21.sql.gz | docker compose --profile=dev run -T -w "/var/www/html/wp" wpcli wp db cli
+```
+
+**Update URLs for local development:**
+```bash
+# Test URL replacement (dry run)
+docker compose --profile=dev run -w "/var/www/html/wp" wpcli wp search-replace --dry-run --network "enmi-conf.org" "enmi-conf.local:8080"
+
+# Update blog domains
+echo "update wp_blogs set domain='enmi-conf.local:8080';" | docker compose --profile=dev run -T -w "/var/www/html/wp" wpcli wp db cli
+
+# Update home and siteurl options for all sites
+echo "select path from wp_blogs;" | docker compose --profile=dev run -T -w "/var/www/html/wp" wpcli wp db cli --skip-column-names | xargs -I % docker compose --profile=dev run -T -w "/var/www/html/wp" wpcli wp --url="http://enmi-conf.local:8080%" option update home "http://enmi-conf.local:8080%/"
+
+echo "select path from wp_blogs;" | docker compose --profile=dev run -T -w "/var/www/html/wp" wpcli wp db cli --skip-column-names | xargs -I % docker compose --profile=dev run -T -w "/var/www/html/wp" wpcli wp --url="http://enmi-conf.local:8080%" option update siteurl "http://enmi-conf.local:8080%/"
+
+# Update database schema
+docker compose --profile=dev run -w "/var/www/html/wp" wpcli wp core update-db --network
+```
+
+### WordPress CLI Operations
+
+All WP-CLI commands should be run in the `/var/www/html/wp` directory:
+```bash
+docker compose --profile=dev run -w "/var/www/html/wp" wpcli wp [command]
+```
+
+### File Synchronization
+
+**Sync uploads from production:**
+```bash
+rsync -avz -h --stats -P charlie.iri.centrepompidou.fr:/shared/php-01/enmi-conf.org/wp/wp-content/uploads/ ./
+```
+
+**Sync WordPress core files (dry-run first):**
+```bash
+rsync -arvz --delete --dry-run --exclude wp-content --exclude wp-config.php ./wordpress/ ./wp/
+```
+
+## WordPress Configuration
+
+- **Database**: `wordpress_ec`
+- **DB User**: `iri`
+- **Themes**: IN-MOTION-package-u1 (parent), IN-MOTION-package-u1-child
+- **Key Plugins**: 
+  - portfolio
+  - include-mastodon-feed
+  - blog-copier
+  - option-tree
+
+## Important Files
+
+- `docker-compose.yml`: Container orchestration
+- `Caddyfile`: Web server configuration
+- `wp-config.php`: WordPress configuration (root level)
+- `wp/wp-config.php`: Site-specific WordPress config
+- `fpm.Dockerfile`: PHP-FPM container build
+- `Readme`: Setup and maintenance commands
+
+## Version Control (Mercurial)
+
+This project uses Mercurial (hg) for version control.
+
+**Add files to tracking:**
+```bash
+hg add [file]
+```
+
+**Remove files from tracking:**
+```bash
+hg remove [file]
+# or to remove from tracking but keep file:
+hg forget [file]
+```
+
+**Add new files and remove deleted files automatically:**
+```bash
+hg addremove
+```
+
+**Check repository status:**
+```bash
+hg status
+```
+
+## Alternative with Podman
+
+For systems using Podman instead of Docker, replace `docker compose` with `podman-compose` and use the nip.io domain format:
+```bash
+podman-compose --profile=dev run -w "/var/www/html/wp" wpcli wp search-replace --network "enmi-conf.org" "enmi-conf.127.0.0.1.nip.io:8080"
+```
\ No newline at end of file