# JavaPax Moulleau — Site Laravel

Refonte sous **Laravel 13** du site WordPress `javapax.fr`, avec **conservation rigoureuse de toutes les URLs** (SEO), contenu en base de données et back-office d'administration.

## Stack
- Laravel 13 · PHP 8.4 · SQLite
- Tailwind CSS v4 + Vite (thème)
- Filament v4 (back-office `/admin`)

## Installation
```bash
composer install
npm install && npm run build
cp .env.example .env   # puis renseigner (voir ci-dessous)
php artisan key:generate
touch database/database.sqlite
php artisan migrate
php artisan wp:import          # importe tout le contenu depuis l'API WordPress
php artisan serve
```

## Commandes
| Commande | Rôle |
|----------|------|
| `php artisan wp:import` | Importe pages, articles, catégories, médias (+variantes) et le SEO Rank Math depuis l'API REST de `javapax.fr`. Idempotent. Options : `--only=`, `--skip-images`, `--no-seo`. |
| `php artisan ical:sync` | Synchronise les disponibilités depuis les calendriers iCal (Airbnb/Booking/Abritel). Planifiée toutes les heures. |

## Configuration `.env`
```env
APP_URL=https://www.javapax.fr

# Email du formulaire de contact + config SMTP
JAVAPAX_CONTACT_EMAIL=contact@javapax.fr
MAIL_MAILER=smtp
MAIL_HOST=...
MAIL_USERNAME=...
MAIL_PASSWORD=...

# Calendrier — URLs iCal séparées par des virgules
JAVAPAX_ICAL_URLS="https://www.airbnb.fr/calendar/ical/XXXX.ics,https://ical.booking.com/v1/export?t=YYYY"

# Avis Google (Places API New)
GOOGLE_PLACES_KEY=...
GOOGLE_PLACE_ID=...
```

## Back-office
- URL : `/admin`
- Identifiant créé : `contact@javapax.fr` (mot de passe défini à l'installation)
- Créer un autre admin : `php artisan make:filament-user`
- Ressources : Pages, Articles, Catégories, Avis, Réservations.

## Préservation des URLs (SEO)
- Chaque page/article/catégorie stocke son `uri` exacte (chemin d'origine, slugs avec emojis inclus).
- Le résolveur unifié (`ContentController`) sert le bon contenu pour chaque URL d'origine.
- Le `<head>` SEO de Rank Math (title, meta, canonical, OG, JSON-LD) est conservé **à l'identique** par page.
- `sitemap.xml` (+ `page-sitemap.xml`, `post-sitemap.xml`, `category-sitemap.xml`) reproduit la structure d'origine, avec encodage des emojis identique (minuscules).

## Déploiement (notes)
- Pointer le domaine **et** `www` vers `public/`. Les images sont servies depuis `public/wp-content/uploads/...` (mêmes chemins qu'avant → aucune URL d'image cassée).
- Mettre en place le scheduler (cron) pour `ical:sync` :
  `* * * * * cd /chemin && php artisan schedule:run >> /dev/null 2>&1`
- En production : `php artisan config:cache route:cache view:cache` et `npm run build`.
- Rediriger HTTP→HTTPS et (selon préférence) `javapax.fr`→`www.javapax.fr` au niveau serveur.

## Resynchronisation du contenu
Tant que l'ancien WordPress reste en ligne, `php artisan wp:import` peut être relancé pour resynchroniser le contenu et les médias.
