feat(share-web): real Terms and Privacy pages#389
Merged
Conversation
GA prep: the service is about to open to strangers publishing public UGC, which makes a privacy notice load-bearing (GDPR notice duty; Google's OAuth brand verification fetches the privacy URL) and gives the Reader's report flow a use-restrictions anchor to point at. - /terms + /privacy static pages, written from the codebase's actual behavior: Google scopes statement (openid/email/profile, sign-in only), session cookie 30d sliding / 90d cap, daily-salted IP/UA hashes in the audit log, no analytics/trackers/ads, Cloudflare + Google as the only processors, permanent unpublish, 24h deletion grace + hard cascade, 30-day backup expiry. Terms stay minimal — free service, so no billing clauses; the operator self-identifies as spool.pro with no governing-law clause. Structure adapted from the Basecamp open-source policies (CC BY 4.0, credited in-page). - Footer renders Terms · Privacy site-wide again (Reader keeps the Report link in front) — the #378 placeholder removal is undone with real pages this time. - /sign-in gains the customary by-signing-in-you-agree line. - _headers: legal pages drop the site-wide noindex (the one surface we want indexable; Google verification also fetches it) and get the static-page CSP. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
openid/email/profile, used for sign-in only — required wording for Google's brand verification), what is and isn't collected (no analytics/trackers/ads; session cookie 30d sliding/90d cap; daily-salted irreversible IP/UA hashes in the audit log), Cloudflare + Google as the only processors, public-content caveats, permanent unpublish, 24h deletion grace + hard cascade, 30-day infrastructure-backup expiry, self-service rights via /me./terms+/privacydrop the site-wideX-Robots-Tag: noindex(the one surface we want indexable; Google's verification fetches the privacy URL) and get the static-page CSP.Both documents credit "Structure adapted from the Basecamp open-source policies (CC BY 4.0)" in-page.
Post-merge ops (GA checklist)
hello@spool.proandabuse@spool.proroutes in Cloudflare Email Routing.https://spool.pro/privacy/https://spool.pro/termsso the consent screen links them, and run brand verification.Test plan
🤖 Generated with Claude Code