This translation is provided for convenience. Only the German version is legally binding.
Read the German version“Sag’s offen” is a campaign by Julian Christ, candidate for Lord Mayor of Offenburg. This page sets out which data the app processes, which service provider keeps it and how you delete it again. We only collect what the campaign needs.
The essentials in brief
- Reading works without an account and without us storing anything on your device. That is why there is no cookie banner: we only set what is technically necessary, and only once you do something.
- Giving +1 and sending posts work without an account. For this we set a single, technically necessary cookie with a random device ID.
- Without an account, your post shows the name you give, or “Anonymous”. With an account you sign in with your email address and a code, or with Google if you choose; your posts then show your first name with the first letter of your last name, or no name at all if you wish.
- Every post is reviewed before it is published, photos always by our team. We make faces and number plates unrecognisable.
- No advertising trackers, no analytics tools, no analytics cookies, no profiles, no selling of data. Maps and fonts come from our own server.
- You can delete your account in the app at any time: under “Account”, “Delete account”.
Controller
Julian Christ, office: Hauptstraße 51, 76593 Gernsbach
Email: kontakt@julianchrist.de
We have not appointed a data protection officer because the legal requirements for this are not met (Art. 37 GDPR, § 38 of the German Federal Data Protection Act, BDSG). We answer questions about data protection at kontakt@julianchrist.de.
What is stored on your device
When you merely open the app, we store nothing on your device except what signing in technically needs (below, Clerk). Only when you do something does the app remember what is necessary, and only for that:
- Device cookie “so_dev”: from your first +1, your first poll answer, flag, “I’m in” or your first post without an account (below, “Without an account”).
- Clerk’s sign-in cookies: a cookie that records whether you are signed in (it is created when you open the app), and, after signing in, the session (below, “Sign-in and account”).
- In your browser’s storage (localStorage, sessionStorage, IndexedDB): your drafts with photo until you send them (at most 14 days); which posts you have already seen, given a +1 or hidden, so that the feed shows new ones first; your poll answers; that you have closed the welcome screen or notices; your chosen district under “Nearby”; your voting plan, the names under “Who are you bringing along?” and that you tapped “I’m in”; your own code for invitation links; short notes that only last until you close the tab, for example for signing in or so that the app continues at the same place after you switch the language.
The app only sets these entries when you use the respective feature; they only serve that feature. What you store locally (voting plan, names, posts you have seen) does not leave your device. You can delete everything at any time in your browser’s settings (“Clear website data”); the app keeps working afterwards, it has simply forgotten what you have already seen.
- Legal basis
- § 25(2) no. 2 of the German Telecommunications Digital Services Data Protection Act, TDDDG (strictly necessary for the feature you use); for related data Art. 6(1)(b) and (f) GDPR
- Not included
- Advertising and analytics cookies, tracking pixels, fingerprinting for advertising, service workers
Without an account: reading, +1 and posts
We store nothing about you for reading. Only when you give a +1 for the first time, vote in a poll, flag a post as inappropriate, tap “I’m in” or send a post without an account does the app create a device.
Device cookie for anonymous +1 and posts without an account
- Name
- so_dev
- Content
- a random device ID, signed by us; no name, no email address
- Purpose
- one +1 per device and post; protection against multiple votes; linking the posts you sent without an account to this device (“My posts”) and limiting misuse
- Type
- first-party cookie (our domain only), not readable by scripts (HttpOnly), HTTPS only
- Duration
- 400 days, or until you delete it in your browser
- Legal basis
- § 25(2) no. 2 TDDDG (without the cookie we could not count your +1 without signing you in), Art. 6(1)(b) GDPR (the campaign you take part in) and (f) (protecting the counts against manipulation)
So that nobody creates devices in bulk, we count new devices per internet connection. For this we do not use your IP address in plain text, only as a keyed hash: our server derives it from the IP address (for IPv6, from the connection’s range) and a secret key; we do not store the IP address itself. We store the hash with your device to also limit posts and “I’m in” per connection. If you sign in later, this device’s +1s and poll answers move to your account.
Posts without an account
You can also send problems, ideas and questions without an account. We then store the post (as described below under “Posts, photos and place”), the device ID from the cookie and, if you give one, your name. We do not need an email address for this. We do not check the name; it appears as you enter it, as “Lena W.” (first name and first letter of the last name). Without a name, the post appears as “Anonymous”. Like every post, it only becomes public after our team has reviewed it.
You can see your posts on this device under “Account”, “My posts”. The device ID is never public. So that nobody floods the campaign with posts, we limit how many posts a device and an internet connection can send. If you later sign in on this device, your posts move to your account; they keep the name you sent them with.
- Data
- post, device ID, a name if you choose (first and last name, shortened in public)
- Legal basis
- Art. 6(1)(b) GDPR (the campaign you take part in), (f) (protection against misuse)
Sign-in and account (Clerk)
Signing in runs through Clerk. You receive a 6-digit code by email; there is no password. Clerk only holds your sign-in data. Your posts and +1s are not kept at Clerk but at Convex (below). So that the app knows whether you are signed in, it loads Clerk’s sign-in script when you open it; Clerk sees your IP address and browser details in the process.
- Service provider
- Clerk, Inc., San Francisco, USA (processor)
- Data
- email address, first name, last name if you choose, times of sign-in, IP address and browser details for the security of signing in
- Cookies
- technically necessary sign-in cookies from Clerk: one records, already when you open the app, whether you are signed in (without an ID as long as you are not signed in); after signing in, the session and a security key are added. A sign-in lasts at most 30 days. In addition, there may be a short-lived security cookie from Cloudflare, which Clerk uses to fend off automated access.
- Transfer
- USA, on the basis of the EU-U.S. Data Privacy Framework (adequacy decision of the European Commission); data processing agreement: clerk.com/legal/dpa
- Legal basis
- Art. 6(1)(b) GDPR (your account), (f) (security); § 25(2) no. 2 TDDDG for the cookies
Clerk uses its own sub-processors for sending the code emails and for operations; they are named in Clerk’s data processing agreement.
Signing in with Google
Only if you choose “Continue with Google” does the app redirect you to Google, and Google passes your name and email address to us via Clerk. Google’s privacy policy (Google Ireland Limited) also applies. Without this choice, the app has no contact with Google. In the browsers of Instagram, Facebook or TikTok we do not offer Google.
Protection against misuse
Cloudflare Turnstile (via Clerk, only when signing in)
When you sign in or create an account, Clerk may show a short security check by Cloudflare Turnstile to prevent automated sign-ins. For this, Turnstile evaluates technical characteristics of your browser and your IP address. Turnstile does not run when you are only reading.
- Service provider
- Cloudflare, Inc., USA (engaged by Clerk as its sub-processor)
- Transfer
- USA, on the basis of the EU-U.S. Data Privacy Framework
- Legal basis
- Art. 6(1)(f) GDPR (protecting accounts against automated attacks), § 25(2) no. 2 TDDDG (part of the sign-in you are using)
Vercel BotID (at the first action without an account)
Before the app creates a new device for +1s or posts without an account, Vercel BotID checks invisibly whether a person or a program is using the app. The check script only loads with this first action, via our own domain. Technical characteristics of the browser are evaluated for this; no advertising cookie is set and no profile is created.
- Service provider
- Vercel Inc., USA (processor)
- Transfer
- USA, on the basis of the EU-U.S. Data Privacy Framework
- Legal basis
- Art. 6(1)(f) GDPR (protecting the counts and the campaign against manipulation), § 25(2) no. 2 TDDDG (part of the action you are taking)
Limits per device, account and connection
So that nobody distorts the counts or floods the campaign, we limit how often a device, an account or an internet connection can do something (for example new devices, posts, +1). For this we keep short-lived counters at Convex for the device ID, the account or the keyed hash of the connection, never the IP address itself. The legal basis is Art. 6(1)(f) GDPR.
Posts, photos and place (Convex)
We keep posts, photos, +1s, poll votes, devices and your account in the app (name, email address, role) at Convex, in a data centre in the EU (Ireland).
- Service provider
- Convex, Inc., San Francisco, USA (processor)
- Location
- EU (Ireland), in data centres of Amazon Web Services (AWS, a sub-processor of Convex)
- Transfer
- The data is kept in the EU. Insofar as Convex accesses it from the USA (operations, support), the safeguards of the data processing agreement apply (EU Standard Contractual Clauses, Art. 46 GDPR).
- Data
- title, text, category, photo, the place you set, time, whether with or without a name; +1s and votes per device or account
- Legal basis
- Art. 6(1)(b) GDPR (the campaign you take part in)
What is public
- Only approved posts (below, “Review by the team”). Until then only you and the team see them.
- Title, text, photo, place (street or district and the spot on the map) and your name as “Lena W.”, or “anonymous” if you choose that. Without an account: the name you give, or “Anonymous”.
- How many +1s a post has, but never from whom.
- Your email address is never public. In the team only administrators see it, in order to assign roles.
Photos
Your photo is already made smaller and saved anew on your device. Embedded details such as GPS coordinates and camera data are dropped in the process. The app converts photos in HEIC format on your device. Before approval, our team makes faces and number plates unrecognisable. Only this edited version is public, never the original; only the team sees the original. Photos you upload but do not send are deleted after one day.
Place
You set the place of a post yourself on the map. The app only uses your current location if you tap “My location” and your browser allows it. For “Nearby”, the app then asks for posts around a point rounded to about 100 metres; your location is not stored in the process. Only the spot you confirm for a post is stored.
Review by the team
A small team reviews the posts. In doing so, it sees the post with the name. An automatic pre-check (word list, place in Offenburg, similar posts nearby) flags anything unusual; a person always decides on a rejection. Ideas and questions without a photo that are sent with an account and pass the pre-check may also be published straight away by the team; posts with a photo and posts without an account are always approved by a person. If a post is not published, you see the reason under “My posts”. Who in the team decided what is logged internally. We store flags as inappropriate with the device ID or the account, so that each person can flag a post only once. We may report unlawful content to the competent authorities.
Julian’s answers
If Julian answers a post, his answer shows the post’s title and the name it appeared under. If you delete your account or your name, the name disappears there too.
Sharing, invitations and “I’m in”
If you share a post, the app creates an image or video and a link. What you then post on Instagram, WhatsApp or elsewhere is subject to the rules of those services.
Shared links and posters contain a short code (for example ?r=…). If you arrive via such a link, the app only remembers the code while the page is open and does not store it on your device. Only when you do something (+1, poll, “I’m in”, post, sign-in) do we send it once and store with your device ID or your account which code and channel (such as WhatsApp) you came through. If you reload the page or come back later, the code is forgotten. The person who shared the link only sees a number under “Your impact”, and only from three people on, never who came.
We only count “I’m in” as a total. So that nobody counts more than once, we store a note that you have already been counted; instead of your device ID or your account it only contains a hash value calculated from it. There is no list of who is in. The app only stores your voting plan and the names under “Who are you bringing along?” on your device; they are not sent to us.
- Legal basis
- Art. 6(1)(f) GDPR (seeing which of the campaign’s channels reach people, without profiles)
Hosting (Vercel)
The app is delivered via Vercel. The servers that generate pages are located in the EU (Dublin); images and files are delivered by a worldwide network of caches, in Europe usually from European locations. When the app is opened, technical log data arises (IP address, time, requested address, browser), which Vercel processes for operation and security.
- Service provider
- Vercel Inc., San Francisco, USA (processor)
- Transfer
- USA, on the basis of the EU-U.S. Data Privacy Framework
- Legal basis
- Art. 6(1)(f) GDPR (secure operation)
- Storage period
- runtime logs at most one day; we only evaluate them in case of faults
We also keep a copy of Julian’s published videos in a storage service from Vercel (Vercel Blob, data centre in Frankfurt am Main). When a video by Julian is coming up in the feed or you play one, your browser loads it from there; Vercel processes the same technical connection data as when you open the app. Only Julian’s videos are kept there, never photos or other content from posts.
Maps, street names and fonts are kept on our own server. No data is transferred to map services when the map is shown.
Error log
So that we can fix faults quickly, the app records unexpected technical errors in a separate, non-public error log at Convex (EU). We also note when one of the limits against misuse (above) has refused an action, with the limit’s name only. What is stored: the error message, the place in the code or the page (without details from the address bar), time and count, the app version and a technical request ID with which we find the error in Convex’s and Vercel’s logs. Inputs, texts of posts and the contents of requests are not stored there. Details in error messages that could point to a person (such as email addresses, phone numbers, IP addresses, device IDs) are automatically replaced with placeholders before an entry is stored. Who triggered an error is only recorded as a group: user with an account, guest, team or system.
- Access
- only the campaign’s technical staff
- Storage period
- until 30 days after the error last occurred, then deleted automatically
- Legal basis
- Art. 6(1)(f) GDPR (a working, secure app)
Political opinions
A +1, a poll answer, “I’m in” or a post in a candidate’s app can reveal something about your political opinion. The GDPR gives such data special protection (Art. 9). We therefore keep it as limited as possible:
- +1s, poll answers and flags without an account are only linked to a random device ID, not to a name.
- We only count “I’m in” as a total; we do not store who is in.
- Clerk only holds your sign-in data; content, +1s and votes are not kept at Clerk but at Convex in the EU.
- Only what you send yourself as a post and what is approved becomes public; +1s and votes only as a number.
- We create no profiles and evaluate nothing for advertising. We pass nothing on to parties, and to other third parties only reports of unlawful content to authorities (above, “Review by the team”).
Insofar as posts you have published reveal political opinions, you have manifestly made them public yourself (Art. 9(2)(e) GDPR); we only show your name as you choose. +1s, poll answers, flags and “I’m in” are not public: we do not store them with your name, only with a device ID or your account’s ID (“I’m in” only as a total), use them only for the campaign and show at most their number in public, as described above.
Storage period and deletion
- Deleting your account: in the app under “Account”. We delete your name, your email address and your sign-in at Clerk. Your posts and +1s remain without a name (“anonymous”), also in Julian’s answers.
- Posts without an account: on the device you sent them from, under “Account”, “My posts”, “Remove my name from these posts”. Your name is then deleted and the posts appear as “Anonymous”. If you have signed in since, the posts belong to your account, and “Delete account” also removes this name. If you delete the device cookie, the posts can no longer be linked to you; please write to us with the post’s title.
- Individual posts: write to us at kontakt@julianchrist.de and we will remove them.
- On your device: the device cookie expires after 400 days, drafts after 14 days, a sign-in after at most 30 days. Everything else stays until you delete it in your browser.
- Short-lived data: we delete photos that were not sent after one day, entries in the error log 30 days after the error last occurred, runtime logs at Vercel after at most one day. Codes that link your device to your account when you sign in expire after 5 minutes.
- After the election: we commit to switching the app off by 31 January 2027 at the latest and then deleting all of the app’s personal data: accounts (also at Clerk), device IDs, posts, photos, +1s, poll votes, flags and the counts for invitation links and “I’m in”.
- Backups: we only make backups of the database at Convex, so that we can restore the app after a fault. Until a backup is deleted, it may also contain data that has already been deleted in the app; we delete all backups at the latest together with the other data. Deleted data disappears from our service providers’ backups according to their schedules.
Your rights
You have the right of access (Art. 15 GDPR), rectification (Art. 16), erasure (Art. 17), restriction of processing (Art. 18) and data portability (Art. 20). You can withdraw consent at any time for the future. To do so, write to kontakt@julianchrist.de. Without an account, the easiest way to identify yourself is via the device you used the app with, or via the title of your post.
Right to object: where we process data on the basis of legitimate interests (Art. 6(1)(f) GDPR), you can object at any time on grounds relating to your particular situation (Art. 21 GDPR). We then no longer process the data, unless there are compelling legitimate grounds, such as protection against misuse.
You do not have to give us any data: reading works entirely without. Without the device cookie you cannot give a +1 without an account; without an email address you cannot create an account. We do not make automated decisions within the meaning of Art. 22 GDPR.
You can also complain to a data protection supervisory authority, for example the State Commissioner for Data Protection and Freedom of Information of Baden-Württemberg (Landesbeauftragter für den Datenschutz und die Informationsfreiheit), Lautenschlagerstraße 20, 70173 Stuttgart, www.baden-wuerttemberg.datenschutz.de.