CivicFKT

Privacy

CivicFKT is a hobby project run by one person. This page lays out exactly what we collect, why, where it goes, and how to make it leave. Last updated 2026-05-09.

The short version

What we collect

From OAuth sign-in

From rides you upload or auto-import

RideWithGPS sync defaults

From the contact form

Operational data

Cookies

CivicFKT sets a small set of strictly-necessary cookies — all first-party, all on the civicfkt.com domain, all Secure (HTTPS only) and SameSite=Lax. There are no analytics cookies, no advertising cookies, no third-party trackers, and no fingerprinting. The site doesn't load any third-party JavaScript that could set its own cookies in your browser.

NameSet whenPurposeHttpOnly?Lifetime
fkt_csrf First visit (anonymous or signed in) — every page load sets it if it isn't already present Cross-site-request-forgery protection — every form embeds the cookie's value as a hidden field, and the server rejects POSTs whose embedded value doesn't match the cookie No (the form template needs to read the value) 30 days
fkt_oauth_state Click "Sign in with Google" or "Sign in with RideWithGPS" Random nonce that prevents CSRF on the OAuth callback. Discarded immediately after the callback succeeds or fails Yes 10 minutes
fkt_return_to Click sign-in from a non-home page (e.g. /upload when not logged in) Remembers where you were so the sign-in flow can land you back there Yes 10 minutes
fkt_oauth_link Click "Link RideWithGPS account" from /me Carries the signed-in user id through the RideWithGPS OAuth round-trip so the link attaches to the right account Yes 10 minutes
fkt_session After successful sign-in Identifies you on subsequent requests. Signed with a server-side secret; tampering invalidates it. Cleared by sign-out or by the disconnect button on /me Yes 30 days, refreshed on use

Under EU ePrivacy/GDPR and California CCPA/CPRA, all of these qualify as strictly necessary cookies — required for security (CSRF, OAuth state) or for the requested service (session, return-to). Sites that only set strictly-necessary cookies don't need a consent banner, and we don't show one.

If you want a cookie-free experience, your browser's site-data controls let you wipe CivicFKT's cookies anytime — the only consequence is that you'll need to sign in again, and any form you submit will need a fresh CSRF cookie issued first (handled automatically on the next page load).

Where the data goes

Public leaderboards

When your ride matches a civic FKT route, the leaderboard shows your display name, your time and distance, and the date you rode it. That's everything. Your email, IP, OAuth identifiers, the underlying GPS track, and any sensor data are never shown to other riders. Power and heart-rate, when they exist, drive your position on power-leaderboard panels but are summarized as totals only — the per-second values aren't exposed.

Third parties

How long we keep it

Until you ask us not to. There's no automatic expiry — your account, your rides, your standings persist as long as you want them.

If you disconnect your account on /me (the red button at the bottom), the system runs a single transaction that:

Disconnect is final. There's no recovery — by design.

What you can change without disconnecting

Security

Data lives on a single server in a US data center, behind HTTPS only. The database isn't reachable from the public internet. OAuth tokens are stored in a separate table that cascades on user delete. Webhook deliveries from RideWithGPS are HMAC-verified against a secret only we and RideWithGPS know — forged webhooks are rejected.

Your rights

You can:

Changes to this policy

Material changes will move the "Last updated" date at the top and, where they affect data we already hold, get announced on the front page. This policy lives in the same source tree as the rest of the site so its change history is preserved.

Contact

Use the contact form. One human reads it. You'll get a reply only if you supplied an email address on the form — we don't have any other way to reach you.