UCCO Foundation — Infrastructure Brief v1¶
Date: 14 March 2026
From: Tim (via Claude)
For: Alex
SURFACE: ucco.foundation (NEW — separate ecosystem)¶
DO NOT TOUCH: ucca-engine, ucca-docs, ucca-authenticator, ir.ucca.online, keys.ucca.online, ops.ucca.online, rtopacks.com.au, vcc.ucca.online¶
→ ALEX¶
What this is¶
A completely separate infrastructure ecosystem for the UCCO Foundation — the neutral standards body that stewards the UCCO open specification. This is NOT part of the UCCA Inc commercial stack. Separate Cloudflare account. Separate GitHub org. Separate domain. Separate everything.
Do not touch the UCCA codebase. Do not reference UCCA workers or databases. Build fresh against the patterns you know.
Phase 1 — Human actions required BEFORE you start (Tim does these)¶
Tim must complete these before Alex can begin:
- Register
ucco.foundationdomain — Porkbun recommended - Create new Cloudflare account — foundation@ucco.foundation (new email)
- Add
ucco.foundationzone to new CF account - Create GitHub org
ucco-foundation— public - Create repo
ucco-foundation/ucco-standard— public - Create repo
ucco-foundation/ucco-site— public - Invite Alex as member of
ucco-foundationGitHub org
Tim confirms when done. Alex does not proceed until confirmed.
Phase 2 — Alex builds¶
2.1 Cloudflare Workers — foundation stack¶
Worker: ucco-site
- Zone: ucco.foundation
- Serves the MkDocs static site
- Routes: ucco.foundation/*
Worker: ucco-api
- Zone: api.ucco.foundation
- Handles: contributor registration, download tracking, mailing list signup
- D1 database: foundation-db (see schema below)
D1 database: foundation-db
-- Contributor registry
CREATE TABLE contributors (
id TEXT PRIMARY KEY,
name TEXT NOT NULL,
email TEXT NOT NULL UNIQUE,
organisation TEXT,
jurisdiction TEXT,
created_at TEXT NOT NULL,
verified_at TEXT,
contributor_hash TEXT UNIQUE
);
-- Document download log
CREATE TABLE downloads (
id TEXT PRIMARY KEY,
document_id TEXT NOT NULL,
document_version TEXT NOT NULL,
contributor_id TEXT,
ip_hash TEXT,
downloaded_at TEXT NOT NULL,
country_code TEXT
);
-- Mailing list
CREATE TABLE mailing_list (
id TEXT PRIMARY KEY,
email TEXT NOT NULL UNIQUE,
name TEXT,
subscribed_at TEXT NOT NULL,
confirmed_at TEXT,
confirmation_token TEXT
);
-- Public comment log
CREATE TABLE comments (
id TEXT PRIMARY KEY,
contributor_id TEXT,
document_id TEXT NOT NULL,
document_version TEXT NOT NULL,
section_reference TEXT,
comment_text TEXT NOT NULL,
submitted_at TEXT NOT NULL,
status TEXT DEFAULT 'received'
);
-- Document registry
CREATE TABLE documents (
id TEXT PRIMARY KEY,
title TEXT NOT NULL,
version TEXT NOT NULL,
status TEXT NOT NULL,
published_at TEXT NOT NULL,
pdf_path TEXT,
docx_path TEXT,
download_count INTEGER DEFAULT 0
);
2.2 MkDocs Site¶
Stack: MkDocs + Material theme — same pattern as ucca-docs but deployed independently to ucco.foundation
Site structure:
ucco.foundation/
├── / — Home / landing
├── /standard/ — Current specification
│ ├── /v1.0/ — UCCO v1.0
│ ├── /v1.1/ — UCCO v1.1 (current)
│ └── /v2.0-draft/ — Working draft
├── /contribute/ — How to contribute
├── /register/ — Contributor registration form
├── /comment/ — Submit public comment
├── /download/ — Download specs (PDF + DOCX)
└── /governance/ — Foundation governance documents
Navigation tabs: Standard | Contribute | Governance | Download
Theme: Dark navy / teal — consistent with UCCO brand but visually distinct from ucca.online. Use IBM Plex (already licensed). Strict CSP.
2.3 API Endpoints¶
POST /api/register
{
"name": "string",
"email": "string",
"organisation": "string (optional)",
"jurisdiction": "string (optional)",
"mailing_list": true
}
{ contributor_id, contributor_hash, status: "pending_verification" }
POST /api/download
- Logs download event to foundation-db - Increments download_count on documents table - Returns: signed download URL (R2 object, 5 min expiry) - Anonymous downloads permitted — contributor_id optionalPOST /api/comment
{
"contributor_id": "string",
"document_version": "string",
"section_reference": "string (optional)",
"comment_text": "string"
}
{ comment_id, status: "received" }
POST /api/subscribe
- Adds to mailing list - Sends double opt-in confirmation via Resend - No contributor record requiredGET /api/stats (public)
- Public stats for the landing page - No PII exposed2.4 R2 Storage¶
Bucket: ucco-foundation-docs
- Stores PDF and DOCX versions of all spec documents
- Served via signed URLs (5 min expiry) — not publicly browsable
- Initial contents (Tim uploads after bucket created):
- specs/UCCO-Standard-v1.0-Draft.pdf
- specs/UCCO-Standard-v1.0-Draft.docx
- specs/UCCO-Standard-v1.1-Draft.pdf
- specs/UCCO-Standard-v1.1-Draft.docx
2.5 Email — Resend¶
From address: foundation@ucco.foundation
DKIM: Configure on ucco.foundation zone
Email types: - Contributor registration confirmation - Download receipt (if contributor_id provided) - Comment acknowledgement - Mailing list double opt-in - Mailing list announcements (manual trigger, admin only)
2.6 GitHub repo — ucco-standard¶
README.md — Tim will provide content (Claude writing separately)
Repo structure:
ucco-standard/
├── README.md
├── CONTRIBUTING.md
├── GOVERNANCE.md
├── specs/
│ ├── v1.0/
│ │ └── UCCO-Standard-v1.0-Draft.docx
│ └── v1.1/
│ └── UCCO-Standard-v1.1-Draft.docx
├── working-drafts/
│ └── v2.0/
│ └── UCCO-SessionNotes-2026-03-14.md
└── conformance/
└── README.md (placeholder — test suite TBD)
GitHub settings: - Issues enabled — public comment channel - Discussions enabled — community forum - No PR merge without Tim review - Branch protection on main - Issue templates: Bug Report | Specification Question | Public Comment | Conformance Query
Phase 3 — Content (Tim + Claude provide, Alex commits)¶
Alex commits but does not write: - README.md - CONTRIBUTING.md - GOVERNANCE.md - All MkDocs page content - Issue templates
Claude writes these. Tim reviews. Alex commits.
What this is NOT¶
- Not a demo or sandbox
- Not connected to UCCA commercial infrastructure in any way
- Not publishing UCCA implementation code
- Not a product — a standards body
The foundation publishes the specification. UCCA publishes nothing about how it implements the specification. These are permanently separate.
Deployment checklist¶
- Tim: register ucco.foundation
- Tim: create CF account for foundation
- Tim: add ucco.foundation zone
- Tim: create GitHub org ucco-foundation
- Tim: create ucco-standard repo (public)
- Tim: create ucco-site repo (public)
- Tim: invite Alex to org
- Alex: create foundation-db D1 database
- Alex: create ucco-foundation-docs R2 bucket
- Alex: deploy ucco-site Worker
- Alex: deploy ucco-api Worker
- Alex: configure DKIM for ucco.foundation
- Alex: configure DNS (A, CNAME, MX records)
- Tim: upload spec documents to R2
- Tim: seed documents table with initial records
- Alex: deploy MkDocs site content
- Both: end-to-end test — register, download, comment flow
→ TIM¶
What this builds¶
A completely independent home for the UCCO open standard. Separate from UCCA Inc in every way that matters — separate domain, separate Cloudflare account, separate GitHub, separate email. When ISO or W3C look at it they see a neutral standards body, not a company hosting its own spec.
What it does¶
- Publishes v1.0 and v1.1 of the UCCO specification for download (PDF + DOCX)
- Lets anyone register as a contributor
- Lets contributors submit public comments on draft specifications
- Logs every download — we know who's reading it
- Runs a mailing list for public comment notifications and new version announcements
- Hosts the GitHub repos where the standard lives publicly
Why the code stays out¶
The foundation publishes the standard. UCCA publishes nothing about how it implements the standard. Anyone smart enough to build a conforming implementation deserves what that brings. Anyone who can't build one can use UCCA's. These are permanently different things.
Why separate infrastructure¶
The foundation cannot appear to be a subsidiary of UCCA Inc. Separate account, separate billing, separate everything. This is what makes the governance commitment in v1.1 credible — the structure is already separate, not promised to be someday.
The testbed insight¶
Every person who registers to read about UCCO gets a basic contributor object. That object is their first interaction with the system UCCO describes. When the authenticator app is ready, they can upgrade it. The first users of UCCO are the people who come to learn about UCCO. That's intentional.
Human actions needed from you before Alex starts¶
- Register
ucco.foundationat Porkbun - Create a new Cloudflare account (use foundation@ucco.foundation as email — create that email first via Resend or similar)
- Add ucco.foundation zone to the new CF account
- Create GitHub org
ucco-foundation - Create two public repos:
ucco-standardanducco-site - Invite Alex as member
Then tell Alex to go.
Urgents still on the board¶
- GitHub PAT
ucca-engine-pushexpires March 26 — renew this week - ucca.com.au + ucca.asia expire March 24 — renew this week