diff --git a/ARCHITECTURE.md b/ARCHITECTURE.md index 6a2aa6e..6366d44 100644 --- a/ARCHITECTURE.md +++ b/ARCHITECTURE.md @@ -59,11 +59,11 @@ Each topic has exactly one authoritative home; everything else links to it. | Topic | Single home | Linked from | |---|---|---| -| What ZDDC is + tool channel links + install bundles | `website/index.html` (hand-edited intro for `zddc.varasys.io/`) | repo `README.md`, `bootstrap/README.md` | +| What ZDDC is + tool channel links + dual-mode (local/server) overview + install bundles | `website/index.html` (hand-edited intro for `zddc.varasys.io/`) | repo `README.md`, `bootstrap/README.md` | | File-naming convention spec (status codes, modifiers, folder format) | `website/reference.html` | repo `README.md`, in-tool help text | -| Local-mode vs online-mode concept; what `zddc-server` adds | `website/zddc-server.html` | website intro | -| Customer-deployment install (install.zip, level-1/2 stubs, `?v=`, audit) | `bootstrap/README.md` | website intro, `zddc/README.md`, `zddc-server.html` | -| zddc-server operations: env vars, ACL syntax, `.archive` URLs, container vs binary | `zddc/README.md` | `AGENTS.md`, `bootstrap/README.md`, `zddc-server.html` | +| Versions + channel builds index of every tool | `website/releases/index.html` (regenerated by `build.sh`) | website intro nav, "Browse all versions" link | +| Customer-deployment install (install.zip, level-1/2 stubs, `?v=`, audit) | `bootstrap/README.md` | website intro, `zddc/README.md` | +| zddc-server operations: env vars, ACL syntax, `.archive` URLs, container vs binary | `zddc/README.md` | `AGENTS.md`, `bootstrap/README.md`, website intro | | Build / release / channel commands | `AGENTS.md` | repo `README.md` ("see AGENTS.md") | | Architecture & internal patterns | `ARCHITECTURE.md` (this file) | `AGENTS.md` | | Per-tool internal design quirks | `/README.md` | (linked from website intro tool cards) | diff --git a/CLAUDE.md b/CLAUDE.md index f933c35..9109ada 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -26,7 +26,7 @@ This is a **monorepo of independent tools**, not one application: ```bash sh build.sh # build all five HTML tools (dist/ only) sh tool/build.sh # build one (archive|transmittal|classifier|mdedit|landing) -sh tool/build.sh --release [version] # cut stable; tag, write website/releases/_v.html, refresh _latest symlink +sh tool/build.sh --release [version] # cut stable; tag, write website/releases/_v.html, refresh _stable symlink sh tool/build.sh --release alpha|beta # cut channel build; overwrites website/releases/_.html (mutable, no tag) npm test # all Playwright specs (build first!) npx playwright test # one spec diff --git a/build.sh b/build.sh index c00a20e..0161e4f 100755 --- a/build.sh +++ b/build.sh @@ -134,12 +134,117 @@ EOF rm -rf "$_staging" } +# Regenerate website/releases/index.html — a static directory listing of +# all tool releases with channel rows + per-version archive links. Read +# from the filesystem so the page is always consistent with what's there. +build_releases_index() { + _out="$RELEASES_DIR/index.html" + { + cat <<'HEAD' + + + + + + Releases — ZDDC + + + + + + + + + + + +
+
+

Releases

+

All published versions and channel builds of every ZDDC tool. Stable releases are immutable; alpha and beta channels are rebuilt without notice.

+
+
+ +
+HEAD + printf '%s\n' "$TOOL_TABLE" | while IFS='|' read -r _tool _file _title; do + _stable_target="" + if [ -L "$RELEASES_DIR/${_tool}_stable.html" ]; then + _stable_target=$(readlink "$RELEASES_DIR/${_tool}_stable.html") + fi + printf '
\n' + printf '

%s

\n' "$_title" + printf '
\n' + [ -e "$RELEASES_DIR/${_tool}_stable.html" ] && printf ' stable\n' "$_tool" + [ -e "$RELEASES_DIR/${_tool}_beta.html" ] && printf ' beta\n' "$_tool" + [ -e "$RELEASES_DIR/${_tool}_alpha.html" ] && printf ' alpha\n' "$_tool" + printf '
\n' + _versions=$(ls -1 "$RELEASES_DIR" 2>/dev/null | grep -E "^${_tool}_v[0-9]" | sort -V -r) + if [ -n "$_versions" ]; then + printf '
Pin to version:\n' + printf '%s\n' "$_versions" | while read -r _v; do + _ver=${_v#${_tool}_v}; _ver=${_ver%.html} + printf ' v%s\n' "$_v" "$_ver" + done + printf '
\n' + fi + if [ -n "$_stable_target" ]; then + printf '
stable currently → %s
\n' "$_stable_target" + fi + printf '
\n' + done + cat <<'TAIL' + +
+

Append ?v=alpha, ?v=beta, ?v=stable, or ?v=0.0.1 to any deployment URL to switch versions for a single request — see the home page.

+
+
+ + + + +TAIL + } > "$_out" + echo "Wrote $_out" +} + echo "" -echo "=== Building install.zip and track-*.zip ===" +echo "=== Building install.zip, track-*.zip, releases/index.html ===" build_install_zip build_track_zip alpha build_track_zip beta build_track_zip stable +build_releases_index echo "" echo "=== All tools built successfully ===" diff --git a/website/index.html b/website/index.html index dbad183..31812cb 100644 --- a/website/index.html +++ b/website/index.html @@ -24,7 +24,13 @@ @media (min-width: 720px) { .install-grid { grid-template-columns: repeat(2, 1fr); } } .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; } + .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; } @@ -69,7 +75,7 @@ Docs - Server + Releases @@ -87,7 +93,7 @@

What is it?

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.

-

The four tools below are optional interfaces around this structure. Each is a single self-contained HTML file. Save it locally and it works forever, without internet, updates, or a subscription.

+

The four tools below are optional 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 zddc-server described below) and use it over the network. Same on-disk layout either way.

Read the full specification →

@@ -139,7 +145,38 @@ -

Append ?v=alpha (or ?v=0.0.4, 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).

+

Append ?v=alpha (or ?v=0.0.4, 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). Browse all versions →

+ + + +
+

zddc-server (optional)

+

The tools work two ways over the same on-disk archive. Pick whichever fits your team:

+ +
+
+

Local directory mode

+

Open a tool, click Add Directory, point it at a folder. The tool reads files via the File System Access API. No upload, no server, no account.

+

Enough for individual users and small teams on a shared drive (network share, Dropbox, OneDrive, syncthing).

+
+
+

Online mode

+

Take the same local directory and put it behind any web server (nginx, Caddy, Apache, or zddc-server). The Archive Browser tool talks to the server's directory listings instead of the local filesystem — read-only, works in any browser.

+
+
+ +

zddc-server is a small Go binary purpose-built to serve ZDDC archives. Any web server gives you online mode; zddc-server adds things a generic web server can't:

+ +
    +
  • Access control via .zddc files. Behind a reverse proxy that authenticates users and sets an X-Email request header, zddc-server consults YAML .zddc files in directories — cascading bottom-up; deeper rules override. No database, no admin UI.
  • +
  • Virtual .archive URL space. GET /Project/.archive/123-XYZ.html resolves to the canonical revision file at request time. Computed from filenames; no cache, no separate index file.
  • +
  • Per-request access logging keyed to the authenticated user.
  • +
  • TLS, ETags, conditional GET, CORS, autoindex. The mundane glue.
  • +
+ +

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. The server is convenience, not lock-in.

+ +

Source, environment-variable contract, container image, and ACL syntax: codeberg.org/VARASYS/ZDDC zddc/ · pre-built image at codeberg.org/varasys/zddc-server (channel-tagged :stable, :beta, :alpha).

@@ -176,8 +213,8 @@

Learn more

  • Technical Reference — the full ZDDC convention: filename format, tracking numbers, revisions, status codes, folder naming, transmittal workflow.
  • +
  • All releases — every version and channel build of every tool, with per-version pin URLs.
  • codeberg.org/VARASYS/ZDDC — source code, issue tracker, contributor docs.
  • -
  • zddc-server — how the local-mode and online-mode tools relate, and what the optional Go HTTP server adds (access control, virtual archive index, audit logging).
diff --git a/website/install.zip b/website/install.zip index 826d46e..eabcbeb 100644 Binary files a/website/install.zip and b/website/install.zip differ diff --git a/website/reference.html b/website/reference.html index 49ee2b2..0b70648 100644 --- a/website/reference.html +++ b/website/reference.html @@ -37,19 +37,19 @@ Docs - Server + Releases @@ -979,25 +979,25 @@ project/

Four single-file HTML applications — each is complete and self-contained. Save them locally and they work forever, without internet, without updates, without a subscription.

- +
Archive Browser
Browse, search, filter your project folder. Filter by tracking number, discipline, revision, status, or free text. Group by transmittal. Download selected files as ZIP.
- +
Transmittal Creator
Fill in metadata, drag in files, publish a self-contained HTML transmittal record with SHA-256 checksums. Supports digital signatures. The published file IS the transmittal record.
- +
Document Classifier
Spreadsheet-like interface for bulk-renaming files to ZDDC format. Copy/paste with Excel. Point it at a folder, fill in the columns, save all at once.
- +
Markdown Editor
Browser-based markdown editor with live preview, YAML front matter support, and table of contents. Direct local file access via File System Access API.
diff --git a/website/releases/archive_alpha.html b/website/releases/archive_alpha.html index f701b9f..be71875 100644 --- a/website/releases/archive_alpha.html +++ b/website/releases/archive_alpha.html @@ -2078,7 +2078,7 @@ td[data-field="trackingNumber"] {
ZDDC Archive - alpha · 2026-04-27 · ea385b5 + alpha · 2026-04-28 · 67f794e
diff --git a/website/releases/archive_beta.html b/website/releases/archive_beta.html new file mode 100644 index 0000000..97c9ce2 --- /dev/null +++ b/website/releases/archive_beta.html @@ -0,0 +1,7800 @@ + + + + + + ZDDC Archive + + + +
+ + + + +
+
+
+ ZDDC Archive + beta · 2026-04-28 · 67f794e +
+ + +
+
+ + +
+
+ + +
+ + + + +
+ +
+ + + + + + + +
+ + +
+ +
+ +
+ + + +
+
+ + +
+ + + + + + + + + + + +
+
+ Tracking Number + +
+ +
+
+
+ Title + +
+ +
+
+
+ + Revisions +
+ +
+
+
+ + +
+ 0 files + 0 selected + +
+
+
+ + + + + +
+
+

Welcome to ZDDC Archive

+

Click Add Local Directory to select an archive folder to browse.

+

This browser provides a convenient interface for searching and retrieving files from ZDDC-compliant archives.

+

How to navigate:

+
    +
  • Select a party to see their transmittal folders; toggle folder types (Issued, Received, MDL, Incoming) above the list
  • +
  • Select transmittal folders to see their files
  • +
  • Use Ctrl+Click to select multiple folders
  • +
  • Use Shift+Click to select a range
  • +
  • Ctrl+Click chevrons to recursively expand/collapse
  • +
+ +
+ ⚠️ Windows Path Length Deficiency +
+

Microsoft Windows has a legacy 260-character path limit that affects most applications. If you see "files skipped" warnings, use Microsoft's own workaround:

+
    +
  1. Open Command Prompt as Administrator
  2. +
  3. Map your archive to a short drive letter:
    + subst Z: "C:\Your\Long\Path\To\Archive" +
  4. +
  5. Use the Z: drive in Archive Browser
  6. +
  7. To remove later: subst Z: /d
  8. +
+

This limitation dates back to Windows 95. The mapping persists until reboot.

+
+
+ +

Note: This application works entirely in your browser and does not transmit any data.

+
+
+ + + + + +
+ + + + diff --git a/website/releases/classifier_alpha.html b/website/releases/classifier_alpha.html new file mode 100644 index 0000000..c567d56 --- /dev/null +++ b/website/releases/classifier_alpha.html @@ -0,0 +1,6971 @@ + + + + + + ZDDC Classifier + + + +
+ +
+ +
+
+
+ ZDDC Classifier + alpha · 2026-04-28 · 67f794e +
+ + +
+
+ + +
+
+ + +
+ + + + +
+
+
+

Files

+
+ 0 files + 0 modified + +
+
+
+ + + | + + + | + +
+
+
+ + + + + + + + + + + + + + + + + +
#Original Filename + + Ext + + New Filename + + Tracking + + Rev + + Status + + Title + +
+
+
+ +
+ + +
+
+

ZDDC Classifier

+

Rename a folder of files to ZDDC format using a spreadsheet interface.

+

Open a directory, fill in tracking number, revision, status, and title for each file, then save — the files are renamed on disk.

+ + + + +
    +
  • Files already named to ZDDC format are parsed automatically
  • +
  • Edit cells directly, or copy columns to and from Excel
  • +
  • Real-time validation highlights non-compliant names
  • +
  • Rename one file or all modified files at once
  • +
+ +

Click Select Directory to begin.

+ +

This application works entirely in your browser. No data is transmitted to any server.

+
+
+
+ + + +
+ + + + diff --git a/website/releases/classifier_beta.html b/website/releases/classifier_beta.html new file mode 100644 index 0000000..f90ac4d --- /dev/null +++ b/website/releases/classifier_beta.html @@ -0,0 +1,6971 @@ + + + + + + ZDDC Classifier + + + +
+ +
+ +
+
+
+ ZDDC Classifier + beta · 2026-04-28 · 67f794e +
+ + +
+
+ + +
+
+ + +
+ + + + +
+
+
+

Files

+
+ 0 files + 0 modified + +
+
+
+ + + | + + + | + +
+
+
+ + + + + + + + + + + + + + + + + +
#Original Filename + + Ext + + New Filename + + Tracking + + Rev + + Status + + Title + +
+
+
+ +
+ + +
+
+

ZDDC Classifier

+

Rename a folder of files to ZDDC format using a spreadsheet interface.

+

Open a directory, fill in tracking number, revision, status, and title for each file, then save — the files are renamed on disk.

+ + + + +
    +
  • Files already named to ZDDC format are parsed automatically
  • +
  • Edit cells directly, or copy columns to and from Excel
  • +
  • Real-time validation highlights non-compliant names
  • +
  • Rename one file or all modified files at once
  • +
+ +

Click Select Directory to begin.

+ +

This application works entirely in your browser. No data is transmitted to any server.

+
+
+
+ + + +
+ + + + diff --git a/website/releases/index.html b/website/releases/index.html new file mode 100644 index 0000000..f638e74 --- /dev/null +++ b/website/releases/index.html @@ -0,0 +1,124 @@ + + + + + + Releases — ZDDC + + + + + + + + + +
+ +
+
+

Releases

+

All published versions and channel builds of every ZDDC tool. Stable releases are immutable; alpha and beta channels are rebuilt without notice.

+
+
+ +
+
+

Archive

+
+ stable + beta + alpha +
+
Pin to version: + v0.0.1 +
+
stable currently → archive_v0.0.1.html
+
+
+

Transmittal

+
+ stable + beta + alpha +
+
Pin to version: + v0.0.1 +
+
stable currently → transmittal_v0.0.1.html
+
+
+

Classifier

+
+ stable + beta + alpha +
+
Pin to version: + v0.0.1 +
+
stable currently → classifier_v0.0.1.html
+
+
+

Markdown Editor

+
+ stable + beta + alpha +
+
Pin to version: + v0.0.1 +
+
stable currently → mdedit_v0.0.1.html
+
+
+

ZDDC

+
+ stable + beta + alpha +
+
Pin to version: + v0.0.1 +
+
stable currently → landing_v0.0.1.html
+
+ +
+

Append ?v=alpha, ?v=beta, ?v=stable, or ?v=0.0.1 to any deployment URL to switch versions for a single request — see the home page.

+
+
+ + + + diff --git a/website/releases/landing_alpha.html b/website/releases/landing_alpha.html new file mode 100644 index 0000000..613186c --- /dev/null +++ b/website/releases/landing_alpha.html @@ -0,0 +1,1029 @@ + + + + + + ZDDC Archive — Projects + + + +
+
+ ZDDC Archive + alpha · 2026-04-28 · 67f794e +
+
+ +
+
+ +
+ + + +
+
+

Select Projects

+
+ +
+ + +
+ + +
+
+ +
+ +
+ + +
+
+ + + + diff --git a/website/releases/landing_beta.html b/website/releases/landing_beta.html new file mode 100644 index 0000000..ad54509 --- /dev/null +++ b/website/releases/landing_beta.html @@ -0,0 +1,1029 @@ + + + + + + ZDDC Archive — Projects + + + +
+
+ ZDDC Archive + beta · 2026-04-28 · 67f794e +
+
+ +
+
+ +
+ + + +
+
+

Select Projects

+
+ +
+ + +
+ + +
+
+ +
+ +
+ + +
+
+ + + + diff --git a/website/releases/mdedit_alpha.html b/website/releases/mdedit_alpha.html new file mode 100644 index 0000000..6fca23e --- /dev/null +++ b/website/releases/mdedit_alpha.html @@ -0,0 +1,5064 @@ + + + + + + ZDDC Markdown + + + + + + +
+
+
+
+ ZDDC Markdown + alpha · 2026-04-28 · 67f794e +
+ +
+
+ + +
+
+ +
+
+ + +
+ +
+
+

Welcome to ZDDC Markdown

+

All files are edited on your local computer.

+

Click Scratchpad to start editing,
or Select Directory to work with files.

+ +
+ + +
+
+
+ +
+
+ + 0 folders + 0 files + 0 unsaved +
+ +
+ + + + + + +
+ + + + diff --git a/website/releases/mdedit_beta.html b/website/releases/mdedit_beta.html new file mode 100644 index 0000000..7022b31 --- /dev/null +++ b/website/releases/mdedit_beta.html @@ -0,0 +1,5064 @@ + + + + + + ZDDC Markdown + + + + + + +
+
+
+
+ ZDDC Markdown + beta · 2026-04-28 · 67f794e +
+ +
+
+ + +
+
+ +
+
+ + +
+ +
+
+

Welcome to ZDDC Markdown

+

All files are edited on your local computer.

+

Click Scratchpad to start editing,
or Select Directory to work with files.

+ +
+ + +
+
+
+ +
+
+ + 0 folders + 0 files + 0 unsaved +
+ +
+ + + + + + +
+ + + + diff --git a/website/releases/transmittal_alpha.html b/website/releases/transmittal_alpha.html new file mode 100644 index 0000000..d99a851 --- /dev/null +++ b/website/releases/transmittal_alpha.html @@ -0,0 +1,10998 @@ + + + + + + + + + ZDDC Transmittal + + + +
+ + JavaScript not available +
+ ZDDC Transmittal + alpha · 2026-04-28 · 67f794e +
+
+
+ + +
+
+
+
+ + + + +
+ + +
+

+ Integrity + Not Validated (requires JavaScript) +

+
+
+
+ +
+
+ + +
+
Drop folder to scan / verify Drop HTML or JSON to import
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
# + + + + + + + + + + + + + +
+
+
+ +
+ +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/website/releases/transmittal_beta.html b/website/releases/transmittal_beta.html index 085ed6e..97a505b 100644 --- a/website/releases/transmittal_beta.html +++ b/website/releases/transmittal_beta.html @@ -2191,7 +2191,7 @@ dialog.modal--narrow { JavaScript not available
ZDDC Transmittal - beta · 2026-04-27 · ea385b5 + beta · 2026-04-28 · 67f794e
@@ -2509,7 +2509,7 @@ dialog.modal--narrow {
  • Digital signatures — ECDSA signatures bind the digest to a signer’s private key. Any change invalidates the signature, preventing undetected tampering. Add signatures after publishing via Add Signature.
  • Independent verification — A tampered HTML file could ship modified JavaScript that always says “Verified.” To rule this out, the recipient opens the sender’s file in their own trusted copy of the tool using Import HTML. This extracts the raw data and re-verifies it with the recipient’s own code. Use this level for anything that matters.
  • -

    Level 4 assumes the recipient’s tool is trustworthy (downloaded from a known source or built from source). A reference instance is at zddc.varasys.io.

    +

    Level 4 assumes the recipient’s tool is trustworthy (downloaded from a known source or built from source). A reference instance is at zddc.varasys.io.

    Menu Actions

    Actions available from the dropdown button. draft items appear only while editing. published items appear only after publishing. Unmarked items appear in both modes.

    @@ -10548,7 +10548,7 @@ When you open a transmittal, it may display "✓ Signature Valid" - but **this d **For Document Controllers / Official Verification:** -1. **Use a trusted tool instance** - Download the official transmittal tool from a trusted source (e.g., your organization's approved version or https://zddc.varasys.io/releases/transmittal_latest.html) +1. **Use a trusted tool instance** - Download the official transmittal tool from a trusted source (e.g., your organization's approved version or https://zddc.varasys.io/releases/transmittal_stable.html) 2. **Export JSON from the transmittal** - Open the transmittal → Click "Download Data" 3. **Import JSON into trusted tool** - Open your trusted tool → Click "Load JSON" → Paste the exported data 4. **Verify file hashes** - Click "Select Directory" and point to the actual files @@ -10777,7 +10777,7 @@ When viewing a published transmittal, signature status is displayed above the fi **Verification Actions**: - **Verify Externally** — Opens a trusted tool instance for independent verification - Copies JSON data to clipboard - - Opens https://zddc.varasys.io/releases/transmittal_latest.html in validation mode + - Opens https://zddc.varasys.io/releases/transmittal_stable.html in validation mode - Paste JSON and select directory to verify file hashes independently - Only trust verification results from the trusted tool, not this document diff --git a/website/track-alpha.zip b/website/track-alpha.zip index 80debc6..d6d824d 100644 Binary files a/website/track-alpha.zip and b/website/track-alpha.zip differ diff --git a/website/track-beta.zip b/website/track-beta.zip index e83eb23..6a2d58c 100644 Binary files a/website/track-beta.zip and b/website/track-beta.zip differ diff --git a/website/track-stable.zip b/website/track-stable.zip index 1651b57..f40a3aa 100644 Binary files a/website/track-stable.zip and b/website/track-stable.zip differ diff --git a/website/zddc-server.html b/website/zddc-server.html deleted file mode 100644 index 5a3022b..0000000 --- a/website/zddc-server.html +++ /dev/null @@ -1,162 +0,0 @@ - - - - - - zddc-server — Zero Day Document Control - - - - - - - - - - - - - - - - - -
    -
    -

    zddc-server

    -

    ZDDC has two access modes over the same on-disk archive. Online mode is what you get when you put a local directory behind a web server. zddc-server is an optional Go binary that adds access control, a virtual archive index, and audit logging on top.

    -
    -
    - -
    - -
    -

    Two modes, one archive

    - -
    -
    -

    Local directory mode

    -

    Open a tool, click Add Directory, point it at a folder. The tool reads files directly via the File System Access API. No upload, no server, no account.

    -

    Enough for individual users and small teams on a shared drive (network share, Dropbox, OneDrive, syncthing).

    -
    -
    -

    Online mode

    -

    Take the same local directory and put it behind any web server (nginx, Caddy, Apache, even python -m http.server). The Archive Browser tool talks to the server's directory listings instead of the local filesystem.

    -

    Read-only, no special server software, works in any browser.

    -
    -
    - -

    That's it. Same on-disk layout, two access mechanisms. The convention is the contract; the mode is an access decision.

    -
    - -
    -

    What zddc-server adds

    -

    zddc-server is a small Go binary built specifically to serve ZDDC archives. It is a web server, so it gives you online mode out of the box — but it adds things a generic web server can't:

    - -
      -
    • If the server reads email headers, it can enforce access control. Behind any reverse proxy that authenticates users (Authelia, oauth2-proxy, your own SSO) and sets an X-Email request header, zddc-server consults .zddc YAML files in directories. Cascading bottom-up; deeper rules override shallower ones. No database, no admin UI — edit the files with any text editor.
    • -
    • Virtual .archive URL space. GET /Project/.archive/123-XYZ.html resolves to the canonical revision file (the one in the chronologically earliest transmittal that contains it). Computed from filenames at request time — no cache, no separate index file. Restart the server and it rebuilds.
    • -
    • Per-request access logging keyed to the authenticated user's email — method, path, status, bytes, duration.
    • -
    • TLS, ETags, conditional GET, CORS, autoindex. The mundane glue that makes a directory pleasant to serve.
    • -
    - -

    In short: any web server can do online mode for reads. zddc-server adds ACL, a virtual archive index, and audit logging while remaining a thin wrapper around the same directory.

    -
    - -
    -

    Still just files in folders

    -

    The on-disk layout is the same whether you access locally or online. The server doesn't transform the archive — it serves it. Stop the server and the directory is still a perfectly valid ZDDC archive that opens in local-directory mode.

    - -
    ZDDC_ROOT/
    -  index.html           ← landing tool
    -  archive.html         ← archive browser
    -  transmittal.html
    -  …
    -  Project-001/
    -    .zddc              ← ACL (optional, YAML)
    -    2025-10-31_123456-EM-MDL-0001 (IFR) - Master Deliverables List/
    -      123456-EM-MDL-0001_A (IFR) - Master Deliverables List.pdf
    -    2025-11-12_123456-EL-SPC-2623 (IFR) - Specification For Switchgear/
    -      123456-EL-SPC-2623_A (IFR) - Specification For Switchgear.pdf
    -  Project-002/
    -    …
    - -

    This keeps the "Zero Day" promise: the server is convenience, not lock-in. Walk away from zddc-server tomorrow and the archive is still a perfectly valid convention-named folder tree, fully usable with nothing more than a file manager.

    -
    - -
    -

    Get it

    -

    The server lives at codeberg.org/VARASYS/ZDDC under zddc/. Operations and configuration — environment variables, TLS modes, the .zddc ACL syntax, the virtual archive index URL patterns, container vs native binary deployment — are documented in zddc/README.md.

    - -

    Quick start (with podman available):

    -
    git clone https://codeberg.org/VARASYS/ZDDC.git
    -cd ZDDC/zddc
    -ZDDC_DATA_DIR=/path/to/your/archive podman-compose up --build
    - -

    For the deployment-side install of the tools onto a zddc-server instance — including the level-1/level-2 bootstrap pattern, install.zip, and the channel-tracking track-*.zip bundles — see bootstrap/README.md.

    -
    - -
    - - - - - - -