diff --git a/web/build.mjs b/web/build.mjs
index 9b6f94c..13e9e30 100644
--- a/web/build.mjs
+++ b/web/build.mjs
@@ -86,7 +86,7 @@ function buildPages(){
const push=(srcPath, url, extra)=>{
const {fm,body}=frontmatter(read(srcPath));
pages.push({ srcPath, url, body, title:fm.title||path.basename(srcPath,".md"),
- weight:parseInt(fm.weight)||999, ...extra });
+ description:fm.description||"", weight:parseInt(fm.weight)||999, ...extra });
};
// docs/**
for(const p of walk(path.join(CONTENT,"docs"))){
@@ -155,10 +155,10 @@ function link(pg,active,cls){
}
// ---------- template ----------
-function shell({title, navHtml, bodyHtml, breadcrumb, wide, headExtra="", scripts="", contentClass="prose"}){
+function shell({title, description, navHtml, bodyHtml, breadcrumb, wide, headExtra="", scripts="", contentClass="prose"}){
return `
-${esc(title)} · Http11Probe
+${esc(title)} · Http11Probe${description?`\n`:""}
${headExtra}
@@ -204,7 +204,7 @@ function breadcrumbFor(pg){
}
// ---------- landing (matrix) ----------
-function landing(navHtml){
+function landing(navHtml, description){
const body=`
HTTP/1.1 behaviour, measured
Every framework, every probe, one grid. Green passes, amber warns (the RFC permits either), red fails.
@@ -222,7 +222,7 @@ function landing(navHtml){
`;
- return shell({ title:"Results", navHtml, bodyHtml:body, wide:true, contentClass:"matrix-page",
+ return shell({ title:"Results", description, navHtml, bodyHtml:body, wide:true, contentClass:"matrix-page",
scripts:`\n\n\n\n\n` });
}
@@ -251,7 +251,8 @@ function entropyPage(navHtml){
`;
- return shell({ title:"Entropy", navHtml, bodyHtml:body, wide:true, contentClass:"matrix-page",
+ return shell({ title:"Entropy", description:"Which HTTP/1.1 MUST-level compliance, smuggling, and malformed-input tests frameworks disagree on most, ranked by Shannon entropy of verdicts across servers.",
+ navHtml, bodyHtml:body, wide:true, contentClass:"matrix-page",
scripts:`\n\n\n\n\n\n` });
}
@@ -290,12 +291,14 @@ function main(){
const out=path.join(DIST, outRel.replace(/^\//,""));
ensure(out);
const nav=buildNav(pages, pg.url);
- const html=shell({ title:pg.forceTitle||pg.title, navHtml:nav, bodyHtml:renderMarkdown(pg),
+ const html=shell({ title:pg.forceTitle||pg.title, description:pg.description, navHtml:nav, bodyHtml:renderMarkdown(pg),
breadcrumb:breadcrumbFor(pg), wide:pg.url==="/docs/rfc-requirement-dashboard.html" });
fs.writeFileSync(out, html);
}
// landing + entropy study
- fs.writeFileSync(path.join(DIST,"index.html"), landing(buildNav(pages,"/")));
+ const homeIdx=path.join(CONTENT,"_index.md");
+ const homeDescription=exists(homeIdx)?frontmatter(read(homeIdx)).fm.description||"":"";
+ fs.writeFileSync(path.join(DIST,"index.html"), landing(buildNav(pages,"/"), homeDescription));
fs.writeFileSync(path.join(DIST,"entropy.html"), entropyPage(buildNav(pages,"/entropy.html")));
// search index