Datenschutz
Technical draft — non-production preview only.
This page is a technical map of the Passport data currently implemented. It is not finished legal copy and does not make the preview production-ready.
Purpose and flow
Discord authentication proves that a person is currently a member of the configured KnifeGang Discord server. Passport data then supports a separate public KnifeGang handle, language preference, verified check-ins, reward state, and access flags for member features.
The OAuth request asks only for identity and current guild-member access. Discord access tokens exist only during the callback request and are discarded after the identity and membership calls. Discord access tokens are not stored. Discord refresh tokens are not stored. Email is not requested or stored.
Implemented data map
- The private member record stores an opaque member ID, Discord user ID, KnifeGang handle and normalized handle, language, account status, isOwner and isTrusted access flags, check-in and reward state, selected flair, and creation time. isOwner is set only when the verified Discord user ID equals the configured owner ID. isTrusted is set only when verified Discord role membership includes the configured trusted role. The full Discord role list and Discord username are not stored.
- A private Discord-user lookup connects the Discord user ID to the opaque member ID. A private handle lookup protects handle uniqueness.
- The session store uses a hash of the opaque browser cookie as its key. Its session timestamps are creation, expiry, and last membership-check time; its record also contains the opaque member ID.
- Verified check-ins store the opaque member ID and board day. The member record keeps current streak, best streak, lifetime check-in total, and derived Stabbinks and Packs reward state.
- The Schwarzes Brett keeps one daily slot per member. Its public output contains the public KnifeGang handle, selected flair, active knife, public message, and note timestamps. It does not publish the Discord user ID, opaque member ID, session record, or storage key.
- The private owner control room stores uploaded raster image files plus their filename, file type, size, title, alt text, caption, tags, draft/published state, timestamps, and the opaque owner member ID. Draft files are available only through the owner-authenticated route. Publishing exposes the image and its public metadata in Visual Drift; returning it to draft removes that public route.
Processing
Netlify hosting serves the site and runs the Passport, Board, and owner media Functions. Netlify Blob storage holds the private member, lookup, session, handle, check-in, Board, and owner media records and files. Discord membership rechecks use the stored Discord user ID and a server-only bot credential. Rechecks occur when the previous membership check is at least 15 minutes old. The verified roles update only isTrusted; isOwner is recalculated by comparing the verified Discord user ID with the configured owner ID.
Session lifetime and retention
The implemented Passport has a 30-day session lifetime. Logout deletes the current server-side session, and an expired or invalid session is deleted when the service encounters it.
Schwarzes Brett notes are visible for the current Board day, which changes at 04:00 Europe/Berlin. Automated cleanup retains seven Board days and deletes older Board notes.
Retention for member, Discord lookup, handle lookup, check-in, and owner media records is not automated in this preview. Uploaded media remains until the owner removes it in a later deletion workflow. No self-service member deletion is implemented, and there is no completed deletion workflow for those persistent records.
Launch blocker
Self-service member deletion is not implemented. Controller and imprint details are unresolved and are not supplied by this technical draft. Those deletion and legal details must be completed and reviewed before launch. Production launch remains blocked.