diff --git a/ASSETS.md b/ASSETS.md index 0dd30fe..6d4c4a8 100644 --- a/ASSETS.md +++ b/ASSETS.md @@ -75,6 +75,25 @@ direction — since the current site shows almost everyone except him in that ro | `assets/img/media-glamour.jpg` | Speak (`media` credits) | Poster frame for Glamour's styling competition *Dress to Kill* (16:9). Source video: https://www.youtube.com/watch?v=_KzZ2pqT_6g | | `assets/img/about-portrait.jpg` | About | A strong editorial portrait of Quentin. | +## The Archives page + +`/archives` is the portfolio, driven by `content/archives.yaml` (`sections[].images`), +not by fixed slots: each entry is a `{ src, alt, cap }` pointing at any file under +`public/assets/img/`. Most of them currently live in `assets/img/gallery/`. + +- **Budget 5 to 10 photos per section**, chosen for name recognition first, then + for how dynamic the image is. Past that, adding means replacing. +- **Name the person in `alt` and `cap` when the shoot is a named client.** That, plus + the `clients.names` line on the page, is what makes a search for that name reach + the site. Get the spelling exactly right. +- Sections: `celebrity`, `editorial`, `commercial`, `red-carpet`. A section with no + images is skipped on the page, so one can be defined before its photos exist. +- **Run `python3 tools/optimize_images.py` after adding files.** It now covers the + `gallery/` subfolder, and without it the new photos ship as single oversized JPEGs. +- **Rights:** only publish photos the owner has the rights to. Press-agency comps + (Getty, WireImage, Shutterstock) carry visible watermarks and are licensed for + review, not publication. Ask for the clean licensed file instead of shipping one. + ## Video — the speaking reel The Speak page has a play-button poster linking to `contact.html` as a placeholder. Replace it with the real two-minute reel cut from the **Tommy Hilfiger interview**, diff --git a/CLAUDE.md b/CLAUDE.md index 3867889..c2fcd74 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -159,6 +159,40 @@ category keys and shoot slugs in sync with the YAML (CI checks the keys). Never shoots from different categories into one set: Celebrity men and Celebrity women are separate categories, as they were on the old site. +Note the Work page no longer carries the old archive tile strip; it links to The +Archives instead. `galleries` still backs the Work case-study lightbox buttons. + +## The Archives page + +`/archives` ([src/pages/archives.astro](src/pages/archives.astro), +`content/archives.yaml`) is the portfolio: `sections` of `{ key, title, intro, +images[] }`, one section per area of work (Celebrity, Editorial, Commercial, Red +carpet). It is the owner's front door for portfolio material, so it is the first +place new work should land. + +- **Every photo is a real `` on the page.** That is the point of the page, and + it is also the only reliable way image search sees the portfolio (the Work + lightbox builds its DOM from JSON, which no crawler executes). +- **A section with no photos is skipped**, so an area of work can be defined in the + YAML before its images exist without shipping an empty grid. +- **The lightbox is reused unchanged.** Each section is emitted as a one-shoot + category in ` + + + diff --git a/src/pages/sitemap.xml.ts b/src/pages/sitemap.xml.ts new file mode 100644 index 0000000..b26774e --- /dev/null +++ b/src/pages/sitemap.xml.ts @@ -0,0 +1,86 @@ +/** + * sitemap.xml, generated at build time. + * + * Two jobs: + * 1. List the six pages (what the hand-written public/sitemap.xml used to do). + * 2. Declare every photo each page shows, as entries, so Google + * Images can find them. + * + * (2) is the reason this is generated rather than hand-written. Most of the + * portfolio photos are only ever inserted into the DOM by the lightbox, from + * the JSON in