Kabine

Documentation

Privacy and youth protection

Kabine is used mostly by children and teenagers and their parents. It is built to store as little as possible, to show it to as few people as possible, and to keep it inside the club. This page describes what the app stores, who sees it and when it is deleted. It helps the club write its privacy policy and keep its records of processing. It is not legal advice; the club remains responsible.

Principles

  • One club, one installation. The data lives in the club's own Cloudflare account. There is no central Kabine server, no shared database between clubs, and the authors of Kabine have no access.
  • Only what a team needs. Of players and parents: first name, last name and, for players, the year of birth. No address, no date of birth, no phone number (unless someone enters one for text messages), no photos unless someone uploads a profile picture.
  • Invitations only. There is no public sign-up and no public page with content. People join through links their coach shares with the team.
  • No tracking. No analytics, no advertising, no third-party scripts, fonts or images at runtime. The app loads everything from the club's own address.
  • Reasons stay with the coaches. Why someone declines is visible to coaches and admins only, and deleted 60 days after the event.

Youth protection

  • Parents are in charge of minors. When a team includes parents, a parent links to the child's profile and decides what the child may do in the app: accept, decline, read the team chat, write in it, answer stand-in requests. Each switch is logged (who changed it, when). Teams of older players or adults can do without parents.
  • Profile pictures need parental approval. A picture a minor uploads is only visible to others once a parent approves it. Pictures are optional, visible only to people signed in, and deleted when the person leaves the club.
  • Chat with supervision. Team chats always include the coaches. Coaches can mute a member and delete messages. Parents read along in the chats of their children's teams unless they opt out. There are no private messages between members.
  • Names are shortened where others see them. Helper duties and carpools show "First name L." to the other parents and players. Full names are visible to coaches and admins.
  • Leaving is complete. When someone leaves the club, sign-ins, passkeys, push subscriptions, the profile picture and future responses are removed at once; the person and their history are deleted at the next season change at the latest. Chat histories are deleted at every season change.

Data inventory

DataOf whomPurposeVisible toDeleted
First name, last nameEveryoneIdentify people in the teamSigned-in members of the same team, shortened where noted aboveWhen leaving, at the next season change at the latest
Year of birthPlayersAge group and team assignmentCoaches, adminsAs above
Team memberships, rolesEveryoneWho sees which events and chatsTeam members (coaches and admins in full)When leaving; at the season change teams are assigned again
Parent–child link, child permissions with logParents, minorsParents act for their childrenThe parent, coaches and adminsWhen leaving
Responses (yes/no, late)PlayersPlanning trainings and gamesCoaches, admins; team staff and, if the team switches it on, the team (without reasons)At the season change
Decline reasonsPlayersPlanningCoaches, admins60 days after the event
"I'm not there" of coaches, leads, staff and organisers, with an optional noteLeaders of the eventPlanning, stand-insThat someone is not there: everyone who sees the event. The note: coaches and admins of the eventNote 60 days after the event, the entry with the event at the season change
Attendance after an event (present, excused, unexcused), attendance statisticsPlayersOverview for coachesCoaches, admins; the player and their parents see their own entryEvent data at the season change; season totals stay with the person until they leave
Squad nominationsPlayersGamesTeamAt the season change
Helper dutiesParents, playersDuties at games and eventsHelpers of the team ("First name L."), coachesAt the season change
CarpoolsDrivers, ridersAway gamesNominated players and their parents ("First name L."), coachesAt the season change
Chat messages, reactionsMembersTeam communicationTeam chat membersAt the season change
E-mail addressEveryone who enters oneSign-in codes, access links; helper plan mails and feedback replies only if chosenNobody in the app; admins only in the data exportWhen leaving
Mobile number (SMS module)Everyone who enters oneSign-in codes and reminders by SMSNobodyOn request in the profile, when leaving
Profile pictureWho uploads oneRecognising each otherSigned-in members; for minors after parental approvalOn request, when leaving
PasskeysEveryone with accessSign-in (public key only, no biometrics)NobodyWhen removed in the profile, when leaving
Sign-ins (sessions) with device typeEveryone with accessStaying signed inThe person (device list)Expire 30 days after last use, 90 days after sign-in; removed when leaving
Push subscriptionsDevices with notifications onNotificationsNobodyWhen switched off, when leaving
Day of last useEveryone with accessSpotting unused accessesAdminsWhen leaving
Personal calendar linkWho creates oneCalendar subscriptionThe personWhen reset, when leaving
"Full member" markerAdultsWho may organise events and take certain dutiesAdminsWhen leaving

Content cached on devices for offline use is deleted when the person signs out.

Who processes data for the club

  • Cloudflare runs the app and stores the database (Workers, D1, KV, Durable Objects, Queues). The club concludes Cloudflare's data processing agreement in its account. To keep the data in the EU, create the database by hand with npx wrangler d1 create kabine --jurisdiction eu (see the manual installation in docs/install.md).
  • Push services of the device makers (Apple, Google, Mozilla, Microsoft) deliver notifications. The content is end-to-end encrypted; the push service sees only the device address.
  • E-mail: Cloudflare Email Sending or the club's own mail server.
  • SMS (optional): the provider the club chooses (currently seven.io).
  • OpenHolidays API: the app fetches school and public holidays for the club's region. No personal data is sent.
  • handball4all (optional): a coach's or admin's device fetches the game schedule directly from the association's service. No personal data is sent.

Template for the club's privacy policy

The following section can be added to the club's privacy policy and adapted. The app's own privacy page (Profile → Privacy) shows the details above to everyone and links to the club's policy.

Team app "[name of the app]"

For training, games and team communication the club runs a team app at [address]. The app is used by players, their parents and the coaches of the club. Access is by invitation of the coaches only.

We process: first name, last name and year of birth of players; first name and last name of parents and coaches; team memberships; responses to events and, if given, reasons for declining; squad nominations; helper duties and carpools; messages in the team chats; optionally an e-mail address, a mobile number and a profile picture. Technically necessary are passkeys (public keys), sign-ins and push subscriptions of the devices.

Purpose is the organisation of the club's sports operations (Art. 6(1)(b) GDPR, membership relationship) and, for optional data such as profile pictures and e-mail addresses, consent (Art. 6(1)(a) GDPR), for minors given by their parents. Reasons for declining are deleted 60 days after the event, responses, chats and events at the end of each season, all data of a person when they leave the club, at the latest at the next season change.

The app runs on the infrastructure of Cloudflare, Inc. as processor ([data processing agreement]). Notifications are delivered through the push services of the device manufacturers. [If used: Text messages are sent through [provider].] There is no tracking and no advertising.

Contact for questions about the app: [name, e-mail].

Source: docs/privacy.md

Try it

In the demo, in every role.

Player, parent, coach or admin: one tap and you are in the invented club “SV Musterstadt”. No sign-up, reset every night.