refactor: rebrand complet Laurel & Vow -> Mostuki Photo
- fallbacks composants + directus.ts passes a Mostuki Photo / Cannes - corrige Contact.astro (PARIS -> CANNES) - seed/token scripts : defauts Mostuki + email corentin.jog@gmail.com - docker-compose dev : conteneurs mostuki-*, email admin, secrets dev - backup.sh : conteneurs par defaut mostuki-* - package.json : name mostuki-photo + description vitrine - .env.example : email admin - DEPLOY.md : retrait des references obsoletes a l ancien branding Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
b0030246e4
commit
9559ba1216
19 changed files with 77 additions and 33 deletions
|
|
@ -6,7 +6,7 @@ DIRECTUS_URL=http://localhost:8055
|
||||||
DIRECTUS_TOKEN=
|
DIRECTUS_TOKEN=
|
||||||
|
|
||||||
# Directus admin (used only by docker-compose for initial setup)
|
# 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_ADMIN_PASSWORD=changeme-please
|
||||||
DIRECTUS_SECRET=replace-with-a-random-long-string
|
DIRECTUS_SECRET=replace-with-a-random-long-string
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
Le `--build` compile l'image Astro de prod. Verifie que les 3 conteneurs
|
||||||
tournent : `docker compose -f docker-compose.prod.yml ps`.
|
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.
|
remplace avec ton contenu a l'etape 6.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
@ -124,8 +124,8 @@ Avec TLS (Let's Encrypt) sur les deux.
|
||||||
|
|
||||||
## ETAPE 8 — Verifications finales
|
## ETAPE 8 — Verifications finales
|
||||||
|
|
||||||
- [ ] La home affiche bien "Mostuki" (pas "Laurel & Vow") -> sinon la restore
|
- [ ] Les 4 series s'affichent dans REALISATIONS -> sinon la restore DB n'a
|
||||||
DB n'a pas pris, relance l'etape 6.
|
pas pris, relance l'etape 6.
|
||||||
- [ ] Les photos des series s'affichent (proxy `/api/files/...` OK).
|
- [ ] Les photos des series s'affichent (proxy `/api/files/...` OK).
|
||||||
- [ ] Le formulaire `/contact` enregistre bien (verifie dans Directus admin,
|
- [ ] Le formulaire `/contact` enregistre bien (verifie dans Directus admin,
|
||||||
collection `contact_requests`).
|
collection `contact_requests`).
|
||||||
|
|
|
||||||
|
|
@ -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.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: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.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}
|
||||||
|
|
|
||||||
BIN
backups/db-20260615-110844.sql.gz
Normal file
BIN
backups/db-20260615-110844.sql.gz
Normal file
Binary file not shown.
BIN
backups/uploads-20260615-110844.tar.gz
Normal file
BIN
backups/uploads-20260615-110844.tar.gz
Normal file
Binary file not shown.
|
|
@ -1,7 +1,7 @@
|
||||||
services:
|
services:
|
||||||
postgres:
|
postgres:
|
||||||
image: postgres:16-alpine
|
image: postgres:16-alpine
|
||||||
container_name: laurel-vow-postgres
|
container_name: mostuki-postgres
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
environment:
|
environment:
|
||||||
POSTGRES_USER: ${POSTGRES_USER:-directus}
|
POSTGRES_USER: ${POSTGRES_USER:-directus}
|
||||||
|
|
@ -17,7 +17,7 @@ services:
|
||||||
|
|
||||||
directus:
|
directus:
|
||||||
image: directus/directus:11
|
image: directus/directus:11
|
||||||
container_name: laurel-vow-directus
|
container_name: mostuki-directus
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
depends_on:
|
depends_on:
|
||||||
postgres:
|
postgres:
|
||||||
|
|
@ -28,9 +28,9 @@ services:
|
||||||
- directus_uploads:/directus/uploads
|
- directus_uploads:/directus/uploads
|
||||||
- directus_extensions:/directus/extensions
|
- directus_extensions:/directus/extensions
|
||||||
environment:
|
environment:
|
||||||
KEY: "${DIRECTUS_SECRET:-laurel-vow-dev-key}"
|
KEY: "${DIRECTUS_SECRET:-mostuki-dev-key}"
|
||||||
SECRET: "${DIRECTUS_SECRET:-laurel-vow-dev-secret}"
|
SECRET: "${DIRECTUS_SECRET:-mostuki-dev-secret}"
|
||||||
ADMIN_EMAIL: "${DIRECTUS_ADMIN_EMAIL:-admin@laurelvow.fr}"
|
ADMIN_EMAIL: "${DIRECTUS_ADMIN_EMAIL:-corentin.jog@gmail.com}"
|
||||||
ADMIN_PASSWORD: "${DIRECTUS_ADMIN_PASSWORD:-changeme-please}"
|
ADMIN_PASSWORD: "${DIRECTUS_ADMIN_PASSWORD:-changeme-please}"
|
||||||
DB_CLIENT: "pg"
|
DB_CLIENT: "pg"
|
||||||
DB_HOST: "postgres"
|
DB_HOST: "postgres"
|
||||||
|
|
@ -48,7 +48,7 @@ services:
|
||||||
build:
|
build:
|
||||||
context: .
|
context: .
|
||||||
dockerfile: Dockerfile.dev
|
dockerfile: Dockerfile.dev
|
||||||
container_name: laurel-vow-astro
|
container_name: mostuki-astro
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
depends_on:
|
depends_on:
|
||||||
- directus
|
- directus
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"name": "laurel-vow",
|
"name": "mostuki-photo",
|
||||||
"version": "0.1.0",
|
"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",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "astro dev",
|
"dev": "astro dev",
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,7 @@
|
||||||
const safety = setTimeout(() => { try { boot.remove(); } catch {} }, 6000);
|
const safety = setTimeout(() => { try { boot.remove(); } catch {} }, 6000);
|
||||||
const target = boot.querySelector('.boot__text');
|
const target = boot.querySelector('.boot__text');
|
||||||
const lines = [
|
const lines = [
|
||||||
'> initializing laurel & vow studio . . .',
|
'> initializing mostuki photo studio . . .',
|
||||||
'> loading typography: JetBrainsMono v2.304 . . . OK',
|
'> loading typography: JetBrainsMono v2.304 . . . OK',
|
||||||
'> loading palette: ink #0a0a0a / paper #f4f1eb / accent #5e2ca5 . . . OK',
|
'> loading palette: ink #0a0a0a / paper #f4f1eb / accent #5e2ca5 . . . OK',
|
||||||
'> resolving photographer.heart . . . OK',
|
'> resolving photographer.heart . . . OK',
|
||||||
|
|
@ -86,7 +86,7 @@
|
||||||
if (logo) {
|
if (logo) {
|
||||||
if (active) {
|
if (active) {
|
||||||
logo.dataset.original = logo.dataset.original || logo.innerHTML;
|
logo.dataset.original = logo.dataset.original || logo.innerHTML;
|
||||||
logo.innerHTML = '[ LAUREL_AND_VOW_v1.4.2-rc.1<span class="cursor" aria-hidden="true">▌</span> ]';
|
logo.innerHTML = '[ MOSTUKI_v1.4.2-rc.1<span class="cursor" aria-hidden="true">▌</span> ]';
|
||||||
} else if (logo.dataset.original) {
|
} else if (logo.dataset.original) {
|
||||||
logo.innerHTML = logo.dataset.original;
|
logo.innerHTML = logo.dataset.original;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -18,8 +18,8 @@ cd "$(dirname "$0")/.."
|
||||||
# Charge .env pour POSTGRES_USER / POSTGRES_DB
|
# Charge .env pour POSTGRES_USER / POSTGRES_DB
|
||||||
if [ -f .env ]; then set -a; . ./.env; set +a; fi
|
if [ -f .env ]; then set -a; . ./.env; set +a; fi
|
||||||
|
|
||||||
PG_CONTAINER="${PG_CONTAINER:-laurel-vow-postgres}"
|
PG_CONTAINER="${PG_CONTAINER:-mostuki-postgres}"
|
||||||
DIRECTUS_CONTAINER="${DIRECTUS_CONTAINER:-laurel-vow-directus}"
|
DIRECTUS_CONTAINER="${DIRECTUS_CONTAINER:-mostuki-directus}"
|
||||||
PG_USER="${POSTGRES_USER:-directus}"
|
PG_USER="${POSTGRES_USER:-directus}"
|
||||||
PG_DB="${POSTGRES_DB:-directus}"
|
PG_DB="${POSTGRES_DB:-directus}"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ import fs from 'node:fs';
|
||||||
import path from 'node:path';
|
import path from 'node:path';
|
||||||
|
|
||||||
const URL_BASE = process.env.DIRECTUS_PUBLIC_URL || 'http://localhost:8055';
|
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';
|
const PASSWORD = process.env.DIRECTUS_ADMIN_PASSWORD || 'changeme-please';
|
||||||
|
|
||||||
async function api(method, path, body, token) {
|
async function api(method, path, body, token) {
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@
|
||||||
import 'node:process';
|
import 'node:process';
|
||||||
|
|
||||||
const URL_BASE = process.env.DIRECTUS_PUBLIC_URL || 'http://localhost:8055';
|
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';
|
const PASSWORD = process.env.DIRECTUS_ADMIN_PASSWORD || 'changeme-please';
|
||||||
|
|
||||||
let TOKEN = null;
|
let TOKEN = null;
|
||||||
|
|
@ -262,12 +262,12 @@ async function setSingleton(collection, values) {
|
||||||
await ensurePublicRead('site_settings');
|
await ensurePublicRead('site_settings');
|
||||||
|
|
||||||
await setSingleton('site_settings', {
|
await setSingleton('site_settings', {
|
||||||
studio_name: 'Laurel & Vow',
|
studio_name: 'Mostuki Photo',
|
||||||
city: 'CANNES',
|
city: 'CANNES',
|
||||||
region: 'PACA',
|
region: 'PACA',
|
||||||
country: 'FR',
|
country: 'FR',
|
||||||
coords: '43.55N 7.02E',
|
coords: '43.55N 7.02E',
|
||||||
email: 'hello@laurelvow.fr',
|
email: 'corentin.jog@gmail.com',
|
||||||
est_year: 2018,
|
est_year: 2018,
|
||||||
current_year: 2026,
|
current_year: 2026,
|
||||||
hero_tag: '[01] STUDIO.',
|
hero_tag: '[01] STUDIO.',
|
||||||
|
|
@ -292,7 +292,7 @@ async function setSingleton(collection, values) {
|
||||||
],
|
],
|
||||||
contact_title: 'ON SE PARLE ?',
|
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_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) ============
|
// ============ series (collection) ============
|
||||||
|
|
|
||||||
|
|
@ -10,8 +10,8 @@ const {
|
||||||
tag = '[06] CONTACT.',
|
tag = '[06] CONTACT.',
|
||||||
title = 'ON SE PARLE ?',
|
title = 'ON SE PARLE ?',
|
||||||
body = "DATE · LIEU APPROXIMATIF · NOMBRE D'INVITES. REPONSE SOUS 48H.",
|
body = "DATE · LIEU APPROXIMATIF · NOMBRE D'INVITES. REPONSE SOUS 48H.",
|
||||||
email = 'hello@laurelvow.fr',
|
email = 'corentin.jog@gmail.com',
|
||||||
addr = 'STUDIO LAUREL & VOW · PARIS · FR',
|
addr = 'STUDIO MOSTUKI · CANNES · FR',
|
||||||
} = Astro.props;
|
} = Astro.props;
|
||||||
const subject = encodeURIComponent("Demande d'information");
|
const subject = encodeURIComponent("Demande d'information");
|
||||||
---
|
---
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ export interface Props {
|
||||||
country?: string;
|
country?: string;
|
||||||
est?: number;
|
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();
|
const year = new Date().getFullYear();
|
||||||
---
|
---
|
||||||
<footer class="site-footer">
|
<footer class="site-footer">
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ export interface Props {
|
||||||
addr?: string;
|
addr?: string;
|
||||||
}
|
}
|
||||||
const {
|
const {
|
||||||
studio = 'Laurel & Vow',
|
studio = 'Mostuki Photo',
|
||||||
addr = 'PARIS / FR · 48.85N 2.34E',
|
addr = 'PARIS / FR · 48.85N 2.34E',
|
||||||
} = Astro.props;
|
} = Astro.props;
|
||||||
---
|
---
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ export interface Props {
|
||||||
yearSuffix?: string;
|
yearSuffix?: string;
|
||||||
}
|
}
|
||||||
const {
|
const {
|
||||||
bar = 'FILE 001 / LANDING / 2026 / STUDIO LAUREL & VOW',
|
bar = 'FILE 001 / LANDING / 2026 / STUDIO MOSTUKI',
|
||||||
tag = '[01] HELLO.',
|
tag = '[01] HELLO.',
|
||||||
displayLines = ['PHOTOGRAPHIE', 'DE MARIAGE.'],
|
displayLines = ['PHOTOGRAPHIE', 'DE MARIAGE.'],
|
||||||
italicLine = 'documentaire.',
|
italicLine = 'documentaire.',
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ export interface Props {
|
||||||
}
|
}
|
||||||
const {
|
const {
|
||||||
items = [
|
items = [
|
||||||
'STUDIO LAUREL & VOW',
|
'STUDIO MOSTUKI',
|
||||||
'EST. 2018',
|
'EST. 2018',
|
||||||
'PARIS / FR',
|
'PARIS / FR',
|
||||||
'10 MARIAGES / AN',
|
'10 MARIAGES / AN',
|
||||||
|
|
|
||||||
|
|
@ -79,12 +79,12 @@ const client = TOKEN
|
||||||
// Fallback values used when Directus is unreachable or returns nothing.
|
// Fallback values used when Directus is unreachable or returns nothing.
|
||||||
// Permet au dev de fonctionner sans Directus running.
|
// Permet au dev de fonctionner sans Directus running.
|
||||||
const FALLBACK_SETTINGS: SiteSettings = {
|
const FALLBACK_SETTINGS: SiteSettings = {
|
||||||
studio_name: 'Laurel & Vow',
|
studio_name: 'Mostuki Photo',
|
||||||
city: 'CANNES',
|
city: 'CANNES',
|
||||||
region: 'PACA',
|
region: 'PACA',
|
||||||
country: 'FR',
|
country: 'FR',
|
||||||
coords: '43.55N 7.02E',
|
coords: '43.55N 7.02E',
|
||||||
email: 'hello@laurelvow.fr',
|
email: 'corentin.jog@gmail.com',
|
||||||
est_year: 2018,
|
est_year: 2018,
|
||||||
current_year: 2026,
|
current_year: 2026,
|
||||||
hero_tag: '[01] STUDIO.',
|
hero_tag: '[01] STUDIO.',
|
||||||
|
|
@ -109,7 +109,7 @@ const FALLBACK_SETTINGS: SiteSettings = {
|
||||||
],
|
],
|
||||||
contact_title: 'ON SE PARLE ?',
|
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_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',
|
||||||
};
|
};
|
||||||
|
|
||||||
export async function getSiteSettings(): Promise<SiteSettings> {
|
export async function getSiteSettings(): Promise<SiteSettings> {
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ import { getSiteSettings } from '../lib/directus';
|
||||||
const s = await getSiteSettings();
|
const s = await getSiteSettings();
|
||||||
const ts = new Date().toISOString();
|
const ts = new Date().toISOString();
|
||||||
---
|
---
|
||||||
<Layout title="404 // LAUREL & VOW // FILE NOT FOUND" description="Page introuvable.">
|
<Layout title="404 // MOSTUKI // FILE NOT FOUND" description="Page introuvable.">
|
||||||
<main class="err-wrap">
|
<main class="err-wrap">
|
||||||
<div class="err-bar">ERROR · 404 · {s.studio_name.toUpperCase()} · {s.city} · {s.country}</div>
|
<div class="err-bar">ERROR · 404 · {s.studio_name.toUpperCase()} · {s.city} · {s.country}</div>
|
||||||
<p class="err-code">404<span class="cursor" aria-hidden="true">▌</span></p>
|
<p class="err-code">404<span class="cursor" aria-hidden="true">▌</span></p>
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,7 @@
|
||||||
const safety = setTimeout(() => { try { boot.remove(); } catch {} }, 6000);
|
const safety = setTimeout(() => { try { boot.remove(); } catch {} }, 6000);
|
||||||
const target = boot.querySelector('.boot__text');
|
const target = boot.querySelector('.boot__text');
|
||||||
const lines = [
|
const lines = [
|
||||||
'> initializing laurel & vow studio . . .',
|
'> initializing mostuki photo studio . . .',
|
||||||
'> loading typography: JetBrainsMono v2.304 . . . OK',
|
'> loading typography: JetBrainsMono v2.304 . . . OK',
|
||||||
'> loading palette: ink #0a0a0a / paper #f4f1eb / accent #5e2ca5 . . . OK',
|
'> loading palette: ink #0a0a0a / paper #f4f1eb / accent #5e2ca5 . . . OK',
|
||||||
'> resolving photographer.heart . . . OK',
|
'> resolving photographer.heart . . . OK',
|
||||||
|
|
@ -86,7 +86,7 @@
|
||||||
if (logo) {
|
if (logo) {
|
||||||
if (active) {
|
if (active) {
|
||||||
logo.dataset.original = logo.dataset.original || logo.innerHTML;
|
logo.dataset.original = logo.dataset.original || logo.innerHTML;
|
||||||
logo.innerHTML = '[ LAUREL_AND_VOW_v1.4.2-rc.1<span class="cursor" aria-hidden="true">▌</span> ]';
|
logo.innerHTML = '[ MOSTUKI_v1.4.2-rc.1<span class="cursor" aria-hidden="true">▌</span> ]';
|
||||||
} else if (logo.dataset.original) {
|
} else if (logo.dataset.original) {
|
||||||
logo.innerHTML = logo.dataset.original;
|
logo.innerHTML = logo.dataset.original;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue