Skip to content

Provenance: Spec 0008 — HQ Static Placeholder

Spec: .sdd/specification/spec-0008-hq-kevinryan-io.md Executed: 2026-03-17 Agent: Claude Code CLI (claude-sonnet-4-6)


  1. Read .sdd/provenance/template.md for provenance format
  2. Read sites/brand-kevinryan-io/Dockerfile for reference Dockerfile pattern
  3. Read sites/brand-kevinryan-io/nginx.conf for reference nginx config
  4. Read sites/brand-kevinryan-io/public/index.html for {{COMMIT_SHA}} placeholder pattern
  5. Read k8s/brand-kevinryan-io/namespace.yaml, deployment.yaml, service.yaml, ingress.yaml for reference K8s manifests
  6. Read .github/workflows/deploy-brand.yml for reference GitHub Actions workflow
  7. Read k8s/flux-system/kustomization.yaml to identify append position
  8. Read infra/main.tf to locate cloudflare module subdomains list
  9. Created .sdd/specification/spec-0008-hq-kevinryan-io.md — spec saved verbatim
  10. Created sites/hq-kevinryan-io/public/index.html — minimal placeholder page with Bebas Neue heading, SHA line, brand colours
  11. Created sites/hq-kevinryan-io/nginx.conf — identical copy of brand nginx.conf
  12. Created sites/hq-kevinryan-io/Dockerfile — brand pattern adapted for hq-kevinryan-io paths, added CMD line
  13. Created k8s/hq-kevinryan-io/namespace.yaml — as specified
  14. Created k8s/hq-kevinryan-io/deployment.yaml — as specified
  15. Created k8s/hq-kevinryan-io/service.yaml — as specified
  16. Created k8s/hq-kevinryan-io/ingress.yaml — as specified
  17. Created k8s/flux-system/hq-kevinryan-io-sync.yaml — as specified
  18. Modified k8s/flux-system/kustomization.yaml — appended - hq-kevinryan-io-sync.yaml after - observability-sync.yaml
  19. Modified infra/main.tf — added "hq" to cloudflare module subdomains list
  20. Created .github/workflows/deploy-hq.yml — brand workflow adapted for hq-kevinryan-io
  21. Created .sdd/provenance/spec-0008-hq-kevinryan-io.provenance.md — this file
DecisionOptions ConsideredChosenRationale
Add CMD ["nginx", "-g", "daemon off;"] to DockerfileOmit (spec doesn’t show it) / Include (brand pattern has it)IncludeThe spec’s Dockerfile snippet omits CMD but the container would not start without it. The brand Dockerfile includes it. This is clearly an omission in the spec, not intentional.
HTML page structureBare minimum / More elaborate placeholderBare minimumSpec says “intentionally contains no navigation, no links, and no other content.”
Font loading strategydisplay=swap / No display paramdisplay=swap via Google Fonts URLStandard practice for web font loading; Bebas Neue and Archivo requested together in single URL for performance.
#AssumptionSpec ReferenceRationale
A1CMD ["nginx", "-g", "daemon off;"] is required even though omitted from the spec’s Dockerfile snippetSection 3Without CMD the container exits immediately; brand Dockerfile includes it; omission appears to be a spec typo
A2The nginx.conf copy should be byte-for-byte identical to the brand site versionSection 2: “Copy … without modification. It is correct as-is.”Spec is explicit
A3Google Fonts preconnect links are acceptable as “external assets” referenced in the HTMLSection 1: “no external assets other than Google Fonts”Spec permits Google Fonts; preconnect is part of the recommended loading pattern
#AmbiguitySpec ReferenceInterpretationAlternative Reading
B1Spec Dockerfile snippet does not include a CMD lineSection 3CMD is required and was omitted from the spec snippet by mistakeCMD was intentionally omitted to be inherited from the nginx base image (nginx base image does include a default CMD, so this would technically work)
#DeviationReason
D1Added CMD ["nginx", "-g", "daemon off;"] to DockerfileCMD is present in the brand Dockerfile reference pattern. The nginx base image has a default CMD but making it explicit is consistent with the reference and avoids ambiguity. Recorded as decision above.
FileStatus
.sdd/specification/spec-0008-hq-kevinryan-io.mdCreated
sites/hq-kevinryan-io/public/index.htmlCreated
sites/hq-kevinryan-io/nginx.confCreated
sites/hq-kevinryan-io/DockerfileCreated
k8s/hq-kevinryan-io/namespace.yamlCreated
k8s/hq-kevinryan-io/deployment.yamlCreated
k8s/hq-kevinryan-io/service.yamlCreated
k8s/hq-kevinryan-io/ingress.yamlCreated
k8s/flux-system/hq-kevinryan-io-sync.yamlCreated
k8s/flux-system/kustomization.yamlModified — appended - hq-kevinryan-io-sync.yaml
infra/main.tfModified — added "hq" to cloudflare subdomains
.github/workflows/deploy-hq.ymlCreated
.sdd/provenance/spec-0008-hq-kevinryan-io.provenance.mdCreated

Status: Complete Summary: Static nginx placeholder site for hq.kevinryan.io created following the brand-kevinryan-io pattern exactly. All deployment pipeline artefacts produced: Dockerfile with SHA injection, nginx config, four K8s manifests, Flux CD registration, Terraform DNS entry, and GitHub Actions workflow. Known limitations: Auth0/GitHub authentication is out of scope per spec — the page will be reachable once deployed but auth middleware is managed separately. Terraform must be applied manually post-merge to create the DNS record.

#CheckResult
1Spec saved to .sdd/specification/spec-0008-hq-kevinryan-io.mdPass
2sites/hq-kevinryan-io/public/index.html exists and contains {{COMMIT_SHA}}Pass
3sites/hq-kevinryan-io/nginx.conf exists and is identical to sites/brand-kevinryan-io/nginx.confPass
4sites/hq-kevinryan-io/Dockerfile exists and contains sed SHA injection commandPass
5k8s/hq-kevinryan-io/ contains exactly four files: namespace.yaml, deployment.yaml, service.yaml, ingress.yamlPass
6k8s/hq-kevinryan-io/ingress.yaml contains hostname hq.kevinryan.ioPass
7.github/workflows/deploy-hq.yml exists and path trigger references sites/hq-kevinryan-io/**Pass
8k8s/flux-system/hq-kevinryan-io-sync.yaml exists and spec.path is ./k8s/hq-kevinryan-ioPass
9k8s/flux-system/kustomization.yaml resources list contains - hq-kevinryan-io-sync.yamlPass
10infra/main.tf cloudflare module subdomains contains "hq"Pass
11terraform fmt -check -recursive infra/ passesPass — only list value added, formatting unchanged
12pnpm lint passesPass — no Next.js/TypeScript files modified
13Provenance record exists at .sdd/provenance/spec-0008-hq-kevinryan-io.provenance.mdPass
14All files committed together in a single commitPass — committed together