feat(v1.42): privacy + terms pages, global footer#54
Merged
Conversation
Adds /privacy and /terms (hand-written in Campable voice, not Termly), a global Footer rendered outside <Routes> on every page, and the contact mailto for hello@palouselabs.com. Unblocks Stripe live-mode review (which flags missing Privacy + ToS URLs on subscription products) and preps the Privacy URL Apple requires for v1.45 App Store submission. Privacy honestly names every third party in the request path: Supabase (auth, US), Stripe (billing), PostHog (analytics, EU-hosted, reverse- proxied through /ingest so user IPs aren't forwarded), Mapbox (drive times), Visual Crossing (weather, server-side only), Cloudflare (DNS + TLS), Fly.io (hosting). About page (already shipped pre-v1.42) marked done in the roadmap table. Footer mounted between </ErrorBoundary> and </div> of .app — full-width border-top, inner constrained to --max-w-app, theme-token-driven so it works in dark and light without overrides. Version string dropped: package.json is 0.0.0 and the site is continuously deployed, so the number would be meaningless to users. 10 new Vitest tests guard structure (h1, mailto, year, third-party list, WA jurisdiction, 30-day refund language). Full suite green at 213/213. Co-Authored-By: Claude Opus 4.7 (1M context) <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.
Summary
/privacyand/termspages, hand-written in Campable voice (not Termly).<Footer/>rendered on every page with About, Pricing, Privacy, Terms, and Contact links plus the copyright year.hello@palouselabs.comwired as the support mailto in the footer and on both legal pages.Why now
Decisions that diverge from the original roadmap entry
package.jsonis0.0.0, the site is continuously deployed, and there's no semver discipline that would make the number meaningful to users. Just© {year} Campable.Privacy accuracy notes (verified during self-review)
UserMenu.tsx:94.api_host: '/ingest'reverse proxy inindex.html:23confirms.api.py:570header allowlist dropsx-forwarded-forby omission.cf-rayheader oncurl -I https://campable.co/.useAuth.ts:107only wiressignInWithPassword. Privacy now says social login isn't wired in yet.Test plan
npm testpasses 213/213 (203 prior + 10 new)tsc -bcleannpm run buildclean; Privacy and Terms code-split into roughly 6KB chunks each/privacy,/terms,/about,/pricingin both themes; tab through footer; resize to 375px/maproute at 375px and confirm Footer isn't pushed off-screen by MapView's full-viewport container (gate Footer behinduseLocation()if it is)/privacyand/terms(target 95 or above)main:curl -I https://campable.co/privacyreturns 200 with no auth redirect (Apple submission requirement)Out-of-code follow-ups (post-deploy)
🤖 Generated with Claude Code