Overhead Legal
Privacy Policy
The short version: Overhead is built so almost nothing about you ever leaves your phone. The little that does is anonymous and minimal. Here's the long version, in plain English, so you can verify it for yourself.
Last updated: May 3, 2026
The 30-second summary. The Overhead app stores your reports, photos, videos, and profile on your device. We don't collect your name, email, phone number, or location on any server. The only things that leave your phone are (a) the report you choose to send through your own mail account, (b) anonymous aircraft lookups — latitude and longitude to identify the aircraft overhead, then the matched tail number to resolve public registry owner/operator data when available — and (c) optional anonymous tally rows — your neighborhood, the time, and whether it was during quiet hours — that feed the public observatory's aggregated counts. You can switch (c) off, and you can wipe everything in one tap from the About screen.
Who we are
"Overhead" is an independent, neighborhood-built civic-tech project for residents of California Heights, Bixby Knolls, Los Cerritos, and the broader Long Beach area. We are not affiliated with the City of Long Beach, the Long Beach Airport (LGB), or any government agency. For privacy questions, write to privacy@overhead.app.
What this policy covers
This policy applies to:
- The Overhead mobile app for iOS and Android.
- The overhead.app marketing website.
What the app stores on your device
When you capture a report, the app saves the following in on-device storage that no one but you can read:
- The photo or video you took.
- The capture timestamp.
- Your latitude and longitude at the time of capture (if you granted location permission).
- A peak decibel reading sampled from the microphone during capture.
- Public flight metadata fetched from the third-party adsb.lol ADS-B feed and the third-party ADSBDB registry lookup (tail number, aircraft type, altitude near your location at the moment of capture, and registered owner/operator when available).
During first-launch onboarding, the app asks you for one thing: which Long Beach neighborhood you live in. That selection is stored locally and used to (a) address each report to the right council member and (b) sign each email as "A [neighborhood] resident." We do not ask for your name, email address, phone number, or any other personally identifying information at any point in the app.
Identity for the recipients of your reports comes from the From: header on the email itself — that is, the mail account you choose when your phone's Mail app opens to send. The recipients can see who you are because they're getting a real email from your real mail account; we don't need a copy.
What leaves your device, and when
1. Aircraft lookups (automatic, anonymous)
Right after a capture, the app sends a single HTTPS request to adsb.lol containing only your latitude and longitude — no name, email, device identifier, or report content. The response is used to enrich the report with the aircraft's tail number, type, and altitude. If a tail number is found, the app then sends that tail number to ADSBDB to resolve the registered owner/operator when available. We do not send our Supabase device UUID to either service and we do not log or store those lookup requests on any server we control. See adsb.lol's terms and ADSBDB for their handling.
2. Sending a report (manual, by you)
When you tap "Send to council," Overhead opens your phone's system Mail app with a pre-filled draft addressed to:
- To: the LGB Airport Noise Office at
lgbnoise@longbeach.gov - Cc: your council member's office (e.g., District 5 at
district5@longbeach.gov) - Bcc: the LGB Airport public-affairs inbox at
lgbarpt@longbeach.gov, which routes Airport Advisory Commission–relevant items into the monthly meeting packet
Photo and video attachments are added by your Mail app, not by us. Your message goes through your own mail provider (Apple Mail, Gmail, Outlook, etc.), not through any Overhead server. We never see the contents of what you send. You can review and edit the entire message before tapping Send.
3. Anonymous tally rows for the public observatory (optional, on by default)
Overhead publishes aggregate counts on this site — "X devices documented Y overflights this month; Z became formal correspondence". Those counts come from a small server-side database. To make them work, the app sends a few minimal rows over HTTPS:
- One device row when you finish onboarding, containing a random per-install identifier we generate, your phone's platform (iOS or Android), the app version, and the neighborhood you picked. No name, email, phone, location, or IP address.
- One observation row per in-zone capture (when the "Count every observation" toggle in About is on, which it is by default), containing the capture timestamp, the neighborhood, and whether it occurred during quiet hours (10 PM – 7 AM under LBMC 16.43). No latitude or longitude, no decibel reading, no media, no aircraft details.
- One sent-report row when you actually email an in-zone report, containing the timestamp, the neighborhood, the ordinance flag, and (when known) the aircraft tail number that appears in the email body. No latitude or longitude, no decibel reading, no media, no recipient list.
The per-install identifier is created automatically the first time the app opens (via Supabase's anonymous sign-in — no email, no password, no profile prompt). It persists in the operating system's secure on-device storage. It is not your phone's advertising identifier, it is not derived from any hardware ID, and it cannot be used to identify you across other apps. We use it only to deduplicate counts (so a single device documenting 200 captures shows up as one device, not 200).
These rows are stored on Supabase, a service we operate exclusively for Overhead. They are accessible to us as the operator and to nobody else. The public-facing aggregations (counts only) are exposed through three published functions — public_overflight_counts, public_neighborhood_breakdown, and public_top_tails — that return totals and never per-row data. public_top_tails additionally enforces a minimum "fame threshold" (5 sightings) server-side so a single private aircraft is never spotlighted even if a caller asks for one.
You can switch this off entirely: About → Public observatory → Count every observation. When off, no observation rows are sent. (In-zone sent-report rows still go up, because counting how many real emails reach council is the central premise of the project.) If you want every trace gone, including the device row, any sent-report rows we already have, and the empty anonymous identity row Supabase issued you on first launch, tap About → Reset device data. The app calls a small server function (delete-account) that removes everything tied to your install in one transaction: the device row (which cascades to sent-reports, observations, any push token, and any community media), and the anonymous Supabase identity itself. If your phone is offline when you tap Reset, the local data is wiped immediately and the server delete is retried on the next attempt.
4. Push notification token (only if you opt in)
We have not yet enabled push notifications, but the app is prepared to send a small set of opt-in pushes — civic-calendar reminders before Council and AAC meetings, occasional action alerts, and rare app updates. If you ever opt in, your phone's Expo push token is stored next to your device row so a future server-side function can target you. We will never ask for the permission silently and we will never enable a category by default.
5. Sharing the AAC PDF packet (manual, by you)
The "Compile this month into one PDF" feature renders a local PDF and hands it to your phone's share sheet. Where it goes from there is up to you.
What the app does not collect or send
- No accounts, no PII. No sign-in, no password, no server-side user record. We do not ask for your name, email address, phone number, mailing address, or birthday.
- No location server-side. Latitude and longitude live on your device, are used in the anonymous aircraft lookup, and travel as part of the email you send. They are not stored on any server we control.
- No decibel readings server-side. The peak dB reading lives on your device only.
- No analytics or tracking SDKs. We do not integrate Google Analytics, Firebase, Mixpanel, Amplitude, Sentry, or any third-party telemetry library inside the app.
- No advertising IDs. The app does not access your advertising identifier and does not serve ads.
- No background location. Location is only sampled when you tap the capture button.
- No cross-app tracking. The app does not request App Tracking Transparency permission because it does not track you across apps or websites.
- No cloud backup of your reports. Reports live in a local SQLite database. If you uninstall the app, every report on this device is gone.
Permissions the app requests
- Camera — to capture photos and videos of overflying aircraft.
- Microphone — to sample ambient sound during capture so each report includes a measured decibel reading. Audio is processed on-device. Video recordings include their own audio track, saved only to your phone.
- Location (when in use) — to geotag each report so the city receives location-anchored evidence in the email you send.
- Notifications — only requested when you explicitly opt in to civic-calendar pushes. Not requested at first launch.
You can revoke any of these in your phone's Settings at any time; the app will continue to work with whatever permissions you grant (capture without location, etc.).
What the website collects
The overhead.app marketing site is a static page with no analytics or tracking pixels. The only place we collect information is the email signup form ("Count me in"), which is handled by Netlify Forms. If you submit your email there, it's stored on Netlify so we can notify you when the app ships. We will only email you about Overhead — no advertising, no list rentals, no third-party newsletters. You can ask us to delete your address at any time by emailing privacy@overhead.app.
Children's privacy
Overhead is intended for adult residents who want to file noise complaints with their local government. The app is not directed at children under 13, and we do not knowingly collect information from children.
Your rights
For data on your device: delete a report from the Reports tab and it's gone from local storage. To wipe every local report, every saved photo and video, every preference, every anonymous server-side row tied to this install, and the empty anonymous Supabase identity itself, open About and tap Reset device data. If the network is unreachable when you tap Reset, the local wipe still happens immediately; the server-side delete is retried the next time you open the app while online (your sign-in token is preserved exactly so this retry is possible).
For information you've shared with us via email or the signup form, contact privacy@overhead.app and we'll handle the request promptly. If you're a California resident, you have additional rights under the California Consumer Privacy Act (CCPA) — the same email address is the way to exercise them.
Security
Your local reports live in your phone's app-private storage, protected by the operating system's standard sandboxing. The HTTPS connections to adsb.lol,ADSBDB, and Supabase use TLS. The Supabase project enforces row-level security so the only rows the app can read or modify are the ones tied to its own per-install identifier. Email goes through your own mail provider with whatever security they offer.
Changes to this policy
If we make material changes to this policy we'll update the "Last updated" date at the top, and for app users we'll surface a prominent notice in the next app version. Substantive changes that affect how data leaves your device will require your explicit re-consent.
Contact
Questions, concerns, or a request to delete data: privacy@overhead.app.