Privacy Policy
Last updated: June 2026
Solarily ("the App") is operated by Julian Soreavis. This policy explains what data we collect, how we use it, and the rights you have over your data under the GDPR.
Data We Collect
- Location — Used client-side only to display weather for your area. Coordinates are never stored on our servers.
- Browser storage — Your city list, theme, units, language, card order, radar settings, AI configuration, cached weather data, email address (if provided during invite redemption), feedback rate-limit timestamp, and first-day-of-week preference live in your browser only (localStorage and the Service Worker cache).
- Name & email — Collected only when you request invite access. Stored with your explicit consent.
- IP address (hashed) — We store only a truncated SHA-256 hash of your IP, used for rate limiting and abuse prevention. The raw IP is never persisted.
How We Use It
Your data is used solely to grant access to Solarily, protect the service from abuse, and deliver weather features. We do not share, sell, or use your data for marketing or profiling.
Data Retention
- Pending invite requests auto-delete after 7 days.
- Waiting-list entries (when the closed beta is full) are kept up to 30 days until a spot opens, then removed.
- Used invite codes auto-delete after 90 days.
- You may request erasure of your invite record at any time via the data erasure endpoint (see "Your Rights" below).
AI Features
- AI providers— Solarily supports Gemini, OpenAI, Anthropic, and Ollama. Server-side keys may be configured by the operator. You may also provide your own API key; it is stored in your browser's localStorage only and never logged on our servers.
- Weather data sent to AI — current conditions only. No personal data is included in AI prompts.
Sub-processors & Third-Party Services
- Open-Meteo — forecast, climate archive, air quality, pollen, marine, river discharge, CMIP6 projections, geocoding
- NOAA SWPC / USGS / NWS / MeteoAlarm — aurora, earthquakes, and official weather warnings (public feeds)
- Nominatim / OSM — reverse geocoding
- NASA FIRMS — active wildfire data (VIIRS)
- RainViewer / OpenWeatherMap / ArcGIS / CartoDB — radar overlays and map tiles
- freeipapi.com / ipapi.co — IP-based location fallback (proxied)
- Upstash Redis — invite codes, rate limiting, API cache
- Cloudflare Turnstile — bot protection
- Resend — invite email delivery
- Telegram Bot API — admin notifications (name, email, and raw IP transmitted)
- Vercel — hosting, Analytics, and Speed Insights (cookieless)
- Sentry (EU tenant) — error monitoring, performance traces, and feedback events (session replay disabled)
- AI providers (Gemini, OpenAI, Anthropic, Ollama) — optional AI-powered weather briefings and activity suggestions
Error Monitoring
Solarily uses Sentry (EU tenant, .de.sentry.io) to detect and diagnose errors:
- Error events — JavaScript errors and 4xx/5xx API responses send the error type, stack trace, page URL, and browser metadata to Sentry. Response bodies are never captured.
- No session replay — Sentry's session-replay feature is disabled; we do not record your on-screen session or DOM content.
- Custom breadcrumbs — city searches, city selections, and language changes are attached to error reports. Never sent independently.
- Performance traces — 30% of page loads are sampled for Web Vitals (CLS, LCP, INP, TTFB, FCP). Traces include page URLs and timing data only.
Sentry data is retained for up to 30 days per Sentry's free-tier retention policy.
Feedback
You may voluntarily submit bug reports via the "Report a bug" link in the footer. The form collects your email address (optional; pre-filled from the invite flow if available, read-only), a free-text message, and an optional image you attach or paste (PNG, JPG, WebP, or GIF, up to 5 MB). The image and message are whatever you choose to provide and may contain personal information or whatever was on your screen, so please avoid including anything sensitive. All feedback data is sent to Sentry as a feedback event, with the image included as an attachment, and is stored per Sentry's retention policy (up to 30 days).
Cookies & Storage
- invite-auth — signed authentication cookie (30 days, functional)
- request-cooldown — rate-limit cookie (1 hour, functional)
- preview-auth — operator access cookie (7 days, functional)
- solarily-lang — UI language cookie (1 year, functional, synced with localStorage and the URL)
- localStorage — cities, theme, units, language, card order, radar settings, weather cache, AI config, user email, feedback rate-limit timestamp, and first-day-of-week preference (browser only)
- Service Worker cache — app shell and weather API responses for offline use; cleared on uninstall
No advertising, tracking, or profiling cookies are used.
International data transfers
Some of our sub-processors are located outside the European Union. Sentry (error monitoring, EU tenant but with US-region processing) and Resend (transactional email, US-based) process EU-origin data outside the EU. Both providers rely on the Standard Contractual Clauses (SCCs) under GDPR Article 46 as the legal mechanism for these transfers. All other sub-processors operate within the EU or are used only for strictly public data.
Your Rights (GDPR)
- Access — Request a copy of your stored data.
- Erasure — Delete your invite record by POSTing your email and invite code to /api/erase-data. The endpoint verifies the record's email matches and removes it immediately. You can also email us to request erasure.
- Rectification — Ask us to correct any stored data.
- Withdraw consent — Contact us to revoke your consent at any time.
- Lodge a complaint — You may lodge a complaint with your local data protection authority.
Contact
For privacy inquiries: privacy@juliansoreavis.com