The /iris-reading route (iris-reading.astro, 4495 lines) — a service/marketing
phoenix-be, this page is mostly self-contained direct content —
prose + <Image> evidence cards + one big in-file data table — and composes almost
nothing: a single Phase-3 component (JointOfferCard variant="iris") and
astro:assets Image. A single-file node — no Children section. The
documentation value is the page’s shape, in-file data model, and wiring, not its
editorial content; prose and data rows are not transcribed here.:1-170)export const prerender = true (iris-reading.astro:169) — static page.:2-4): Image from astro:assets; MainLayout
(../layouts/MainLayout.astro); JointOfferCard (../components/JointOfferCard.astro).:44): pageMeta from ../data/pageMeta → consumed as
pageMeta.irisReading (a Phase 5 file; only the import is noted here).../assets/* image imports (:5-43), all imported ImageMetadata used
directly via <Image src={…}>. 31 are direct ../assets/*.jpg (:5-35,
Oliver photo/logo, example irises, lesion-progression photos, testimonial
screenshots, photo-guide images); 8 are the ../assets/iridology-comparison/*
set (:36-43, .jpeg/.png) referenced from classicalComparisonExamples. Names
are not transcribed here. None are dead (see Invariants).classicalComparisonExamples (:46-167) — the page’s main structured data
and most documentation-worthy artifact. A const array of 6 rows; row shape
copied verbatim from source (with optionality marked):
{
sign: string, // :48 etc.
signNote?: string, // present only on row 1 (:49)
signImages?: { src: ImageMetadata, alt: string }[], // absent on row 5 (:141)
typical: string[], // required, every row
typicalImages?: { src: ImageMetadata, alt: string }[], // present only on row 4 (:129)
aajonus: string[], // required, every row
aajonusImages?: { src: ImageMetadata, alt: string }[], // present only on row 2 (:95)
}
The typical/aajonus strings contain embedded \n line breaks and (1)/(2)
source citations. The 6 signs are: “Coloured Markings, Central Heterochromia”
(:48), “Wavy Fibers” (:83), “Lacunae (gaps in fibers)” (:103), “Sclera”
(:118), “Do irises change over time?” (:141), “Green eyes” (:153). The
dozens of string values are not transcribed — document the schema + row count,
not the content.<h2>, 14 <h3>, 6 <h4>; one line each)The page wraps a single <article class="iris-page">. Only 3 <h2> anchor the
top-level structure; most sections are <section class="simple-card …"> blocks keyed
by id (used by the plain table-of-contents at :224-238) with <h3>/<h4>
sub-headings, mostly without their own ids.
:172-238) — <h1>Iris Readings</h1> (:174), byline “with
Oliver”, <time datetime="2026-05-06">May 6, 2026</time> updated-date (:177),
Oliver logo/portrait <Image>s (:183, :192), intro copy, then a plain
.table-of-contents--plain nav (:224) anchor-linking the 8 sections below.:240-348) — a <div class="bundle-summary-wrap" hidden>
(“At-a-glance: with vs. without Rom’s coaching”) wrapping a <table class="bundle-summary">
(:245-340): a 2-row × 4-col price matrix (Oliver alone vs. with Rom’s coaching;
Questions add-on £15 / Mini £20 / Full recorded £60 / Full written £180). Hidden
by default (hidden attr at :240).#services (<section> :350) — .service-list of 4 service items: Mini
reading (£20 or free, :353), Full recorded reading (£60, :405), Full written
reading (£180, :457, hidden), Questions add-on (£15, :486); each with GBP
price + approx. USD/EUR conversions. Then the “upgrade” card <h3>Upgrading your iris reading</h3> (:504), the <JointOfferCard variant="iris" />
(:515), and a .payment-line (PayPal/bank/crypto; “Prices set in GBP”, :517).#contact (<section> :532) — .contact-list of 7 hard-coded links to
Oliver (Telegram/X/TikTok/Instagram/YouTube @oliveriridology, email, Google
Form); inline SVG platform icons. See Invariants for the URLs.#striking-examples (<section> :699) — <h2>Striking examples of iridology</h2> (:701). A .iridology-example-list of <article> example
cards, each = meta labels (Person / Source) + <h3 class="iridology-example__title">
<Image> + findings prose: Oliver’s own iris (:710), an athlete leg injury
(:760), brown-eye liver scarring (:808), blue-eye IBS/antibiotics (:845),
smoking suspected (:881), smoking + grey city-air (:912), left shoulder/neck
tumour (:949), a grouped lung/ear/thyroid trio (:985), and a both-eyes
communication-center pair (:1074). The last card — a 3-photo lesion-progression
block “Closed lesion opening” (<article … --timeline> :1133, hidden) — has
a thumbnail strip + detail items with <h4>Photo 1/2/3</h4> (:1217/1242/1272).#testimonial (<section> :1289) — a featured client <blockquote> with
client photo + 2 iris <Image>s (:1297-1361), a - C.G. short quote (:1364),
a .testimonial-screenshot-list of 5 screenshot <Image>s (:1382-1435), and a
hard-coded <video> (/media/video/testimonies/oliver-testimonial.mp4, :1441).#diy-iridology-photography-guide (<details> :1448) — collapsible “How to
take iris pictures” guide. Links the source PDF (:1481), <h3>The 3 Options for Taking Photos</h3> (:1487), an in-guide ToC (:1496), then 3 options as <h4>:
Professional Photographer (:1511), Best Smartphone Guide (:1595), Iris Art Shop
(:1655); 6 photo-guide <Image>s interspersed.#latest-videos (<section> :1712) — <h2>Latest videos from Oliver</h2>
(:1713); two hard-coded YouTube embeds (see below).:1742-1796) — “Iridology guide”
(/downloads/iridology_guide_oliver.pdf, :1760) and “Annotated iridology
consult” (/downloads/annotated-iridology-consult.pdf, :1789); plain <a>
cards, not <details>.#practice (<section> :1798) — “How I do iridology” prose from Oliver
(.long-copy, :1803-1846); prose only, no media.#comparisons (<section> :1849) — <h2>Comparisons with other iridology readings</h2> (:1851). Three .comparison-items: (1) “What differs from a
classical iridologist reading?” → a <details> wrapping the
classical-comparison-table (see below); (2) “What differs from an AI reading?”
→ a <details> AI-review panel (see Other notable content); (3) “What about in
the Primal Diet community?” → prose linking “Dave” (:2519).:1911-1987)The classical-comparison-table is built by
classicalComparisonExamples.map((example) => …) (:1912) — one
<article class="classical-comparison-row"> per row, with three cells (IRIS SIGN /
Typical / Aajonus). Nested .maps render the optional/required arrays, each guarded
by its optional field:
example.signImages?.map(...) → <Image> per sign image (:1915-1930);
<h3>{example.sign}</h3> (:1932) + {example.signNote && <p>} (:1933).example.typical.map(...) → <p> blocks (:1937); then
example.typicalImages?.map(...) → <Image> (:1943-1958).example.aajonus.map(...) → <p> blocks (:1962); then
example.aajonusImages?.map(...) → <Image> (:1968-1983).The <h3> at :1932 is rendered inside the map, so it emits one <h3> per
row (the 6 sign headings counted above). All comparison <Image>s pull src from
the ImageMetadata objects stored in classicalComparisonExamples (linked above).
:1712-1740)Wires two hard-coded <iframe> embeds — not data — to
youtube-nocookie.com/embed/:
o9_jVGwH78Y (:1719) — “A good iridologist will save you from poisoning your
children”.DrPGNM89hck (:1731) — “You’ve never heard of iridology, the only true way to
track your health (here’s undeniable proof)”.Both loading="lazy", referrerpolicy="strict-origin-when-cross-origin". To
add/rotate a video, edit the markup directly (no video list/data const).
../layouts/MainLayout.astro — <MainLayout {...pageMeta.irisReading}>
(:172), spreading the pageMeta.irisReading SEO block. See src/layouts/DOCS.md
for the MainLayout → Layout chain (<head>/SEO, scroll-nav, sitemap, chrome);
../data/pageMeta is a Phase 5 file — import only, not read here.JointOfferCard rendered once as <JointOfferCard variant="iris" />
(:515). This page is the real consumer of variant="iris" (the coaching page
uses variant="coaching"). See src/components/DOCS.md for what the card does —
not re-derived here.astro:assets: the Image component + the 39 ../assets/** imports (incl. the
../assets/iridology-comparison/* set). Images are imported ImageMetadata and
passed straight to <Image src={…}> (some via the classicalComparisonExamples
objects).pnpm check at eaf9765: zero diagnostics for iris-reading.astro (unlike
phoenix-be.astro, which flags 16 declared-but-unused symbols + an execCommand
hint at the same HEAD). All 39 image imports and the pageMeta/JointOfferCard
imports are referenced. (Note: the lesion-progression images are referenced inside
the hidden timeline article — declared and used, just visually hidden.)client:* directive, no client <script>,
no getImage() async resolve, no import.meta.env — confirmed by search. The page
is fully static; all interactivity is native <details>/<summary> (photo guide,
AI-review panels, classical-examples panel) and CSS. Don’t infer reveal/toggle JS.<style> block at the end (:2530-4495) — a large single scoped
<style> (no :global, no second script). It defines all .iris-page /
.simple-card / .bundle-summary / .iridology-example / .photo-guide /
.classical-comparison / .ai-review / .video-card styling.hidden in source (present but not displayed by default):
the bundle-summary table wrap (:240), the “Full written reading” service item
(:457), and the entire “Closed lesion opening” timeline article (:1133). They
render in the DOM (their imports/markup are live) but are visually hidden.aria-hidden="true" .ai-review-notes__legacy plain-text block (:2400-2505)
that restates (only SuperGrok + Gemini) the same reviews rendered structurally
above it (:2063-2382) — a legacy/fallback duplicate, not new data.:2084), Claude Opus 4.6 Extended (53%, :2151), Gemini 3.1 Pro (47%,
:2218), SuperGrok 4.20 Beta Expert (42%, :2290), SuperGrok Expert (30%,
:2347); “Last date of review: March 13, 2026” (:2000). Model favicons are
hotlinked from https://www.google.com/s2/favicons?domain=… (:2068 etc.),
not bundled assets.:539-696): t.me/oliveriridology, x.com/oliveriridology,
tiktok.com/@oliveriridology, instagram.com/oliveriridology,
youtube.com/@oliveriridology, mailto:oliveriridology@proton.me,
forms.gle/r6WLENuECqPXg5w67./media/video/testimonies/oliver-testimonial.mp4 (:1441) +
the two YouTube embed IDs above (served from public/ / YouTube, not bundled).public/downloads/):
/downloads/diy-iridology-photography.pdf (:1481),
/downloads/iridology_guide_oliver.pdf (:1760),
/downloads/annotated-iridology-consult.pdf (:1789).instagram.com/iridology.with.hayley (:1887),
tiktok.com/@healingeyesholistics (:1895), instagram.com/alway5isnow (Dave,
:2519); the AI-review prompt cites aajonus.net/iridology-notes (:2027).<time datetime="2026-05-06">, :177) — not derived; a staleness consideration.<Image>s and the example-card images sit inside
collapsed <details> and hidden blocks; whether those blocks are intended to
ship hidden indefinitely or are WIP/temporarily disabled is unclear from code —
needs author input (notably the entire “Closed lesion opening” timeline article at
:1133 and the bundle-summary table at :240).