Haute Lumière · A build brief for Claude Code

The Landing

This document specifies index.html — the front door at hautelumiere.life — completely enough to rebuild it from nothing. Every section, every string, every token, every measurement, and the reasoning behind each.

It is a companion to The Site, which covers the whole property: deployment, the crawl infrastructure, adding an issue, and the failure modes that span every page. This one goes deep on the single page that decides whether anyone sees the rest.

The landing page is the only document on the site with a job that is not editorial. Every other page exists to be read; this one exists to route. That difference governs every decision below, and it is the reason the page is shorter, faster, and more disciplined than anything else in the property.

File
index.html, repository root
Register
Vespers by default · all seven available
Sections
Eight, in a fixed order
Weight
~28 KB of markup · two plates
Dependencies
Two Google Font links. Nothing else.
Scripts
One inline block, ~70 lines

Part I

The Job

A landing page has exactly one function and almost every landing page fails it by trying to do six. This one routes four kinds of arrival to four different destinations without asking anyone to read a brochure first.

Who arrives

Four people, with genuinely different needs, and the page has to serve all four without a menu of segments.

The forwarded reader. Someone sent her a link to an issue with one sentence about why. She has already read something and come back to the root to find out what this is. She needs the shape of the whole thing in about fifteen seconds. She is the most common arrival and the most likely to become everything else.

The searcher. He arrived on a phrase — living systems economics, the development prerequisite, Luminous PESTLE Ecology. He landed on an issue, not here, and reaches the front door only if the issue earned it. His question is whether there is more of this.

The gatekeeper. A family office principal, trusts counsel, or private banker, doing diligence on behalf of somebody else. He is looking for reasons to disqualify: unverifiable claims, a missing credential, urgency tactics, anything that reads as a funnel. He will spend ninety seconds and he will find whatever is weakest.

The candidate. A woman deciding whether to begin a conversation. She has almost certainly read at least one full document already. She is not evaluating the offer — she is evaluating whether the person behind it is serious.

Four arrivals, four destinations, one page, no segmentation menu.

The four seconds

Before anyone reads a word, the page has to establish three things visually.

That this is a publication rather than a service. Established by the hero being a full-bleed photograph with a masthead over it, set the way a magazine cover is set. Nobody mistakes it for a consultancy.

That it is unusually well made. Established by the type — a 132px display serif against 9px tracked sans, a contrast ratio of roughly fourteen to one. Proportional generosity reads as care before it reads as anything else.

That it is calm. Established by what is absent: no popup, no banner, no counter, no autoplay, no chat widget, no scarcity language. The absence is felt immediately even though nobody could name it.

One decision

The page asks for exactly one thing, twice, and never more.

In the hero: Read the quarterly as the solid button, Begin a conversation as the ghost. Two actions, and the reading one is primary — because the doctrine is proof before the invoice, and the page must not invert that.

Everything below the hero is elaboration for people who did not act on the hero, and it is ordered by what a hesitant reader needs next: what this is (the premise), where to go (four doors), why to trust it (three commitments), who wrote it (the author). No section introduces a new call to action. The doors are the call to action.

What it must not do

Six refusals, each of which a competent conversion optimiser would advise breaking. All six are load-bearing.

No email capture. There is no list, and the site says so in three places. A signup form here would contradict the Protocol on the page that introduces it.

No prices. Governed by prices.json, where policy.display is enquiry. The landing page names no figure at all — not even the group programme's single permitted one, which belongs in its own place.

No testimonials. The Protocol promises that no cohort list exists and that nobody is asked to consent to being named. A quote from a member would break that in the most public possible way.

No urgency. No cohort countdown, no seats-remaining counter, no next-intake date. The eleven-seat cap is stated as a permanent structural fact, which is stronger than scarcity theatre and does not expire.

No video. A hero video would be the single heaviest asset on the property and would autoplay motion at somebody who came to read.

No analytics script. Cloudflare's aggregate view is sufficient. A tracker on the page that links to the Protocol makes the Protocol a lie.

Part II

The Sequence

Eight sections in a fixed order. The order is the argument, and reordering them breaks it — each one answers the question the previous one raises.

The bar

46 pixels, fixed to the top, z-index:400. Glass: backdrop-filter: blur(16px) saturate(1.2) over rgba(var(--veil),.055), with a one-pixel --rule border beneath.

Contents, left to right: the mark (a ring bisected by a line, 15px, in --gold) with the wordmark beside it; seven site links in 7.5px Manrope tracked .2em; the clock; the seven register swatches at 19px.

The links row is flex:1 1 auto with min-width:0 and overflow-x:auto, scrollbar hidden. At narrow widths the links scroll rather than wrap — the bar must stay exactly one row tall at every width, because a two-row bar breaks the padding-top that clears it.

It disappears in print. Non-negotiable.

The hero

min-height:100svh — the small viewport unit, deliberately, so mobile browser chrome does not cause a jump when it retracts. display:flex; align-items:flex-end, so content sits at the bottom regardless of height.

Three layers over each other:

The plate. img/hl8/cover.jpg, absolutely positioned, object-fit:cover with object-position:50% 0% — entering from the top so a crown is never cropped, per the house rule. Graded with sepia(.16) saturate(.9) contrast(1.03).

The veil. A four-stop vertical gradient: rgba(24,16,6,.5) at the top so the bar has something to sit on, dropping to .1 at 34% so the figure is not muddied, back to .5 at 72%, and .9 at the base so the display type has contrast.

The bloom. A 38vw radial gradient in rgba(232,196,138,.34), blurred 50px, breathing on a 15-second cycle between 40% and 66% opacity at 1.0–1.07 scale. It is the only animation on the page and it is slow enough that nobody catches it moving.

Then the content: kicker, masthead, deck, two buttons. The masthead is clamp(46px, 10vw, 132px) at weight 300, line-height:.94, letter-spacing:-.03em, with the second line's key word in italic #E8C48A.

The premise

The first thing on paper, and it exists to answer what is this for someone who did not click.

Structure: eyebrow, a heading that states the problem, an italic lede that states the position, two paragraphs of argument, then a four-figure strip. The strip is the only place on the page with numbers — 12 editions · 500 volumes · 7 registers · 11 seats — and each is a permanent structural fact rather than a metric that changes.

The first plate

A full-bleed photographic band at min-height:60svh carrying one pull-quote and its source. Left-weighted gradient (.8 to .14) so the text has a dark field and the image still breathes on the right.

The quote is "Abundance is not naïve. It is the oldest truth in the universe." attributed to Nº 06. Its job is to prove the writing is worth reading by showing a sentence of it, rather than claiming the writing is good.

Four doors

The routing section, and the only one that must not be cut. Set on the inverting panel (see Part III) so it reads as a distinct movement.

Four columns, hairline-separated, each with a one-word verb as its label — Read · Practise · Cross · Keep — a title, three sentences, and a single link. The verbs are the actual routing logic: what the visitor wants to do, not which product she wants.

The four destinations

ReadIssues.html · Practise → the Concierge Eleven · Cross → the Island · Keep → Tantra I. In that order, because it runs from the free and immediate to the expensive and considered.

Three commitments

The trust section, aimed squarely at the gatekeeper. Three columns: proof before the invoice, nothing reports home (linking to the Server standard), the refusals are the product.

Then a pull-quote — "Nobody is talked into a new economics. Something has to just work better in front of them." — and a row of subject tags linking into the specific issues that cover them. The tags are the searcher's path: he arrived on one phrase and this is where he finds the others.

The second plate

The same band structure, carrying "Eleven seats. Ever. Not eleven a year — eleven." from the Concierge Eleven. Placed immediately before the author section because it is the scarcity fact, stated once, structurally, without a countdown.

The author

Last, and deliberately not first. Three paragraphs: the role and the entity, what the work argues across the two bodies of writing, and the credential line — sixty-three registered publications, five hundred volumes, the work is the credential.

It goes last because a page that opens with the author is a personal brand page, and this is a publication. But it must be present, because the gatekeeper will not proceed without it.

The foot

On the inverting panel. The mark, one italic line — "Read it slowly. Nothing here is in a hurry, and nothing here will ask you to be." — then three link columns (Read · The Practice · The Standard) and a rule line carrying the copyright, the imprint, the terms policy, and the ORCID.

Part III

The Mechanics

Five implementation details that are not obvious from reading the markup, and each of which was arrived at by fixing something that was broken.

The panel pair

The most important token mechanism on the page, and the one most likely to be broken by an edit.

Two sections invert — the four doors and the footer. The naive implementation sets background: var(--ink); color: var(--paper), which works in the four light registers and fails completely in the three dark ones, where --ink is already cream and the section becomes cream text on cream.

So every register declares an explicit pair: --panel-bg, --panel-fg, and --panel-fg-rgb. The dark registers get a genuinely darker panel than their own paper — #241C14 for Vespers, #070A0F for Midnight, #060A07 for Nocturne — so the panel still reads as a distinct surface.

--panel-fg-rgb is an unbracketed triplet, so every alpha variant inside the panel can be written rgba(var(--panel-fg-rgb),.62). That is what lets a single declaration produce correct muted text in all seven registers.

The rule

There is not one literal rgba(255,255,255,…) anywhere in the file, and there must never be. If you add one inside a panel it will be invisible in three registers.

Chrome over photography

The bar sits over the hero photograph for the first viewport and over paper thereafter. Those need opposite chrome, and a fixed choice fails one of them.

The solution is a one-pixel sentinel appended to the hero at top:46px — the bar's own height — watched by an IntersectionObserver. While it intersects, body.over-hero is set and the bar switches to light chrome: rgba(20,13,4,.22) ground, cream text, gold clock hands, a cream-alpha border. Past it, everything returns to register tokens.

Both states cross-fade over 400ms on the reader's curve. Without the transition the switch is a jarring pop, which violates the motion doctrine.

There is a fallback: browsers without IntersectionObserver get over-hero applied permanently, which is wrong below the hero but legible, and the population is negligible.

The clock

24px, two hands, four ticks. Its hands are positioned by computing the angle in JavaScript and writing x2/y2 on the SVG lines — not by CSS rotation, because rotating a stroked line about a non-centre origin is fiddly and this is exact.

It has one function: clicking it clears the stored register and applies the one matching the current hour. It is not a stepper and it does not cycle. The seven swatches are for direct choice.

On load: if localStorage holds a register, use it and leave the clock decorative. If not, derive from the hour. The minute hand refreshes every twenty seconds.

The hour mapping is fixed across the whole property: Nocturne before 5, Aurora to 7, Daylight to 11, Solstice to 15, Dusk to 18, Vespers to 21, Midnight after.

Contrast, measured

Two failures were found on this page by measurement rather than by eye, and the lesson generalises.

Tokens are calibrated for the size they were designed at. --muted is tuned for 10–14px trellis text and lands in the 3.6–4.1 band when used for anything larger on light paper. --gold-d does the same.

The fix is color-mix against --ink, which inverts per register so one declaration corrects all seven: color-mix(in srgb, var(--muted) 55%, var(--ink)) for recessive text, 62% where it needs to be slightly stronger.

And a warning about measuring. Browsers return computed colours as color(srgb 0.84 0.83 0.79) in some cases and rgb(214, 212, 201) in others. A luminance function that assumes one format will silently produce nonsense for the other — which happened, and produced two consecutive wrong readings before it was caught. Measure against a probe element set to var(--paper), not against document.body, which carries the desk colour.

The type scale

Everything is clamp(). No media queries anywhere on the page.

ElementSizeFace
Mastheadclamp(46px,10vw,132px)Serif 300, -.03em
Section headingclamp(30px,5vw,62px)Serif 300, -.024em
Pull-quoteclamp(22px,3.4vw,44px)Serif 300 italic
Hero deckclamp(18px,2.3vw,29px)Serif 400
Ledeclamp(17px,2vw,24px)Serif italic
Bodyclamp(16px,1.7vw,20px)Serif 400, 1.58
Figure32pxSerif 300
Column title22pxSerif 400
Eyebrow8pxSans 600, .32em
Nav link7.5pxSans 600, .2em
Tag7pxSans 600, .18em

The display-to-label ratio is about 16:1 at full width. That single ratio does more work than any other decision on the page.

Part IV

The Copy

Every string on the page, so it can be reproduced exactly, and the reasoning where the reasoning is not obvious.

Every string, in order

Hero. Kicker: Haute Lumière · Luminous Prosperity. Masthead: Living systems, set as objects. — with objects in italic gold. Deck: A quarterly, a publishing house, an island, and a practice. Each thing we make opens offline, changes register with the hour, and prints to paper without a build step. Buttons: Read the quarterly · Begin a conversation.

Premise. Eyebrow: The premise. Heading: Most of what is written about living systems is not itself alive. Lede: It arrives as a slide, a summary, a thing to be got through. We took the opposite position and it governs everything here. Figures: Editions 12 · Volumes 500 · Registers 7 · Seats, ever 11.

Doors. Eyebrow: Four doors. Heading: One body of work, entered four ways. Lede: Each stands alone. Together they are one argument, made at four different scales. Then Read/The Quarterly, Practise/The Circle, Cross/The Island, Keep/The Books.

Commitments. Eyebrow: What is different. Heading: Three commitments that decide everything else. Then One/Proof before the invoice, Two/Nothing reports home, Three/The refusals are the product.

Author. Eyebrow: The author. Heading: Ammanuel Santa Anna. Closing lede: Sixty-three registered publications with permanent citation. Five hundred volumes in the catalogue. The work is the credential.

Foot. Read it slowly. Nothing here is in a hurry, and nothing here will ask you to be.

Why the hero reads that way

Living systems, set as objects is doing three things in five words, which is why it survived several better-sounding alternatives.

It names the subject — living systems — which is the one phrase that unifies economics, developmental psychology, tantra and software under one roof. Without it the page has no thesis.

It names the method — set as objects — which is the actual differentiator. Everyone writes about living systems. Almost nobody sets the writing as an object that behaves like one.

And it is a claim that can be checked in one click, which is the doctrine. The deck immediately names the three checkable properties: opens offline, changes register with the hour, prints without a build step. A reader who doubts it can verify all three in about twenty seconds.

The forbidden vocabulary

Words that must never appear on this page, each because it belongs to a register the property has explicitly refused.

From wellness marketing: journey, transformation, unlock, elevate, high-vibrational, abundance mindset, manifest, aligned, sacred container, hold space.

From conversion writing: limited, exclusive, don't miss, spots remaining, apply now, get started, learn more, join the movement, transform your life.

From the wrong kind of credibility: world-class, cutting-edge, revolutionary, game-changing, proven system, thought leader, best-in-class.

And structurally: no reading-time estimate, no as featured in, no logo wall, no percentage, no five-star anything.

The house voice is a contemplative who has also closed a magazine on deadline. Neither half is optional.

Part V

Performance

This page's speed decides whether the rest of the site is ever seen, and there is exactly one thing on it heavy enough to matter.

The hero image

The cover plate is the largest contentful paint on the page. It is the score. Four changes, in order of value, and none of them is done yet:

Preload it. A <link rel="preload" as="image"> in the head starts the fetch before the parser reaches the body. Typically worth several hundred milliseconds on its own.

Mark it high priority. fetchpriority="high" on the hero image, and loading="lazy" on both plate-band images — they are well below the fold and currently load eagerly for no reason.

Ship a modern format. A WebP or AVIF beside each JPEG behind a <picture> element. Roughly halves the bytes at identical quality. Mechanical work, largest single win.

Give it explicit dimensions. width and height attributes so space is reserved before the file arrives. Eliminates the last source of layout shift.

Do not compress the plates destructively to chase a number. Visible artefacts on the photography would cost more than the milliseconds are worth.

Fonts

Two families from Google Fonts with display=swap, and two preconnect hints already in place. The remaining improvement is <link rel="preload"> on the two woff2 files themselves, which removes the brief swap flash.

Do not self-host unless you are also prepared to subset. The unsubsetted files are larger than the CDN's cached delivery, and subsetting Cormorant Garamond will eventually break a glyph in a citation — the é in Lumière, the ō in Tōhoku, the ū somewhere in a Sanskrit term.

The three vitals

Interaction delay is excellent and requires nothing. No framework, no hydration, one inline script of about seventy lines. Nothing blocks the main thread.

Layout shift is good and becomes perfect with the image dimensions and the font preload. The bloom animation uses only transform and opacity, so it is composited and contributes nothing.

Largest contentful paint is the only weak number and it is entirely the hero plate. The four changes above are the whole fix.

Part VI

Findability

The head block

Already complete. Description at 190 characters written as a sentence; keyword set; absolute canonical to the apex with a trailing slash; robots with max-image-preview:large so results can carry a full-width photograph.

Then Open Graph in full — type, site name, locale en_GB, title, description, absolute image URL, image alt — and Twitter cards at summary_large_image.

The graph

The landing page carries a richer JSON-LD payload than any other page: an @graph of four linked nodes rather than a single Article.

Organization at #org, with the ORCID as sameAs. Person at #ammanuel, with jobTitle, the ORCID as identifier, and a knowsAbout array naming the six subject domains. Periodical at #quarterly. WebSite at #site. Each references the others by @id rather than repeating itself.

This is what lets a search engine understand that a person, an organisation, a periodical and a website are four facets of one entity — which is the difference between appearing as a page and appearing as a known publisher.

The card

When the root URL is pasted anywhere, the card shows the hero plate, the title, and one sentence. Two things to verify after any change: that the og:image is still absolute, and that platform caches have been refreshed if the title or image changed after the link was first shared.

Part VII

Changing It

Adding a door

Don't, unless something genuinely new exists. Four is the number a person can hold at once; five becomes a menu and the routing stops working.

If it is unavoidable: add a fifth <article class="col"> to the doors grid. The grid is repeat(auto-fit,minmax(17em,1fr)), so five will reflow to a 3+2 arrangement without any change. Give it a one-word verb, a title, three sentences, one link. Then check that the incomplete second row does not leave a tinted block — the hairlines are on the cells, so it should leave paper.

Adding a tag

One line in the .tags row, linking to the specific issue that covers it. The rule from the taxonomy holds: a tag exists only if two or more documents carry it. A tag of one is a label.

Swapping a plate

Three plates are in use: the hero (img/hl8/cover.jpg) and two bands (img/hl11/part2.jpg, img/hl13/cover.jpg).

The house rules apply in full. Check byte sizes against every existing plate folder first — a photograph appears exactly once across the whole property, and the landing page is the most visible place to break that. Check hands and faces. Keep object-position:50% 0%. And if the new plate is materially lighter or darker, re-check the gradient stops, because the veil is tuned to the plate it sits on.

The next issue

When an issue ships, three things on this page change: the Editions figure in the premise strip, a tag in the commitments row if it opens a new subject, and — only if it is genuinely the best door in — the hero deck. The issue list itself lives in Issues.html, not here; the landing page never enumerates issues.

Part VIII

The Tests

Sixteen points

Before any deploy that touches this file.

  1. Does it open with the network disabled, after the fonts have cached?
  2. Does every one of the seven registers render every element legibly?
  3. Do the two inverting panels invert correctly in all three dark registers?
  4. Does the bar go light over the hero and return past it, with a cross-fade?
  5. Does the clock set the register on a browser with no stored value?
  6. Does a chosen register survive a reload?
  7. Does the bar stay exactly one row tall from 320px to 2560px?
  8. Does every link in the bar, the doors, the tags and the foot resolve?
  9. Is every colour a token — no literal hex, no rgba(255,255,255,…)?
  10. Does every text element clear 4.5:1 against its own surface, measured?
  11. Is color-scheme set correctly per register?
  12. Is there a figure anywhere on the page? There must not be.
  13. Is the masthead legible at 320px without the deck colliding with it?
  14. Does the share card render with the plate in a debugging tool?
  15. Is the canonical absolute and pointing at the apex?
  16. Does the page contain any forbidden vocabulary from Part IV?

What breaks

Cream on cream in a dark register. A panel is using --ink/--paper instead of the panel pair.

The bar is unreadable over the hero. The sentinel was removed, or a new rule outranks body.over-hero.

The bar overlaps the content. A padding shorthand later in the cascade cancelled the padding-top. This has happened.

The bar wraps to two rows. A link was added without checking the scroll container, or min-width:0 was lost.

The hero jumps on mobile scroll. Someone changed 100svh to 100vh.

The bloom stutters. Something other than transform and opacity is being animated.

A door column leaves a tinted block. Hairlines are on the container instead of the cells.

Text is legible but wrong-feeling. A color-mix was pushed too far toward --ink and lost its recessive quality. There is a band; find the lightest value that clears 4.5.

Never change these

The photograph in the hero. Not an illustration, not a gradient, not a video. The page reads as a publication because it opens like a cover.

Reading as the primary action. Read the quarterly is the solid button and Begin a conversation is the ghost. Inverting them inverts the doctrine.

The absence of a form. No email capture, no newsletter, no gate. The conversation lives on its own page and begins with one sentence.

Four doors. Not five, not a dropdown, not a segmented picker.

The seven registers and the clock. This is not a dark mode toggle. It is the property's signature and it is the first thing anyone remembers about the site.

Everything else on this page is negotiable. Those five are what make it this page rather than a competent landing page for something else.

Colophon

The Site covers the whole property — deployment, the crawl layer, adding an issue, the failure modes across every page. This document covers the front door only, and in more depth than that one has room for.

One page, four arrivals, four destinations. No form, no figure, no hurry.