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
22 changes: 19 additions & 3 deletions docusaurus.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ const config: Config = {
locales: ['en', 'it'],
localeConfigs: {
en: { label: 'English' },
it: { label: 'Italiano' },
it: { label: 'Italiano', htmlLang: 'it-IT' },
},
},

Expand Down Expand Up @@ -68,8 +68,24 @@ const config: Config = {
],

themeConfig: {
// Social sharing image
image: '/assets/social/social-card.svg',
// Social sharing image (OG + Twitter Cards)
image: 'assets/social/social-card.png',
metadata: [
{name: 'keywords', content: 'markdown, linter, docusaurus, mkdocs, static analysis, documentation, security, broken links, orphan pages'},
{name: 'twitter:card', content: 'summary_large_image'},
{name: 'twitter:site', content: '@PythonWoods'},
{name: 'twitter:creator', content: '@PythonWoods'},
{name: 'theme-color', content: '#4f46e5'},
],
headTags: [
{
tagName: 'link',
attributes: {
rel: 'canonical',
href: 'https://zenzic.dev/',
},
},
],
colorMode: {
defaultMode: 'dark',
respectPrefersColorScheme: true,
Expand Down
59 changes: 55 additions & 4 deletions i18n/en/code.json
Original file line number Diff line number Diff line change
Expand Up @@ -89,19 +89,19 @@
"message": "Scans every URL for leaked credentials - API keys, tokens. Exits with code <code>2</code> immediately."
},
"homepage.hero.badge": {
"message": "v0.6.0a2 \"Obsidian Glass\" Released",
"message": "v0.6.1 \"Obsidian Glass\" Stable",
"description": "Wait release version badge"
},
"homepage.hero.title": {
"message": "High-performance linter",
"message": "The Safe Harbor",
"description": "Main hero headline"
},
"homepage.hero.titleMuted": {
"message": "for Markdown.",
"message": "for Markdown Documentation.",
"description": "Muted part of the hero headline"
},
"homepage.hero.subtitle": {
"message": "Catch broken links, orphan pages, and leaked credentials - before your users do. Engineering-grade and engine-agnostic.",
"message": "High-performance, engine-agnostic, and security-hardened static analysis.",
"description": "Hero sub headline"
},
"homepage.hero.getStarted": {
Expand Down Expand Up @@ -211,6 +211,57 @@
"sentinel.summary.failed": {
"message": "FAILED: One or more checks failed."
},
"sentinel.label": {
"message": "Reporter & Shield"
},
"score.label": {
"message": "Health Metrics"
},
"ledger.label": {
"message": "The Obsidian Engineering Ledger"
},
"ledger.heading": {
"message": "Three invariants enforced on every commit."
},
"ledger.heading.muted": {
"message": "No exceptions. No shortcuts."
},
"ledger.sub": {
"message": "These are not aspirations \u2014 they are gates. Every release of Zenzic ships only when all three pass."
},
"ledger.01.title": {
"message": "Zero Assumptions at System Boundaries"
},
"ledger.01.desc": {
"message": "Every public entry point validates its inputs at the boundary. Internal hot paths carry no defensive checks \u2014 the shape is guaranteed by the type system, enforced by mypy --strict on every merge."
},
"ledger.02.title": {
"message": "Subprocess-Free Analysis"
},
"ledger.02.desc": {
"message": "Production-grade tools do not shell out during analysis. No subprocess.run(), no os.system() inside per-item loops. Zenzic validates your documentation stack without executing it."
},
"ledger.03.title": {
"message": "Deterministic Dependency Graph"
},
"ledger.03.desc": {
"message": "Every dependency is pinned in a lockfile, audited by Dependabot, and scanned for SPDX licence compatibility. No transitive surprises at release time. uv lock and reuse lint run on every commit."
},
"quickstart.label": {
"message": "Get Started"
},
"quickstart.heading": {
"message": "From zero to documentation integrity in one command."
},
"quickstart.sub": {
"message": "No configuration required. No account needed. Works on any Markdown project."
},
"quickstart.github": {
"message": "Star on GitHub"
},
"quickstart.docs": {
"message": "Read the full docs \u2192"
},
"theme.ErrorPageContent.title": {
"message": "This page crashed.",
"description": "The title of the fallback page when the page crashed"
Expand Down
59 changes: 55 additions & 4 deletions i18n/it/code.json
Original file line number Diff line number Diff line change
Expand Up @@ -680,19 +680,19 @@
"message": "Scans every URL for leaked credentials - API keys, tokens. Exits with code <code>2</code> immediately."
},
"homepage.hero.badge": {
"message": "v0.6.0a1 \"Obsidian Glass\" Released",
"message": "v0.6.1 \"Obsidian Glass\" Stable",
"description": "Wait release version badge"
},
"homepage.hero.title": {
"message": "High-performance linter",
"message": "Il Safe Harbor",
"description": "Main hero headline"
},
"homepage.hero.titleMuted": {
"message": "for Markdown.",
"message": "per la Documentazione Markdown.",
"description": "Muted part of the hero headline"
},
"homepage.hero.subtitle": {
"message": "Catch broken links, orphan pages, and leaked credentials - before your users do. Engineering-grade and engine-agnostic.",
"message": "Analisi statica ad alte prestazioni, agnostica rispetto al motore e con sicurezza integrata.",
"description": "Hero sub headline"
},
"homepage.hero.getStarted": {
Expand Down Expand Up @@ -792,5 +792,56 @@
},
"sentinel.summary.failed": {
"message": "FAILED: One or more checks failed."
},
"sentinel.label": {
"message": "Reporter & Shield"
},
"score.label": {
"message": "Metriche di Qualit\u00e0"
},
"ledger.label": {
"message": "L\u2019Obsidian Engineering Ledger"
},
"ledger.heading": {
"message": "Tre invarianti verificati ad ogni commit."
},
"ledger.heading.muted": {
"message": "Nessuna eccezione. Nessuna scorciatoia."
},
"ledger.sub": {
"message": "Non sono aspirazioni \u2014 sono requisiti. Zenzic viene rilasciato solo quando tutti e tre passano."
},
"ledger.01.title": {
"message": "Zero Assunzioni ai Confini del Sistema"
},
"ledger.01.desc": {
"message": "Ogni entry point pubblico valida i propri input al confine. I percorsi interni non contengono controlli difensivi \u2014 la forma \u00e8 garantita dal sistema di tipi, imposta da mypy --strict ad ogni merge."
},
"ledger.02.title": {
"message": "Analisi Senza Sottoprocessi"
},
"ledger.02.desc": {
"message": "Gli strumenti di livello produzione non eseguono shell durante l\u2019analisi. Nessun subprocess.run(), nessun os.system() nei loop per-item. Zenzic valida il tuo stack documentale senza eseguirlo."
},
"ledger.03.title": {
"message": "Grafo delle Dipendenze Deterministico"
},
"ledger.03.desc": {
"message": "Ogni dipendenza \u00e8 bloccata in un lockfile, verificata da Dependabot e analizzata per compatibilit\u00e0 SPDX. Nessuna sorpresa transitiva al momento del rilascio. uv lock e reuse lint vengono eseguiti ad ogni commit."
},
"quickstart.label": {
"message": "Inizia"
},
"quickstart.heading": {
"message": "Da zero all\u2019integrit\u00e0 documentale in un solo comando."
},
"quickstart.sub": {
"message": "Nessuna configurazione richiesta. Nessun account necessario. Funziona su qualsiasi progetto Markdown."
},
"quickstart.github": {
"message": "Star su GitHub"
},
"quickstart.docs": {
"message": "Leggi la documentazione completa \u2192"
}
}
175 changes: 175 additions & 0 deletions src/components/Homepage/EngineeringLedger.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,175 @@
// SPDX-FileCopyrightText: 2026 PythonWoods <dev@pythonwoods.dev>
// SPDX-License-Identifier: Apache-2.0
import React from 'react';
import Translate from '@docusaurus/Translate';

// ── Minimal terminal box ───────────────────────────────────────────────────
function LedgerTerminal({
filename,
children,
}: {
filename: string;
children: React.ReactNode;
}): React.JSX.Element {
return (
<div className="rounded-xl overflow-hidden border dark:border-zinc-800/60 border-zinc-200 bg-zinc-900/20 backdrop-blur-md font-mono text-[12px] leading-relaxed shadow-lg">
<div className="flex items-center gap-2 px-4 py-2.5 border-b dark:border-zinc-800/40 border-zinc-200">
<span className="w-2.5 h-2.5 rounded-full bg-[#ff5f57]" aria-hidden="true" />
<span className="w-2.5 h-2.5 rounded-full bg-[#febc2e]" aria-hidden="true" />
<span className="w-2.5 h-2.5 rounded-full bg-[#28c840]" aria-hidden="true" />
<span className="ml-2 dark:text-zinc-500 text-zinc-400 text-[11px] tracking-wide">
{filename}
</span>
</div>
<div className="px-5 py-4 dark:text-zinc-400 text-zinc-600 overflow-x-auto">
{children}
</div>
</div>
);
}

// ── One ledger row ─────────────────────────────────────────────────────────
function LedgerRow({
index,
title,
desc,
terminal,
}: {
index: string;
title: React.ReactNode;
desc: React.ReactNode;
terminal: React.ReactNode;
}): React.JSX.Element {
return (
<div className="grid md:grid-cols-2 gap-8 md:gap-16 py-12 border-t dark:border-zinc-800/60 border-zinc-200 items-start">
<div>
<span className="text-[11px] font-mono tracking-[0.18em] dark:text-zinc-600 text-zinc-400 mb-4 block uppercase">
{index}
</span>
<h3 className="text-lg font-semibold dark:text-white text-zinc-900 mb-3 leading-snug">
{title}
</h3>
<p className="dark:text-zinc-500 text-zinc-500 text-sm leading-relaxed">{desc}</p>
</div>
<div>{terminal}</div>
</div>
);
}

// ── The Obsidian Engineering Ledger ───────────────────────────────────────
export default function EngineeringLedger(): React.JSX.Element {
return (
<section className="dark:bg-zinc-950 bg-white py-24 md:py-32">
<div className="max-w-[1200px] mx-auto px-6">
{/* Section header */}
<div className="mb-4 max-w-3xl">
<p className="text-[11px] font-mono tracking-[0.18em] dark:text-zinc-600 text-zinc-400 mb-4 uppercase">
<Translate id="ledger.label">The Obsidian Engineering Ledger</Translate>
</p>
<h2 className="text-3xl md:text-4xl font-semibold tracking-tight dark:text-white text-zinc-900 mb-4">
<Translate id="ledger.heading">Three invariants enforced on every commit.</Translate>{' '}
<span className="dark:text-zinc-500 text-zinc-400">
<Translate id="ledger.heading.muted">No exceptions. No shortcuts.</Translate>
</span>
</h2>
<p className="dark:text-zinc-500 text-zinc-500 text-base">
<Translate id="ledger.sub">
These are not aspirations β€” they are gates. Every release of Zenzic ships only when
all three pass.
</Translate>
</p>
</div>

{/* ── 01 β€” Zero Assumptions ─────────────────────────────────────── */}
<LedgerRow
index="01"
title={
<Translate id="ledger.01.title">Zero Assumptions at System Boundaries</Translate>
}
desc={
<Translate id="ledger.01.desc">
Every public entry point validates its inputs at the boundary. Internal hot paths
carry no defensive checks β€” the shape is guaranteed by the type system, enforced by
mypy --strict on every merge.
</Translate>
}
terminal={
<LedgerTerminal filename="pyproject.toml Β· type enforcement">
<pre className="m-0 bg-transparent whitespace-pre">
<code>
{`[tool.mypy]
strict = true
warn_return_any = true
warn_unreachable = true

# Every public function has a typed signature.
# Every Any must be justified in a comment.`}
</code>
</pre>
</LedgerTerminal>
}
/>

{/* ── 02 β€” Subprocess-Free ──────────────────────────────────────── */}
<LedgerRow
index="02"
title={<Translate id="ledger.02.title">Subprocess-Free Analysis</Translate>}
desc={
<Translate id="ledger.02.desc">
Production-grade tools do not shell out during analysis. No subprocess.run(), no
os.system() inside per-item loops. Zenzic validates your documentation stack without
executing it.
</Translate>
}
terminal={
<LedgerTerminal filename="pillar-2 Β· subprocess boundary">
<pre className="m-0 bg-transparent whitespace-pre">
<code>
{`# βœ“ ALLOWED β€” single setup phase
class ZenzicEngine:
def __init__(self, config: Config):
self._vsm = build_vsm(config) # I/O once

# βœ— BLOCKED β€” subprocess inside analysis loop
for page in corpus:
subprocess.run([...]) # ← architectural defect`}
</code>
</pre>
</LedgerTerminal>
}
/>

{/* ── 03 β€” Deterministic Dependency Graph ───────────────────────── */}
<LedgerRow
index="03"
title={
<Translate id="ledger.03.title">Deterministic Dependency Graph</Translate>
}
desc={
<Translate id="ledger.03.desc">
Every dependency is pinned in a lockfile, audited by Dependabot, and scanned for
SPDX licence compatibility. No transitive surprises at release time. uv lock and
reuse lint run on every commit.
</Translate>
}
terminal={
<LedgerTerminal filename="reuse Β· SPDX compliance">
<pre className="m-0 bg-transparent whitespace-pre">
<code>
{`# runs on every commit via pre-commit
nox -s reuse

βœ“ SPDX headers present β”‚ all source files
βœ“ Apache-2.0 declared β”‚ LICENSES/
βœ“ Third-party notices β”‚ NOTICE
# No dependency ships
# without a licence audit.`}
</code>
</pre>
</LedgerTerminal>
}
/>
</div>
</section>
);
}
Loading
Loading