Privacy notice
Version 2026-10-12 · In effect since
Sunvia is a small, invite-only app, on the web and as a mobile app, that reminds you to go for a walk and lets you keep track of your steps, weight, gym workouts and streaks. This notice explains, in plain language, what data the app stores, why, for how long, and what you can do about it.
In short
- We only store what the app needs to work: your account, your settings and your entries, typed in by you or, if you switch it on in the mobile app, synced from your phone’s health app.
- Your height, your weight and the days you mark as sick are health data. We only process them with your explicit consent.
- No analytics, no ads, no tracking, no social logins, no profiling. We never sell your data.
- Notifications never show your weight or BMI.
- You can download all your data or delete your account at any time in Settings. Deletion is immediate and permanent.
- Only strictly necessary cookies are used, so there is no cookie banner. See the Cookie Overview.
Who is responsible for your data
The controller (the party responsible for your personal data under the General Data Protection Regulation, “GDPR”) is:
[Operator name]
[Postal address or city, the Netherlands]
E-mail: [contact e-mail]
Sunvia is a private, non-commercial hobby project. Because it is small, there is no separate data protection officer; you can contact the operator directly at the address above about anything in this notice.
What data we collect
We only collect the data below. You give us most of it yourself; the rest is created when you use the app.
| Data | Details |
|---|---|
| Account | Username, e-mail address, password (stored only as an Argon2id hash, never in readable form), sign-up date and time, the date your e-mail address was confirmed, and your time zone (for example “Europe/Amsterdam”, detected by your browser so reminders and days follow your local time). |
| Health data | Your height and your weight entries (one per day, together with your height at that moment, and whether you typed it or it was synced from your phone’s health app). Your BMI is calculated from these when it is shown; it is not stored separately. Also the days you mark as sick days (a sick day pauses your walking and gym streaks). |
| Year of birth | Only if you enter it, when you set up the app or in Settings → Body & units. We store the year only, not your date of birth. |
| Step entries | Your number of steps per day, whether you typed it or it was synced from your phone’s health app, your step goal on that day (so changing your goal later does not rewrite past days), and the days you mark as rest days from walking. Your streaks are calculated when shown, not stored. See Syncing from your phone’s health app. |
| Gym log | Only if you use the Gym tab: your workout days (such as “Push” or “Legs”) and their notes, your exercises (name, type, whether the weight is per hand, and your notes), each set you log (date, weight lifted, reps and whether it was a warm-up), the days you mark as rest days, your answer when the app asks whether to keep your gym streak after a week with a rest or sick day, and your planned gym days (with the date each plan started, so changing it later does not rewrite past days). Notes are free text that only you see; we don’t read or analyse them. |
| Settings | Step goal, units (kg or lb, cm or feet and inches), whether weight tracking is on, whether step and weight syncing are on, your weekly gym target and rest timer length, reminder settings (on or off, reminder times, walk window and interval, snooze lengths, gym reminders), whether you chose to keep the weight reminder while your weigh-ins are underweight (and when), and whether you finished the introduction. |
| Notification devices | For each device on which you turn on notifications: the push address your browser gives us (an “endpoint” URL at your browser maker’s push service) and two encryption keys, or, in the mobile app, the notification token Firebase Cloud Messaging gives the app; a coarse label such as “iPhone · Safari”, the date it was added and when a notification was last delivered. No other device identifiers or fingerprinting data. |
| Reminder bookkeeping | When each type of reminder was last sent to you, and until when you postponed it (“Remind me later”). |
| Consent records | When you confirmed you are 16 or older, and when you accepted which version of this privacy notice and of the terms of use. |
| Sessions | For each device where you are logged in: a hash of the session token in your cookie, when the session started, when it was last used and when it expires. |
| One-time links | Hashes of the one-time codes in e-mail links (confirming your e-mail, resetting your password, changing your e-mail), their expiry time, and, when you change your e-mail, the new address until it is confirmed. |
| Invite | Invite codes are stored only as hashes. When you sign up, the invite you used is marked as used and linked to your account. That link is removed when you delete your account. |
Technical data
Like every website, the app’s servers receive your IP address and basic browser information with each request. We use your IP address only briefly, to limit how often requests can be made (rate limiting), to slow down password guessing and to block abuse. The rate-limit store only keeps a one-way hash of your IP address or e-mail address, never the address itself, and these counters expire automatically after minutes to at most two days. Our hosting provider may also keep IP addresses in short-lived server logs (see How long we keep data).
We do not collect your real name, your location, contacts, photos or anything from other apps.
Why we use your data and on what legal basis
| Purpose | Data used | Legal basis |
|---|---|---|
| Providing the app: your account, logging in, saving entries, calendar, charts and streaks | Account, step entries, gym log, settings, sessions | Performance of our agreement with you (Art. 6(1)(b) GDPR) |
| Recording your height and weight and showing your BMI | Health data | Your explicit consent (Art. 6(1)(a) and Art. 9(2)(a) GDPR), given when you sign up. See Your health data. |
| Syncing your steps from your phone’s health app, if you switch it on in the mobile app | Step entries, settings | Performance of our agreement with you (Art. 6(1)(b) GDPR) |
| Syncing your weight from your phone’s health app, if you switch it on in the mobile app | Health data, settings | Your explicit consent (Art. 6(1)(a) and Art. 9(2)(a) GDPR). See Syncing from your phone’s health app. |
| No longer showing your height when you log weight from the year you turn 25, since adults rarely grow | Year of birth | Performance of our agreement with you (Art. 6(1)(b) GDPR) |
| Pausing the weight reminder while your last weigh-ins are underweight | Health data, your answer about keeping the reminder | Your explicit consent (Art. 6(1)(a) and Art. 9(2)(a) GDPR). See Your health data. |
| Sending the reminders you switched on | Settings, time zone, notification devices, reminder bookkeeping, whether you logged today | Performance of our agreement with you (Art. 6(1)(b) GDPR) |
| Service e-mails: confirming your address, password reset, security notices and the confirmation that your account was deleted | E-mail address, username, one-time links | Performance of our agreement with you (Art. 6(1)(b) GDPR); security notices also on our legitimate interest in protecting your account (Art. 6(1)(f) GDPR) |
| Security and abuse prevention: rate limiting, login lockouts, bot checks, checking new passwords against known data breaches | IP address (hashed in the rate-limit store), hashed e-mail address, password at the moment you set it | Our legitimate interest in keeping the app and your account safe (Art. 6(1)(f) GDPR) |
| Proving that you accepted this notice and the terms of use | Consent records | Legal obligation to be able to demonstrate consent (Art. 6(1)(c) and Art. 7(1) GDPR) |
We do not use your data for any other purpose. There are no marketing e-mails and no newsletters, and we do not build profiles of you. The only automatic step is pausing the weight reminder described under Your health data, which you can always undo.
Your health data
Your height, your weight entries, the BMI calculated from them and the days you mark as sick are “special category” data under Article 9 of the GDPR, because they say something about your health. We therefore only process them with your explicit consent, which you give by ticking the box when you sign up (or when you accept an updated version of this notice).
- We use this data only to show it back to you (your entries, charts, BMI and calendar), to keep your streaks going on sick days, and to pause the weight reminder when your weigh-ins are underweight, as described next. Sick days never appear in notifications.
- If your last 3 weigh-ins are all below a BMI of 18.5 (underweight for adults), the app pauses the daily weight reminder, because keeping a close eye on your weight can add pressure. It tells you why in the app and asks whether you would like a break from weight tracking (which hides weight and BMI, just like turning weight tracking off), or to keep tracking with or without the reminder. If you keep the reminder, it asks again after two weeks. Your past entries are never deleted by this. We store your answer and when you gave it, and forget it once your weigh-ins are no longer all underweight. You can change your answer in Settings → Notifications.
- Notifications never contain your weight, BMI or other sensitive values, because they can appear on a locked screen. They only contain neutral text such as “Time for a walk?”.
- We never share it with anyone except the technical service providers that host the app (listed below).
- Weight tracking is optional. In Settings → Weight & privacy you can turn it off; weight and BMI are then hidden and the weight reminder stops. Past entries are kept until you remove them (on the Log page) or delete your account.
- You can withdraw your consent at any time. Because the app is built around this data, the way to withdraw it completely is to delete your account, which removes all your health data immediately. Withdrawing consent does not affect processing that happened before.
Syncing from your phone’s health app
In the Sunvia mobile app you can choose to fill in your steps and your weight from Apple Health (iPhone) or Health Connect (Android) instead of typing them. Each one has its own switch in Settings, and both are off until you turn them on.
- The app only reads after you switch syncing on in Sunvia and allow it in your phone’s own permission screen. You can take that permission back in your phone’s settings at any time.
- It reads only what it needs: your total number of steps per day, and your last weigh-in of each day. It does not read any other health data, and it never writes anything to your phone’s health app.
- It reads when you open the app or come back to it, for the days since the last sync, at most back to the day you signed up. The values are sent to our server and stored like typed entries, marked as synced.
- While syncing is on, synced days cannot be typed over. Days you typed yourself are never overwritten, and days for which your phone has no data can still be typed.
- Weight is never synced while weight tracking is off, including during a break from weight tracking.
- Data read from your phone’s health app is used only to show it back to you, as described above. It is never used for advertising, sold, or shared with anyone except the service providers that host the app.
- Turning syncing off stops all reading. Entries synced earlier are kept until you remove them (on the Log page) or delete your account.
BMI is a rough general indicator, not a diagnosis. Sunvia does not give medical advice; see the terms of use.
How long we keep data
| Data | How long |
|---|---|
| Account, health data, year of birth, entries, settings, consent records, reminder bookkeeping | Until you delete your account. Deletion is immediate and permanent; there is no “soft delete” or waiting period. You can also remove single entries at any time. |
| Accounts whose e-mail address was never confirmed | Automatically deleted 7 days after sign-up. |
| Sessions (being logged in) | End after 30 days without use, and at the latest 90 days after you logged in, or earlier when you log out. Ended sessions are removed by a daily clean-up. |
| One-time e-mail links | Password reset links work for 1 hour; links to confirm or change your e-mail address work for 24 hours. Used and expired links are removed by a daily clean-up. |
| Notification devices | Until you turn notifications off, remove the device in Settings, log out on that device, delete your account, or the push service tells us the address no longer works. |
| Rate-limit and login-protection counters (hashed) | Expire automatically after a few minutes to at most 48 hours. |
| Hosting logs (may include IP addresses) | [Fill in: log retention of the hosting provider, for example “up to 30 days”] |
| E-mail delivery logs at our e-mail provider | [Fill in: log retention of the e-mail provider, for example “up to 30 days”] |
| Database backups | [Fill in: backup or point-in-time-recovery window of the database provider, for example “7 days”]. Data you delete disappears from backups when this period has passed. |
Who receives your data
We do not sell, rent or share your data with anyone for their own purposes. To run the app we use the technical service providers below. They act as our processors: they may only process your data on our instructions and under a data processing agreement, and only for the task listed.
| Provider | Task | Data involved |
|---|---|---|
| Vercel Inc. | Hosting the website; server functions run in Frankfurt, Germany (EU) | All data passing through the app, IP addresses in server logs |
| [Database provider, e.g. Neon or Supabase] | Database hosting [region: fill in, an EU region is recommended] | All stored data listed above |
| Upstash, Inc. | Rate-limit counters [region: fill in, an EU region is recommended] | Hashed IP addresses and hashed e-mail addresses only |
| Resend | Sending service e-mails | Your e-mail address and the content of the e-mail |
| Google LLC (Firebase Cloud Messaging) | Delivering notifications in the mobile app | The app’s notification token and the neutral notification text |
| Cloudflare, Inc. (Turnstile) | Bot protection on the sign-up and forgot-password forms, and on the login form after repeated failed attempts | IP address and technical browser signals during the security check |
Push services
When you turn on notifications, your browser chooses its own push service to deliver them: Apple for Safari, Google for Chrome and most Android browsers, Mozilla for Firefox, or Microsoft for Edge. We send each notification to the address your browser gave us. The content is end-to-end encrypted, so the push service can only see that a message is sent to that address, not what it says. These services are operated by your browser maker under their own privacy terms.
In the mobile app, notifications are sent through Firebase Cloud Messaging (Google, listed above), which delivers them on Android and passes them to Apple’s push service on iPhone. The text of these notifications is not end-to-end encrypted, which is one more reason they never contain your weight, BMI or other sensitive values.
Breached-password check
When you choose a password, our server checks whether it appears in known data breaches using the “Pwned Passwords” service (api.pwnedpasswords.com). Only the first 5 characters of a one-way hash of the password are sent; your password, e-mail address and IP address are never sent. This is not personal data.
We may also disclose data if we are legally required to, for example by a court order, and only to the extent required.
International transfers
We choose providers and regions within the European Economic Area (EEA) where possible. Some providers above are based in the United States or may access data from outside the EEA, for example for support or e-mail delivery. In those cases the transfer is protected by the EU–US Data Privacy Framework where the provider is certified, or otherwise by the European Commission’s Standard Contractual Clauses, together with additional safeguards such as encryption in transit. You can ask us for a copy of the relevant safeguards.
Cookies and local storage
The app only uses cookies and browser storage that are strictly necessary: one to keep you logged in, one to remember your light or dark theme, and a few items for installing the app and working offline. Because nothing is used for tracking, no cookie banner is needed. See the Cookie Overview for the full list.
What we never do
- No analytics or statistics tools, no advertising, no tracking pixels.
- No social logins and no social media buttons or embeds.
- No third-party fonts or other scripts, apart from the bot check described above.
- No profiling and no automated decision-making with legal or similarly significant effects.
- No selling or renting of your data.
Your rights
Under the GDPR you have the following rights. Most of them you can use directly in the app.
| Right | How |
|---|---|
| Access and data portability | Settings → Your data: “Download all data (JSON)” gives your account details, consents, settings, all entries (with BMI), devices and sessions; “Download entries (CSV)” gives your entries as a spreadsheet. Security values such as your password hash and device encryption keys are left out because they are of no use to you. For a full overview of everything, e-mail us. |
| Rectification (correcting data) | Settings → Account (username, e-mail address, password), Body & units (height, year of birth, units), Time zone, and the Log page for any entry. |
| Erasure (deleting data) | Settings → Delete account deletes your account and all related data immediately and permanently. You get a confirmation e-mail. You can also remove single entries on the Log page, and your year of birth and notification devices in Settings. |
| Withdrawing consent | Delete your account, or turn off weight tracking and remove your weight entries. See Your health data. |
| Restriction and objection | E-mail us. You can also switch off notifications or weight tracking at any time in Settings. |
You can also exercise any of these rights by e-mailing [contact e-mail]. We answer within one month. We may ask you to confirm the request from the e-mail address of your account, so we know it is really you.
If you are unhappy with how we handle your data, please tell us first so we can try to fix it. You also have the right to lodge a complaint with the Dutch Data Protection Authority, the Autoriteit Persoonsgegevens, or with the supervisory authority in the EU country where you live.
Age requirement
You must be 16 or older to use Sunvia. We ask you to confirm this when you sign up. If we learn that an account belongs to someone younger, we delete it.
How we protect your data
- Passwords are hashed with Argon2id; nobody, including the operator, can read them.
- All connections use HTTPS. Session cookies are HttpOnly and Secure, and only a hash of the session token is stored, so a database leak alone does not let anyone log in as you.
- E-mail links contain single-use codes that expire, and only their hashes are stored.
- Rate limiting, login lockouts, a bot check and a breached-password check protect against attacks.
- A strict Content Security Policy and other security headers protect against malicious scripts.
- You can log out on all devices at once in Settings, for example after losing your phone.
- Changing your password logs you out on other devices, and we e-mail you about password and e-mail address changes.
- Access to the production systems is limited to the operator. If a data breach happens, we follow a documented procedure, including notifying the Autoriteit Persoonsgegevens and you where required.
Changes to this notice
The version and date at the top show when this notice last changed. If we change it in a way that matters for you, for example new data or a new purpose, the app asks you to read and accept the new version the next time you open it. Small corrections, such as fixing a typo, do not need your new acceptance. You can see which version you accepted in Settings → Weight & privacy.
Contact
Questions about this notice or your data? E-mail [contact e-mail]. Please write from, or mention, the e-mail address of your account, so we can find it.