Privacy Policy
Effective date: October 6, 2026 Last updated: October 6, 2026
This Privacy Policy explains how Galvoro collects, uses, and shares information about you when you use galvoro.app and its subdomains (the "Service").
1. Who we are
Galvoro is currently operated as an individual project, free of charge, by Sacha Epskamp, based in Singapore. No company has been incorporated. This means data controller responsibilities under applicable law rest with the operator personally.
Contact: privacy@galvoro.app
Data Protection contact / DPO: Sacha Epskamp, privacy@galvoro.app. This contact handles privacy requests, data protection questions, and complaints.
2. What we collect
2.1 Information you give us
- Account information: your primary email address (or GitHub account if you sign in with GitHub) and a university email address that you confirm belongs to you.
- Profile information: display name, username, biography, institution, academic field/sub-discipline selections, social links, and an optional profile photo. You choose what to share.
- Activity: capsules you save, capsules you like, and lists you create.
- Capsule submissions: when you submit a Capsule, we receive and create:
- the files you upload as an archive (zip or tar.gz), or, for a GitHub import, the address of the public repository and the commit you choose. For imports, our server fetches the repository directly from GitHub using Galvoro's own access token. We do not ask for, receive, or use your GitHub credentials for imports; signing in with GitHub is a separate, optional feature;
- the metadata declared in the Capsule's
capsule.jsonfile: title, creator name(s), institution, course, notes, keywords, and licence. If you name other people as creators, we receive their names from you; - the report of our automated checks, which records file paths, line and column numbers, and rule identifiers only, never the contents of your files;
- notes written by our curators while reviewing your submission;
- the submission's status, timestamps, and file sizes.
- Communications: the contents of any message you send us by email or through support routes.
2.2 Information we collect automatically
- Technical data: IP address, browser type, device type, operating system, referrer URL, and pages viewed. This comes from server logs and from our analytics provider. Separately, some Capsules load web fonts directly from Google (Google Fonts); when such a Capsule loads, your IP address is transmitted to Google. We are migrating Capsules to self-hosted fonts to remove this transfer.
- Abuse-prevention data: to limit abuse of sign-up, uploads, and other actions, we record rate-limit events identified by your user ID, IP address, the email address used to sign up, and your university's email domain. Sign-ups that have not yet been confirmed store the email address and IP address used.
- Authentication data: session cookies issued by our authentication provider. These are strictly necessary for the Service to function.
- Error and performance data: when something goes wrong in your browser, we collect a stack trace, page URL, and browser version. Our error-monitoring provider is configured to strip request headers, cookies, IP addresses, query strings, and request bodies before anything is stored. When an error occurs, we also keep a short session replay of the moments leading up to it; sessions in which no error occurs are not recorded. Replay is configured to mask all text and user-entered input, so it does not capture the content you type or read. We do not use replay for advertising, behavioural profiling, or cross-site tracking.
- Administrative audit log: we keep an append-only log of security-relevant actions on the Service, such as creating, approving, rejecting, or publishing a submission, deleting an account, and enrolling in two-factor authentication. Entries contain internal user IDs, Capsule identifiers, the names of the rules or fields involved, curator note text, and request identifiers. They do not contain email addresses or IP addresses.
We do not knowingly collect special-category personal data (health, religion, political opinions, etc.). Please do not submit such information through the Service.
3. Why we collect it (lawful basis)
For users in the EU/UK (GDPR) and Singapore (PDPA), our lawful bases are:
| Purpose | Lawful basis |
|---|---|
| Creating and operating your account | Performance of a contract (the Terms of Service) |
| Verifying your university affiliation | Legitimate interest in maintaining a verified academic audience; performance of contract |
| Checking, reviewing, and publishing Capsules you submit, and telling you the outcome | Performance of contract |
| Displaying the creator names declared for a Capsule | Legitimate interest in correct attribution, as required by the Capsule's licence |
| Keeping a publication record of published Capsules (what was submitted, by whom, from which source, under which licence) | Legitimate interest in licence provenance, attribution, and handling rights claims |
| Sending service emails (sign-in, verification, security, account changes, submission status) | Performance of contract |
| Sending optional product updates | Consent (you opt in; you can opt out anytime) |
| Analytics and error monitoring | Legitimate interest in operating and improving the Service |
| Preventing abuse and security incidents, including rate limiting and the administrative audit log | Legitimate interest in the security and accountability of the Service |
| Responding to legal requests | Legal obligation |
4. Who we share it with
We do not sell your personal data and we do not share it with advertisers.
We do use the following sub-processors, which act on our instructions:
| Provider | Purpose | Location | Notes |
|---|---|---|---|
| Supabase | Authentication, database, file storage | Singapore (AWS) | Stores your account, profile, submission records, and the administrative audit log |
| Cloudflare | DNS, content delivery, edge storage (R2), Workers | Global edge | Standard CDN access logs; stores published Capsule files, uploaded archives, and staged submission files |
| Vercel | Application hosting and background jobs (Vercel Workflow) | Singapore (function runtime and background-job data); United States (control plane) | Request logs, function telemetry; background-job data for submission checks contains internal IDs, counts, and rule identifiers only |
| Resend | Transactional email delivery | United States | Sign-in and verification emails, security notices, and submission status notifications |
| Sentry | Error monitoring and session replay | EU (Frankfurt) | Stack traces; masked session replay for sessions in which an error occurs; headers, cookies, IP addresses, query strings, and request bodies stripped |
| Plausible Analytics | Privacy-friendly analytics | EU (Germany) | No cookies, no personally identifiable data |
| GitHub | Optional sign-in via OAuth; source of repository imports | United States | Sign-in data only if you choose GitHub sign-in. For imports, our server fetches the public repository you name using Galvoro's own token, so GitHub can see that Galvoro requested that repository |
| Google (Google Fonts) | Web font files for some Capsules | United States | Some Capsules request fonts directly from Google at load time, transmitting your IP to Google. Being phased out in favour of self-hosted fonts. |
We may share information with law enforcement or regulators where legally required, and with successors if the project is ever transferred (you will be notified).
5. International data transfers
Galvoro is operated from Singapore and uses providers in Singapore, the EU, and the United States.
For transfers of personal data from the EU/UK to countries without an EU adequacy decision (currently including Singapore and the United States), we rely on Standard Contractual Clauses (SCCs) offered by the sub-processors listed above. By using the Service, you understand that your data may be processed in these jurisdictions.
EU/UK representative: At this preview stage, we do not intentionally target users in the EU or UK as a market, and we believe our processing is limited, low-risk, and not large-scale special-category processing. On that basis we have not appointed a representative under GDPR Article 27 or the UK equivalent. We will reassess this if Galvoro becomes commercial, actively targets EU/UK users, or materially expands its user base or processing activities. EU/UK users with privacy concerns can reach us directly at privacy@galvoro.app.
6. How long we keep it
- Account data: for as long as your account is active. When you delete your account, your profile content and sign-in account are deleted; removal from backups and sub-processors is completed within 30 days. Your internal user ID is kept, no longer connected to your email address or profile, so that existing audit-log entries and publication records stay consistent.
- Uploaded archives and imported repository snapshots: deleted when a decision is made on your submission (published, rejected, withdrawn, failed automated checks, or replaced by a newer submission). Anything not removed this way is deleted automatically after 30 days.
- Staged submission files: deleted 7 days after a decision, or 30 days after a "changes requested" decision. Deleted immediately if you delete your account.
- Submission records for published Capsules: kept indefinitely as the publication record, including after you delete your account (see Section 7).
- Submission records that did not lead to publication (rejected, withdrawn, replaced, or failed checks): the declared metadata, automated-check report, and curator notes are erased 90 days after the decision. The submission ID, status, timestamps, file sizes, and, for GitHub imports, the repository address and commit are kept while your account exists. Submissions for a Capsule that was never published are deleted entirely when you delete your account.
- Administrative audit log: kept indefinitely as a security record.
- Rate-limit records: deleted automatically once older than 31 days. Unconfirmed sign-ups are deleted once they expire, after 7 days.
- Background-job data (Vercel Workflow): kept by Vercel for a short period set by its own retention rules (currently one day).
- Server logs: typically 30–90 days, depending on the provider.
- Error and replay data: up to 90 days, then deleted automatically by Sentry.
- Analytics data: aggregated indefinitely; not tied to individual users.
- Communications you send us: as long as needed to respond and for a reasonable record afterward.
7. Your rights
Depending on where you live, you have some or all of the following rights:
-
Access — request a copy of the personal data we hold about you.
-
Correction — ask us to fix inaccurate data.
-
Deletion — delete your account in your settings, or ask us to delete your account and associated data. Some information is kept after deletion because we have a legitimate reason to keep it:
- Capsules you published remain available under their declared licence, together with their publication record. Your profile is no longer linked to them. The creator name(s) declared in a Capsule's metadata are part of its attribution and remain unless you ask us to remove or replace them, which we will do where reasonably practicable.
- Entries in the administrative audit log keep your internal user ID, which after deletion is no longer connected to your email address or profile.
See also Section 5.7 of the Terms of Service.
-
Restriction — ask us to stop processing certain data while a dispute is resolved.
-
Portability — ask for an export of data you provided to us.
-
Object — object to processing based on legitimate interests.
-
Withdraw consent — for anything we do based on consent (e.g. marketing emails).
-
Complain — to your local data protection authority. In Singapore, this is the Personal Data Protection Commission (PDPC). In the EU, your national supervisory authority.
To exercise these rights, email privacy@galvoro.app. We aim to respond within 30 days.
8. Cookies and similar technologies
We use a small number of cookies and similar technologies, all strictly for operating the Service:
- Authentication cookies (Supabase) — required to keep you signed in.
- CSRF and security cookies — required to prevent cross-site request forgery.
Our analytics provider (Plausible) does not use cookies and does not track you across sites. Sentry does not set cookies; replay data is sent only when an error occurs.
We do not run advertising, retargeting, or cross-site tracking cookies.
9. Emails
We will only send you marketing or product-update emails if you explicitly opt in. You can opt out anytime through the link in any such email, or by emailing privacy@galvoro.app.
Service emails are sent regardless and cannot be opted out of while you have an active account. These are sign-in and verification emails (from auth@send.galvoro.app), status updates about Capsules you submit (from notifications@send.galvoro.app), security notifications, and notices of important changes to the Service or this Policy.
10. Children
The Service is intended for use by people aged 18 or older affiliated with a higher-education institution. We do not knowingly collect personal data from anyone under 18. If you believe a person under 18 has provided us with personal data, please contact privacy@galvoro.app and we will delete it.
11. Security
We take reasonable technical and organisational measures to protect your data, including encryption in transit, encryption at rest at our sub-processors, role-based database access controls, and two-factor authentication on administrative accounts. No system is perfectly secure; we cannot guarantee absolute security.
If we become aware of a personal data breach affecting you, we will notify you and applicable authorities where required by law.
12. Changes to this Policy
We may update this Policy. If we make material changes, we will notify you by email or through a notice on the Service before the changes take effect. Continued use of the Service after the effective date means you accept the updated Policy.
13. Contact
Privacy questions, requests, or complaints: privacy@galvoro.app
This Policy was written for a non-commercial preview launch and will be reviewed by qualified counsel before any paid or institutional offering goes live.