diff --git a/.env.example b/.env.example
index 0178c21..2abf063 100644
--- a/.env.example
+++ b/.env.example
@@ -6,7 +6,7 @@ DIRECTUS_URL=http://localhost:8055
DIRECTUS_TOKEN=
# Directus admin (used only by docker-compose for initial setup)
-DIRECTUS_ADMIN_EMAIL=admin@laurelvow.fr
+DIRECTUS_ADMIN_EMAIL=corentin.jog@gmail.com
DIRECTUS_ADMIN_PASSWORD=changeme-please
DIRECTUS_SECRET=replace-with-a-random-long-string
diff --git a/DEPLOY.md b/DEPLOY.md
index a933a9e..d2f4d1d 100644
--- a/DEPLOY.md
+++ b/DEPLOY.md
@@ -79,7 +79,7 @@ docker compose -f docker-compose.prod.yml up -d --build
Le `--build` compile l'image Astro de prod. Verifie que les 3 conteneurs
tournent : `docker compose -f docker-compose.prod.yml ps`.
-A ce stade la base est VIDE (branding "Laurel & Vow" par defaut). On la
+A ce stade la base est VIDE (sans tes series ni tes photos). On la
remplace avec ton contenu a l'etape 6.
---
@@ -124,8 +124,8 @@ Avec TLS (Let's Encrypt) sur les deux.
## ETAPE 8 — Verifications finales
-- [ ] La home affiche bien "Mostuki" (pas "Laurel & Vow") -> sinon la restore
- DB n'a pas pris, relance l'etape 6.
+- [ ] Les 4 series s'affichent dans REALISATIONS -> sinon la restore DB n'a
+ pas pris, relance l'etape 6.
- [ ] Les photos des series s'affichent (proxy `/api/files/...` OK).
- [ ] Le formulaire `/contact` enregistre bien (verifie dans Directus admin,
collection `contact_requests`).
diff --git a/_byan-output/tool-log.jsonl b/_byan-output/tool-log.jsonl
index 01af87d..207f343 100644
--- a/_byan-output/tool-log.jsonl
+++ b/_byan-output/tool-log.jsonl
@@ -871,3 +871,47 @@
{"timestamp":"2026-06-15T09:00:34.099Z","phase":"pre","tool":"Edit","summary":"/Users/corentinjoguet/Documents/03_Dev/site-photo/.gitignore","est_input_tokens":51}
{"timestamp":"2026-06-15T09:00:34.137Z","phase":"post","tool":"Edit","ok":true,"failure_kind":null,"est_output_tokens":157}
{"timestamp":"2026-06-15T09:00:43.652Z","phase":"pre","tool":"Bash","summary":"Fix tracking, verify env template included","est_input_tokens":147}
+{"timestamp":"2026-06-15T09:00:43.746Z","phase":"post","tool":"Bash","ok":true,"failure_kind":null,"est_output_tokens":91}
+{"timestamp":"2026-06-15T09:00:52.957Z","phase":"pre","tool":"Bash","summary":"Commit and push deploy package","est_input_tokens":222}
+{"timestamp":"2026-06-15T09:00:53.932Z","phase":"post","tool":"Bash","ok":true,"failure_kind":null,"est_output_tokens":58}
+{"timestamp":"2026-06-15T09:08:01.263Z","phase":"pre","tool":"Bash","summary":"Check docker and containers state","est_input_tokens":77}
+{"timestamp":"2026-06-15T09:08:01.490Z","phase":"post","tool":"Bash","ok":true,"failure_kind":null,"est_output_tokens":32}
+{"timestamp":"2026-06-15T09:08:07.313Z","phase":"pre","tool":"Bash","summary":"Start Colima VM","est_input_tokens":23}
+{"timestamp":"2026-06-15T09:08:34.112Z","phase":"post","tool":"Bash","ok":true,"failure_kind":null,"est_output_tokens":128}
+{"timestamp":"2026-06-15T09:08:38.266Z","phase":"pre","tool":"Bash","summary":"Start postgres and directus","est_input_tokens":77}
+{"timestamp":"2026-06-15T09:08:39.721Z","phase":"post","tool":"Bash","ok":true,"failure_kind":null,"est_output_tokens":75}
+{"timestamp":"2026-06-15T09:08:44.348Z","phase":"pre","tool":"Bash","summary":"Run backup script","est_input_tokens":37}
+{"timestamp":"2026-06-15T09:08:45.549Z","phase":"post","tool":"Bash","ok":true,"failure_kind":null,"est_output_tokens":121}
+{"timestamp":"2026-06-15T09:09:01.912Z","phase":"pre","tool":"Bash","summary":"Verify dump contains Mostuki branding","est_input_tokens":136}
+{"timestamp":"2026-06-15T09:09:01.986Z","phase":"post","tool":"Bash","ok":true,"failure_kind":null,"est_output_tokens":89}
+{"timestamp":"2026-06-15T09:09:13.798Z","phase":"pre","tool":"Bash","summary":"Find Laurel & Vow contexts in dump","est_input_tokens":74}
+{"timestamp":"2026-06-15T09:09:15.579Z","phase":"post","tool":"Bash","ok":true,"failure_kind":null,"est_output_tokens":465}
+{"timestamp":"2026-06-15T09:09:31.394Z","phase":"pre","tool":"Bash","summary":"Query live current values","est_input_tokens":191}
+{"timestamp":"2026-06-15T09:09:31.609Z","phase":"post","tool":"Bash","ok":true,"failure_kind":null,"est_output_tokens":116}
+{"timestamp":"2026-06-15T09:11:21.476Z","phase":"pre","tool":"Bash","summary":"Discover all laurel/vow divergences in code and DB","est_input_tokens":214}
+{"timestamp":"2026-06-15T09:11:21.590Z","phase":"post","tool":"Bash","ok":true,"failure_kind":null,"est_output_tokens":584}
+{"timestamp":"2026-06-15T09:12:27.888Z","phase":"pre","tool":"Bash","summary":"Check volume names and public dir","est_input_tokens":100}
+{"timestamp":"2026-06-15T09:12:28.001Z","phase":"post","tool":"Bash","ok":true,"failure_kind":null,"est_output_tokens":127}
+{"timestamp":"2026-06-15T09:12:57.724Z","phase":"pre","tool":"Bash","summary":"Apply branding fixes to app code","est_input_tokens":297}
+{"timestamp":"2026-06-15T09:12:57.810Z","phase":"post","tool":"Bash","ok":true,"failure_kind":null,"est_output_tokens":228}
+{"timestamp":"2026-06-15T09:13:15.193Z","phase":"pre","tool":"Bash","summary":"Re-apply branding fixes with explicit file list","est_input_tokens":232}
+{"timestamp":"2026-06-15T09:13:15.270Z","phase":"post","tool":"Bash","ok":true,"failure_kind":null,"est_output_tokens":119}
+{"timestamp":"2026-06-15T09:13:34.266Z","phase":"pre","tool":"Bash","summary":"Fix backup.sh, compose, package.json branding","est_input_tokens":281}
+{"timestamp":"2026-06-15T09:13:34.342Z","phase":"post","tool":"Bash","ok":true,"failure_kind":null,"est_output_tokens":64}
+{"timestamp":"2026-06-15T09:13:40.480Z","phase":"pre","tool":"Bash","summary":"Fix compose admin email, final verify","est_input_tokens":118}
+{"timestamp":"2026-06-15T09:13:40.539Z","phase":"post","tool":"Bash","ok":true,"failure_kind":null,"est_output_tokens":44}
+{"timestamp":"2026-06-15T09:13:47.233Z","phase":"pre","tool":"Bash","summary":"Fix env.example, verify zero laurel, rebuild","est_input_tokens":149}
+{"timestamp":"2026-06-15T09:13:49.076Z","phase":"post","tool":"Bash","ok":true,"failure_kind":null,"est_output_tokens":127}
+{"timestamp":"2026-06-15T09:13:59.564Z","phase":"pre","tool":"Read","summary":"/Users/corentinjoguet/Documents/03_Dev/site-photo/DEPLOY.md","est_input_tokens":25}
+{"timestamp":"2026-06-15T09:13:59.602Z","phase":"post","tool":"Read","ok":true,"failure_kind":null,"est_output_tokens":104}
+{"timestamp":"2026-06-15T09:14:04.184Z","phase":"pre","tool":"Edit","summary":"/Users/corentinjoguet/Documents/03_Dev/site-photo/DEPLOY.md","est_input_tokens":87}
+{"timestamp":"2026-06-15T09:14:04.227Z","phase":"post","tool":"Edit","ok":true,"failure_kind":null,"est_output_tokens":1455}
+{"timestamp":"2026-06-15T09:14:07.571Z","phase":"pre","tool":"Read","summary":"/Users/corentinjoguet/Documents/03_Dev/site-photo/DEPLOY.md","est_input_tokens":25}
+{"timestamp":"2026-06-15T09:14:07.611Z","phase":"post","tool":"Read","ok":true,"failure_kind":null,"est_output_tokens":98}
+{"timestamp":"2026-06-15T09:14:15.553Z","phase":"pre","tool":"Edit","summary":"/Users/corentinjoguet/Documents/03_Dev/site-photo/DEPLOY.md","est_input_tokens":91}
+{"timestamp":"2026-06-15T09:14:15.597Z","phase":"post","tool":"Edit","ok":true,"failure_kind":null,"est_output_tokens":1493}
+{"timestamp":"2026-06-15T09:14:30.508Z","phase":"pre","tool":"Bash","summary":"Recreate stack with new container names","est_input_tokens":136}
+{"timestamp":"2026-06-15T09:14:36.984Z","phase":"post","tool":"Bash","ok":true,"failure_kind":null,"est_output_tokens":130}
+{"timestamp":"2026-06-15T09:14:48.066Z","phase":"pre","tool":"Bash","summary":"Verify data intact and fix DB divergences","est_input_tokens":317}
+{"timestamp":"2026-06-15T09:14:48.383Z","phase":"post","tool":"Bash","ok":true,"failure_kind":null,"est_output_tokens":96}
+{"timestamp":"2026-06-15T09:15:02.975Z","phase":"pre","tool":"Bash","summary":"Commit and push rebrand","est_input_tokens":248}
diff --git a/backups/db-20260615-110844.sql.gz b/backups/db-20260615-110844.sql.gz
new file mode 100644
index 0000000..1db5bc8
Binary files /dev/null and b/backups/db-20260615-110844.sql.gz differ
diff --git a/backups/uploads-20260615-110844.tar.gz b/backups/uploads-20260615-110844.tar.gz
new file mode 100644
index 0000000..96d2da0
Binary files /dev/null and b/backups/uploads-20260615-110844.tar.gz differ
diff --git a/docker-compose.yml b/docker-compose.yml
index 16a9ff1..c8b42b0 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -1,7 +1,7 @@
services:
postgres:
image: postgres:16-alpine
- container_name: laurel-vow-postgres
+ container_name: mostuki-postgres
restart: unless-stopped
environment:
POSTGRES_USER: ${POSTGRES_USER:-directus}
@@ -17,7 +17,7 @@ services:
directus:
image: directus/directus:11
- container_name: laurel-vow-directus
+ container_name: mostuki-directus
restart: unless-stopped
depends_on:
postgres:
@@ -28,9 +28,9 @@ services:
- directus_uploads:/directus/uploads
- directus_extensions:/directus/extensions
environment:
- KEY: "${DIRECTUS_SECRET:-laurel-vow-dev-key}"
- SECRET: "${DIRECTUS_SECRET:-laurel-vow-dev-secret}"
- ADMIN_EMAIL: "${DIRECTUS_ADMIN_EMAIL:-admin@laurelvow.fr}"
+ KEY: "${DIRECTUS_SECRET:-mostuki-dev-key}"
+ SECRET: "${DIRECTUS_SECRET:-mostuki-dev-secret}"
+ ADMIN_EMAIL: "${DIRECTUS_ADMIN_EMAIL:-corentin.jog@gmail.com}"
ADMIN_PASSWORD: "${DIRECTUS_ADMIN_PASSWORD:-changeme-please}"
DB_CLIENT: "pg"
DB_HOST: "postgres"
@@ -48,7 +48,7 @@ services:
build:
context: .
dockerfile: Dockerfile.dev
- container_name: laurel-vow-astro
+ container_name: mostuki-astro
restart: unless-stopped
depends_on:
- directus
diff --git a/package.json b/package.json
index 224f961..7142fbf 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
{
- "name": "laurel-vow",
+ "name": "mostuki-photo",
"version": "0.1.0",
- "description": "Site portfolio photographie de mariage Laurel & Vow. Astro + nginx + Traefik.",
+ "description": "Site vitrine photographie Mostuki Photo (Cannes). Astro SSR + Directus + Postgres.",
"type": "module",
"scripts": {
"dev": "astro dev",
diff --git a/public/scripts/brutalist.client.js b/public/scripts/brutalist.client.js
index 8b84379..835d2c5 100644
--- a/public/scripts/brutalist.client.js
+++ b/public/scripts/brutalist.client.js
@@ -30,7 +30,7 @@
const safety = setTimeout(() => { try { boot.remove(); } catch {} }, 6000);
const target = boot.querySelector('.boot__text');
const lines = [
- '> initializing laurel & vow studio . . .',
+ '> initializing mostuki photo studio . . .',
'> loading typography: JetBrainsMono v2.304 . . . OK',
'> loading palette: ink #0a0a0a / paper #f4f1eb / accent #5e2ca5 . . . OK',
'> resolving photographer.heart . . . OK',
@@ -86,7 +86,7 @@
if (logo) {
if (active) {
logo.dataset.original = logo.dataset.original || logo.innerHTML;
- logo.innerHTML = '[ LAUREL_AND_VOW_v1.4.2-rc.1▌ ]';
+ logo.innerHTML = '[ MOSTUKI_v1.4.2-rc.1▌ ]';
} else if (logo.dataset.original) {
logo.innerHTML = logo.dataset.original;
}
diff --git a/scripts/backup.sh b/scripts/backup.sh
index 986db64..6ba8d79 100755
--- a/scripts/backup.sh
+++ b/scripts/backup.sh
@@ -18,8 +18,8 @@ cd "$(dirname "$0")/.."
# Charge .env pour POSTGRES_USER / POSTGRES_DB
if [ -f .env ]; then set -a; . ./.env; set +a; fi
-PG_CONTAINER="${PG_CONTAINER:-laurel-vow-postgres}"
-DIRECTUS_CONTAINER="${DIRECTUS_CONTAINER:-laurel-vow-directus}"
+PG_CONTAINER="${PG_CONTAINER:-mostuki-postgres}"
+DIRECTUS_CONTAINER="${DIRECTUS_CONTAINER:-mostuki-directus}"
PG_USER="${POSTGRES_USER:-directus}"
PG_DB="${POSTGRES_DB:-directus}"
diff --git a/scripts/create-admin-token.mjs b/scripts/create-admin-token.mjs
index 38e2da0..39f3ddd 100644
--- a/scripts/create-admin-token.mjs
+++ b/scripts/create-admin-token.mjs
@@ -10,7 +10,7 @@ import fs from 'node:fs';
import path from 'node:path';
const URL_BASE = process.env.DIRECTUS_PUBLIC_URL || 'http://localhost:8055';
-const EMAIL = process.env.DIRECTUS_ADMIN_EMAIL || 'admin@laurelvow.fr';
+const EMAIL = process.env.DIRECTUS_ADMIN_EMAIL || 'corentin.jog@gmail.com';
const PASSWORD = process.env.DIRECTUS_ADMIN_PASSWORD || 'changeme-please';
async function api(method, path, body, token) {
diff --git a/scripts/seed-directus.mjs b/scripts/seed-directus.mjs
index 590af34..f834ed5 100644
--- a/scripts/seed-directus.mjs
+++ b/scripts/seed-directus.mjs
@@ -18,7 +18,7 @@
import 'node:process';
const URL_BASE = process.env.DIRECTUS_PUBLIC_URL || 'http://localhost:8055';
-const EMAIL = process.env.DIRECTUS_ADMIN_EMAIL || 'admin@laurelvow.fr';
+const EMAIL = process.env.DIRECTUS_ADMIN_EMAIL || 'corentin.jog@gmail.com';
const PASSWORD = process.env.DIRECTUS_ADMIN_PASSWORD || 'changeme-please';
let TOKEN = null;
@@ -262,12 +262,12 @@ async function setSingleton(collection, values) {
await ensurePublicRead('site_settings');
await setSingleton('site_settings', {
- studio_name: 'Laurel & Vow',
+ studio_name: 'Mostuki Photo',
city: 'CANNES',
region: 'PACA',
country: 'FR',
coords: '43.55N 7.02E',
- email: 'hello@laurelvow.fr',
+ email: 'corentin.jog@gmail.com',
est_year: 2018,
current_year: 2026,
hero_tag: '[01] STUDIO.',
@@ -292,7 +292,7 @@ async function setSingleton(collection, values) {
],
contact_title: 'ON SE PARLE ?',
contact_body: "DECRIS-MOI TON PROJET EN QUELQUES LIGNES : TYPE DE SHOOT, DATE APPROXIMATIVE, LIEU, BUDGET INDICATIF. REPONSE SOUS 48H.",
- contact_addr: 'STUDIO LAUREL & VOW · CANNES · FR',
+ contact_addr: 'STUDIO MOSTUKI · CANNES · FR',
});
// ============ series (collection) ============
diff --git a/src/components/Contact.astro b/src/components/Contact.astro
index 831ed3f..7596d95 100644
--- a/src/components/Contact.astro
+++ b/src/components/Contact.astro
@@ -10,8 +10,8 @@ const {
tag = '[06] CONTACT.',
title = 'ON SE PARLE ?',
body = "DATE · LIEU APPROXIMATIF · NOMBRE D'INVITES. REPONSE SOUS 48H.",
- email = 'hello@laurelvow.fr',
- addr = 'STUDIO LAUREL & VOW · PARIS · FR',
+ email = 'corentin.jog@gmail.com',
+ addr = 'STUDIO MOSTUKI · CANNES · FR',
} = Astro.props;
const subject = encodeURIComponent("Demande d'information");
---
diff --git a/src/components/Footer.astro b/src/components/Footer.astro
index 33c7634..c502186 100644
--- a/src/components/Footer.astro
+++ b/src/components/Footer.astro
@@ -5,7 +5,7 @@ export interface Props {
country?: string;
est?: number;
}
-const { studio = 'Laurel & Vow', city = 'CANNES', country = 'FR', est = 2018 } = Astro.props;
+const { studio = 'Mostuki Photo', city = 'CANNES', country = 'FR', est = 2018 } = Astro.props;
const year = new Date().getFullYear();
---