diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 0000000..c3dbc17 --- /dev/null +++ b/docs/index.html @@ -0,0 +1,15 @@ + + + + + + Redirecting to MockForge documentation | MockForge + + + + + + +

This page has moved to MockForge documentation.

+ + diff --git a/dpa.html b/dpa.html index 46709a8..39d5d72 100644 --- a/dpa.html +++ b/dpa.html @@ -10,6 +10,6 @@ -

This page has moved to Data Processing Agreement.

+

This page has moved to Data Processing Agreement (v2.0, effective September 27, 2026).

diff --git a/privacy.html b/privacy.html index 4f3ddcb..2b79e47 100644 --- a/privacy.html +++ b/privacy.html @@ -163,6 +163,7 @@

What this website collects

+

Last updated: September 27, 2026

This policy covers the public marketing site at mockforge.dev. It is intentionally short because the site is static: it has no user accounts, no comment forms, no advertising, diff --git a/scripts/build-pages.js b/scripts/build-pages.js index a25096b..e354cef 100644 --- a/scripts/build-pages.js +++ b/scripts/build-pages.js @@ -431,14 +431,16 @@ const REDIRECTS = { 'notes.html': { to: '/engineering-notes.html', label: 'Engineering Notes' }, 'blog.html': { to: '/engineering-notes.html', label: 'Engineering Notes' }, 'docs.html': { to: 'https://docs.mockforge.dev/', label: 'MockForge documentation' }, + 'docs/index.html': { to: 'https://docs.mockforge.dev/', label: 'MockForge documentation' }, 'security.html': { to: '/trust.html', label: 'Trust & Security' }, - 'terms.html': { to: 'https://app.mockforge.dev/legal/terms', label: 'Terms of Service' }, - 'dpa.html': { to: 'https://app.mockforge.dev/legal/dpa', label: 'Data Processing Agreement' }, + 'terms.html': { to: 'https://app.mockforge.dev/legal/terms', label: 'Terms of Service', note: 'v2.0, effective September 27, 2026' }, + 'dpa.html': { to: 'https://app.mockforge.dev/legal/dpa', label: 'Data Processing Agreement', note: 'v2.0, effective September 27, 2026' }, }; -function renderRedirectPage({ to, label }) { +function renderRedirectPage({ to, label, note }) { const canonical = to.startsWith('/') ? `https://mockforge.dev${to}` : to; const safeLabel = escapeHtmlAttr(label); + const noteHtml = note ? ` (${escapeHtmlAttr(note)})` : ''; return ` @@ -451,7 +453,7 @@ function renderRedirectPage({ to, label }) { -

This page has moved to ${safeLabel}.

+

This page has moved to ${safeLabel}${noteHtml}.

`; @@ -558,6 +560,7 @@ function emit(file, text) { return; } + fs.mkdirSync(path.dirname(outputPath), { recursive: true }); fs.writeFileSync(outputPath, text); if (existsOnDisk) { wrote += 1; diff --git a/src/pages/privacy.html b/src/pages/privacy.html index b2e3a05..3ccf8f4 100644 --- a/src/pages/privacy.html +++ b/src/pages/privacy.html @@ -32,6 +32,7 @@

What this website collects

+

Last updated: September 27, 2026

This policy covers the public marketing site at mockforge.dev. It is intentionally short because the site is static: it has no user accounts, no comment forms, no advertising, diff --git a/terms.html b/terms.html index abc606a..2989a20 100644 --- a/terms.html +++ b/terms.html @@ -10,6 +10,6 @@ -

This page has moved to Terms of Service.

+

This page has moved to Terms of Service (v2.0, effective September 27, 2026).