Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@ The canonical text lives in `wayseer00/main:canon/INTERDEPENDENT_WAY.txt`, and n

## Architecture

- `/` is the canon-derived **Awakening** splash page and public threshold.
- `/home/` is the complete living knowledge-system entrance.
- `/preamble/` remains one click from Awakening and from the primary navigation.
- Eleventy generates complete HTML into `_site`.
- Pagefind supplies static search.
- GitHub organization and canon data are retrieved at build time, never in a visitor’s browser.
Expand All @@ -31,6 +34,14 @@ Use the recovery snapshots without network access:
OFFLINE=1 npm run build
```

Route checks after a build:

```text
/ Awakening threshold
/home/ knowledge-system entrance
/preamble/ direct canonical Preamble
```

Add reviewed project metadata to a repository:

```yaml
Expand Down
3 changes: 2 additions & 1 deletion src/_includes/layouts/base.njk
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,13 @@
<body>
<a class="skip-link" href="#content">Skip to content</a>
<header class="site-header" data-site-header>
<a class="brand" href="/" aria-label="The Interdependent Way home">
<a class="brand" href="/home/" aria-label="The Interdependent Way knowledge-system home">
<span class="brand-mark" aria-hidden="true"><i></i><i></i><i></i></span>
<span><strong>The Interdependent Way</strong><small>living public knowledge system</small></span>
</a>
<button class="nav-toggle" type="button" hidden aria-expanded="false" aria-controls="primary-nav">Menu</button>
<nav id="primary-nav" class="primary-nav" aria-label="Primary navigation">
<a href="/">Awakening</a>
<a href="/start/">Start</a>
<a href="/preamble/">Preamble</a>
<a href="/way/">The Way</a>
Expand Down
36 changes: 36 additions & 0 deletions src/_includes/layouts/splash.njk
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
<!doctype html>
<!-- === MODULE_BUILD ===
id: awakening_splash_layout
module_name: splash-layout
module_kind: route
summary: Renders the canon-derived Awakening as a dependency-light public threshold before the full knowledge-system chrome.
owner: Erin Spencer
public_surface: root HTML shell for Awakening
internal_surface: title, description, canonical URL, site.css, awakening.css, content slot
auth_boundary: none
storage_boundary: none
network_boundary: none
user_data_boundary: none
admin_only: false
tests: tests/site-contract.test.mjs, tests/generated-site.test.mjs, tests/site.spec.mjs, tests/accessibility.spec.mjs
rollout: selected by src/index.njk
rollback: restore layouts/base.njk on src/index.njk and remove this layout
=== END MODULE_BUILD === -->
<!-- Usage: src/index.njk supplies the canon-derived Awakening content. The page remains readable with CSS disabled and uses no JavaScript. -->
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="color-scheme" content="dark">
<meta name="theme-color" content="#050711">
<title>{{ title or site.title }}</title>
<meta name="description" content="{{ description or site.description }}">
<link rel="canonical" href="{{ site.url }}{{ page.url }}">
<link rel="stylesheet" href="/assets/css/site.css">
<link rel="stylesheet" href="/assets/css/awakening.css">
</head>
<body class="awakening-body">
<a class="skip-link" href="#content">Skip to Awakening</a>
<main id="content" class="awakening-splash">{{ content | safe }}</main>
</body>
</html>
137 changes: 137 additions & 0 deletions src/assets/css/awakening.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,137 @@
/* === MODULE_BUILD ===
* id: awakening_splash_presentation
* module_name: awakening-splash-presentation
* module_kind: ui_panel
* summary: Presents the canon-derived Awakening as a full-screen public threshold without hiding readable text behind animation or JavaScript.
* owner: Erin Spencer
* public_surface: root Awakening splash presentation
* internal_surface: awakening-body, awakening-splash, awakening-stage, awakening-orbit, awakening-copy, awakening-text
* auth_boundary: none
* storage_boundary: none
* network_boundary: none
* user_data_boundary: none
* admin_only: false
* tests: tests/generated-site.test.mjs, tests/site.spec.mjs, tests/accessibility.spec.mjs
* rollout: loaded only by layouts/splash.njk for the public threshold
* rollback: remove the splash stylesheet link and restore the prior root template
* === END MODULE_BUILD ===
* Usage: loaded by src/_includes/layouts/splash.njk; verify with npm run check and npm run test:browser.
* Limits: visual rings are decorative; all canon text and continuation links remain ordinary readable HTML.
*/
.awakening-body {
min-height: 100vh;
overflow-x: hidden;
background: #050711;
}
.awakening-body::before {
opacity: .7;
background:
radial-gradient(circle at 50% 44%, rgba(123, 201, 216, .12), transparent 0 18rem),
radial-gradient(circle at 50% 44%, transparent 0 22rem, rgba(155, 135, 245, .18) 22.08rem 22.15rem, transparent 22.22rem 31rem, rgba(42, 56, 87, .55) 31.08rem 31.15rem, transparent 31.22rem),
linear-gradient(180deg, #050711, #090d18 68%, #050711);
}
.awakening-splash {
position: relative;
display: grid;
place-items: center;
min-height: 100vh;
padding: clamp(1.25rem, 4vw, 4rem);
overflow: hidden;
isolation: isolate;
}
.awakening-stage {
position: relative;
width: min(76rem, 100%);
min-height: min(88vh, 58rem);
display: grid;
place-items: center;
}
.awakening-orbit {
position: absolute;
left: 50%;
top: 50%;
width: min(92vw, 70rem);
aspect-ratio: 1;
translate: -50% -50%;
opacity: .7;
pointer-events: none;
}
.awakening-orbit::before,
.awakening-orbit::after,
.awakening-orbit span {
content: "";
position: absolute;
border: 1px solid rgba(174, 187, 210, .26);
border-radius: 50%;
}
.awakening-orbit::before { inset: 4%; }
.awakening-orbit::after { inset: 19%; border-color: rgba(155, 135, 245, .5); }
.awakening-orbit span { inset: 36%; border-color: rgba(123, 201, 216, .62); box-shadow: 0 0 7rem rgba(155, 135, 245, .16); }
.awakening-copy {
position: relative;
z-index: 2;
width: min(68rem, 100%);
text-align: center;
}
.awakening-copy .eyebrow { margin: 0; }
.awakening-copy h1 {
margin: .2rem 0 clamp(1.25rem, 3vw, 2.4rem);
font-size: clamp(4.25rem, 15vw, 11rem);
font-weight: 500;
line-height: .88;
letter-spacing: -.065em;
text-shadow: 0 0 4rem rgba(155, 135, 245, .22);
}
.awakening-text {
max-width: 70ch;
margin: 0 auto;
padding: clamp(1.1rem, 3vw, 2rem);
white-space: pre-line;
text-align: left;
color: #dce6fa;
background: rgba(5, 7, 17, .72);
border: 1px solid rgba(174, 187, 210, .2);
border-left: .3rem solid var(--cyan);
border-radius: var(--radius);
box-shadow: 0 2rem 6rem rgba(0, 0, 0, .3);
font: clamp(1.02rem, 1.7vw, 1.3rem)/1.7 Georgia, "Times New Roman", serif;
backdrop-filter: blur(14px);
}
.awakening-actions {
display: flex;
flex-wrap: wrap;
justify-content: center;
align-items: center;
gap: .75rem;
margin-top: clamp(1.2rem, 3vw, 2rem);
}
.awakening-source {
padding: .7rem .2rem;
color: var(--silver);
font-size: .9rem;
}
.awakening-provenance {
max-width: 70ch;
margin: 1.2rem auto 0;
color: rgba(174, 187, 210, .75);
font: .72rem/1.7 ui-monospace, SFMono-Regular, Consolas, monospace;
overflow-wrap: anywhere;
}
@media (max-width: 640px) {
.awakening-splash { align-items: start; padding-top: 9vh; }
.awakening-stage { min-height: auto; }
.awakening-copy h1 { font-size: clamp(3.6rem, 20vw, 6rem); }
.awakening-text { font-size: 1rem; line-height: 1.62; }
.awakening-actions { align-items: stretch; flex-direction: column; }
.awakening-actions .button { width: 100%; }
}
@media (prefers-reduced-motion: reduce) {
.awakening-orbit { opacity: .55; }
}
@media print {
.awakening-body { background: white; color: black; }
.awakening-body::before, .awakening-orbit { display: none; }
.awakening-splash { display: block; min-height: auto; padding: 0; }
.awakening-text { color: black; background: white; border-color: black; box-shadow: none; }
.awakening-provenance { color: black; }
}
40 changes: 40 additions & 0 deletions src/home/index.njk
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
---
layout: layouts/base.njk
title: The Interdependent Way
description: The living public knowledge system for the canon, its deliberate tensions, research, applications, and implementation projects.
permalink: /home/
---
<section class="hero">
<div>
<p class="eyebrow">Canon · interpretation · research · implementation · frontier</p>
<h1>A way through complexity without pretending the tension is gone.</h1>
<p class="lede">The Interdependent Way is a dense living text and a constellation of attempts to test, explain, implement, challenge, and preserve it. The Preamble is directly available here; deeper orientation and exact source remain available without hiding the entrance.</p>
<div class="actions"><a class="button" href="/preamble/">Read the Preamble</a><a class="button secondary" href="/lab/">Enter the Article Lab</a><a class="button secondary" href="/way/">Explore the Way</a></div>
</div>
<div class="hero-field" aria-label="Three concentric fields around a thirteenth center"><span></span><strong>12 + 1</strong></div>
</section>
<section class="panel">
<p class="eyebrow">Eight rights-article laboratories</p>
<h2>From canon excerpt to public practice</h2>
<p>All eight Rights articles now have a canon-bounded path through exact excerpt, note conversation, reductio ad absurdum, worst and best practices, applications across eleven domains, and an initial reviewed research field.</p>
<div class="actions"><a class="button" href="/lab/">Open the Article Lab</a><a class="button secondary" href="/articles/">Read publication drafts</a></div>
</section>
<section>
<p class="eyebrow">Choose a depth</p>
<h2>One body of work, several honest entrances</h2>
<div class="grid">
<a class="card" href="/"><span class="status status-canon">Canon-derived</span><h3>Return to Awakening</h3><p>Re-enter the opening threshold and its reminder that you are not alone.</p></a>
<a class="card" href="/preamble/"><span class="status status-canon">Canon-derived</span><h3>Read the Preamble</h3><p>Enter the opening civic claim directly through a stable route generated from the selected canon.</p></a>
<a class="card" href="/way/"><span class="status status-canon">Canon-derived</span><h3>Read the Way</h3><p>Move through the preamble, articles, etiquette, addenda, and their internal structure without beginning at the raw wall of text.</p></a>
<a class="card" href="/lab/"><span class="status status-interpretation">Interpretation</span><h3>Enter the Article Lab</h3><p>Test each Rights article through its notes, absurd limits, practice contrasts, domain applications, research support, dissent, and limits.</p></a>
<a class="card" href="/articles/"><span class="status status-interpretation">Publication</span><h3>Read public articles</h3><p>Follow selected canon units through companion readings, applications, handbook seeds, and script drafts without losing source boundaries.</p></a>
<a class="card" href="/projects/"><span class="status status-implemented">Implementation</span><h3>Map the Projects</h3><p>Every public organization repository receives a generated space, grouped by function and refreshed at build time.</p></a>
<a class="card" href="/artifacts/"><span class="status status-frontier">Frontier</span><h3>Use the Artifacts</h3><p>Interactive explanations, visual studies, public experiments, and compact publications live here without fragmenting the site identity.</p></a>
</div>
</section>
<section class="panel">
<p class="eyebrow">Current field snapshot</p>
<h2>{{ generated.repos.publicRepoCount }} public repositories · {{ generated.canon.units.length }} canonical units</h2>
<p>Project data was generated {{ generated.repos.snapshotAt | dateOnly }}{% if generated.repos.fallback %} from the last verified snapshot{% endif %}. Canon digest <code>{{ generated.canon.source.contentSha256 }}</code>.</p>
</section>
<section class="hmmm"><h2>hmmm</h2><p>Reviewed research now makes initial contact with all eight Rights articles, but coverage remains uneven and deliberately open to stronger dissent, replication, field studies, disability-led critique, and non-Western evidence.</p></section>
56 changes: 22 additions & 34 deletions src/index.njk
Original file line number Diff line number Diff line change
@@ -1,38 +1,26 @@
---
layout: layouts/base.njk
title: The Interdependent Way
description: A calm, layered entrance to the canon, its deliberate tensions, the research around it, and the projects attempting implementation.
layout: layouts/splash.njk
title: Awakening · The Interdependent Way
description: The canonical Awakening of The Interdependent Way, presented as the public threshold into the Preamble and living knowledge system.
---
<section class="hero">
<div>
<p class="eyebrow">Canon · interpretation · research · implementation · frontier</p>
<h1>A way through complexity without pretending the tension is gone.</h1>
<p class="lede">The Interdependent Way is a dense living text and a constellation of attempts to test, explain, implement, challenge, and preserve it. The Preamble is directly available here; deeper orientation and exact source remain available without hiding the entrance.</p>
<div class="actions"><a class="button" href="/preamble/">Read the Preamble</a><a class="button secondary" href="/start/">Begin with orientation</a><a class="button secondary" href="/way/">Explore the Way</a></div>
{% set awakenings = generated.canon.units | where("title", "Awakening") %}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Use an emitted canon unit for the splash

When the canon is regenerated from the checked-in recovery mirror used by npm test/OFFLINE fallback, generated.canon.units has the 5d/“You are not alone” text under Preamble and no unit titled Awakening (the parser only emits that title for a standalone heading). Because the new public root gates the splash on where("title", "Awakening"), running npm test followed by Eleventy renders the hmmm fallback instead of the canonical threshold and the new generated-site assertion for 5d explodes out of 4d fails; either the parser/mirror needs to emit an Awakening unit or this page needs to select the actual unit containing that text.

Useful? React with 👍 / 👎.

{% set awakening = awakenings[0] %}
<section class="awakening-stage">
<div class="awakening-orbit" aria-hidden="true"><span></span></div>
<div class="awakening-copy">
<p class="eyebrow">The Interdependent Way</p>
<h1>Awakening</h1>
{% if awakening %}
<div class="awakening-text">{{ awakening.content | replace("Awakening \n", "") | replace("Awakening\n", "") }}</div>
<div class="awakening-actions" aria-label="Continue from Awakening">
<a class="button" href="/preamble/">Read the Preamble</a>
<a class="button secondary" href="/home/">Enter the living system</a>
<a class="awakening-source" href="/source/{{ awakening.routeSlug }}/">Exact source and provenance</a>
</div>
<p class="awakening-provenance">Canon <code>{{ generated.canon.source.repository }}:{{ generated.canon.source.path }}</code> · lines {{ awakening.startLine }}–{{ awakening.endLine }} · digest <code>{{ awakening.hash | truncate(18, true, '…') }}</code></p>
{% else %}
<section class="hmmm"><h2>hmmm</h2><p>The selected canon did not produce an Awakening unit. The release gate must treat the missing threshold as a broken public contract.</p></section>
<div class="awakening-actions"><a class="button" href="/preamble/">Read the Preamble</a><a class="button secondary" href="/home/">Enter the living system</a></div>
{% endif %}
</div>
<div class="hero-field" aria-label="Three concentric fields around a thirteenth center"><span></span><strong>12 + 1</strong></div>
</section>
<section class="panel">
<p class="eyebrow">Eight rights-article vertical slices</p>
<h2>From canon excerpt to public practice</h2>
<p>All eight Rights articles now have a canon-bounded path through exact excerpt, companion reading, note conversation, application, handbook seed, and 60–90 second script. Article Two contains the first reviewed support, dissent, and limits evidence pack.</p>
<div class="actions"><a class="button" href="/articles/">View rights articles</a><a class="button secondary" href="/articles/article-two/">Open Article Two research</a></div>
</section>
<section>
<p class="eyebrow">Choose a depth</p>
<h2>One body of work, several honest entrances</h2>
<div class="grid">
<a class="card" href="/preamble/"><span class="status status-canon">Canon-derived</span><h3>Read the Preamble</h3><p>Enter the opening civic claim directly through a stable route generated from the selected canon.</p></a>
<a class="card" href="/way/"><span class="status status-canon">Canon-derived</span><h3>Read the Way</h3><p>Move through the preamble, articles, etiquette, addenda, and their internal structure without beginning at the raw wall of text.</p></a>
<a class="card" href="/lab/"><span class="status status-interpretation">Interpretation</span><h3>Enter the Article Lab</h3><p>Read the main text and its notes as two speakers. Supporting, dissenting, mixed, and missing research remain visibly separate.</p></a>
<a class="card" href="/articles/"><span class="status status-interpretation">Publication</span><h3>Read public articles</h3><p>Follow selected canon units through companion readings, applications, handbook seeds, and script drafts without losing source boundaries.</p></a>
<a class="card" href="/projects/"><span class="status status-implemented">Implementation</span><h3>Map the Projects</h3><p>Every public organization repository receives a generated space, grouped by function and refreshed at build time.</p></a>
<a class="card" href="/artifacts/"><span class="status status-frontier">Frontier</span><h3>Use the Artifacts</h3><p>Interactive explanations, visual studies, public experiments, and compact publications live here without fragmenting the site identity.</p></a>
</div>
</section>
<section class="panel">
<p class="eyebrow">Current field snapshot</p>
<h2>{{ generated.repos.publicRepoCount }} public repositories · {{ generated.canon.units.length }} canonical units</h2>
<p>Project data was generated {{ generated.repos.snapshotAt | dateOnly }}{% if generated.repos.fallback %} from the last verified snapshot{% endif %}. Canon digest <code>{{ generated.canon.source.contentSha256 }}</code>.</p>
</section>
<section class="hmmm"><h2>hmmm</h2><p>Reviewed evidence is now attached to Article Two; the other seven research fields remain intentionally open. Empty certainty would be a suspiciously tidy hat on a very alive octopus.</p></section>
2 changes: 1 addition & 1 deletion tests/accessibility.spec.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ const articleLab = JSON.parse(readFileSync('src/_data/article_lab.json', 'utf8')
const firstLabUnit = canon.units.find(unit => unit.id === articleLab[0].unit_id);
if (!firstLabUnit) throw new Error(`missing Lab canon unit ${articleLab[0].unit_id}`);

for (const route of ['/', '/preamble/', '/articles/', '/articles/article-two/', '/way/', '/lab/', `/lab/${firstLabUnit.routeSlug}/`, '/projects/']) {
for (const route of ['/', '/home/', '/preamble/', '/articles/', '/articles/article-two/', '/way/', '/lab/', `/lab/${firstLabUnit.routeSlug}/`, '/projects/']) {
test(`${route} has no serious or critical automated accessibility violations`, async ({ page }) => {
await page.goto(route);
await page.addScriptTag({ path: axePath });
Expand Down
Loading
Loading