Privacy
What is stored, and who sees it
WhatTheStar has no account, no session and no log with your name on it, and keeps nothing about you on a server beyond the two-minute pairing mailbox described below. Everything else the site remembers is in your own browser, and this page lists all of it by key.
The short version
- No accounts. Nothing to sign up for.
- No advertising, and no advertising network is contacted.
- An anonymous page-view count from Vercel Web Analytics, served from this domain: no cookie, nothing stored in your browser, and no way to follow you from one day to the next.
- Usage analytics from PostHog, on its EU servers: which pages you open, which controls you press, when you leave a page, and the named events listed below (a guide step reached, a sighting logged, how fast the page loaded, a script that failed), under a random id kept in this browser (ph_whatthestar, in the table below) so that a return visit counts as the same visitor — not what you typed, not where you are, not your IP address, which PostHog is set to discard on arrival, and not a replay of your screen. No session recorder and no surveys: the library is not allowed to load them. If your browser sends Do Not Track, nothing is sent at all.
- No cookies. Nothing written for this site touches
document.cookie, and the analytics library is told to keep its one key inlocalStorageinstead of the cookie it would otherwise set. - Your observing location, if you give one, stays in your browser — unless you turn on the cloud forecast, which sends a point rounded to about 25 km.
- The pages are static files, so whoever serves them keeps the ordinary web-server request log.
- Turning a big-screen guide’s pages from a phone: the screen and the phone find each other through a mailbox on this domain (/api/pair), under a random room id the screen makes up. What passes through it is how to connect — the WebRTC offer, answer and network candidates, which include each device's address on its local network — and, when the two cannot reach each other directly, which step to show. Nothing else, and each mailbox is forgotten two minutes after its last note. Once they are connected directly, nothing passes through it at all.
Six kinds of request leave this domain: orbital elements for the three bright satellites the map predicts (the space station, Tiangong and Hubble) from celestrak.org, on pages that predict passes, each carrying nothing but a catalogue number; the planetary Kp index from services.swpc.noaa.gov, for the aurora the map draws, the same file for everyone and fetched only when you are near enough to the auroral oval for it to matter; the cloud forecast from api.open-meteo.com, only once you have turned it on (below); the Digitized Sky Survey's photographs from alasky.cds.unistra.fr, only once you have turned Sky survey on in the Sky panel and only while you are zoomed in past 15°, each naming nothing but the patch of sky it shows; the analytics events above to eu.i.posthog.com, each naming the page, the control or the event, its properties as listed below, and the random id, and nothing else; and buymeacoffee.com, only if you follow the donation link on Support. Everything else the map loads is a static file from here.
What your browser stores
All of it is localStorage on this origin: readable only by this site, gone
when you clear site data, and never transmitted — except the analytics id in the last
row, which is what each event is filed under. PostHog also keeps the session’s id and
properties in sessionStorage, which your browser discards when the tab
closes: ph_whatthestar,
ph_whatthestar_window_id,
ph_whatthestar_primary_window_exists and
ph_whatthestar_session_registered_properties.
The site keeps two such tab-scoped keys of its own:
wts:arrival (which page you opened a guide from, so its back link returns there) and whatthestar:arrived (that the map’s controls have already arrived once in this tab, so they appear at once from then on) and wts:layers-normal (the map layers you opened this tab with, which the map counts as normal until the tab closes) and wts:map-resume (the map you left and when you left it: where it looked, the time shown, what was selected and which layers were on, so the Sky Map link brings you back to it within six hours) and wts:rail-earned (that you have opened one of the Sky Map’s tools in this tab, so its tool rail stays on a computer, reloads included).
| Key | What it holds | Written when |
|---|---|---|
| whatthestar:progress Persistence.ts | Your guide progress and the drills you passed, your observing place (latitude, longitude, label, IANA time zone), pinned reminders, the last twenty places (to a tenth of a degree) where you answered the map’s note that its sky is darker than the light-pollution atlas expects, and the day Tonight first offered you three things to start with and whether you put that away | When you finish a guide or pass a drill, set a location, pin a reminder or answer that note, and when Tonight first shows that offer or you put it away |
| whatthestar:seen ObservingLog.ts | Your observing log: each thing you marked “I’ve seen this”, when, its position on the sky, and the place you had chosen | When you mark something seen, or unmark it |
| whatthestar:clouded-out NightsOut.ts | The dates of nights the cloud forecast rated clouded out, so a cloudy week does not end your run of nights out — dates only, no place | When Tonight shows a clouded-out forecast for tonight, with the forecast turned on |
| whatthestar:birthday BirthdaySky.ts | The birthday you gave for “Your birthday sky”: day and month, and the year only if you typed one | When you ask for your birthday sky on the Guides page; removed by its “Forget my birthday” |
| whatthestar:clouds CloudForecast.ts | “1” once you have turned the cloud forecast on; absent otherwise | When you turn the forecast on or off on Tonight |
| whatthestar:bortle BortleScale.ts | Your sky-brightness setting, 1 to 9 | When you move the Bortle slider |
| whatthestar:horizon ObserverHorizon.ts | The horizon you traced — a preset’s name, or sixteen heights in degrees, one per compass point; absent while it is flat | When you change “Your horizon” under Change place |
| whatthestar:layers DisplayPanel.astro | Which map layers are on: figures, boundaries, the Milky Way, the grid, labels | When you toggle a layer |
| whatthestar:optics FramingPanel.astro | The telescope, eyepiece or camera you have described, for the field-of-view overlay | When you change the framing panel |
| whatthestar:sound sound-setting.ts | “1” while you want guides read aloud; absent otherwise | When you turn a guide’s voice on or off |
| whatthestar:guide-views GuidePreferences.ts | Per-guide view preferences, kept apart from progress so clearing one does not disturb the other | When you change how a guide is displayed |
| whatthestar:night-mode Persistence.ts | “1” or “0” — whether the red night-vision theme is on | When you switch night mode, on the map’s bar or in Settings |
| whatthestar:contrast ContrastRoot.ts | “more” or “standard” — whether you turned high contrast on or off; absent follows your system’s setting | When you switch High contrast under Tools or in Settings |
| whatthestar:motion MotionRoot.ts | “instant” or “base” — whether you turned Reduce motion on or off; absent follows your system’s setting | When you switch Reduce motion under Tools or in Settings |
| whatthestar:dimmer ScreenDimmer.ts | The screen brightness you chose for night mode, 20 to 100 (%); absent at full brightness | When you move the screen-brightness slider under Tools or in Settings |
| whatthestar:frame-cap Persistence.ts | “30” when you have turned on the battery saver, which caps the sky’s frame rate; absent otherwise | When you switch Battery saver under Tools or in Settings |
| whatthestar:describe Persistence.ts | “full” when you asked D to describe the view in full; absent for the one-sentence description | When you choose Short or Full under Spoken view, in Tools, or in Settings |
| whatthestar:sky-sounds Persistence.ts | “1” while you want the map’s sounds (the clock’s tick, a chime for what you pick); “0” once you turned them off or said no to the tour’s offer; absent until you choose | When you switch Sounds under Tools or in Settings, or answer the showcase tour’s offer |
| whatthestar:coach-marks CoachMarks.astro | Which of the map’s three first hints (drag, tap, set where you are) you have already been shown, so each is shown once | When the map shows one of those hints, or you do the thing it teaches first |
| whatthestar:map-intro-seen coach-marks.ts | “1” if you dismissed the map’s old first-run card; read so the hints that replaced it are not shown again, and no longer written | By earlier versions, when you closed the map introduction |
| whatthestar:clock ObserverTime.ts | “12h” or “24h” — the clock you chose on the time bar; absent until you choose, when your locale decides | When you tap the time bar’s clock, or choose one in Settings |
| whatthestar:rail-peeks InstrumentBar.astro | How many times the map’s tool names were shown on arrival; read by nothing now that the names are always printed, and no longer written | By earlier versions, on your first two visits to the map with a mouse |
| whatthestar:readout-collapsed zoom-control.ts | “1” or “0” — whether Zoom’s Exactly where is folded | When you fold or unfold them |
| whatthestar:iss-tle ISSPasses.ts | The space station's orbital elements and the time they were fetched — public data about a spacecraft, nothing about you | On any page that predicts station passes |
| whatthestar:iss-tle-failed-at ISSPasses.ts | When the last attempt to fetch those elements failed, so a network that cannot reach CelesTrak is not retried for half an hour | Only when that fetch fails |
| whatthestar:aim-calibration point-at-sky.ts | How far your phone’s compass and tilt were off when you last lined the map up with it, how closely, and when. Ignored and deleted after a week, and never carried in a backup | When you use Line up while aiming with your phone |
| whatthestar:clouds-cache CloudForecast.ts | The last cloud forecast and the rounded point it is for, so Tonight can show it with no signal. Deleted when you turn the forecast off | When Tonight fetches a forecast, at most once an hour |
| whatthestar:tle-48274, whatthestar:tle-20580 ISSPasses.ts | The same, for the Tiangong station and the Hubble Space Telescope — one key per catalogue number | On any page that predicts satellite passes |
| whatthestar:tle-48274-failed-at, whatthestar:tle-20580-failed-at ISSPasses.ts | When fetching that satellite’s elements last failed, kept per satellite so one missing element set never holds up another | Only when that fetch fails |
| whatthestar:whats-new-seen seen.ts | The date of the newest release note this device has been shown, for the dot on the footer’s “What’s new” link | On your first visit, and when you open What’s new |
| whatthestar:outing GoingOut.ts | The checklist for a night out: when you started it, the five things it picked and when each is at its best | When you press “Going out” on Tonight |
| whatthestar:going-out-howto GoingOut.ts | “1” once the night-out checklist has explained itself | The first time you open the checklist |
| whatthestar:guide-filters GuidePreferences.ts | The filters you last left on in the guides index; absent when none are on | When you change a filter on the Guides page |
| whatthestar:touch-cursor-known, whatthestar:touch-cursor-hint-shown TouchCursorHint.astro | Whether you have used the touch cursor, and how many times its hint has been shown (it stops after three) | When the hint appears, and when you first raise the cursor |
| whatthestar:exterior-hints-used ExteriorHints.astro | How many times the hint for the view from space has been shown (it stops after three) | When you go out to the view from space |
| ph_whatthestar analytics/track.ts | A random visitor id for PostHog analytics, the current session’s id and last-activity time, and the page and referrer you first arrived on — so a return visit counts as the same visitor, and that is all it can tell. Written even with Do Not Track on, but then nothing is ever sent | On your first page view, and refreshed on each event after |
| wts:single-keys single-keys.ts | Whether the map’s single-letter keyboard shortcuts are on | When you change “Single-letter shortcuts” |
What the analytics sends
Three kinds of event are recorded for every page: a page view when you open it, a page
leave when you go, and a press when you click or tap a control. A press records the
kind of control and where it sits in the page's structure, never its text or what you
typed into a field. Addresses are sent without the part after the ?, which
is where the map keeps the view's coordinates and time. Besides those, these are the only events the site sends. Each
carries the properties listed and nothing else: never text you typed, never a coordinate
or a place name. This table is printed from the same list the code that sends them is
checked against, so an event cannot be added without appearing here. Nothing is sent
until the page has finished loading or you first tap it.
| Event | Sent when | Carries |
|---|---|---|
| guide_start | You begin or resume a guide | slug: which guide; from_step: the step it starts from; drill: whether it is a one-step review; sky: whether it opened on your own sky tonight, or on another: the night the guide was written for, or a night or place you picked (not where you are); from: whether you opened it from the home page, from Tonight, from the card of something you tapped on the map, from the guides page, from the “Next for you” card, from a path’s page, from the end of another guide, or another way |
| guide_step | A guide step opens | slug: which guide; step: the step number |
| guide_complete | You reach the end of a guide | slug: which guide; drill: whether it was a one-step review; sky: whether it ended on your own sky tonight, or on another: the night the guide was written for, or a night or place you picked (not where you are) |
| tour_play | You play a guide outside: red light, the screen kept awake, each step read aloud | slug: which guide |
| tour_complete | You reach the end of a guide you were playing outside | slug: which guide |
| drill_passed | You find what a drill sends you to by your own hand, not with SHOW ME | slug: which guide; step: which of its steps the drill was |
| mission_shown | A finished guide sends you out to find its subject | slug: which guide; status: whether it is up tonight, this week, later, or never from where you are |
| predict_answered | A guide’s question is answered or skipped | slug: which guide; step: the step number; kind: multiple choice, a slider, or a pin on the sky; correct: right or wrong, for multiple choice; miss: how far off a slider or pin was |
| seen_logged | You mark something “I’ve seen this” | kind: star, planet, constellation…; from: which panel you marked it from |
| path_open | A path’s page opens | path: which path; from: whether you came from its card on the guides page or another way |
| star_found | Something a guide is about is found in your sky for the first time | slug: which guide; path: which path the guide is on; from: where you marked it, or a drill you passed; eureka: whether you found it before finishing the guide |
| guide_known | You mark a guide as one you already know, or undo that | slug: which guide; undone: whether it was the undo |
| location_set | You choose where you are observing from | source: a city from the list, your device’s location, or coordinates you typed |
| reminder_set | You ask to be reminded of an event | from: which control set it; slug: from a finished guide, which guide; status: from a finished guide, whether its subject is up tonight, this week or later |
| calendar_download | You add events to your calendar | events: how many |
| calendar_subscribe | You subscribe to the sky calendar | feed: the world’s calendar or your region’s (not which region); app: which calendar the link was for |
| share_card | You share or save a picture of your night | kind: which card (tonight’s sky, your birthday sky, or a guide you finished; not the date or the guide); via: the share sheet, or saved as a file |
| share_card_open | A page is opened from the link on someone’s shared picture | kind: which card it came from |
| birthday_sky | You ask for your birthday sky on the Guides page | year: whether you gave your birth year (not the year or the date) |
| aim_started | The map starts following your phone’s pointing | Nothing more |
| aim_calibrated | You line the map up with your phone by tapping something you are pointing it at | residualDeg: how far off the view still is afterwards, in degrees |
| aim_target_found | You hold the thing you are looking for inside the circle for two seconds while aiming your phone | from: whether a lesson step or your selection named it |
| a11y_mode_used | The first time in a visit that you use the map without looking at it, or with a display setting for access — once per kind | mode: which: the Sky list, the D or N key spoken, high contrast, forced colours or reduced motion (not why) |
| sky_ready | The sky first finishes loading on a page | ms: how long it took, in milliseconds |
| cold_open_first_tap | You first tap something in the sky the map opened on, when the map was the first page you opened | ms: how long after the sky loaded, in milliseconds; held: whether the map was still on tonight’s dusk, shown because you opened it in daylight; first_visit: whether it was your first time on the map in this browser |
| time_to_first_action | You first do something on the home page: open the Sky Map, Tonight or a guide from it | action: which of those it was; ms: how long after the page opened, in milliseconds; returning: whether this browser had begun a guide, logged a sighting or chosen a place before |
| webgl_context_lost | Your browser takes the graphics context away from the map | Nothing more |
| map_return | You press one of the map’s ways back, in the list of what is different above the clock or in Search | kind: which one: back to now, to the ground, to the horizon, to normal layers, the last thing undone, or Start over |
| context_menu | You close the Sky Map’s right-click menu, whether or not you pressed anything in it | on: what you opened it on: a star, a planet, a deep-sky object, a satellite, a constellation, bare sky, the ground, the compass, or the sky from above; from: whether you opened it with the mouse or with the keyboard; pressed: which part of the page the row you pressed belongs to (the card, Layers, the clock, Zoom, Tools and so on), or none |
| menu_bar | You close one of the menus along the top of the Sky Map on a computer, whether or not you pressed anything in it; moving along to the next menu counts as the same opening | menu: which menu: Place, Time, View, Layers, Object, Tools or Help; from: whether you opened it with the mouse or with the keyboard; pressed: which part of the page the row you pressed belongs to (Layers, the clock, Zoom, the card and so on), or none |
| web_vital | Once a page has measured how fast it was | metric: which measure (LCP, INP, CLS, FCP or TTFB); value: the measurement; rating: good, needs improvement, or poor; page: the path of the page it measured |
| js_error | A script on the page fails (at most five per page) | name: the error’s type; message: its message, cut to 120 characters; source: the script file, without its address’s query; line: the line number |
Every event also carries a rough description of the device, so that a slow page can be told apart from a slow phone: dpr (screen pixel density, to the nearest half), memory_gb (the device memory the browser reports (it caps at 8)), cores (processor cores, capped at 16), net (the connection type the browser reports (4g, 3g…)), save_data (whether data saver is on) and gpu (the graphics chip’s maker only (Apple, Adreno, Mali, Intel…)).
Location
A star map is wrong everywhere except where you are standing, so the site offers to ask your browser for a position. That is always a deliberate click, and your browser will ask you again before it answers. The coordinates go into whatthestar:progress, rotate the sky, set your sunset time, and go nowhere else. The label saved beside them is the nearest city from the same list the picker shows, if one is within thirty kilometres, and otherwise the literal string “My Location”; that match is made on your device against a file this site already serves, so the coordinates are not sent to any geocoding service. If you would rather not, pick a city on Tonight instead.
Until you do either, the sky is drawn from the largest city in your browser’s time zone — a guess made from a setting your browser already exposes to every page, which asks no permission, is labelled as a guess wherever a place is named, and is never stored.
The cloud forecast
Tonight can show the hourly cloud forecast across the dark hours, and the sky map can draw its clouds over the sky. It is off until you press “Check clouds?” on Tonight or “Show the forecast's clouds” in the map's Sky panel, because it is the one request that carries where you are off this device. When it is on, the page asks Open-Meteo for the cloud cover — in all, and low, mid and high — at your position rounded to a quarter of a degree — about 25 km, a region rather than an address — at most once an hour. Nothing else goes with it: no name, no identifier, no cookie. Open-Meteo sees that rounded point and your IP address, as any server you contact does. “Turn off” beside the forecast stops the requests and deletes the last forecast, whatthestar:clouds-cache, which named the rounded point.
Your observing log
“I’ve seen this” on anything you select writes it to whatthestar:seen — the name, the date, where it is on the sky and the place you had chosen — so Tonight can point out what is new to you, and your observing log can list it by night. It is in this browser only, it goes with a backup code, and the erase button below removes it. With the cloud forecast on, Tonight also notes the date of a night it forecast as clouded out, in whatthestar:clouded-out, so a cloudy week does not end your run of weeks out.
Finishing a guide, passing a drill or marking a guide as one you already know is kept in whatthestar:progress too, with the date it happened, so “Back in your sky” can offer first the skill you practised longest ago. The dates stay in this browser like the rest of that record.
Backups
Settings can copy a backup code: the keys above that are yours (not the cached satellite data or forecast), encoded as text — your progress, your settings (sky brightness, layers, optics, guide views, night mode and the horizon you traced) and the rest, such as your observing log. It is made in your browser and put on your clipboard; nothing is uploaded, and where you keep it is up to you. Restoring reads a code back into this table and nowhere else — a code carrying any other key is refused. Opening Settings also asks your browser to keep this site’s storage rather than clear it when space runs short; browsers decide that quietly and it sends nothing anywhere.
Reminders
A pinned reminder uses the browser's own notification API: it needs your permission and fires from the page while it is open. There is no push service and no subscription endpoint, so nothing is registered with Google, Apple or Mozilla. The reminder lives in whatthestar:progress with everything else.
“Add to calendar” makes an .ics file in your browser and hands it to your device, where your calendar keeps the alarm even after this page is closed. The file holds the event, its time, a link back to the map and the name of the place you chose; it is not uploaded anywhere, and what happens to it after that is your calendar’s business.
“Subscribe to the sky calendar” is a link to a file this site publishes for everyone — one for the world and one for each of a few dozen cities — and your page picks the city nearest the place you chose. Your calendar app then fetches that file by itself, the same file every other subscriber gets, so the site learns nothing about who subscribed or where they are. Whether you subscribed to the world’s calendar or a city’s is counted (below), never which city.
Erase everything
This deletes every key in the table above and the site’s two tab-scoped keys, plus anything else on this origin whose name begins whatthestar: — or wts_, the prefix older versions used before they were renamed. Your guides and saved place go with it, and there is no copy anywhere else.