Privacy notice
Draft — pending review by counsel. This notice describes what the current code does; it has not yet been reviewed by a lawyer.
Draft dated October 11, 2026.
In short
- The map, forecasts and downloads work without an account.
- If you sign in, we store only what you save: trip alerts, notification devices and comfort ratings. You can export or delete it at any time.
- We do not sell or share personal information, and we run no advertising or third-party trackers. The site counts a few anonymous visit steps and page errors, without cookies or identifiers, and sends nothing when your browser asks not to be tracked. See Usage statistics.
- If you use the AI boat lookup, the boat description you type is sent to Anthropic to find its specifications.
- If you text the SkipperCast Text Advisor, use its web chat or message us on Instagram, we keep the conversation to answer you. Message text is deleted after 180 days, unposted photos after 90 days, and everything when you ask us to erase it. See Text Advisor.
Notice at collection
This section is our notice at collection under the California Consumer Privacy Act (CCPA). It lists the personal information SkipperCast collects, why, whether it is sold or shared, and how long it is kept.
| What we store (only when you are signed in) | Why | How long |
|---|---|---|
| Account identifier supplied by the sign-in provider | Links your saved records to you. Your email address is not stored. | Kept with your records; removed when you delete them. |
| Trips: area, forecast point, target species, date, hours, wind/gust/sea limits, latest assessment | Check the forecast for your trip and send alerts. | Deleted 90 days after the trip date, or when you delete the trip. |
| Alert events: the alert text, time and delivery status | Show alert history and avoid duplicate notifications. | Deleted 90 days after the alert was created, or with its trip. |
| Delivery receipts: which device an alert was sent to, when, and the push service’s response code | Avoid resending and detect expired devices. | Deleted with their alert (90 days). |
| Push subscriptions: your browser’s push endpoint and encryption keys | Deliver notifications to up to five devices. | Until you turn notifications off, the push service reports the device expired, or you delete your data. |
| Comfort feedback: area, time, 1–10 rating, trip phase, and the wind, sea, swell period, heading and forecast point you entered | Calibrate boat-comfort estimates. | Deleted 365 days after the rating, or when you delete your data. |
| Request counters: a one-way hash of your identifier plus a time window, and a count | Rate limits (30 requests a minute; 20 boat lookups a day). | Removed after they expire: about two minutes for the per-minute counter, two days for the daily lookup counter. |
Expired records are removed by a scheduled cleanup job, so deletion can lag the dates above by a short time.
Sale and sharing. We do not sell personal information and do not share it for cross-context behavioral advertising. We have not done so in the past 12 months.
Sensitive information. We do not collect sensitive personal information as defined by the CCPA.
AI boat lookup
The boat profile is saved only on your device. If you choose “look up”, the boat description you type (for example “Parker 2320 SL 2019”, up to 120 characters) is sent to Anthropic, whose Claude model searches the web for the builder’s specifications. Your account identifier is not sent. The result is cached by our hosting provider for up to 30 days, keyed by the description, so the same lookup is not repeated. Do not type personal information into the boat field.
Text Advisor (texts, web chat and Instagram)
The Text Advisor answers fishing questions by text message, in a web chat on this site, and by Instagram direct message. Skippers also use it to send catch reports and photos. It is being tested and is not yet open to the public; this section describes what the current code does.
| What we store | Why | How long |
|---|---|---|
| Your phone number, as a one-way keyed hash (to recognise you) and an encrypted copy (decrypted only to send you a reply) | Reply to you and keep one conversation per number. The number is never stored in plain text, shown to our team or written to logs. | Until you erase your data. |
For the web chat: a random identifier in a cookie (sc_adv, 90 days); we store only a hash of it |
Keep your chat together between visits. | Until you erase your data. A web chat never linked to a phone number is deleted with everything in it 90 days after its last message. |
| For Instagram: the Instagram-scoped id Meta gives us for you (not your username or profile) | Reply to your direct message or comment. | Until you erase your data. |
| The messages you send and our replies, with their times; what you tell us to remember (the name you want to be called, your home port, the fish you target, your language) | Answer you and keep the conversation in context. | Message text: 180 days, then deleted (the time and the topic we recorded stay, for counts). What you tell us to remember: until you erase your data. |
| Instagram comments on our posts, only when they start with one of our keywords (RIG, REPORT, ID, BOATS, or the Spanish words) or, if we turn on public answers, ask a question | Send one private reply with a link, or one answer under the comment. Other comments are not stored. | The comment text: 180 days, then deleted, or sooner if you erase your data. |
| Photos and videos you send | Identify fish and read count boards. Location and camera details are removed from photos when they reach SkipperCast's storage, and from videos before anyone reviews them (the relay's copies, below, keep them for up to 30 days). Photos stay private unless a skipper has agreed to posting or you agree to share yours with credit, and our team approves it. | 90 days, then deleted, unless the photo was approved for posting or posted, or is the count board of a published report; those stay until you erase your data. Photos already posted to our Instagram or Facebook stay there until removed. |
| For skippers: the boat's name, port, landing, Instagram handle and booking link, catch reports, and when photo consent was given or withdrawn | Publish the boat's reports and page, and credit the boat in posts. | Published reports stay as the boat's record; erasing your data removes your contact from them. |
| Daily counters of messages per contact, and for the web chat per internet address (kept only as a keyed hash, never the address) | Limit how many messages and AI answers one person can use a day, and how many texts we send to a number that has not texted us. | The counters reset each day; old ones are removed within 8 days. |
| Copies on our message relay: texts and iMessages reach us through an iPhone and a Mac that our team keeps, which hold the conversation and photos and videos as they arrived (before location and camera details are removed) | Receive and send texts. They are not copied to iCloud or backed up. | Up to 30 days, then deleted automatically on the devices; copies the relay software keeps of photos and videos are deleted weekly once they are more than 7 days old. When you erase your data, we also delete your conversation from the relay by hand. |
Automatic deletion. Once a week we delete message text older than 180 days; photos and videos older than 90 days unless they were approved for posting, posted, or are the count board of a published report; our team's review notes 90 days after the decision; web chats never linked to a phone number 90 days after their last message; and copies made by SEND ME MY DATA after 7 days. Erasing your data removes all of it from SkipperCast's storage at once. Our message relay (the iPhone and Mac above) keeps texts, photos and videos for up to 30 days; when you erase your data we delete your conversation there by hand too.
Who else handles it. To write answers and identify fish, the text of your message, the recent conversation and your photos are sent to Anthropic. Texts travel through Apple (iMessage) or your mobile carrier, and through Twilio if we move our number to it. Instagram messages and comments travel through Meta, which keeps its own copy under its own policy. Everything we store is held with Cloudflare. Our usage statistics count messages, topics and response times only, never message text or numbers.
We message you only in reply. We do not send promotions. Besides replies we send only service messages: an invitation when a skipper invites you to their crew (you join only if you reply YES; NO stops that boat inviting you for 30 days) or our team invites a skipper, a one-time code when you ask to link the web chat to your number, and updates to a skipper about their boat (its verification, a photo that was posted). On Instagram we can only reply within 24 hours of your last message, and send one private reply per comment.
Your controls. Send these words as a message, by text or Instagram DM:
- STOP: no more messages of any kind. START turns replies back on.
- HELP: what the service does and how to reach us.
- FORGET ME, then DELETE to confirm: erases your contact, messages, photos and anything our team reviewed about them. Posts already published and the boat reports a skipper sent stay, without your contact. A later message starts fresh.
- SEND ME MY DATA: a link to a copy of everything we store about you, as JSON. The link works for 24 hours, and the copy is deleted after 7 days.
Stored on your device
Your chosen home port, boat profile and export drafts are kept in your browser’s local storage, and recent forecasts in session storage. They never leave your device unless you export them. If you use “find a nearby port” or the boat-position tool, your location is used in the browser only and is not sent to SkipperCast.
Service providers and data sources
- Hosting. SkipperCast runs on Cloudflare and on OpenAI’s ChatGPT Sites. They process your IP address and request details to deliver and secure the service. Sign-in, where available, is provided by ChatGPT.
- Push notifications are delivered through your browser’s push service (Apple, Google, Mozilla or Microsoft).
- Map and data providers. Your browser requests map tiles, charts and some live data directly from providers such as OpenStreetMap, NOAA, the National Weather Service, CDFW and Open-Meteo. Those providers receive your IP address under their own privacy policies.
Usage statistics and cookies
The map, the home page and the Text Advisor pages send us a small set of anonymous usage statistics, so we can see which steps of a visit people reach and which releases break. They go to our own Cloudflare Workers Analytics Engine dataset, not to an analytics company.
-
Visit steps. The name of a step, counted at most once
per page load and region: showing a map (
map_viewed), choosing a port (port_selected), adding a spot to a trip (spot_saved), saving a region for offline use (offline_saved), and opening a Text Advisor port, species or boat page or following its “Text SkipperCast” link (advisor_port_view,advisor_species_view,advisor_boat_view,advisor_cta). The map sendsmap_viewed,port_selected,spot_savedandoffline_saved. The home page sends error reports only. -
With each step: the id of the region shown (a region
we do not publish is recorded as “other”), the site’s build, and
where the visit came from when the page address has an
sparameter oftxt(a link in a Text Advisor message),igorfb(Instagram and Facebook posts) orqr(our printed QR code). Any other value is not sent. - Error reports. When a page hits an uncaught error, the browser sends whether it was an error or a rejected promise; the error message, with web-address queries and coordinates removed, cut to 200 characters; the script’s file name only (no folder or address), with the line and column; the site’s build; and the last request id our server returned to that page. Before storing a report, our server also removes email addresses and runs of six or more digits, cuts the message to 96 characters, and keeps only a shortened one-way hash of the request id, so we can match the error to our server logs. A page sends at most 5 error reports and 30 records in all.
Not collected: no cookies, local storage, or user, session or device identifier; no full web addresses, positions or boat details. We do not collect form entries; error messages are scrubbed as above. Your IP address is not stored with the statistics; our server uses it only to limit how often it accepts them, as on every public request.
How long it is kept. Cloudflare keeps these records for three months, the Analytics Engine default, and we set no longer period. A daily operations report copies the last day’s step counts and the ten most reported errors (scrubbed message, script file name, line, kind and build) into the run summary of a GitHub Actions job in our public code repository, where anyone can read them and GitHub keeps them under its own retention for workflow runs.
Do Not Track and Global Privacy Control. If your browser sends either signal, the pages send no usage statistics or error reports at all.
There are no advertising or third-party tracking scripts, and SkipperCast sets no tracking cookies. If what we collect changes, this notice will be updated first.
Your choices and rights
California residents have the right to know, access, correct and delete their personal information, and not to be discriminated against for exercising these rights. Anyone can use the controls below.
-
Export: under “My trip alerts”, “Export my records” downloads
your trips, comfort feedback and alert history as JSON (served by
GET /api/privacy). -
Delete: “Delete all my records” permanently removes your
trips, alerts, delivery receipts, notification devices and comfort
feedback (
DELETE /api/privacy). - Correct: delete and re-save a trip; “Stop notifications” removes your notification devices.
Children
SkipperCast is for adults 18 and over and is not directed to children. We do not knowingly collect information from anyone under 18.
Changes and contact
We will update the date above when this notice changes. Placeholder: operator name and privacy contact address to be added. Until then, contact us through the project issue tracker (do not post personal information there).