Build1 distinct publisher3 min readUpdated
A reader's scan found six response headers missing on a Pages-hosted site. The fix was a Cloudflare transform rule in front of the custom domain, with no change to the deploy workflow.
The Engineer · Build desk
Compiled by The EngineerSomething wrong?How this is made
A reader named Amit Feldman ran a header scan against macless.dev and came back with six specifics rather than a warning: HSTS, Content-Security-Policy, X-Frame-Options, X-Content-Type-Options, Referrer-Policy and Permissions-Policy were all absent [1]. The cause is architectural rather than careless: the site is hosted on GitHub Pages, and Pages does not let you set custom response headers at all [2].
That is worth sitting with if you ship anything static. Any site served directly by Pages fails those six checks by construction, no matter how careful the HTML is, because there is no place in the platform to put a header. The scan reports what arrives at the browser, and nothing in a Pages build can change what arrives.
The fix, once named, required no change to the site or the pipeline. Keep the site on Pages, put Cloudflare in front of the custom domain, and add the header set with a Response Header Transform Rule [3]. HSTS is a toggle under Edge Certificates rather than a rule [4]. None of it touches the deploy workflow [5]. This is the useful shape of the problem: the headers are an edge concern, so they get solved at the edge, and the repository stays as it was.
The Content-Security-Policy was set to `default-src 'self'; script-src 'none'`, which is viable because the page ships zero JavaScript and so there is nothing to break [6]. Feldman re-scanned twice as the work landed, first the five simpler headers and then the tighter CSP [7], and the site now reports 16 passed, 0 warnings, 0 failures [8]. Six of those sixteen checks were the missing headers, which puts the pre-proxy ceiling at ten [9].
The more durable point in the exchange was Feldman's follow-up: a header scan reads what a browser receives and says nothing about what a CI pipeline does with signing certificates [10]. Macless is a signing pipeline, built on GitHub Actions with code-signing certificates plus App Store Connect and Google Play credentials [11]. A scan cannot tell you whether a certificate is sitting in the repository, whether a workflow echoes a secret into its log, or whether a token is scoped wider than it needs to be [12].
So the author audited that second layer directly: a search of the full commit history of both the appledev source and the Macless product template, plus a line-by-line read of every workflow file [13]. No certificate, key or keystore has ever been committed to either repository at any point [14]. Secrets are passed through `env:` blocks rather than interpolated into shell strings, and nothing sets `-x` [15]. Every workflow triggers only on `push` or `workflow_dispatch`, so there is no `pull_request_target` path for a fork PR to exfiltrate credentials [16]. Decoded certificate and keystore material lands only in the runner's ephemeral temp directory, and artifact uploads grab specific screenshot files rather than whole build directories [17]. The documented credential roles, App Store Connect "App Manager" and Play Console "Release manager", were already narrower than admin [18].
Two real gaps surfaced. There was no explicit `permissions:` block, so `GITHUB_TOKEN` inherited whatever the repository or organisation default was, despite none of the workflows needing write access; that was fixed by adding `permissions: contents: read` to every workflow [19]. And there was no `.gitignore` entry for signing material, even though SIGNING.md and ANDROID.md walk the user through generating a real certificate or keystore with `openssl` and `keytool` [20].
Watch for the before/after case study Feldman is writing up [21], and check your own static hosts: if the platform has no header layer, a clean scan is only ever evidence about the proxy.
Follow any of these and your For You feed starts watching them — no settings page required.
Ranked by verification strength, evidence, and original report placement.
A reader named Amit Feldman commented that macless.dev was fast with tidy on-page SEO but was missing HSTS, Content-Security-Policy, X-Frame-Options, X-Content-Type-Options, Referrer-Policy and Permissions-Policy.
macless.dev is hosted on GitHub Pages, and GitHub Pages does not let you set custom response headers at all.
The fix was to keep the site on GitHub Pages, put Cloudflare in front of the custom domain, and add the header set with a Response Header Transform Rule.
HSTS is a toggle under Cloudflare's Edge Certificates settings.
The Content-Security-Policy applied was default-src 'self'; script-src 'none', possible because the page ships zero JavaScript so nothing breaks.
Evidence-backed comparisons of source perspectives and observed adoption signals. Read the methodology
Which Builder, Operator, and Investor concerns the observed source mix emphasized—not a truth score.
Evidence, demonstrated adoption, hype gap, incentives, and confidence are assessed independently, each on its own current evidence. How these are measured.
Single self-reported source with one externally checked layer
Everything rests on one dev.to post written by the product's own author. The header layer has partial external corroboration inside the narrative — a reader ran the scan three times and the end state is quoted as 16/16 — and the platform limitation and Cloudflare remediation are both verifiable, reproducible configuration facts. The CI/secrets findings (nothing ever committed, env-passed secrets, no set -x, no pull_request_target, ephemeral temp storage, scoped store roles) are entirely self-audited with no third-party review, no scanner named, and no pre-fix baseline published.
Fixes live on one site and in one product template
Concrete deployment exists but is narrow: the edge header set is live on a single site, re-verified by one reader's scan, and the two CI fixes shipped into the author's repo and the Macless template. No downloads, customer counts, external users applying the pattern, or any third-party adoption signal is disclosed.
Headline generalises further than the evidence
The framing that every Pages site 'starts at zero' and the 16/16 scoreboard overstate a single-site configuration change: the scan measures header presence, not attack surface, and the author himself notes it says nothing about the CI layer. Against that, the body is unusually candid — it names two real gaps in the author's own product, states the fixes precisely, and credits the outside finder — which keeps the overstatement modest rather than promotional.
Vendor auditing its own product, with a declined paid audit in frame
The author owns macless.dev, the Citolex/appledev source and the Macless template being audited, so the reassuring CI findings are self-graded on a commercial product customers download. The post also discloses that the same reader who found the headers pitched a $99 follow-on CI/secrets audit, which the author declined by doing the check himself in about twenty minutes — giving both parties a stake in the story's outcome. Disclosure is explicit, which mitigates but does not remove the conflict.
Low-to-moderate: verifiable mechanics, unverifiable assurances
Confidence is decent for the mechanical core — the Pages header limitation, the Cloudflare transform-rule remediation, the CSP contents and the two named CI fixes are all specific and independently checkable. It is low for the audit conclusions, which are single-source, self-performed, and stated as absolutes about repository history with no external attestation, no named tooling, and no baseline figures.
build
Split Flutter CI from CD, or pay macOS rates on every pull request1 distinct publisher
build
Pricing the three routes to shipping iOS without a Mac, honestly1 distinct publisher
product
A 2x LLM bill is not a bug report: token spend is an observability problem1 distinct publisher
build
Wrapping a web tool in VS Code: four sandbox rules, and two gaps in the published fix1 distinct publisher
Distinct publishers with included, body-backed reporting in this cluster.
dev.to
1 article · August 17, 2026