Summary
Stand up a public CDN to host markdown blog posts, images, and
open-source project assets (release artifacts, docs, demo files). This is
the content backend for the blog page and a general-purpose asset host for
our OSS work.
Motivation
Scope
- Choose CDN provider (Cloudflare R2 + Workers, AWS S3 + CloudFront, or
similar — propose options in a comment, pick one before implementation)
- Provision two top-level prefixes:
blog/ — published posts (markdown + assets)
blog/preview/ — unpublished drafts (token-gated)
oss/<project>/ — per-project asset folders
- Public read for
blog/ and oss/; preview path gated by a shared secret
or signed URL
- Custom domain (e.g.
cdn.nyxid.dev) with TLS
- Cache headers tuned per content type (long TTL for hashed assets, short
for markdown)
- Document upload workflow (manual
aws s3 cp / wrangler steps for now;
CI integration is a follow-up)
Out of scope
- Authoring UI
- Automated publishing pipeline (CI on a content repo) — follow-up
- Per-project access controls beyond public/preview
Acceptance criteria
Notes
This unblocks #524. The blog page can ship against a placeholder bucket
in the meantime, but production cutover depends on this issue.
Summary
Stand up a public CDN to host markdown blog posts, images, and
open-source project assets (release artifacts, docs, demo files). This is
the content backend for the blog page and a general-purpose asset host for
our OSS work.
Motivation
binaries, schema files, and embeddable demo assets
Scope
similar — propose options in a comment, pick one before implementation)
blog/— published posts (markdown + assets)blog/preview/— unpublished drafts (token-gated)oss/<project>/— per-project asset foldersblog/andoss/; preview path gated by a shared secretor signed URL
cdn.nyxid.dev) with TLSfor markdown)
aws s3 cp/wranglersteps for now;CI integration is a follow-up)
Out of scope
Acceptance criteria
docs/Notes
This unblocks #524. The blog page can ship against a placeholder bucket
in the meantime, but production cutover depends on this issue.