Privacy Policy
Last updated: 31 October 2026
MoiCheck ("we", "us") is a small, independent bucket-list app for Groningen, run by one person, D. Blayzer, as a side project. D. Blayzer decides what happens to your personal data and is responsible for it — the "controller", in GDPR terms — and you can reach them at hallo@moicheck.nl. This policy explains what personal data we collect, why, on what legal basis, how long we keep it, and how you can access or delete it. We try to collect as little as possible.
1. What we collect
| Data | When | Why |
|---|---|---|
| Email address | When you sign in with a magic link or with Google | To identify your account and sync your progress across devices. Legal basis: contract — it is what makes the account you asked for work. |
| Name (from your Google profile) | When you sign in with Google | Displayed back to you in the app; not used for anything else. Legal basis: contract. |
| Bucket-list progress & memory notes | When you tick off an item or add a free-text note | To show your progress, badges, and memories, synced to your account. Progress you made before signing in, in the same browser, is added to your account when you sign in. Legal basis: contract. |
| Name, email, subject & message | When you submit the contact form | To read and reply to your feedback, bug report, or suggestion. The function that relays the message also reads your IP address to limit how many messages one sender can submit in a minute; it is held in memory for that minute and never written down or sent on with your message. Legal basis: legitimate interest — answering people who write to us, and keeping the form from being flooded. |
| Theme, language, and (if not signed in) progress | Always, stored only in your browser | To remember your preferences and let you use the app without an account. Legal basis: none needed — this stays on your device and never reaches us (section 6). |
| Your location — checked, never collected | Only when you tap "I'm here" on an event that is happening right now, and only for that one tap | To confirm you are actually at the event before awarding its badge. The check happens entirely on your device: your browser compares your coordinates to the event's location and then discards them. They are never sent to us, never written down, and we never learn where you were or whether you were anywhere at all — the only thing saved is your own device's note that you earned the badge. We never read your location in the background, and if you decline the permission nothing happens except that you don't get that badge. Legal basis: none needed — your coordinates never leave your device. |
| Aggregate usage statistics | When you open the main MoiCheck page, and when you switch between the list, map and events views | To count visits, see which sites link here, and count how often each view (list, map, events) is opened, so we can tell whether MoiCheck is useful and which parts of it people actually use. These are counts only — no record of who opened what. No cookies are set. Like any web request, the request itself carries your IP address, your browser details, and which page you are on and which site you came from; Vercel uses these only to build the aggregates, and we only ever see those aggregates — nothing that identifies you or follows you to other websites. Legal basis: legitimate interest — knowing whether MoiCheck is useful. |
| Error reports | Only when something on the page breaks, at most five per visit | To find and fix bugs that happen in your browser and would otherwise go unnoticed. A report holds the error message, where in our code it happened, the page path (without anything after it in the address), and your browser's name and version. It holds no account or sign-in details, and the reporter strips email addresses and sign-in tokens out of the error text before sending it — though, like any automatic filter, it can miss an unusual form, which is one reason reports are deleted after about a month. We don't store your IP address with it, and nothing is saved on your device. Reports are kept in our database for up to 31 days (section 4). Legal basis: legitimate interest — keeping the app working. |
We do not collect payment information, government IDs, or any special-category data. If you never sign in or use the contact form, we hold no personal data about you, except anything in an error report that the filter described above fails to remove — though, as with any website, simply loading the page or the map sends standard request metadata (your IP address, browser details, and the page requested and referring site) to the providers described in section 2. Serving the page, and loading the map when you open Map view, rest on our legitimate interest in running the site. Loading Google's sign-in button when you open the sign-in dialog, before you have chosen how to sign in, rests on our legitimate interest in offering sign-in with Google (section 2 explains what that request tells Google).
What the legal bases mean. Contract means we need the data to give you the account you asked for. Legitimate interest means we have a reason of our own — the one named in each row — that we have weighed against your privacy, and concluded that your privacy does not outweigh it; you can object to it (section 5). We do not rely on your consent for anything.
Do you have to give us anything? No. No law requires it, and the app works fully without an account. An email address is needed only if you want one: without it your progress stays in that one browser. Likewise, we need a name and email address only to reply to a message you send.
2. Who processes your data
- Supabase — hosts our database and handles authentication (magic-link emails and Google sign-in). Your email, name, and bucket-list progress/notes are stored in Supabase's infrastructure, as are the error reports described in section 1. The code that talks to Supabase is served by MoiCheck itself rather than by an outside network, so loading it reaches no third party.
- Google — if you choose "Continue with Google", Google handles the sign-in and shares your email and name with us via Supabase. The "Continue with Google" button itself is drawn by Google: when you open the sign-in dialog, the page fetches Google's sign-in script and the button loads from accounts.google.com, which tells Google your IP address and lets it read its own cookies, before you have chosen anything. It is not fetched on an ordinary visit, only when you open that dialog. Google also hosts the mailbox that hallo@moicheck.nl delivers into — the address itself is a Cloudflare routing address rather than an account with Google — so a copy of anything sent there, including contact-form messages, sits on Google's infrastructure too. Google publishes a data processing agreement for its business services, but this mailbox is a personal account under consumer terms rather than one of them — section 3 says what that does and does not mean.
- Cloudflare — runs Email Routing for our domain, which forwards mail addressed to hallo@moicheck.nl (including contact-form submissions relayed by Resend) on to the Google mailbox described above. Email Routing forwards rather than stores: there is no inbox at Cloudflare's end, which is why the message's resting place is Google's and not Cloudflare's, and, like Google, publishes a data processing agreement.
- Resend — delivers the email MoiCheck sends, which is two different things. It is the sender behind the sign-in links you request when you choose a magic link, so your email address and a one-time token pass through Resend every time you sign in that way. It also delivers contact-form submissions (name, email, subject, message) to our inbox. The form posts to a small function running on Supabase, which passes the message to Resend; both publish data processing agreements. If you would rather not use the form at all, email us directly at hallo@moicheck.nl — it reaches the same inbox.
- OpenStreetMap, Leaflet and unpkg — the map is drawn with Leaflet, whose script and stylesheet come from the unpkg content delivery network, and the map tiles come directly from OpenStreetMap's tile servers. Both, like any web request, will see your IP address and general request metadata. Neither is contacted until you switch to Map view, so if you only ever use the list, no request reaches them at all.
- Vercel — hosts the MoiCheck website itself, and provides Vercel Web Analytics, which produces the aggregated statistics described above. Like any web request, these will see your IP address and general request metadata; Vercel uses them only to build the aggregates, and reports back to us only aggregated figures such as visit counts, popular pages, referring sites, and how many times each view of the app was opened. It sets no cookies and does not track visitors across other websites. Vercel publishes a data processing agreement and is certified under the EU–U.S. Data Privacy Framework.
We do not sell your data or share it with advertisers. Where each of these providers handles your data, and what covers the parts of it that leave the EU, is section 3.
3. Where your data is processed
Your account, your progress and your notes, and the error reports from section 1, are stored in the European Union. The Supabase project behind MoiCheck runs in Ireland (AWS region eu-west-1), and the app copies them into no other service's store. That claim is narrower than it may sound, so here is what sits outside the live database rather than leaving you to assume there is nothing. Supabase takes automated backups of it as part of the same project, so data you have deleted persists in them until they age out — section 5 says what that means for deleting your account. Your own browser keeps your progress and notes on the device you are reading this on, which is what section 6 sets out: that copy stays in that browser, and clearing your site data removes it. And your email address reaches the providers that carry mail for us, which is the paragraph below and section 4. Supabase is itself a United States company, so its staff can reach that infrastructure to run it; that access is covered by the safeguards described at the end of this section.
Stored in the EU is not the same as never leaving it, and one piece of account data does leave. If you sign in with a magic link, the email carrying that link is sent through Resend in the United States, with your address on it — and not merely in passing: Resend's own stated retention for email data is in section 4. Signing in with Google instead does not go through Resend at all — Google handles it, as section 2 describes.
The contact form. Your message is handled by a small function running on Supabase. Functions like it normally run in whichever data centre is nearest the person using them — which would mean a message sent from outside Europe was processed outside Europe. We pin ours to Ireland, so every submission is handled in the EU no matter where it is sent from. The trade-off is that the form does not move elsewhere if that region has an outage: it simply fails, and you can email hallo@moicheck.nl directly instead, which reaches the same inbox.
What does leave the EU. Handling your message in Ireland is not the end of its journey. From there it goes to Resend, then through Cloudflare Email Routing into our Gmail mailbox — and that mailbox is where it stays. Resend, Cloudflare and Google are United States companies, and none of them confines its processing to the EU. The same holds for Vercel, which serves this site and produces the visitor counts described in section 1, and for the sign-in emails above, which take the first of those same steps. So if you write to us, sign in by magic link, or simply load the page, part of that is handled outside the EU/EEA.
What makes that lawful. Supabase, Resend, Cloudflare and Vercel handle data on our behalf under contract, and each publishes a data processing agreement setting out the safeguards for moving it out of the EEA: the European Commission's Standard Contractual Clauses, and, for the providers certified under it, the EU–U.S. Data Privacy Framework. We rely on the terms they publish rather than on an audit of our own, and we chose providers that offer them. You can ask us which applies to a particular provider, at the address in section 9.
The mailbox, stated plainly. You will notice Google is not in that sentence, and the reason is worth giving rather than hiding. First, where your message actually ends up: hallo@moicheck.nl is not itself a mailbox but an address Cloudflare Email Routing accepts mail for and forwards on, and it forwards into a personal Google account — an ordinary Gmail inbox, in the United States. That is where your message comes to rest, and it is equally true if you skip the form and email us directly; it is the same inbox either way.
That account is held under Google's consumer terms, not a business agreement with a data processing contract behind it. So this last hop, unlike the four providers above, is not covered by one, and we would rather write that down than round it up to a safeguard we do not have. What we can tell you is concrete: the account requires two-factor authentication, nobody but us reads it, and your message is kept only as long as we need it to answer you. MoiCheck is one person's side project, and the inbox is run accordingly — if that is not a trade you want to make, please don't use the form, and don't email us either: anything you send arrives in the same place.
The map is different, and we should be straight about it. Leaflet's files come from unpkg and the tiles come from OpenStreetMap, and neither is a provider we have an agreement with. Your browser fetches from them directly, the way it does with anything a page embeds, so what they see is the request itself — your IP address and the usual browser details — and they serve it from whichever of their own locations is nearest rather than from the EU. We cannot promise safeguards on your behalf with parties we have no contract with, so we are not going to. Nothing reaches either of them unless you switch to Map view; if you stay on the list, no request is made at all.
4. How long we keep it
- Account data & progress/notes: kept for as long as your account exists, until you ask us to delete it.
- Contact-form submissions: kept in our email inbox for as long as we need them to deal with what you wrote, which means a copy also sits with whoever hosts that mailbox. We don't copy submissions into the MoiCheck app or its database, and nothing from the contact form is saved in your browser. The function that relays the message keeps no copy of its own. Resend, which delivers it, documents a retention period of 30 days for email data on its standard plans; we have not been able to confirm that against its live documentation, so treat it as their stated figure rather than one we have verified.
- Error reports: deleted automatically once they are 30 days old, by a clean-up that runs once a day — so a report lasts at most 31 days. They carry no account, session or IP address, so we have no way to look up the ones from your visits and delete them sooner. If the filter misses an email address or sign-in token in one, that report is still deleted by the same clean-up, within 31 days.
- Local preferences (theme, language, guest progress): stay on your device until you clear your browser storage.
- Event badges: stay on the device that earned them until you clear your browser storage. We never receive them, so there is nothing on our side to keep or delete — and nothing for us to restore if you clear them.
5. Your rights
Under the GDPR, you can ask us to:
- tell you what data we hold about you;
- correct inaccurate data;
- delete your account and associated data ("right to be forgotten");
- restrict what we do with your data while a question about it is being sorted out;
- export your data in a portable format;
- object to processing based on our legitimate interests.
There is no consent for you to withdraw, because none of our processing relies on consent (section 1).
No automated decisions that affect you. MoiCheck does no profiling and makes no automated decision with a legal or similarly significant effect on you. The only things it decides automatically are badges: milestones are counted from the items you tick off, and an event badge is awarded when your device confirms you are at the event. Neither has any effect outside the app.
Deleting your account yourself: when signed in, open your profile (the person icon) and choose Delete my account & data. After you confirm, we permanently delete your completed items and notes from Supabase, remove your sign-in record, sign you out, and clear the progress saved in that browser. This cannot be undone. Two kinds of copy outlive that deletion, and neither is a way back into your account: copies of your progress on other devices you signed in from remain in those browsers' local storage until you clear their site data, and Supabase's automated backups of the database, taken before you deleted, are not edited — they age out on their own schedule, and we do not restore from one to bring an account back. If automatic deletion is not available on this installation, the app informs you; email us and we will delete your account manually.
To exercise any of the other rights, or if you cannot sign in to use the in-app deletion, email us at hallo@moicheck.nl. We'll respond within a reasonable time and, for deletion requests, remove your account data from Supabase.
Signing out clears the progress saved in that browser, so the next person to sign in on a shared device does not inherit it. You can also clear your locally-stored data at any time by clearing your browser's site data for MoiCheck.
Complaints. If you think we have mishandled your data, you have the right to complain to a data protection authority. In the Netherlands that is the Autoriteit Persoonsgegevens. We would rather hear from you first, at hallo@moicheck.nl, but you don't have to.
6. Cookies & local storage
We don't use advertising or tracking cookies, and nothing we store follows you to other websites. Everything in the table below is kept by your own browser, on your own device.
Dutch law — article 11.7a of the Telecommunicatiewet, which implements article 5(3) of the ePrivacy Directive — requires us to ask your permission before storing anything on your device, or reading something already stored there, unless it is strictly necessary to provide the service you asked for. We don't show a consent banner because every item in the table below falls inside that exemption: each is either the feature you came to MoiCheck for, or a setting you chose yourself.
| What we store | What it does | Why it needs no consent |
|---|---|---|
Completed items & memory notesmoiCheckState |
Remembers which things you've ticked off, and anything you wrote about them. | Strictly necessary: remembering your progress is the service. Without it, MoiCheck would forget everything the moment you closed the tab. |
LanguagemoiCheckLang |
Keeps the app in the language you picked. | A setting you chose yourself, stored only to honour that choice. |
ThememoiCheckTheme |
Keeps the light, dark, or system appearance you picked. | A setting you chose yourself, stored only to honour that choice. |
Theme, older nametheme |
The same appearance setting, under the name an earlier version of MoiCheck used. If you have no current theme saved, we copy it across and delete it on your next visit; otherwise it just sits there unused until you clear your site data. | A setting you chose yourself. Reading something already on your device falls under the same permission rule, and the same exemption. |
Completed-list layoutmoiCheckCompletedCollapsed |
Remembers whether you left the completed section folded away. | A setting you chose yourself, stored only to honour that choice. |
Event badgesmoiCheckEvents |
Remembers which events you checked in at, so the badge you earned is still there next time. It holds the event and the date — never a location. | Strictly necessary: keeping the badge is the thing you asked for by tapping "I'm here". Nothing is stored unless you tap it, and the location check that precedes it stores nothing at all. |
| Sign-in session set and managed by Supabase |
Keeps you signed in, so you don't have to request a new magic link on every page. | Strictly necessary to provide sign-in — which happens only because you asked to sign in. If you never sign in, it is never created. |
Account markermoiCheckSyncedUser |
Records which account the saved progress belongs to. | Strictly necessary to sync safely: it is what stops progress being uploaded under a different account on a shared device. It is created only when you sign in and removed when you sign out; if your session ends while the app is closed, it is cleared the next time you open the app. |
Confirming you are at an event reads your location from your device, which the same permission rule covers. We ask only at the moment you tap "I'm here", your browser asks you before we get anything, and your coordinates are compared to the event's and then discarded rather than stored — so what ends up saved is the badge in the table above and nothing about where you were. Section 1 describes that check in full.
The visitor statistics described in section 1 come from Vercel Web Analytics, which sets no cookies and stores nothing at all on your device, so the permission rule above does not apply to it.
When you sign out, your completed items, notes, and the account marker are cleared from that browser, so the next person to sign in on a shared device does not inherit them. Your language, theme, and layout preferences are device settings rather than personal data, so those stay. Event badges stay too, and we should be straight about the trade: they are never uploaded anywhere, so clearing them on sign-out would destroy them for good rather than restore them on your next sign-in — the cost is that on a shared device the next person can see that somebody checked in at an event. You can remove everything at any time by clearing your browser's site data for MoiCheck.
7. Children
MoiCheck isn't directed at children, and we don't knowingly collect data from anyone under 16.
8. Changes to this policy
If we change how we handle your data, we'll update this page and change the "last updated" date above.
9. Contact
Questions about this policy or your data? Email hallo@moicheck.nl.