Skip to content

Commit c034e24

Browse files
authored
docs: surface the design-partner program (#8)
1 parent 3e2a379 commit c034e24

5 files changed

Lines changed: 183 additions & 6 deletions

File tree

docs/assets/stylesheets/hayate.20260728.3.css renamed to docs/assets/stylesheets/hayate.20260730.1.css

Lines changed: 135 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -327,6 +327,125 @@
327327
justify-self: start;
328328
}
329329

330+
.hayate-partners {
331+
background: #dff6ef;
332+
color: var(--hayate-ink);
333+
margin: 0 calc(50% - 50vw);
334+
width: 100vw;
335+
}
336+
337+
.hayate-partners__inner {
338+
display: grid;
339+
gap: 2.5rem 5rem;
340+
grid-template-columns: minmax(0, 1.2fr) minmax(17rem, 0.8fr);
341+
margin: 0 auto;
342+
max-width: none;
343+
padding: 5.5rem max(2.4rem, calc((100vw - 68rem) / 2));
344+
}
345+
346+
.hayate-partners h2 {
347+
color: var(--hayate-ink);
348+
font-size: clamp(2.2rem, 5vw, 4.4rem);
349+
line-height: 0.98;
350+
margin-bottom: 1.5rem;
351+
max-width: 10ch;
352+
}
353+
354+
.hayate-partners__copy > p:last-child {
355+
color: #29443d;
356+
font-size: 1.02rem;
357+
line-height: 1.7;
358+
max-width: 36rem;
359+
}
360+
361+
.hayate-partners__tracks {
362+
grid-column: 2;
363+
grid-row: 1 / span 2;
364+
list-style: none;
365+
margin: 0;
366+
padding: 0;
367+
}
368+
369+
.hayate-partners__tracks li {
370+
align-items: baseline;
371+
border-bottom: 1px solid rgb(7 19 31 / 18%);
372+
display: grid;
373+
gap: 1rem;
374+
grid-template-columns: 2.5rem 1fr;
375+
padding: 1.2rem 0;
376+
}
377+
378+
.hayate-partners__tracks li:first-child {
379+
border-top: 1px solid rgb(7 19 31 / 18%);
380+
}
381+
382+
.hayate-partners__tracks span {
383+
color: var(--hayate-mint-dark);
384+
font-family: var(--md-code-font);
385+
font-size: 0.68rem;
386+
}
387+
388+
.hayate-partners__tracks strong {
389+
font-size: 1rem;
390+
}
391+
392+
.hayate-partners__actions {
393+
align-items: baseline;
394+
display: flex;
395+
flex-wrap: wrap;
396+
gap: 1rem 1.6rem;
397+
}
398+
399+
.hayate-partners__actions a {
400+
color: var(--hayate-ink);
401+
font-weight: 650;
402+
}
403+
404+
.hayate-partners__apply {
405+
align-items: center;
406+
background: var(--hayate-ink);
407+
border: 1px solid var(--hayate-ink);
408+
color: var(--hayate-paper) !important;
409+
display: inline-flex;
410+
gap: 0.8rem;
411+
min-height: 2.7rem;
412+
padding: 0.55rem 0.9rem;
413+
text-decoration: none;
414+
}
415+
416+
.hayate-partners__apply span {
417+
transition: transform 180ms ease;
418+
}
419+
420+
.hayate-partners__apply:hover span,
421+
.hayate-partners__apply:focus-visible span {
422+
transform: translateX(0.2rem);
423+
}
424+
425+
[data-md-color-scheme="slate"] .hayate-partners {
426+
background: #0e2a27;
427+
color: var(--hayate-paper);
428+
}
429+
430+
[data-md-color-scheme="slate"] .hayate-partners h2,
431+
[data-md-color-scheme="slate"] .hayate-partners__actions a {
432+
color: var(--hayate-paper);
433+
}
434+
435+
[data-md-color-scheme="slate"] .hayate-partners__copy > p:last-child {
436+
color: #cbd9d6;
437+
}
438+
439+
[data-md-color-scheme="slate"] .hayate-partners__tracks li {
440+
border-color: rgb(244 247 245 / 18%);
441+
}
442+
443+
[data-md-color-scheme="slate"] .hayate-partners__apply {
444+
background: var(--hayate-mint);
445+
border-color: var(--hayate-mint);
446+
color: var(--hayate-ink) !important;
447+
}
448+
330449
.hayate-final {
331450
text-align: center;
332451
}
@@ -392,7 +511,8 @@
392511
}
393512

394513
.hayate-section--intro,
395-
.hayate-proof {
514+
.hayate-proof,
515+
.hayate-partners__inner {
396516
display: block;
397517
}
398518

@@ -415,6 +535,18 @@
415535
margin-top: 1.5rem;
416536
}
417537

538+
.hayate-partners__inner {
539+
padding: 4rem 1.25rem;
540+
}
541+
542+
.hayate-partners__tracks {
543+
margin-top: 2.5rem;
544+
}
545+
546+
.hayate-partners__actions {
547+
margin-top: 2rem;
548+
}
549+
418550
.hayate-family-links a {
419551
gap: 0.4rem;
420552
grid-template-columns: 1fr;
@@ -433,7 +565,8 @@
433565
}
434566

435567
.hayate-family-links a::before,
436-
.hayate-hero__mark {
568+
.hayate-hero__mark,
569+
.hayate-partners__apply span {
437570
transition: none;
438571
}
439572
}

docs/index.md

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,32 @@ description: One Fetch-style Python application across ASGI, Cloudflare Workers,
8989
<a class="md-button" href="evidence/">Read the evidence</a>
9090
</section>
9191

92+
<section class="hayate-partners" aria-labelledby="partners-heading">
93+
<div class="hayate-partners__inner">
94+
<div class="hayate-partners__copy">
95+
<p class="hayate-kicker">SHAPE THE V1 CONTRACT</p>
96+
<h2 id="partners-heading">Bring a real workload.</h2>
97+
<p>
98+
Owner-external teams receive bounded onboarding help while Hayate
99+
records the friction, fixes reproducible blockers, and bases v1
100+
decisions on measured use.
101+
</p>
102+
</div>
103+
<ol class="hayate-partners__tracks" aria-label="Design-partner tracks">
104+
<li><span>01</span><strong>CPython / ASGI API</strong></li>
105+
<li><span>02</span><strong>MCP or agent backend</strong></li>
106+
<li><span>03</span><strong>Cloudflare Workers</strong></li>
107+
</ol>
108+
<div class="hayate-partners__actions">
109+
<a
110+
class="hayate-partners__apply"
111+
href="https://github.com/hayatepy/.github/issues/new?template=design_partner.yml"
112+
>Apply as a design partner <span aria-hidden="true">→</span></a>
113+
<a href="contribute/#design-partners">Read the program details</a>
114+
</div>
115+
</div>
116+
</section>
117+
92118
<section class="hayate-final">
93119
<p class="hayate-kicker">START FROM A TESTED COMPOSITION</p>
94120
<h2>From empty directory to passing production checks.</h2>

scripts/check_site.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@
88
from urllib.parse import unquote, urljoin, urlparse
99

1010
SITE_ORIGIN = "https://hayatepy.dev"
11+
DESIGN_PARTNER_APPLICATION = (
12+
"https://github.com/hayatepy/.github/issues/new?template=design_partner.yml"
13+
)
1114

1215

1316
class PageParser(HTMLParser):
@@ -96,6 +99,8 @@ def validate(root: Path) -> list[str]:
9699
failures.append(
97100
f"{relative}: images missing alt: {', '.join(parser.images_without_alt)}"
98101
)
102+
if relative == Path("index.html") and DESIGN_PARTNER_APPLICATION not in parser.hrefs:
103+
failures.append("index.html: missing direct design-partner application link")
99104

100105
base = SITE_ORIGIN + page_url(path, root)
101106
for href in parser.hrefs:

tests/test_check_site.py

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,19 @@
22

33
from pathlib import Path
44

5-
from scripts.check_site import validate
5+
from scripts.check_site import DESIGN_PARTNER_APPLICATION, validate
66

77

8-
def write_page(root: Path, relative: str, *, href: str = "/target/") -> None:
8+
def write_page(
9+
root: Path,
10+
relative: str,
11+
*,
12+
href: str = "/target/",
13+
include_application: bool = True,
14+
) -> None:
915
path = root / relative
1016
path.parent.mkdir(parents=True, exist_ok=True)
17+
application = f'<a href="{DESIGN_PARTNER_APPLICATION}">Apply</a>' if include_application else ""
1118
path.write_text(
1219
f"""<!doctype html>
1320
<html lang="en">
@@ -16,7 +23,7 @@ def write_page(root: Path, relative: str, *, href: str = "/target/") -> None:
1623
<meta name="description" content="Useful page">
1724
<link rel="canonical" href="https://hayatepy.dev/">
1825
</head>
19-
<body><main><h1>Page</h1><a href="{href}">Target</a></main></body>
26+
<body><main><h1>Page</h1><a href="{href}">Target</a>{application}</main></body>
2027
</html>
2128
""",
2229
encoding="utf-8",
@@ -32,3 +39,9 @@ def test_validates_nested_directory_links(tmp_path: Path) -> None:
3239
def test_reports_broken_internal_link(tmp_path: Path) -> None:
3340
write_page(tmp_path, "index.html", href="/missing/")
3441
assert validate(tmp_path) == ["index.html: broken internal link '/missing/'"]
42+
43+
44+
def test_reports_missing_design_partner_application_link(tmp_path: Path) -> None:
45+
write_page(tmp_path, "index.html", href="/", include_application=False)
46+
47+
assert validate(tmp_path) == ["index.html: missing direct design-partner application link"]

zensical.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ repo_url = "https://github.com/hayatepy/docs"
77
repo_name = "hayatepy/docs"
88
edit_uri = "edit/main/docs/"
99
copyright = "Copyright &copy; 2026 Yusuke Hayashi and the Hayate contributors"
10-
extra_css = ["assets/stylesheets/hayate.20260728.3.css"]
10+
extra_css = ["assets/stylesheets/hayate.20260730.1.css"]
1111
nav = [
1212
{ "Home" = "index.md" },
1313
{ "Get started" = [

0 commit comments

Comments
 (0)