Data, Privacy, and Saved Chart Links Explained

What is computed on your device, what is stored on it, what a shared link carries, and how to remove all of it.

The free birth chart is computed by JavaScript running in your browser. Your birth date, time and city are read out of the form, converted to a UTC instant, handed to an ephemeris already sitting in the page, and drawn — with no request to our server anywhere in that sequence. Since August 2026 they are not written into the address bar either, and a link you choose to share puts them after a # rather than a ?, which is the difference between a string browsers transmit and one they never do. This page sets out the parts people actually worry about: what the saved-chart feature keeps, what pressing Copy link to this chart hands over, what the offline cache will and will not write to disk, what the paid report does differently, and what advertising can see. It also names the things that genuinely are transmitted, because a privacy page that claims nothing leaves your device is lying about the ad requests.

The free chart is computed on the machine you typed it on

The calculator is one script. It reads the date field, the time field and the city you picked, converts your wall-clock birth time to UTC through that city's own time zone, computes ten bodies and — if you gave a time — the ascendant, and writes the result into the page. Nothing in that path is a network request: not fetching positions, not looking up the city, not logging the attempt. The ephemeris and the city list are static files the page already loaded. The full pipeline, and the two reasons for it that are not about privacy, are on how Zodiux calculates a birth chart.

The compatibility calculator is stricter still. It holds two people's birth details, computes both charts and their cross-aspects in the page, and writes no storage key and no URL parameter. One request does leave when you press the button, and it is not about the charts: a four-field counter ping recording that a compatibility check happened — the event name, the page path, the referring domain, and an empty slot. Neither person's details are in it. What survives on our side is one number per day — how many checks ran, not who ran them, and not what was in them. Close the tab and both charts are gone with it.

The page does make requests, and none of them carries your chart. It loads its scripts, the font stylesheet and the ad frames the way any page loads assets. It posts to our own server in four cases, and two of them are automatic: a pageview beacon when the page loads, and the same beacon again with a different label when you press one of four buttons — calculate a chart, check compatibility, join the Cusp+ list, start a report. Both carry the path and never the query string. The other two are things you did deliberately: submitting the Cusp+ launch form, and starting a paid report checkout.

Why your birth details are not in the address bar

Until August 2026 the calculator wrote your inputs into the URL after computing — the page you were looking at was zodiux.io/?d=1990-04-12&t=07:45&c=Lisbon, Portugal. Nothing was transmitted to us by that. But a URL is not private storage, and it leaked in four ordinary ways.

The inbound half, closed at the edge

Stopping the calculator from writing the URL fixed only the outbound half. Someone else's shared link still arrived as a URL carrying your friend's birth details, on the page that loads the ad tag. So the edge worker now prepends one script to the very top of every page's head — before the ad tag is parsed, before any other script runs. It lifts d, t and c into memory, then rewrites the address bar without them. The calculator hydrates from memory instead of from the URL. Any other parameter is left alone.

That is why a link from before the change still works, and still ends up with a clean address bar on arrival.

The four routes a URL leaks by

One consequence is worth stating plainly rather than burying: this changed what is default, not what is possible. The parameters still exist and can still be put into a link. The difference is that doing so is now an act, not a side effect.

What “Copy link to this chart” actually makes

The button sits under your rendered chart, between Download chart (free) and Order as a print. Its tooltip says what it makes: a link containing your birth date, time and city. That is the whole feature, and it is the only thing on the site that turns your birth details into a URL you can hand to somebody.

Why a fragment and not a query string

The part of a URL after # is the fragment, and browsers do not put it in the HTTP request. When your recipient opens the link, our server sees a request for / and nothing else. So do the host's logs, and so does every ad and font request that page makes. A query string would have been visible to all of them; a fragment is visible only to the page itself, which is where the calculator reads it.

There is one place the hand-off is deliberately a query string: the Get my report button builds /reports/?d=…&c=…&t=…, plus the referral tag if you arrived from one of our social links. That page renders server-side, carries no ad tag, and buying a report is a transmission you are explicitly asking for. It also prefills from your device's saved chart, so the parameters are a convenience rather than the mechanism.

Step by step, when you press it

  1. The page takes the parameters it kept in memory and encodes them in order — date, then city, then time.
  2. It joins them to the current origin and path after a #, not a ?. For a 12 April 1990 birth at 07:45 in Lisbon the result is exactly https://zodiux.io/#d=1990-04-12&c=Lisbon%2C+Portugal&t=07%3A45 — comma encoded as %2C, space as +, colon as %3A. Nothing is added, and nothing about you beyond what you typed is included.
  3. On a device with a native share sheet, it opens the share sheet with that link. Otherwise the link goes to your clipboard and the note under the buttons changes to say it contains your birth date, time and city, and to share it only with people you would tell those to. If the clipboard is blocked, the note prints the link so you can copy it by hand.
  4. Nothing is sent to us at any step. The link is built on your device; whether it ever reaches anyone is your decision.

Two consequences follow, and neither is reversible by us. A link you have sent is in someone else's message history and, once opened, in their browser history. And because an inbound link makes the recipient's page compute the chart, their browser then saves it as its own last-used chart — the same device-local save described in the next section, on their machine, holding your birth details.

Everything Zodiux can store, and how to delete it

Four keys in this browser's local storage, one cache, and four kinds of record on our side. That is the complete list. Zodiux itself sets no cookie, uses no sessionStorage and no IndexedDB — the advertising cookies are a separate matter, further down. Every device-side item lives under this site's own origin, so clearing site data for zodiux.io removes all five in one action.

Every place Zodiux data can sit, who can reach it, and how to remove it
Data itemWhere it livesWho can see itHow to remove it
Your last chart — birth date, time, city labellocalStorage, key zodiux_chartAnyone using this browser profile. Never sent to usPress Start over on the welcome-back banner, or clear site data
Your ads and measurement choicelocalStorage, key zodiux_consentThis browser onlyFooter link Privacy choices, then choose again. Or clear site data
A referral tag, if you arrived from one of our social linkslocalStorage, key zodiux_ref — the ref parameter's value, cut to 64 charactersThis browser. Attached to a waitlist signup and to the report hand-off linkClear site data
A Cusp+ waitlist signuplocalStorage key zodiux_waitlist as a local backup; on our server, your email with a timestamp, country code, browser user-agent string and referral tagYou, us, and the mail provider that sends the launch emailThe unsubscribe link in the email deletes the server record. Clear site data for the local copy
Cached pages and assetsCache Storage, under the name zodiux-v7This browserClear site data, or wait for the next version bump — see below
A paid report orderOur server, under a random order id: date, time, city label, latitude, longitude, time-zone name, and your email if you gave oneUs; Stripe (the order id, and your email if you gave one); and Resend, the mail provider, if you gave an email — the delivery message carries a link that opens the reportExpires automatically — 30 days once paid, 1 hour if you never complete checkout. Sooner on request to hello@zodiux.io
Event countersOur server: one number per event name per dayUs. Not tied to a person, a session or a deviceNothing to remove. Each counter expires 120 days after it was last written
Request logs — IP address, user agent, country, timestampsOur host, CloudflareUs and the hostShort-lived and not removable per request. The same as any website you visit
A chart link you sharedWherever you sent it, plus the recipient's history and deviceEveryone you sent it to, and anyone with their deviceNot removable by us. Delete the message you sent

The saved chart deserves one clarification, because it surprises people. It exists so a returning visitor lands back on their own chart instead of an empty form, and the banner that appears says exactly that: this is the chart you saved on this device. Pressing Start over deletes the stored entry, empties the three form fields and clears the result in the same click.

What the offline cache keeps, and the one thing it refuses

Zodiux installs a service worker so the site still opens on a bad connection. One line on the homepage registers it, and from there it controls the whole origin.

It is deliberately narrow: GET requests only, this origin only, and network-first — an online visitor always gets the live page, and the cache is only ever the fallback for a request that failed. It ignores /api/ entirely so anything dynamic stays live, and ignores /media/ because multi-megabyte range requests do not belong in a page cache. At install it stores five files: the homepage, the offline page, the stylesheet, the favicon and the web manifest.

Then the refusal. Before writing any response to Cache Storage, the worker checks whether the URL carries a d, t or c parameter — the three that would be a person's birth date, time and city — and if it does, the response is served and thrown away rather than stored. A cache entry outlives the tab, and nothing in our interface could reach in and clear it. The check is on those exact parameter names, so a versioned asset URL like /styles.css?v=7 still caches normally.

Its scope is worth stating honestly rather than overselling. Today's share links are fragments, and a fragment never reaches the service worker at all — it is not part of the request URL and not part of the cache key, so there is nothing there to refuse. The check is doing its work on the legacy query-string links still sitting in people's message histories, and on anything that puts those parameters back. It is a second lock, not the main one.

What ads and measurement can see

Two separate systems, and they are not equally invasive. Being clear about which is which is more useful than a blanket reassurance.

Our own counter

Every page carries a small first-party beacon, injected at the edge. It POSTs four fields to /api/ev: an event name, the page path, the hostname of the page you came from, and an optional label that nothing on the site currently sets. The path, never the query string — and since inbound parameters are stripped from the URL before this runs, there would be nothing of yours in it either way.

What the server keeps is smaller than what it receives. It increments one number under a key made of the event name and today's date, and discards the path and the referring host. The counter is written with an expiry of 60x60x24x120 seconds — 10,368,000, or 120 days — after which it disappears on its own. No cookie and nothing written to your device. The counter itself holds no identifier — but the beacon is an API call like any other, and every API call also bumps an abuse counter keyed on your IP address, which expires two minutes after it is written. That is a rate limit rather than analytics, and it is the honest asterisk on "nothing that could identify you". Nothing in either record is joined to a person, a session or a chart, which is why the beacon runs without asking. One more thing that belongs here rather than in a footnote: the consent panel does not switch this off. What the edge parks for EEA, UK and Swiss visitors is the advertising scripts specifically — the two ad tags by name. The first-party counter is injected into every page either way, because it sets nothing on your device and identifies nobody, so there is nothing for a storage consent to govern. If you would rather it did not run at all, a tracker blocker will stop it; we would rather tell you that than let you assume Reject covered it.

Advertising

Ads are served by Google AdSense, and Google and its partners may use cookies or device identifiers to serve and measure them. We do not control that collection and will not pretend otherwise. What we control is when it starts.

For visitors in the EEA, the UK and Switzerland — 32 country codes the edge checks against the country Cloudflare reports — the ad script tags are disarmed before the page is delivered. They arrive as inert markup rather than running code, and are only turned back into scripts once a choice is recorded. Consent Mode defaults to denied there, and the page waits for your answer.

Everywhere else the default is granted and ads load as normal — but a Reject choice binds everywhere. Choose it once and every later page load runs with ad storage denied, rather than recording your answer and ignoring it.

The control, and the three pages it is missing from

Privacy choices in the footer opens the same panel, in every region, and the choice it stores applies from then on. Of the 175 pages in our sitemap it is on every one but /reports/. Three further pages that are not in the sitemap also lack it: /reports/ready/ and the Cusp+ rules page, both deliberately unindexed, and the offline fallback page, which now carries a direct link to this policy instead. Those gaps are oversights rather than policy, and the choice is stored per browser, so making it anywhere covers everywhere.

Fonts, which are a real transmission

Every page loads its two typefaces, Fraunces and Inter, from Google's font service. That is a request carrying your IP address and user agent to Google on page load, regardless of what you chose about ads, and it belongs on this list rather than in a footnote. What it does not carry is the page's path or query string: cross-origin requests, ad requests included, are sent only the bare origin as a referrer.

Everything that leaves your device, complete

A privacy page is only worth reading if it names the exceptions. Here they are, in full.

The paid report, in detail

The report is rendered on our server, so it cannot be generated without the data. What the purchase form sends is your birth date, your birth time if you have one, the city label, its latitude, longitude and time-zone name, plus your email if you chose to give one. The form states this above a checkbox you have to tick yourself, and the button refuses to proceed until you do.

Stripe receives the order id, plus your email if you gave one so the receipt can reach you. Your birth details are never put in the payment payload. Card details never reach us at all, because checkout happens on Stripe's own hosted page. If you gave an email, one more party is involved: the "your report is ready" message goes out through our mail provider, and the link in it is the only key the report needs — anyone holding that message can open the report for as long as the order lives. Leave the email blank and the link never leaves your own browser.

Retention is enforced by an expiry on the stored record, not by a promise to remember. An unpaid order is written with 3,600 seconds — one hour, so an abandoned checkout cleans itself up. A paid one is rewritten with 60x60x24x30 seconds: 2,592,000, exactly 30 days, which is the window you have to re-download it. After that the record is gone whether anyone acts or not. Sooner on request to hello@zodiux.io.

The reports page states all of this before you pay, and the privacy policy is the binding version.

On a normal visit, this is the list

How to leave no trace

If you want to run a chart and have nothing survive it, this is the order that works.

Six steps, in order

  1. Open a private or incognito window. Everything below still applies, but the browser will discard the storage itself when you close it.
  2. Run your chart at the calculator. Nothing of it is transmitted, and the address bar stays clean.
  3. Use Download chart (free) rather than Copy link. The file is the wheel — rings, aspect lines, planet glyphs and the ascendant mark. It contains no text: no date, no time, no city, no name, and the filename is the same for everyone. Be aware of what it does still carry, though, because we would rather say it than not: the drawing IS the sky at your birth moment, so someone determined enough could read the planet positions off it and work back to roughly when and where you were born. It is safe to post in the sense that nobody scrolling past learns your birthday; it is not a redaction. Share my Big 3 is safe for the same reason: the card holds three sign names and a link to the homepage, and the only chart data the page hands it is three sign numbers.
  4. Do not press Copy link to this chart unless you want a specific person to have your birth details.
  5. Press Start over on the welcome-back banner to delete the saved chart, or clear site data for zodiux.io in your browser settings — that removes all four storage keys and the whole page cache in one action.
  6. Skip the paid report. It is the only path that sends your chart to us. If you already bought one, it expires after 30 days on its own, or email hello@zodiux.io and it goes sooner.

None of this requires an account, because there are no accounts. There is nothing to log out of and no profile holding a history of what you calculated, on our side or anyone else's.

How this page is made

Method. Every mechanism on this page was read out of the code that ships, and the numbers are the constants in that code rather than estimates. The in-browser computation, the in-memory parameters, the fragment-based Copy-link and the device-local saved chart come from the calculator script. The network-first policy, the five-file precache and the refusal to store any URL carrying a birth parameter come from the service worker. The inbound parameter strip, the region gate and its 32 country codes, the security headers, the beacon payload and the two report expiries come from the edge worker; the consent key and the footer control come from the consent script. The share-link example was produced by running the site's own URL-building code on those inputs, so the percent-encoding is what the button actually emits. The claim that four storage keys exist was checked by searching every script the site serves, and the count of pages carrying the footer control by searching every page it builds.

Limits. This is a plain-language companion to the privacy policy and the terms, not a replacement for either; where the wording differs, the policy is the binding text. It describes the site as shipped on the date at the foot of this page, and code changes — so if you find a claim here that no longer matches the site's behaviour, that is a defect and we want to hear about it at hello@zodiux.io. It cannot tell you what a third-party advertiser does with an ad request once it leaves your browser, because we do not have that visibility. It cannot help with a link you have already shared: once your birth details are in someone else's message history, they are outside anything we control. And it says nothing about what a chart means — the astrology on this site is for reflection and entertainment, and what we do not claim draws that line properly.

Sources.

Written and reviewed by the Zodiux editorial team · Last reviewed · Editorial standards and corrections · Astrology is for reflection and entertainment, not advice.

Run one and watch the network tab

The fastest way to verify this page is to open your browser's developer tools and calculate a chart. Everything described here is observable in about thirty seconds.

Common questions
Does Zodiux ever see my birth date, time or place?

Not for the free chart or the compatibility tool. Both are computed by JavaScript in your browser and the details are never sent to us. The single exception is a paid report, which is rendered on our server and therefore requires transmitting them — the purchase form states that above a box you have to tick yourself, and the order expires automatically after 30 days.

What is in a chart link I share, and can I unshare it?

It carries your birth date, your birth city label and, if you entered one, your birth time — the same values you typed, and nothing else. They sit in the fragment, after the #, which browsers never send to any server, so the link does not reach us even when someone opens it. That is also why you cannot unshare it and neither can we. Once you have sent it, it lives in the recipient's message history and, if they open it, in their browser history and their device's saved chart.

Why did my chart come back when I returned to the site?

Your browser saved it. The calculator stores your last chart's date, time and city label in this device's local storage so a returning visit lands on your chart instead of an empty form, and it tells you it did with a welcome-back banner. Nothing was uploaded. Pressing Start over on that banner deletes the stored entry and clears the form in one click.

Can the offline cache end up holding my birth details?

No, and there are two reasons rather than one. A current share link keeps the details in the fragment, which is not part of a request URL and therefore not part of a cache key at all. And for older links that used a query string, the service worker checks for a d, t or c parameter before storing anything and serves those responses without writing them. A cache entry outlives the tab, and nothing in the interface could reach in and clear it.

How do I turn off advertising cookies?

Use the Privacy choices link in the footer. It opens the same panel visitors in the EEA, the UK and Switzerland are shown automatically, and your choice is stored on your device and applied from then on. In those regions the ad scripts arrive disarmed and nothing loads until you choose; elsewhere the control is opt-out rather than opt-in, but it is the same control and a rejection binds on every later page.

Do I need an account, and is there a history of my charts?

There is no account system, so there is nothing to sign up for, nothing to log out of, and no server-side history of charts you have run. The only record of a chart anywhere is the one your own browser saved for you, which you can delete from the page.

Keep reading

All astrology guides How Zodiux works