# Site de salon de tatouage

Site vitrine et back-office pour un salon de tatouage.

- **Front public** : Blade + Tailwind CSS 4, rendu côté serveur (SEO natif, pas de JavaScript requis pour lire le site).
- **Administration** : Filament 5 sur `/admin`, entièrement en français.
- **Espace connecté** : le starter kit Inertia + Vue du projet reste en place sur `/dashboard` et `/settings`.

## Démarrer

```bash
# Lancer la stack (MySQL, Redis, Mailpit, phpMyAdmin, Selenium)
./vendor/bin/sail up -d

# Base de données + contenu de démonstration
./vendor/bin/sail artisan migrate:fresh --seed

# Assets
./vendor/bin/sail npm install
./vendor/bin/sail npm run build   # ou `npm run dev` en développement
```

| Service | Adresse |
| --- | --- |
| Site | http://localhost |
| Administration | http://localhost/admin |
| Mailpit (e-mails sortants) | http://localhost:8025 |
| phpMyAdmin | http://localhost:8081 |

**Compte administrateur créé par le seeder :** `admin@encre-et-aiguille.test` / `ChangezCeMotDePasse!`
Changez ce mot de passe avant toute mise en ligne.

> Si le site s'affiche sans aucun style, c'est qu'un fichier `public/hot` résiduel
> pointe vers un serveur Vite éteint. Supprimez-le : `rm public/hot`.

## Ce que l'utilisateur peut modifier depuis l'administration

### Contenu

| Écran | Contenu géré |
| --- | --- |
| Le salon → Tatoueurs | Fiches des tatoueurs : bio, photo, spécialités, Instagram, disponibilité |
| Le salon → Styles de tatouage | Styles pratiqués, utilisés pour filtrer la galerie et guider les demandes |
| Le salon → Tarifs | Catégories et lignes de tarifs, avec fourchettes et mentions |
| Galerie → Galerie photo | Photos, avec **import multiple** en un seul geste, tri par glisser-déposer |
| Blog → Articles / Catégories | Articles avec image, publication programmée, référencement |
| Contenu → Pages libres | Mentions légales, confidentialité, conseils de cicatrisation… |
| Contenu → Avis clients | Témoignages avec note et provenance |
| Contenu → FAQ | Questions regroupées par rubrique |
| Demandes → Demandes de RDV | Demandes reçues, avec images de référence, statuts et devis |
| Demandes → Messages de contact | Messages du formulaire de contact, avec suivi |

### Personnalisation (Réglages → Personnaliser le site)

| Écran | Réglages |
| --- | --- |
| Identité du salon | Nom, accroche, présentation, adresse, téléphone, e-mail, plan |
| Apparence | Logo, favicon, image de partage, ambiance claire/sombre, couleur d'accent, polices, arrondis, grain |
| Page d'accueil | Bannière, bloc de présentation, sections affichées, appel à l'action |
| Horaires d'ouverture | Sept jours, avec pause déjeuner optionnelle |
| Formulaires et tarifs | Textes d'accompagnement, adresses de réception des demandes, **politique vis-à-vis des mineurs** |
| Réseaux et annonces | Comptes sociaux, bandeau d'annonce en haut du site |
| Référencement | Titre et description par défaut, indexation, Plausible ou GTM, bandeau cookies |

## Mineurs

Le salon choisit sa politique dans **Réglages → Formulaires et tarifs → Mineurs** :

- **Uniquement les personnes majeures** (valeur par défaut) : le formulaire demande une confirmation de majorité.
- **Mineurs acceptés avec l'autorisation écrite du représentant légal** : le formulaire propose un choix « majeur·e / mineur·e avec autorisation », et les demandes concernées sont signalées dans l'administration ainsi que dans l'e-mail de notification, pour que le document soit recueilli avant la séance.

Le choix se répercute automatiquement sur le formulaire, la mention affichée à côté
et la ligne du pied de page. Le texte public peut être réécrit librement ; laissé
vide, il s'adapte à la politique retenue.

Côté droit français, l'article R.1311-11 du Code de la santé publique interdit de
tatouer un mineur **sans** le consentement écrit d'un titulaire de l'autorité
parentale ou du tuteur : c'est donc légal avec cette autorisation écrite, que le
professionnel doit conserver et pouvoir présenter. Refuser les mineurs reste un
choix commercial parfaitement valable, d'où le réglage.

## Fonctionnement des réglages

Les valeurs par défaut vivent dans `config/site.php` (versionnées, le site reste
affichable sur une base vierge). Les valeurs saisies dans l'administration les
surchargent, dans la table `settings`, et sont lues via `App\Settings\SiteSettings`.

Les clés sont pointées (`shop.name`). Livewire interprète les points comme un
tableau imbriqué, donc `App\Filament\Pages\Settings\SettingsPage` fait le pont :
chaque page déclare la liste exacte des clés qu'elle possède, ce qui l'empêche
aussi d'écrire ailleurs que dans son périmètre.

Le thème est appliqué via des variables CSS (`--site-accent`, `--site-font-heading`…)
posées sur `<html>` par `resources/views/components/layouts/public.blade.php`.
Une nouvelle police doit être déclarée à deux endroits : `config/site.php` et
`vite.config.ts` (pour être téléchargée au build et auto-hébergée).

## Vérifications

```bash
./vendor/bin/sail composer ci:check   # ESLint, Prettier, vue-tsc, Pint, PHPStan niveau 7, tests
./vendor/bin/sail composer test       # Pint + PHPStan + tests uniquement
```

## Points à traiter avant la mise en ligne

- [ ] Changer le mot de passe du compte administrateur.
- [ ] Remplacer les images de démonstration (SVG générés) par les vraies photos.
- [ ] Compléter les mentions légales : forme juridique, SIRET, hébergeur, responsable de publication.
- [ ] Relire la politique de confidentialité et l'adapter à la réalité du salon.
- [ ] Configurer un vrai service d'envoi d'e-mails (les variables `MAIL_*` pointent sur Mailpit en local).
- [ ] Nettoyer `.env` : des identifiants Mailtrap et un mot de passe Redis y traînent en clair.
- [ ] Choisir la politique vis-à-vis des mineurs (Réglages → Formulaires et tarifs).
- [ ] Vérifier Réglages → Référencement → « Autoriser Google » une fois le contenu réel en place.
# tatouage
