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(); ---