> Status: DRAFT. This is a technically grounded first version, written based
> on what the application actually does today (see "Origin of this document" at
> the bottom). This is not legal advice, and this document must not go live
> before it has been reviewed by a lawyer/privacy specialist. All text between
> The company details below are taken from Astrae's existing legal documents.
Last updated: 5 September 2026
1. Who is responsible for your data?
Imperc, based at Poortland 66, 1046 BD Amsterdam, the Netherlands, and
registered with the Dutch Chamber of Commerce (KVK) under number 83544976
(hereafter: "Astrae", "we" or "us"),
is the data controller under the GDPR for the data you enter via
astrae.world.
Questions about this policy or your data? Email privacy@astrae.world.
2. What data do we collect, and why?
Date, time and place of birth indirectly reveal sensitive information
(including age and place of origin) and are therefore treated by Astrae as
sensitive personal data, even though they don't fall under the GDPR's Article
9 special categories.
3. What we do and don't store
Astrae still works fully statelessly without an account — that remains the
core of the product and is never required. Since Fase 4 you can also
optionally create a free account; that changes what happens:
Without an account (the default, always available):
- Astrae does not store any of your birth data on our servers. Every
calculation happens the moment you submit the form; the result goes back to
your browser and the server retains nothing of it.
- we use no tracking cookies and no advertising networks; we do keep
anonymous usage counts (which sections get opened), without a cookie,
without an id and without anything traceable to you.
- we do not share data with advertisers or data brokers.
- your IP address is visible with every request — that is how the internet
works — and stays in the server's working memory for at most ten seconds,
purely to count requests. It is not linked to your data and never written to
disk.
- if you request the AI reading, the server keeps the generated text in
working memory for a while under a hash (SHA-256) of your planetary
positions, so the same question on the same day is not computed twice. A
restart empties that cache.
What *does* stay on your own device (never sent to our server outside of the
one-time calculation): your last calculated chart, language choice and theme
preference are stored locally in your browser (localStorage). This is
entirely under your own control — you can clear it via your browser
settings, and it only concerns that one device/browser.
With an account (optional, via an email login link — no password):
- We store your email address (for logging in) and, if you choose to, the
birth data of charts you deliberately save ("Save this chart") — your own
and optionally other people's (e.g. for synastry comparisons).
- This storage runs through Supabase, our
database and login provider — see Chapter 5.
- Only you can access your own stored data: technically enforced through
Row-Level Security in the database, not just an application-level rule.
- You can view/export your stored data yourself at any time, or permanently
delete your entire account including all saved charts — see Chapter 6, no
request to us required.
4. Legal basis for processing
- Performance of a contract / at your request (GDPR Art. 6(1)(b)): you
voluntarily enter your data to receive a specific result (your birth
chart); without that data, Astrae cannot perform the requested calculation.
- For the optional fields (name, a second person's data),
consent applies (Art. 6(1)(a)) — the calculation also works without
those fields.
- Creating an account and saving charts is likewise based on consent
(Art. 6(1)(a)): an account is entirely optional, and you decide per chart
whether to save it.
- Briefly counting requests per IP address rests on legitimate interest
(Art. 6(1)(f)): keeping the service available in case of abuse or overload.
5. Sharing with third parties
Astrae uses six external services to make the calculation, the AI
reading and the account functionality possible.
We have no control over their processing — see their own privacy notices for
details.
Your full name or place of birth is never sent to JPL Horizons — only a
timestamp, which cannot on its own be traced back to you.
Supabase hosts our database and login system (data center region:
[CONFIRM DATA CENTER REGION]); they process this data on our behalf as a
processor, not for their own purposes. No data processing agreement text is
included here yet — that belongs with the legal review of this document.
Astrae does not itself host advertisements and uses no third-party trackers
(no Google Analytics, Meta Pixel, or similar) at the time of writing.
6. Your rights under the GDPR
Once Astrae processes data about you, you have the right to:
- Access — request which data we hold about you.
- Rectification — have incorrect data corrected.
- Erasure ("right to be forgotten").
- Restriction of processing.
- Data portability — request your data in a common format.
- Object to processing based on legitimate interest.
No account? Then there is in practice nothing to exercise most of these
rights over — Astrae stores nothing of your data (see Chapter 3), and your
own browser is the only place anything is retained, over which you already
have full control.
Have an account? You can exercise these rights yourself, directly in the
app, without needing to send us a request:
- Access and portability — "Export my data" in the account menu gives
you a file with everything we hold about you (profile, saved charts,
device tokens for notifications).
- Erasure — "Delete account" in the account menu deletes your account
and all saved charts immediately and irreversibly.
- Rectification — you can delete a saved chart and re-save it with
correct data; a separate "edit" function doesn't exist yet.
- Restriction of processing / objection — email us at info@astrae.world
for requests the self-service options above don't cover.
You also always have the right to lodge a complaint with the Dutch Data
Protection Authority, the
or, if you live outside the Netherlands, your own country's supervisory
authority.
7. Retention period
- Without an account: calculation data (name, date/time/place of birth) is
not retained on the server — processed and immediately released again
after the result is returned (see Chapter 3).
- With an account: your email address and the charts you choose to save
remain until you delete them yourself (per chart, or your entire
account at once) — there is no automatic deletion period.
- Data in
localStorageon your own device: remains until you clear it, or
your browser clears it itself.
8. Security
- All traffic between your browser and Astrae runs over HTTPS/TLS: the app is
hosted behind an automatically managed TLS certificate (Fase 3 complete,
live since July 2026).
- Without an account there is no server-side storage, so also no database
that could be compromised with birth data in it.
- With an account: stored data lives in a database with Row-Level Security
(RLS) — a technically enforced rule that each user can only read or modify
their own rows, not merely an application-level convention. Login is
passwordless via a one-time email link, so there are no passwords to hash,
store, or leak. Account deletion happens through a separate, authorized
server operation (not directly from the browser), so only the logged-in
user themselves, with a valid session token, can have their own account
deleted.
9. Changes to this policy
We will update this policy as Astrae's functionality changes (particularly
with the introduction of accounts, Fase 4). The date at the top of this
document indicates when it was last updated.
10. Contact
Questions, requests or complaints about your data: info@astrae.world.
---
Origin of this document (not for publication)
This draft was produced by tracing the actual data handling in the current
codebase, not by assumption:
backend/server.py— confirmed stateless for the anonymous flow: every
calculation POST handler computes and returns the result directly, with
no database write anywhere. The one exception is /api/account/delete
(see backend/accounts.py), which stores nothing but instead performs
account deletion at Supabase on behalf of the logged-in user.
backend/geocoding.py— confirms only the place name (text) goes to
Nominatim, and the autocomplete search term goes to Photon; date/time of
birth are not sent along.
backend/chiron.py— confirms only a timestamp (no name/place) goes to
JPL Horizons.
frontend/app.js— the onlylocalStoragekeys areastrae-theme,
astrae-lang, and the last-calculated-chart object; no analytics or
tracking code found anywhere in the frontend.
frontend/app/account.js+supabase/migrations/20260723000000_init.sql
(2026-07-23/26) — confirms the account flow: email magic-link login,
optionally saved charts (birth_profiles), Row-Level Security limiting
storage to your own rows, and the self-service data-export and
account-deletion buttons. See docs/fase4-accounts-ontwerp.md for the
full design.
Still open:
- Confirm the Supabase data center region (Chapter 5) and potentially sign a
data processing agreement.
- Final legal review — I am not a lawyer, and this document serves as a
well-grounded starting point, not a finished product.
This English version and privacybeleid.md (Dutch) are
maintained as equally authoritative — the same facts. Update both together
when the app's data handling changes.