Every backend on this box ships with a finished website
One hardened Node.js daemon on the VPS. Every five minutes it looks for new or changed systems, writes their words inside a sandbox, renders them through a single audited template, and publishes. No site is called live until the published page proves it is the page the Architect generated.
What the daemon does
Seven behaviours, all of them running unattended on the VPS.
Five-minute scan
On a five-minute loop the Architect scans /opt/norfield-systems and the running Docker containers, looking for systems that are new or have changed since the last pass.
Reads only the system's own docs
For each system it reads that system's README and package.json and nothing else, then scrubs anything secret-shaped out of the text before it goes any further.
Sandboxed writing call
The words come from one sandboxed call to the claude CLI. That call is granted zero tools and none of the publisher credentials, so the model can only ever hand back text.
Strict schema gate
Returned copy must pass a schema gate before it is used: plain text only, no HTML, no links, and no capabilities that the source documentation does not support.
One audited template
Approved copy is rendered through a single audited Next.js template carrying the Norfield brand tokens. There is one template to review, not one design per system.
Builds in the cloud
The rendered site is pushed to a private GitHub repository and built by Cloudflare Pages. This VPS never runs a frontend build, and a real subdomain is wired for each system.
Proof before live
A site is recorded as live only once the Architect fetches the published page and confirms it serves its own generator marker. No marker, no live status.
From a changed directory to a verified page
Scan
The daemon walks /opt/norfield-systems and the running Docker containers, looking for systems that are new or have changed since the last pass.
Read and scrub
It reads that system's README and package.json and nothing else, then strips anything secret-shaped out of the text.
Write in a sandbox
One call to the claude CLI, granted zero tools and none of the publisher credentials, returns the site's words as plain text.
Gate the words
The copy must pass a strict schema: plain text only, no HTML, no links, and no capabilities the source documentation does not support.
Render and push
Approved copy goes through one audited Next.js template with the Norfield brand tokens and is pushed to a private GitHub repository.
Build and verify
Cloudflare Pages builds the site in the cloud and a real subdomain is wired. The Architect records it live only once the page serves its own generator marker.
One pass, as it appears in the log
Inputs in, proof out
1# inputs: only the system's own documentation2/opt/norfield-systems/SYSTEM/README.md3/opt/norfield-systems/SYSTEM/package.json4# copy: one sandboxed claude CLI call, zero tools, no credentials5# gate: plain text only, no HTML, no links, no invented capabilities6# render: one audited Next.js template with Norfield brand tokens7# publish: push to private GitHub repo, Cloudflare Pages builds it8curl -s $PUBLISHED_URL | grep norfield-architect-generator9# marker found: record live. marker missing: not live.
Hand-built pages against the Architect
How it protects itself
The writing call holds no tools and no credentials
Words are produced by a single sandboxed call to the claude CLI. That call is granted zero tools and none of the publisher credentials, so the only thing it can return is text. It cannot reach the filesystem, the repository, or the DNS records that the Architect controls.
“A site is not live because we pushed it. It is live because we fetched the published page and found our own generator marker in it.
— Norfield Architect operating rule
Questions operators ask
Does the model that writes the copy have access to the VPS?
No. The copy comes from one sandboxed call to the claude CLI that is granted zero tools and none of the publisher credentials. It can return text and nothing else. Reading files, pushing to the repository, and wiring the subdomain are all done by the daemon, not by the model.
What does the Architect read about my system?
That system's README and package.json, and nothing else. It does not read other systems, other directories, or anything outside the documentation the system ships with. The text is scrubbed of secret-shaped strings before it goes any further down the pipeline.
What happens when the copy fails the schema gate?
The gate is a pass or fail check that sits in front of the template. Copy carrying HTML, links, or capabilities the source documentation does not support does not reach the renderer, so nothing is built or published from it.
Where does the frontend build run?
In the cloud. The rendered site is pushed to a private GitHub repository and Cloudflare Pages builds it there. This VPS never runs a frontend build, so a build has no way to consume resources or credentials on the machine that runs your backends.
How long before a new system gets a page?
The scan runs every five minutes over /opt/norfield-systems and the running Docker containers, so a new or changed system is picked up on the next pass. The page is only recorded as live once the published page serves its generator marker.
Can I get a page that claims something my system does not do?
The schema gate rejects capabilities that are not supported by the system's own documentation, and the documentation is the only input. If a page is missing something true, the fix is in the system's README and package.json.
About the Architect
Norfield Architect is a single hardened Node.js daemon running on the Norfield VPS. It is the designer-in-residence for every backend system on the machine: it finds them, reads their documentation, writes their words under a sandbox, renders them through one audited Next.js template carrying the Norfield brand tokens, and publishes them through a private GitHub repository and Cloudflare Pages. No human sits in that loop, and no site is recorded as live until the Architect has seen its own generator marker on the published page.