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
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
name: Deploy Landing to GitHub Pages
name: Deploy Technical Root to GitHub Pages

on:
push:
branches:
- main
- master
paths:
- "landing/**"
- ".github/workflows/pages-landing.yml"
- "docs/github-pages-root/**"
- ".github/workflows/pages-technical-root.yml"
workflow_dispatch:

permissions:
Expand All @@ -24,7 +24,7 @@ env:

jobs:
deploy:
name: Deploy landing
name: Deploy technical root
runs-on: ubuntu-latest
environment:
name: github-pages
Expand All @@ -34,20 +34,20 @@ jobs:
- name: Checkout
uses: actions/checkout@v5

- name: Verify landing source
- name: Verify technical root source
run: |
test -f landing/index.html || {
echo "landing/index.html is missing. Commit landing/ to the target branch before deploying."
test -f docs/github-pages-root/index.html || {
echo "docs/github-pages-root/index.html is missing."
exit 1
}

- name: Configure GitHub Pages
uses: actions/configure-pages@v5

- name: Upload landing artifact
- name: Upload technical root artifact
uses: actions/upload-pages-artifact@v4
with:
path: landing
path: docs/github-pages-root

- name: Deploy to GitHub Pages
id: deployment
Expand Down
179 changes: 179 additions & 0 deletions docs/github-pages-root/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,179 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>SpecGraph Technical Surface</title>
<style>
:root {
color-scheme: light;
--ink: #172017;
--muted: #59645c;
--line: #d7ded6;
--surface: #f6f4ec;
--card: #fffdf6;
--accent: #2f6f55;
}

* {
box-sizing: border-box;
}

body {
margin: 0;
min-height: 100vh;
color: var(--ink);
font-family:
"Iowan Old Style", "Palatino Linotype", Palatino, Georgia, serif;
background:
radial-gradient(circle at 80% 10%, rgba(47, 111, 85, 0.16), transparent 34rem),
linear-gradient(135deg, #fbf7eb 0%, var(--surface) 48%, #e8eee7 100%);
}

main {
width: min(920px, calc(100% - 32px));
margin: 0 auto;
padding: 72px 0;
}

.eyebrow {
margin: 0 0 14px;
color: var(--accent);
font: 700 0.82rem/1.2 ui-monospace, SFMono-Regular, Menlo, monospace;
letter-spacing: 0.12em;
text-transform: uppercase;
}

h1 {
max-width: 760px;
margin: 0;
font-size: clamp(2.8rem, 8vw, 6.4rem);
font-weight: 700;
line-height: 0.94;
letter-spacing: -0.055em;
}

.lead {
max-width: 680px;
margin: 28px 0 0;
color: var(--muted);
font-size: clamp(1.12rem, 2.5vw, 1.42rem);
line-height: 1.55;
}

.grid {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 16px;
margin-top: 42px;
}

a.card {
display: block;
min-height: 150px;
padding: 24px;
color: inherit;
text-decoration: none;
background: rgba(255, 253, 246, 0.82);
border: 1px solid var(--line);
border-radius: 22px;
box-shadow: 0 24px 70px rgba(37, 52, 41, 0.08);
}

a.card:hover,
a.card:focus-visible {
outline: 2px solid var(--accent);
outline-offset: 4px;
}

.label {
display: block;
color: var(--accent);
font: 700 0.78rem/1.2 ui-monospace, SFMono-Regular, Menlo, monospace;
letter-spacing: 0.08em;
text-transform: uppercase;
}

.title {
display: block;
margin-top: 14px;
font-size: 1.42rem;
font-weight: 700;
line-height: 1.1;
}

.desc {
display: block;
margin-top: 12px;
color: var(--muted);
font-size: 1rem;
line-height: 1.45;
}

.boundary {
margin-top: 28px;
padding-top: 22px;
color: var(--muted);
border-top: 1px solid var(--line);
font: 0.92rem/1.5 ui-monospace, SFMono-Regular, Menlo, monospace;
}

@media (max-width: 720px) {
main {
padding: 48px 0;
}

.grid {
grid-template-columns: 1fr;
}
}
</style>
</head>
<body>
<main>
<p class="eyebrow">GitHub Pages technical root</p>
<h1>SpecGraph technical surface.</h1>
<p class="lead">
This root is reserved for documentation, generated artifacts, and
integration entrypoints. The product landing page is published on the
custom static host instead.
</p>

<section class="grid" aria-label="Technical entrypoints">
<a class="card" href="https://specgraph.tech/artifact_manifest.json">
<span class="label">Artifacts</span>
<span class="title">Public artifact manifest</span>
<span class="desc">
Start here for HTTP-backed SpecSpace and other read-only consumers.
</span>
</a>
<a class="card" href="https://specgraph.tech/runs/graph_dashboard.json">
<span class="label">Runs</span>
<span class="title">Graph dashboard JSON</span>
<span class="desc">
Current generated dashboard surface consumed by viewers.
</span>
</a>
<a class="card" href="https://github.com/0al-spec/SpecGraph/tree/main/docs">
<span class="label">Docs</span>
<span class="title">Repository documentation</span>
<span class="desc">
Viewer contracts, publishing notes, proposals, and operator guides.
</span>
</a>
<a class="card" href="https://specgraph.tech/">
<span class="label">Product</span>
<span class="title">SpecGraph landing page</span>
<span class="desc">
Product-facing page owned by the custom static host.
</span>
</a>
</section>

<p class="boundary">
Boundary: custom/static host owns product landing; GitHub Pages owns a
technical entrypoint and must not deploy landing/ to repository root.
</p>
</main>
</body>
</html>
6 changes: 6 additions & 0 deletions docs/static_artifact_publish.md
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,12 @@ excludes local QA screenshots under `landing/check/`. Landing files are not part
of `artifact_manifest.json`; the manifest describes only the SpecGraph artifact
surface.

GitHub Pages is not the product landing surface. The repository Pages root is
published from `docs/github-pages-root/` as a technical entrypoint with links to
the public artifact manifest, generated runs, repository docs, and the custom
landing page. Do not deploy `landing/` to GitHub Pages root; doing so can create
navigation loops where documentation links return to the marketing page.

The source `runs/` directory remains local and unchanged. The publish bundle is
a redacted mirror: local absolute paths such as `/Users/...` are replaced with
`$LOCAL_PATH` in the copied files.
Expand Down
Loading