The / route (index.astro, 4204 lines) — the site homepage. It is a
marketing-and-investigation landing/hub page: a Primal Diet intro (hero logo +
title + two Aajonus quotes) that doubles as a condensed version of the
successors/Jim/Phoenix exposé (the same thesis told at length on phoenix-be) and
as a resource hub linking out to the free books, coaching, iris-reading, campaign,
news, roadmap, AI chatbots, and social accounts. Unlike iris-reading (mostly
self-contained content), this page is composition-heavy: most of its substance
is delivered through already-documented components (BookProfileCollection,
BookPurchaseCard, Quote, PersonProfile, BigButton, CampaignLink,
Contact, MailingSubscribe, RevealToggles) plus astro:assets Image and a
lot of inline hard-coded link/social markup. A single-file node — no Children
section. The documentation value is the page’s shape, in-file data, and
composition, not its editorial content; prose and the aiChatbots field values
are not transcribed here.
:1-96)export const prerender = true (index.astro:58) — static page.Image from astro:assets (:2); MainLayout (:4);
and 10 components from ../components/* — PersonProfile (:5), Quote
(:6), External (:7), BigButton (:8), CampaignLink (:9), Contact
(:11), BookProfileCollection (:12), BookPurchaseCard (:13),
RevealToggles (:14), MailingSubscribe (:49, imported mid-asset-block). All
10 are documented in src/components/DOCS.md — see Components used + Dependencies;
not re-summarized here. (External is imported but never rendered — see Invariants.):15): pageMeta from ../data/pageMeta → consumed as pageMeta.home
in the layout call. A Phase 5 file; only the import is noted here.../assets/* image imports (:17-55, interleaved with the
MailingSubscribe import at :49), all imported ImageMetadata passed either to
<Image src={…}> directly or, for the person photos, via .src to PersonProfile/Quote
photo= props. Names not transcribed. Two anomalies (flag, don’t resolve):
:22 — // import rom from '../assets/chris.png';
(note it would have aliased chris.png, the same file chris at :20 uses).:46 imports ../assets/primaldietcoaching_detox_disease.jpg
as primaldietcoaching_detox_disease, and :48 imports the same file under a
second name detox_is_not_a_disease. The :48 alias is the live one (rendered at
:1742); the :46 name is dead (flagged by pnpm check — see Invariants).quoteSourceUrl1 (:61) and quoteSourceUrl2 (:62) — two hard-coded
aajonus.net deep-links with #:~:text= text-fragment anchors, fed (with a
placeholder fallback) into the inline #section-quote panel (not the Quote
component). See Invariants for the URLs.aiChatbots (:63-95) — the page’s main structured data. A const array of
3 entries (NotebookLM / Grok / ChatGPT). Row shape copied verbatim:
{ slug, name, company, price, access, badge?, featured, href, iconSrc }
badge is optional (only NotebookLM has badge: "Best"); featured is a
required boolean (only NotebookLM is true). badge gates the badge <span>
(:362) and featured gates the is-featured class + accent underline (:359).
iconSrc is a hotlinked favicon/logo URL (Google Play CDN for NotebookLM; the
s2/favicons service for Grok/ChatGPT — see Invariants). Field values are not
transcribed; document the schema + count.The page renders inside MainLayout (:100) as a flat list of <section> blocks
(no wrapping <article>). Reveal blocks use the .see-more button + sibling
.hidden-text[hidden] pattern toggled by <RevealToggles /> (:2403) — the page
has no inline <script> (see Invariants). One line per top-level block:
#section1 — hero (:102-135) — <Image src={logo}> (:108) + the page
<h1> “The Primal Diet™ / The life’s work of Aajonus Vonderplanitz” (:112-115).
A .socials block is commented out (:117-131). (#section2 immediately after is
entirely commented out, :137-154.)#section-quote (:157-271) — a <blockquote> .quote-panel with two
Aajonus quote excerpts rendered as inline markup (not the Quote component),
each with a source-link SVG anchor driven by quoteSourceUrl1/quoteSourceUrl2
(placeholder <span> fallback when empty), <cite>— Aajonus</cite> (:265)..main-card — the hub (:273-606) — the page’s resource hub, one <div> of
stacked panels:
.main-card__downloads (:277) — “Download the Primal Diet™ books for free” +
<BookProfileCollection /> (:282).<BookPurchaseCard /> (:285)..essential-links (:287-347) — 4 hard-coded link cards: healthfully.ai
(:288), aajonus.net (:303), /coaching (:319), /iris-reading (:333)..ai-chatbots (:349-409) — <h3 id="ai-chatbots-title">AI Chatbots</h3> (:350),
intro, the aiChatbots.map(...) render site at :358 (one <li> per entry,
linking aiChatbots, above), then an accuracy “copy” paragraph + a ⚠️ WARNING
block (:405)..campaign-quick-panels (:411-450) — 3 hard-coded nav cards: /news (:412),
/campaign (:427), and a .campaign-roadmap-callout → /roadmap (:443)..social-accounts (:454-601) — <h3 id="social-accounts-title"> (:456) over
two <article class="social-block"> (Groups/Chats, Pages) of hard-coded social
links (Telegram/Facebook/Forum/X/Instagram — see Invariants for handles)..main-section — “Campaign to release …” (:608-641) — <h2> (:612) + 2
<BigButton> (/phoenix-be :625, /official-reply targetBlank :631)..main-section — ”… gatekeeping his new books …” (:643-716) — <h2> (:647),
prose, <CampaignLink /> (:712)..main-section — ”… doesn’t want new information to be known.” (:718-1226) —
<h2> (:722); <PersonProfile> for Jim (:773); several <Image> evidence
screenshots; a .see-more/.hidden-text reveal (:874/:878) holding 4 <h3>
sub-blocks — “Detoxification book” (:880), “Food law book” (:1081), “Aajonus’
classes” (:1111), “Iridology consults” (:1190) — each with multiple <Quote>s;
closes with <BigButton href="/campaign"> (:1218). (A <PersonProfile> for Paul
is commented out at :758.).main-section — ”… sitting on Aajonus’ information …” (:1228-1478) — <h2>
(:1232), <Quote> + <Image>s, a .see-more/.hidden-text reveal (:1372/:1377)
with the OWL-trust <Quote>s, <CampaignLink /> (:1440)..main-section — ”… started running a scam coaching business …” (:1480-2108) —
<h2> (:1484); <PersonProfile> for Phoenix (:1495); a hard-coded <video>
(:1554); many <Quote>s; three nested reveals — Inuit/eskimo quote (:1597/:1601),
the freezing-experiment quote + an <audio> element (:1648/:1652), and the
funnel/Ayurveda/specialities evidence (:1809/:1813) which also holds a second
hard-coded <video> (:2050); closes with <BigButton href="/official-coaching-scam">
(:2091) + <CampaignLink /> (:2099)..main-section — ”… promoting one of the worst abusers …” (:2110-2234) —
<h2> (:2114); <PersonProfile> for Chris (:2126); <Image>; <CampaignLink />
(:2178). (A large block of follow-up prose + a chris <Image> is commented out.).main-section — summary (:2236-2274) — no <h2>; a .summary-gradient
panel (:2243) with an <ol> “Summary of the wrongful actions of the official
organization”..main-section — “This has lasted long enough. …” (:2276-2390) — <h2> (:2281);
<CampaignLink text="Sign on change.org" /> (:2292); <Image> poll screenshot;
an .org-contact block with the hard-coded facilitator@wewant2live.com address
(:2333); <BigButton href="/official-reply" targetBlank> (:2356); and
<MailingSubscribe /> (:2369).:2392-2400) — a bare <section> rendering <Contact />
(:2396).<RevealToggles /> (:2403) — the last child before </MainLayout>; supplies
the show/hide behavior for every .see-more/.hidden-text pair above.Counts are literal <Tag occurrences in source at df03444 (live unless noted);
reconcile against the importer table in src/components/DOCS.md (:378-390). Link,
don’t re-derive — each is documented there.
| Component | Count | Prop(s) this page passes |
|---|---|---|
Quote | 26 | photo (.src), name, content or slotted <p>s, source, date (new Date(...)), url; some dialogue turns use followUp={true} |
PersonProfile | 3 live (+1 commented :758) | photo (.src), name, description — Jim (:773), Phoenix (:1495), Chris (:2126) |
BigButton | 5 | href (/phoenix-be, /official-reply, /campaign, /official-coaching-scam, /official-reply); targetBlank={true} on the two /official-reply |
CampaignLink | 5 | none, except one text="Sign on change.org" (:2292) |
Contact | 1 | none (:2396) |
BookProfileCollection | 1 | none (:282) |
BookPurchaseCard | 1 | none (:285) |
RevealToggles | 1 | none (:2403) |
MailingSubscribe | 1 | none (:2369) |
External | 0 | imported (:7) but never rendered — dead import |
Image (astro:assets) | 34 occurrences | src (imported ImageMetadata), alt, width, quality={75} — several occurrences sit inside commented-out blocks |
Total live component usages (the 10 ../components/* components) ≈ 44 (45 if the
commented PersonProfile at :758 is counted), matching the brief’s ~45 estimate;
Image adds the bulk on top.
../layouts/MainLayout.astro — rendered as
<MainLayout {...pageMeta.home} showHeader={false} wrapContent={false}> (:100).
Note the two non-default booleans showHeader={false} and wrapContent={false}
(most pages omit these / default them true) — they suppress the layout header chrome
and the content wrapper so the hero spans full width. See src/layouts/DOCS.md for
the MainLayout → Layout chain and what those props do; ../data/pageMeta is a
Phase 5 file (import only, consumed as pageMeta.home).src/components/DOCS.md): the 10 listed above. Notably this page is
RevealToggles’s only importer (per the importer table) and one of two
MailingSubscribe importers; External is imported but unused.astro:assets: the Image component + the ~37 active ../assets/* imports
(ImageMetadata), passed to <Image src={…}> or via .src to component photo=
props.pnpm check at df03444 (not
assumed). pnpm check is clean overall: 0 errors, 0 warnings, 108 hints. For
index.astro the flagged set is 8 declarations (all ts(6133) “declared but
never read”): the External component import (:7), and 7 image imports never
rendered — aajonus_vs_phoenix (:27), aajonus_so_called_successors (:37),
jim_personality_cult (:40), aajonusnet_new_workshops (:42),
primaldietcoaching_detox_disease (:46, the dead half of the :46/:48
duplicate-source pair — its twin alias detox_is_not_a_disease at :48 is live),
jim_post_long (:53), and paul (:54, used only by the commented-out
PersonProfile at :758). Most correspond to commented-out <figure>/<Image>
blocks still in source. The commented-out import at :22 (// import rom …) is
not flagged (it is a comment, not a declaration). This is a mixed result, between
phoenix-be (16 flagged) and iris-reading (0).<script>, no client:* directive, no Vue
island, no getImage() async resolve, no import.meta.env — all confirmed by search
(counts: <script> 0, client: 0, getImage 0, import.meta.env 0). The page’s
only interactivity is the show/hide reveal of the .see-more / .hidden-text[hidden]
pairs, which is delegated to the <RevealToggles /> component (:2403) — its
script toggles hidden/aria-expanded on the matching markup (documented in
src/components/DOCS.md). Do not attribute reveal JS to this page.Quote component. The two hero quotes in
#section-quote are hand-written markup (:161-267) using quoteSourceUrl1/2; the
~26 <Quote> components live further down in the campaign sections.<style> block (:2406-4204, ~1799 lines, the bulk of the file). A single
scoped block; it is mostly scoped but uses :global(...) in two rules for the
BookProfileCollection output — .main-card__downloads > :global(div) (:3586) and
… :global(.small-page) (:3591) — to reach into the imported component’s DOM. It
defines :root CSS custom props (:2407-2411) and all .quote-panel / .ai-chatbots
/ .essential-link* / .campaign-* / .social-* / .see-more / .hidden-text
styling, including @keyframes and prefers-reduced-motion handling for the
roadmap-callout animation.quoteSourceUrl1 → aajonus.net/qa-of-april-11-2004 (:61),
quoteSourceUrl2 → aajonus.net/rae-bradbury-interview-2 (:62), both with
#:~:text= fragments. (Plus dozens more aajonus.net url= deep-links inside the
<Quote> components — not enumerated here.)aiChatbots hrefs: notebooklm.google.com/notebook/… (:72), grok.com/project/…
(:82), chat.openai.com/g/… (:92). iconSrcs are hotlinked: a
play-lh.googleusercontent.com CDN logo for NotebookLM (:73) and
google.com/s2/favicons?domain=… favicons for Grok (:83) and ChatGPT (:93).healthfully.ai/primaldiet (:288), aajonus.net/ (:303),
/coaching (:319), /iris-reading (:333).t.me/primaldiet_backup (:477), facebook.com/groups/aajonus
(:493), rawprimal.org (:517), x.com/primal_diet (:543),
facebook.com/aajonus (:558), instagram.com/aajonusbasics (:575),
instagram.com/aajonus.memes (:592).mailto:facilitator@wewant2live.com (:2333); primaldiet.net,
primaldietcoaching.com, blossomandbe.com, eatrawmeat.online,
x.com/bryan_johnson/... appear inline in prose.public/ media (not bundled): <video> /media/video/phoenix_advocates_frozen_meat.mp4
(+ poster) (:1554-1555), <video> /media/video/jim_attack_guide.mp4 (+ poster)
(:2050-2051), <audio> /media/audio/aajonus_freezing_experiment.mp3 (:1673).:46/:48 duplicate-source import intentional? :46
(primaldietcoaching_detox_disease) and :48 (detox_is_not_a_disease) import the
identical file primaldietcoaching_detox_disease.jpg; only the :48 alias is used,
so :46 is dead — looks like a leftover rename. Unclear from code — needs author input.:22 (// import rom from '../assets/chris.png';) a
placeholder for a future “rom” photo, or abandoned? It points at chris.png, which
reads like a copy/paste stand-in. Unclear from code.External component is imported (:7) but never rendered — intentional
(planned use) or stale? Unclear from code.<Image>/<figure>/prose blocks (e.g. :758,
:800-820, :1620-1623, :1990-2002, :2180-2229) are WIP or permanently retired
is unclear from code.