Privacy
What this app actually stores and sends
There is no account and no sign-in. This page is a direct description of the current implementation, not a template — it's updated whenever the underlying code changes.
No-account state
Universal Perspective has no login, no user database, and no server-side profile. Every preference described below lives only in your browser's local storage, on your device, unless you explicitly put it into a link and send that link somewhere.
What's kept in local storage
These are the actual browser localStorage keys the app reads and writes. None of them are transmitted anywhere by the app itself — they're read back only by the same browser, the next time you open the app:
wwa.location— your last chosen or geolocated observing location (label, latitude, longitude, time zone).wwa.onboarded— whether you've completed the short intro.up.horizonHeading— the compass heading you last faced in the horizon view.up.rotationFrame— your preferred reference frame in the Earth-rotation view.up.skyDetail.v2(and a legacyup.starPrefskey it can migrate from) — your star/constellation display preferences.up.spaceScaleMode,up.spaceSelectedObject,up.spaceLayerPreferences,up.spaceSheetMode,up.trueScaleExplained— your settings in the In Space view.up.skyPlaybackRate,up.spacePlaybackRate— your last time-travel speed in each view.up.solarPlane.v1— your ecliptic-overlay preference.- Small per-component keys used for things like collapsing a panel (e.g. whether the body overview or body rail is minimized).
- Saved watchlist triggers you create (an array of your own trigger definitions, evaluated locally).
None of this is an account, a cookie used for tracking, or an identifier shared with any other site. It's on-device configuration, in the same way a browser remembers your zoom level for a site.
When geolocation is requested
The app never requests your location automatically. Geolocation is requested only when you take an explicit action to use your current location (for example, tapping "Use my location"). At that point, the browser's own permission prompt appears; if you deny it or it's unavailable, the app falls back to your last saved or manually chosen location, or a default location, with no error hidden from you. A granted position is read once, rounded to four decimal degrees, saved into wwa.location, and not polled continuously in the background.
Approximate and precise perspective links
When you share "what you're looking at," the app builds a link that encodes your location, the time (or a "live" marker), the selected object, and the current view directly in the URL's query string — there is no server-side link database. You choose the precision before sharing:
- Approximate — coordinates are rounded to one decimal degree, roughly 11 km, before they ever go into the link.
- Precise — your exact coordinates (to four decimal places) go into the link. This is your explicit choice each time, and the app labels it as such.
Anyone who opens the link can see the coordinates in the URL itself, so the honest way to think about a shared link is: it is exactly as private as the channel you send it through (text message, email, social post, and so on).
Invitation links (Look Together)
A Look Together invitation encodes both participants' locations, each rounded to one decimal degree (about 11 km) regardless of precision setting, plus the recommended observing time or window, the target object, and any name or short message the sender typed in. This is the same "everything lives in the URL" model — nothing is stored on a server, and opening the link is what reconstructs the shared view.
Recipient location and whether it returns to the sender
An invitation link is built by the sender using locations already known to the sender (their own location and one they've entered or been given for the recipient). Opening the link does not ask the recipient to submit their location back to the sender or to any server — the recipient's browser simply renders the scene the link describes. There is no mechanism in this app that reports a recipient's location, device, or the fact that they opened the link back to the sender.
Error reporting
If the app hits an unhandled error, it can report the error message, stack trace, and the current page path to an editor-provided telemetry hook that exists only inside the development/preview environment used to build this app. In an ordinary production visit, that hook is absent and nothing is sent. No location, no shared-link contents, and no personal identifiers are included in an error report — only the technical error detail and the route it happened on.
Web Share and Clipboard
The "copy link" and "share" actions use your browser's built-in Clipboard API (navigator.clipboard.writeText) and Web Share API (navigator.share) where supported. Both are triggered only by your explicit tap and hand the link to your operating system's own share sheet or clipboard — the app itself does not see or log what you do with either.
External source links and network requests
Beyond the app's own static assets, the code makes network requests to load its own star-catalog and star-name data files (bundled with the app, served from the same origin) — it does not call a third-party astronomy API. Positions and times are computed locally with the open-source astronomy-engine library, not fetched from a remote service.
Star-catalog and body-image assets
Star positions and planet/moon textures are static files shipped with the app. Loading them is an ordinary same-origin asset request (no query parameters carrying your data), and a failure to load a catalog is shown as a plain message rather than silently affecting other data.
Analytics
There is no third-party analytics or advertising script wired into the product experience today. If that changes, this page will be updated before it ships.
Backend storage
There is currently no backend database that stores your location, your shared links, your watchlist, or any other personal data. Everything described above either lives in your browser's local storage or in the URL of a link you choose to send.
Clearing your local preferences
Because everything is stored in your browser, clearing it is a browser action: open your browser's site settings for universalperspective.org and clear its storage/site data, or clear your browsing data for this site. Doing so removes your saved location, onboarding state, and all preferences listed above, and the app returns to its defaults on your next visit.
One thing we won't say
We won't tell you that "nothing ever leaves your device." Loading the app fetches static files from our servers like any website, error details can reach editor telemetry in the preview environment described above, and any link you choose to share carries the data you put in it to wherever you send it. What we can say precisely is what's above: no account, no server-side location database, and no tracking script in the product today.