The "Install on your server" section of the home page now prints four
short shell snippets — copy-paste into a terminal, files land in CWD.
Each uses curl to fetch the relevant bootstrap files; nothing else to
install:
1. Self-contained: fetches the 5 current-stable tool HTMLs into CWD
plus a _template/ directory of level-1 stubs.
~1.8 MB on disk; no runtime dependency on the
site after install.
2. Track stable: fetches 5 tiny level-2 stubs (~10 KB total)
that fetch zddc.varasys.io's stable channel
on every page load.
3. Track beta: same, for beta.
4. Track alpha: same, for alpha.
Each snippet card explains when/why to use that option directly inline.
Implementation:
- build.sh now produces website/bootstrap/level1/<tool>.html and
website/bootstrap/track-{alpha,beta,stable}/<tool>.html as
standalone files (rather than packaging them into zips).
- install.zip and track-{alpha,beta,stable}.zip are removed; the
snippets curl the per-channel stubs directly.
- Docs updated: README, ARCHITECTURE, CLAUDE, AGENTS, bootstrap/README,
zddc/README, landing/build.sh comment.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
254 lines
17 KiB
HTML
254 lines
17 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>ZDDC — Zero Day Document Control</title>
|
|
<meta name="description" content="A file-naming convention and a small set of single-file HTML tools for managing project deliverables. Self-contained, offline-capable, dependency-free.">
|
|
<meta property="og:type" content="website">
|
|
<meta property="og:url" content="https://zddc.varasys.io/">
|
|
<meta property="og:title" content="ZDDC — Zero Day Document Control">
|
|
<meta property="og:description" content="A file-naming convention and a small set of single-file HTML tools for managing project deliverables. Self-contained, offline-capable, dependency-free.">
|
|
<meta name="theme-color" content="#2a5a8a">
|
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap" rel="stylesheet">
|
|
<link rel="stylesheet" href="css/style.css">
|
|
<style>
|
|
.channel-row { display: flex; flex-wrap: wrap; gap: 0.5rem; margin-top: 0.75rem; font-size: 0.9rem; }
|
|
.channel-row a { display: inline-block; padding: 0.25rem 0.625rem; border-radius: 999px; text-decoration: none; border: 1px solid var(--color-border); color: var(--color-text); }
|
|
.channel-row a:hover { background: var(--color-bg-subtle); }
|
|
.channel-row .channel-stable { border-color: var(--color-primary); color: var(--color-primary); font-weight: 600; }
|
|
.channel-row .channel-beta, .channel-row .channel-alpha { color: var(--color-text-muted); }
|
|
.install-grid { display: grid; grid-template-columns: 1fr; gap: var(--spacing-md); margin-top: var(--spacing-md); }
|
|
.install-card { padding: var(--spacing-md); border: 1px solid var(--color-border); border-radius: 8px; background: var(--color-bg-subtle); }
|
|
.install-card h3 { margin-top: 0; margin-bottom: 0.25rem; }
|
|
.install-card .when { color: var(--color-text-muted); font-size: 0.92em; margin: 0.1rem 0 0.6rem 0; }
|
|
.install-card pre { background: var(--color-bg); border: 1px solid var(--color-border); border-radius: 6px; padding: 0.6rem 0.8rem; overflow-x: auto; font-size: 0.82em; line-height: 1.45; margin: 0; }
|
|
.install-card pre code { font-family: "SF Mono", Menlo, Consolas, monospace; }
|
|
.mode-grid { display: grid; grid-template-columns: 1fr; gap: var(--spacing-md); margin-top: var(--spacing-md); }
|
|
@media (min-width: 720px) { .mode-grid { grid-template-columns: 1fr 1fr; } }
|
|
.mode-card { padding: var(--spacing-md); border: 1px solid var(--color-border); border-radius: 8px; }
|
|
.mode-card h3 { margin-top: 0; }
|
|
code.inline { background: var(--color-bg-subtle); padding: 0.1rem 0.35rem; border-radius: 4px; font-size: 0.9em; }
|
|
.feature-list { line-height: 1.8; padding-left: 1.5rem; color: var(--color-text); }
|
|
.feature-list li { margin-bottom: 0.4rem; }
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<!-- Header -->
|
|
<header class="site-header">
|
|
<div class="container header-content">
|
|
<a href="/" class="brand">
|
|
<div class="brand-logo">
|
|
<svg viewBox="0 0 24 24">
|
|
<path d="M3 5h18v2H3V5zm0 6h12v2H3v-2zm0 6h6v2H3v-2z" />
|
|
</svg>
|
|
</div>
|
|
<span class="brand-name">ZDDC</span>
|
|
</a>
|
|
<nav class="header-nav">
|
|
<div class="dropdown">
|
|
<button class="dropdown-toggle" type="button" aria-haspopup="true">
|
|
<span>Tools</span>
|
|
<svg viewBox="0 0 24 24" style="width: 14px; height: 14px; fill: currentColor;">
|
|
<path d="M7 10l5 5 5-5z"/>
|
|
</svg>
|
|
</button>
|
|
<div class="dropdown-menu">
|
|
<div class="dropdown-menu__inner">
|
|
<a href="releases/archive_stable.html">
|
|
<svg class="dropdown-menu-icon" viewBox="0 0 24 24"><path d="M20 6H4a2 2 0 00-2 2v10a2 2 0 002 2h16a2 2 0 002-2V8a2 2 0 00-2-2zm0 12H4V8h16v10zM4 2h16v2H4z"/></svg>
|
|
Archive Browser
|
|
</a>
|
|
<a href="releases/transmittal_stable.html">
|
|
<svg class="dropdown-menu-icon" viewBox="0 0 24 24"><path d="M20 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 4l-8 5-8-5V6l8 5 8-5v2z"/></svg>
|
|
Transmittal Creator
|
|
</a>
|
|
<a href="releases/classifier_stable.html">
|
|
<svg class="dropdown-menu-icon" viewBox="0 0 24 24"><path d="M3 18h18v-2H3v2zm0-5h18v-2H3v2zm0-7v2h18V6H3z"/></svg>
|
|
Document Classifier
|
|
</a>
|
|
<a href="releases/mdedit_stable.html">
|
|
<svg class="dropdown-menu-icon" viewBox="0 0 24 24"><path d="M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM20.71 7.04a1 1 0 000-1.41l-2.34-2.34a1 1 0 00-1.41 0l-1.83 1.83 3.75 3.75 1.83-1.83z"/></svg>
|
|
Markdown Editor
|
|
</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<a href="reference.html" class="nav-link">Docs</a>
|
|
<a href="releases/" class="nav-link">Releases</a>
|
|
</nav>
|
|
</div>
|
|
</header>
|
|
|
|
<!-- Hero -->
|
|
<section class="hero">
|
|
<div class="container">
|
|
<h1>Zero Day Document Control</h1>
|
|
<p class="hero-subtitle">A file-naming convention and a small set of single-file HTML tools for managing project deliverables. Self-contained, offline-capable, dependency-free.</p>
|
|
</div>
|
|
</section>
|
|
|
|
<main class="container" style="margin-bottom: var(--spacing-2xl);">
|
|
|
|
<section style="margin-top: var(--spacing-xl);">
|
|
<h2>What is it?</h2>
|
|
<p>ZDDC is a convention, not a platform. Every deliverable's filename encodes its tracking number, revision, status, and title; every transmittal folder is date-prefixed and self-describing. A plain shared folder becomes a fully searchable, auditable information-management system — no server, no database, no software required to read the archive.</p>
|
|
<p>The four tools below are <em>optional</em> interfaces around this structure. Each is a single self-contained HTML file that works two ways: open it locally and point it at a folder on your disk, or put it behind any web server (including the optional <code class="inline">zddc-server</code> described below) and use it over the network. Same on-disk layout either way.</p>
|
|
<p style="margin-top: var(--spacing-md);"><a href="reference.html">Read the full specification →</a></p>
|
|
</section>
|
|
|
|
<section style="margin-top: var(--spacing-2xl);">
|
|
<h2>Try the tools</h2>
|
|
<p>Each tool is published in three channels. <strong>Stable</strong> is versioned and immutable; <strong>beta</strong> and <strong>alpha</strong> are mutable previews of in-flight work.</p>
|
|
|
|
<div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: var(--spacing-lg); margin-top: var(--spacing-lg);">
|
|
|
|
<div class="tool-card">
|
|
<div class="tool-card__title">Archive Browser</div>
|
|
<div class="tool-card__desc">Browse, search, and filter your project folder. Group by transmittal; filter by tracking number, revision, status, or free text. Export selections as ZIP.</div>
|
|
<div class="channel-row">
|
|
<a href="releases/archive_stable.html" class="channel-stable">stable</a>
|
|
<a href="releases/archive_beta.html" class="channel-beta">beta</a>
|
|
<a href="releases/archive_alpha.html" class="channel-alpha">alpha</a>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="tool-card">
|
|
<div class="tool-card__title">Transmittal Creator</div>
|
|
<div class="tool-card__desc">Fill in metadata, drag in files, publish a self-contained HTML transmittal record with SHA-256 checksums. Optional digital signatures. The published file <em>is</em> the transmittal record.</div>
|
|
<div class="channel-row">
|
|
<a href="releases/transmittal_stable.html" class="channel-stable">stable</a>
|
|
<a href="releases/transmittal_beta.html" class="channel-beta">beta</a>
|
|
<a href="releases/transmittal_alpha.html" class="channel-alpha">alpha</a>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="tool-card">
|
|
<div class="tool-card__title">Document Classifier</div>
|
|
<div class="tool-card__desc">Spreadsheet-like interface for bulk-renaming files into ZDDC format. Copy/paste with Excel. Point it at a folder, fill in the columns, save all at once.</div>
|
|
<div class="channel-row">
|
|
<a href="releases/classifier_stable.html" class="channel-stable">stable</a>
|
|
<a href="releases/classifier_beta.html" class="channel-beta">beta</a>
|
|
<a href="releases/classifier_alpha.html" class="channel-alpha">alpha</a>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="tool-card">
|
|
<div class="tool-card__title">Markdown Editor</div>
|
|
<div class="tool-card__desc">Browser-based markdown editor with live preview, YAML front matter, and table of contents. Direct local file access via the File System Access API.</div>
|
|
<div class="channel-row">
|
|
<a href="releases/mdedit_stable.html" class="channel-stable">stable</a>
|
|
<a href="releases/mdedit_beta.html" class="channel-beta">beta</a>
|
|
<a href="releases/mdedit_alpha.html" class="channel-alpha">alpha</a>
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<p style="margin-top: var(--spacing-lg); color: var(--color-text-muted);">Append <code class="inline">?v=alpha</code> (or <code class="inline">?v=0.0.4</code>, etc.) to any URL to switch versions for a single request — useful for sharing a link to an exact build. Direct local-folder access requires a Chromium-based browser (the File System Access API is unavailable in Firefox / Safari). <a href="releases/">Browse all versions →</a></p>
|
|
</section>
|
|
|
|
<!-- zddc-server (inline, replaces the previous separate page) -->
|
|
<section style="margin-top: var(--spacing-2xl);">
|
|
<h2>zddc-server (optional)</h2>
|
|
<p>The tools work two ways over the same on-disk archive. Pick whichever fits your team:</p>
|
|
|
|
<div class="mode-grid">
|
|
<div class="mode-card">
|
|
<h3>Local directory mode</h3>
|
|
<p>Open a tool, click <em>Add Directory</em>, point it at a folder. The tool reads files via the File System Access API. No upload, no server, no account.</p>
|
|
<p>Enough for individual users and small teams on a shared drive (network share, Dropbox, OneDrive, syncthing).</p>
|
|
</div>
|
|
<div class="mode-card">
|
|
<h3>Online mode</h3>
|
|
<p>Take the same local directory and put it behind any web server (nginx, Caddy, Apache, or <code class="inline">zddc-server</code>). The Archive Browser tool talks to the server's directory listings instead of the local filesystem — read-only, works in any browser.</p>
|
|
</div>
|
|
</div>
|
|
|
|
<p style="margin-top: var(--spacing-md);"><strong><code class="inline">zddc-server</code></strong> is a small Go binary purpose-built to serve ZDDC archives. <em>Any</em> web server gives you online mode; <code class="inline">zddc-server</code> adds things a generic web server can't:</p>
|
|
|
|
<ul class="feature-list">
|
|
<li><strong>Access control via <code class="inline">.zddc</code> files.</strong> Behind a reverse proxy that authenticates users and sets an <code class="inline">X-Auth-Request-Email</code> request header, <code class="inline">zddc-server</code> consults YAML <code class="inline">.zddc</code> files in directories — cascading bottom-up; deeper rules override. No database, no admin UI.</li>
|
|
<li><strong>Virtual <code class="inline">.archive</code> URL space.</strong> <code class="inline">GET /Project/.archive/123-XYZ.html</code> resolves to the canonical revision file at request time. Computed from filenames; no cache, no separate index file.</li>
|
|
<li><strong>Per-request access logging</strong> keyed to the authenticated user.</li>
|
|
<li><strong>TLS, ETags, conditional GET, CORS, autoindex.</strong> The mundane glue.</li>
|
|
</ul>
|
|
|
|
<p style="margin-top: var(--spacing-md);">The on-disk layout is the same in both modes. Stop the server and the directory is still a perfectly valid ZDDC archive that opens in local-directory mode. <strong>The server is convenience, not lock-in.</strong></p>
|
|
|
|
<p style="margin-top: var(--spacing-md);">Source, environment-variable contract, container image, and ACL syntax: <a href="https://codeberg.org/VARASYS/ZDDC/src/branch/main/zddc">codeberg.org/VARASYS/ZDDC <code class="inline">zddc/</code></a> · pre-built image at <code class="inline">codeberg.org/varasys/zddc-server</code> (channel-tagged <code class="inline">:stable</code>, <code class="inline">:beta</code>, <code class="inline">:alpha</code>).</p>
|
|
</section>
|
|
|
|
<section style="margin-top: var(--spacing-2xl);">
|
|
<h2>Install on your server</h2>
|
|
<p>Each option below is a short shell snippet. <code class="inline">cd</code> into your deployment directory, copy-paste one of the four blocks into your terminal, and the files land in CWD. All four use <code class="inline">curl</code>; nothing else to install.</p>
|
|
|
|
<div class="install-grid">
|
|
<div class="install-card">
|
|
<h3>Self-contained install</h3>
|
|
<p class="when"><strong>Use when:</strong> you want a deployment that does not depend on <code class="inline">zddc.varasys.io</code> after install. Downloads the five current-stable tool HTMLs (~1.8 MB total) plus a <code class="inline">_template/</code> directory with level-1 stubs to copy into project subdirectories. Re-run to update.</p>
|
|
<pre><code>set -eu
|
|
B=https://zddc.varasys.io
|
|
for t in archive transmittal classifier mdedit; do
|
|
curl -fsSL "$B/releases/${t}_stable.html" -o "${t}.html"
|
|
done
|
|
curl -fsSL "$B/releases/landing_stable.html" -o index.html
|
|
mkdir -p _template
|
|
for t in archive transmittal classifier mdedit; do
|
|
curl -fsSL "$B/bootstrap/level1/${t}.html" -o "_template/${t}.html"
|
|
done</code></pre>
|
|
</div>
|
|
<div class="install-card">
|
|
<h3>Track <span style="color: var(--color-primary);">stable</span> channel</h3>
|
|
<p class="when"><strong>Use when:</strong> you want auto-updates whenever stable advances. Installs five tiny stubs (~10 KB total) that fetch <code class="inline">zddc.varasys.io</code> on every page load — visitors need network access. Switch channels later by re-running with <code class="inline">track-beta</code> or <code class="inline">track-alpha</code>.</p>
|
|
<pre><code>set -eu
|
|
B=https://zddc.varasys.io/bootstrap/track-stable
|
|
for f in archive transmittal classifier mdedit index; do
|
|
curl -fsSL "$B/${f}.html" -o "${f}.html"
|
|
done</code></pre>
|
|
</div>
|
|
<div class="install-card">
|
|
<h3>Track beta channel</h3>
|
|
<p class="when"><strong>Use when:</strong> you want to soak the next release before it goes stable. Same shape as the stable tracker, fetching the <code class="inline">beta</code> channel. Beta is overwritten in place; expect occasional updates.</p>
|
|
<pre><code>set -eu
|
|
B=https://zddc.varasys.io/bootstrap/track-beta
|
|
for f in archive transmittal classifier mdedit index; do
|
|
curl -fsSL "$B/${f}.html" -o "${f}.html"
|
|
done</code></pre>
|
|
</div>
|
|
<div class="install-card">
|
|
<h3>Track alpha channel</h3>
|
|
<p class="when"><strong>Use when:</strong> you want bleeding-edge work. Alpha is rebuilt without notice, sometimes daily, and may break — fine for a personal sandbox or to verify a fix you're tracking, not for shared deployments.</p>
|
|
<pre><code>set -eu
|
|
B=https://zddc.varasys.io/bootstrap/track-alpha
|
|
for f in archive transmittal classifier mdedit index; do
|
|
curl -fsSL "$B/${f}.html" -o "${f}.html"
|
|
done</code></pre>
|
|
</div>
|
|
</div>
|
|
|
|
<p style="margin-top: var(--spacing-md);">See <a href="https://codeberg.org/VARASYS/ZDDC/src/branch/main/bootstrap/README.md">bootstrap/README.md</a> for the level-1 / level-2 model, the per-project / per-tool override pattern, and the audit grep that lets you see what every project on a deployment is pointing at.</p>
|
|
</section>
|
|
|
|
<section style="margin-top: var(--spacing-2xl);">
|
|
<h2>Learn more</h2>
|
|
<ul style="line-height: 1.9;">
|
|
<li><a href="reference.html">Technical Reference</a> — the full ZDDC convention: filename format, tracking numbers, revisions, status codes, folder naming, transmittal workflow.</li>
|
|
<li><a href="releases/">All releases</a> — every version and channel build of every tool, with per-version pin URLs.</li>
|
|
<li><a href="https://codeberg.org/VARASYS/ZDDC">codeberg.org/VARASYS/ZDDC</a> — source code, issue tracker, contributor docs.</li>
|
|
</ul>
|
|
</section>
|
|
|
|
</main>
|
|
|
|
<footer class="site-footer">
|
|
<div class="container footer-content">
|
|
<span>ZDDC is open source — <a href="https://codeberg.org/VARASYS/ZDDC">codeberg.org/VARASYS/ZDDC</a></span>
|
|
</div>
|
|
</footer>
|
|
|
|
<script src="js/layout.js"></script>
|
|
</body>
|
|
</html>
|