The whole policy, no lawyer required

Privacy at The Rusty School 🔍

A school should model good behavior. This page describes everything this site stores, in plain English. It is short because the list is short. The site is open source, so every claim here can be checked against the code.

Without an account (the default)

The public counter

The home page shows how many lessons have been completed worldwide. When you complete a lesson, your browser sends one anonymous ping: the lesson's name and nothing else. No account, cookie, IP, or identifier is stored with it. Each browser reports a given lesson at most once, and if your browser sends the Do Not Track signal, the ping is skipped entirely, on both the client and the server.

With an account (optional)

If you choose to sign in with GitHub or Google, we store exactly:

FieldExampleWhy
providergithubwhich button you pressed
provider id8888336recognizing you next sign-in
display nameChrisgreeting you
avatar URLhttps://…/avatar.pngshowing your picture
progress{"done":["01-hello-world"]}the point of the feature

What we deliberately do not collect, even though the sign-in buttons could ask for it: your email address, your contacts, your repositories, or any posting permission. The Google scope is "openid profile" only; the GitHub app requests no scopes at all.

Sessions

Signing in sets one cookie, rusty_session, holding a random token. It is HttpOnly, Secure, and SameSite. The database stores only a hash of it. Signing out deletes the session server-side, so the cookie becomes worthless immediately.

Your controls

Changes

If this policy ever changes, the change lands as a public commit in the site's repository with a clear message, and this page is updated the same moment. History is auditable, like everything else here.

Questions? Open an issue on GitHub.