# Sunset Beach, NC documentation --- --- > Conditions app for one beach — Sunset Beach, North Carolina: surf and rip current risk, tides, water quality, wildlife timing, town events and rocket-launch visibility from public agency data, as an iOS app and a web page. --- --- # What is Sunset Beach, NC? Source: https://docs.neuralconfig.com/sunset-beach/ **Sunset Beach, NC** answers "should I go to the beach right now, and what for", "when should I go and what will I see", and "will I see that rocket launch from the strand" — for exactly one beach, Sunset Beach, North Carolina. It gathers what the public agencies already publish about this stretch of coast (the National Weather Service surf zone forecast, NOAA buoys and tide station, NC DEQ water quality, the town's own calendar and ordinances, iNaturalist, eBird, BirdCast, Launch Library and more — more than 20 public data sources in all) and puts it on one screen, with every number labelled with where it came from and how old it is. It comes as a native iPhone app (**Sunset Beach, NC**, iOS 17 or later) and a single web page at [sunsetbeach.neuralconfig.com](https://sunsetbeach.neuralconfig.com), both reading the same backend. :::caution Sunset Beach has **no lifeguards**, and this app is **not a safety service**. Rip current risk, surf height and swim advisories in the app come from the National Weather Service and NC DEQ and are forecasts and periodic samples — not observations of the water in front of you. Never let this app, or any app, substitute for looking at the sea, posted flags and signs, and official warnings. ::: ## Why does it only cover one beach? Because almost everything in it is specific to this one — the surf zone forecast sub-zone (*Ocean Isle Beach West*), the tide station at the Sunset Beach pier, the three water-quality sampling points, the town's parking ordinance, the pier's daily fishing report. Those don't transfer to the next beach up the coast, and the app does not pretend they do. ## What the app is made of The iPhone app has five tabs — **Today**, **Water**, **Plan**, **Nature** and **More** — plus a search sheet that reaches every section, an **Alerts** screen for tide, moon and launch reminders and opt-in pushed alerts, home-screen and Lock Screen widgets, a rocket-launch Live Activity, ten Siri shortcuts and a share button. Every source carries a *Live*, *Cached* or *Unavailable* status, and the **Sources** screen (under More) lists every upstream with its URL. The web page is a one-column summary of the same data with none of the app-only features. ## Explore the docs ### Using the app - [Get the app and find your way around](https://docs.neuralconfig.com/sunset-beach/app/getting-started/): The iPhone app versus the web page, the five tabs, the loading screens, and what ⓘ buttons and 'last known good' labels are telling you. - [The Today tab](https://docs.neuralconfig.com/sunset-beach/app/today/): The verdict and its four tiles, the best time today, the next hours, what today is good for, sunrise or sunset, the week ahead, water quality, UV and parking. - [The Water tab](https://docs.neuralconfig.com/sunset-beach/app/water/): Tide height now, surge against the prediction, the tide chart, highs and lows, the surf zone forecast for this beach's sub-zone, the offshore forecast and inland gauges. - [The Plan tab](https://docs.neuralconfig.com/sunset-beach/app/events/): Seven days of best picks with filters, Worth a trip, the next visible launch, and the town calendar, concerts and launches by day. - [The Nature tab](https://docs.neuralconfig.com/sunset-beach/app/nature/): What's happening now, right whales, fishing, recent sightings, the migration radar and birds overhead, times and seasons, sea turtles, marine life and the nature map. - [When to go](https://docs.neuralconfig.com/sunset-beach/app/when-to-go/): How the almanac builds windows for shelling, Bird Island, dolphins, ghost crabs, turtle hatches and more, seven days ahead, a one-off reminder half an hour before a window, and The year. - [Fishing](https://docs.neuralconfig.com/sunset-beach/app/fishing/): Yesterday's catch from the pier report, what's peaking and starting next month, and the size and bag limits in force before you keep one. - [Beach info](https://docs.neuralconfig.com/sunset-beach/app/beach-info/): The More tab, and Beach info under it: getting there, the rules on the beach, paid parking and rates, the tropics, beach cams and what that ship offshore probably is. - [Search](https://docs.neuralconfig.com/sunset-beach/app/search/): How to open search, what it can find, how results are ranked and what tapping one does. ### Alerts, widgets and Siri - [Alerts and notifications](https://docs.neuralconfig.com/sunset-beach/alerts/notifications/): Tide, full-moon and launch reminders and Remind me, scheduled on your phone, the opt-in pushed 'When conditions change' alerts, their defaults, and how permission works. - [Widgets and the launch Live Activity](https://docs.neuralconfig.com/sunset-beach/alerts/widgets/): The conditions, Tide and This week widgets, what each size shows, how often it refreshes, what 'No data' means, and when the rocket-launch Live Activity appears. - [Siri, Spotlight and Shortcuts](https://docs.neuralconfig.com/sunset-beach/alerts/siri-shortcuts/): The ten Siri shortcuts and their phrases, the three Shortcuts actions, the places you can pick, and every sunsetbeach:// deep link. - [Sharing conditions](https://docs.neuralconfig.com/sunset-beach/alerts/sharing/): What the share button on Today, Water and Plan puts in a message. ### Data - [Where every number comes from](https://docs.neuralconfig.com/sunset-beach/data/sources/): Every upstream source — the station or feed, what it feeds in the app, how often it refreshes, and its known limits. - [How fresh the data is](https://docs.neuralconfig.com/sunset-beach/data/freshness/): Cache lifetimes per source, the 5-minute warmer, and what 'Cached' and 'last known good' mean. - [How the app judges things](https://docs.neuralconfig.com/sunset-beach/data/scoring/): The activity scores, the layered-cloud sunset model, rip and swim verdicts, the launch visibility model and how almanac windows are scored. - [Limits and what it doesn't know](https://docs.neuralconfig.com/sunset-beach/data/limits/): One beach only, no lifeguards, no wave sensor at the beach, upstream rate limits, scraped sources, and what is deliberately not parsed. - [How it's built](https://docs.neuralconfig.com/sunset-beach/data/how-its-built/): More than 20 public data sources and one Cloudflare Worker behind the app, widgets and alerts; how the scores are made; where AI is used, and how its model was chosen and is checked. - [Privacy — what leaves your phone](https://docs.neuralconfig.com/sunset-beach/data/privacy/): No account, no analytics, no location — and exactly what the push token registration sends when you opt in. ### When something looks wrong - [Troubleshooting](https://docs.neuralconfig.com/sunset-beach/troubleshooting/): 'Can't load conditions', 'Showing saved data', Cached and Unavailable badges, alerts that never fire, and empty widgets — what each means and what to do. Need help? Reach the [support team](https://support.neuralconfig.com/sunset-beach?from=docs). --- # Get the app and find your way around Source: https://docs.neuralconfig.com/sunset-beach/app/getting-started/ **Sunset Beach, NC** comes in two forms: a native iPhone app (iOS 17 or later, iPhone only — it appears on your home screen as **Sunset Beach**) and a single web page at [https://sunsetbeach.neuralconfig.com](https://sunsetbeach.neuralconfig.com). Both read the same backend and cover the same one beach — Sunset Beach, North Carolina — but the app is the full product. It has five tabs (**Today**, **Water**, **Plan**, **Nature**, **More**), a search sheet, alerts, widgets and Siri phrases; the web page is one scrolling summary with none of those. Every time in either is shown in the beach's own time zone (US Eastern), whatever time zone your phone is in. :::caution Sunset Beach is **not a safety service**, and Sunset Beach has **no lifeguards**. Rip current risk, surf height and swim advisories in the app come from the National Weather Service and NC DEQ and are forecasts and periodic samples — not observations of the water in front of you. Never let this app, or any app, substitute for looking at the sea, posted flags and signs, and official warnings. ::: ## The app or the web page? | | iPhone app | Web page | |---|---|---| | Where | The **Sunset Beach, NC** app; needs iOS 17 or later; iPhone only (no iPad layout) | [sunsetbeach.neuralconfig.com](https://sunsetbeach.neuralconfig.com) in any browser | | Layout | Five tabs plus pushed screens, search, an Alerts sheet (bell on Today, Water and Plan; **Alerts** row on More) | One page, top to bottom | | Refresh | Pull down on any tab; a saved copy is shown while it loads | Reloads itself every 5 minutes while the tab is open | | Alerts, widgets, Siri, share sheet | Yes | No | | Water quality, parking, beach rules, tropics, shellfish, cams, offshore forecast, surge, fishing, the Seven days planner | Yes | No | | Sources list | More › **Sources** | "Where this comes from" table at the bottom | The web page shows, in order: the beach verdict and score, the tide curve, **What it's good for**, **When to go** (the next almanac window and the week's windows), **What's on**, **On the water right now**, **Sun, sky & air**, **Sea turtles**, **What else is out there**, **Right whales & the map**, **Seen near here lately**, **Birds**, **The year**, **Runoff & river water**, **After dark — rockets over the Atlantic**, and **Where this comes from**. While it loads it says *"Reading the instruments…"*; if the backend cannot be reached it says *"Couldn't load conditions: …"* with the browser's error. The rest of this page is about the app. ## The five tabs The tab bar has five entries. Each tab has a page in these docs. | Tab label | Screen title | What it holds | Docs | |---|---|---|---| | **Today** | Sunset Beach | The verdict and its four tiles, alerts, the best time today, the next hours, what today is good for, sunrise or sunset, the week ahead, water quality, UV and air, parking, what's coming up | [The Today tab](https://docs.neuralconfig.com/sunset-beach/app/today/) | | **Water** | Water | The tide now and the day's highs and lows, the coming days' tides, the surf, and *Further out*: the offshore forecast, the sound and the ICW, and shellfish closures | [The Water tab](https://docs.neuralconfig.com/sunset-beach/app/water/) | | **Plan** | Plan | Filter chips, **Seven days** (each day's best pick), *Worth a trip*, the next visible launch, and events by day | [The Plan tab](https://docs.neuralconfig.com/sunset-beach/app/events/) | | **Nature** | Nature | What's happening now, right whales, fishing, recent sightings, *Overhead* (migration radar, birds) and *Through the year* (times and seasons, sea turtles, marine life) | [The Nature tab](https://docs.neuralconfig.com/sunset-beach/app/nature/) | | **More** | More | An **Alerts** row, the **Sources** screen, **Known gaps**, **Beach info**, *How it's built*, and **This app** (user guide, support, privacy, terms, acknowledgements and the version number) | [Beach info](https://docs.neuralconfig.com/sunset-beach/app/beach-info/) | Version 1.1 renamed two tabs and moved one screen. **Events** became **Plan**, which also took over the week planner that used to be under Nature. **Info** became **More**, and the old Info screen is now **Beach info**, one tap down from More beside Sources. Old links, Siri shortcuts and Shortcuts that named the old tabs still open the right screen. The toolbar corners are consistent across tabs: - **Magnifier (top left, every tab)** opens [search](https://docs.neuralconfig.com/sunset-beach/app/search/). - **Share (top right, Today, Water and Plan only)** opens the iOS share sheet with a text summary of that screen — see [Sharing](https://docs.neuralconfig.com/sunset-beach/alerts/sharing/). Nature and More have nothing time-sensitive to send, so they have no share button. - **Bell (top right, Today, Water and Plan)** opens the Alerts sheet — see [Alerts and notifications](https://docs.neuralconfig.com/sunset-beach/alerts/notifications/). Nature and More have no bell; instead the More tab carries a labelled **Alerts** row (with a one-line summary such as *Tides · Push*, *All off*, *Not set up* or *Off in iOS Settings*) that opens the same sheet. The Nature tab is divided by two band headings, **Overhead** and **Through the year**. They are signposts, not sections. ## What the loading and error screens mean On launch the app draws the last payload it saved to disk *before* it asks the network, so a cold launch usually shows the beach immediately with a banner that reads **"Saved 5m ago. Refreshing…"** (the age is the payload's own timestamp — the same clock Today prints as *Updated …*). The banner disappears when the refresh lands. If nothing is saved yet, you see a spinner on the launch colour while the first request runs. If a request fails you see one of two things: | You see | Meaning | |---|---| | A banner: **"Showing saved data. *reason*"** | A refresh failed but the app still has data on screen. Nothing was blanked; the numbers are as old as the *Updated* line on Today says. | | A full screen: **"Can't load conditions"** with the reason and a **Try again** button | The request failed and there was no readable saved copy to show — for example, first launch with no signal. Tap **Try again**, or pull down once you have a connection. | The *reason* is the transport error, or **"The server sent an error (HTTP *code*)."** if the backend answered with an error, or **"Couldn't read the server's reply: …"** naming the field if the payload could not be decoded. A request gives up after 30 seconds without a response and after 60 seconds overall, so a phone with no signal reaches "Can't load conditions" in about a minute rather than spinning forever. Every tab supports **pull to refresh**. There is no refresh button. Coming back to the app when its last successful load is more than five minutes old refreshes it automatically. ## What "last known good" means The backend refreshes every upstream source on a 5-minute schedule and keeps the last good copy of each. When one source is down, the backend serves that copy rather than nothing, flags it as stale, and the app labels it instead of passing it off as live. On the **Sources** screen (More › Sources) the row shows a **Cached** badge and, in the source's detail, **Showing last good reading** with the reason under *Showing cached data because*; the Plan tab's next visible launch card carries the same badge. A source with no good copy at all shows **Unavailable**. Which sources this happens to, how old a copy can get, and what the Sources screen shows are on [How fresh the data is](https://docs.neuralconfig.com/sunset-beach/data/freshness/). ## What the ⓘ buttons are Most section headers carry a small **ⓘ** beside the title. Tapping it opens a half-height sheet with that section's **explainer**: what the data is, where it comes from, and its limits — how old a water sample is, why there is no wave sensor at this beach, what a migration count can and cannot tell you. There are 26 of them, and they are worth reading; the caveats are part of the data. Twenty-four sit behind a ⓘ button; two — *Right now* and the events explainer — have none and are reached only through search. Every explainer is also a search result of its own (captioned *Explainer*), so you can find *Water above the tide table* or *How scoring works* without knowing which section it hangs off. VoiceOver reads each button as *About …* followed by the section title. ## Next steps - [The Today tab](https://docs.neuralconfig.com/sunset-beach/app/today/): The verdict, the best time today, and what each section of the home screen shows. - [Search](https://docs.neuralconfig.com/sunset-beach/app/search/): How to open search, what it can find, and how results are ranked. - [How fresh the data is](https://docs.neuralconfig.com/sunset-beach/data/freshness/): Cache lifetimes, the 5-minute warmer, and how a stale source is labelled. - [Where every number comes from](https://docs.neuralconfig.com/sunset-beach/data/sources/): One row per upstream source, what it feeds, and its known limits. --- # The Today tab Source: https://docs.neuralconfig.com/sunset-beach/app/today/ The **Today** tab is the app's home screen and answers "should I go to the beach, and when". It opens with a **verdict** — a short headline and a sentence — over four numbers it rests on, then says **when today is at its best**, what the **next few hours** do, and what today is good for. The sunrise or sunset, the next four days, and the quieter things — water quality, UV, parking, what's on — follow. Section headers with a **ⓘ** open an explainer for that section. Pull down to refresh; the *Updated …* time at the top is when the backend assembled the screen — a source marked **Cached** can be older than that. :::caution Rip current risk and surf height on this screen are a National Weather Service forecast for this stretch of coast, and swim advisories are periodic state samples — not observations of the water in front of you. Sunset Beach has no lifeguards and this app is not a safety service. Look at the sea, posted flags and signs, and official warnings before you go in. ::: ## The verdict The top of the screen is one block on a sky-coloured card. Its first line is the day, the time and *Updated 3m ago*. Under it: - a **headline** of a few words, such as *"Good beach afternoon."* If the National Weather Service has any alert out for this point, the headline names the first one instead (for example *"High Surf Advisory in effect."*). - a **sentence** with the most useful things to know right now — the rip risk and the water, any rain or thunder, and the best time if there is one. Both are written by the backend from the same facts the scores use. An AI language model words them, and a draft is shown only if it passes a check against those facts: every time and number must be one the facts carry, nothing may contradict them (no "no rain" when rain is forecast, no rip level other than the forecast's), an active alert must be named and no other alert may be, and swimming may not be recommended when the rip risk is moderate, high or unknown, or after dark. A draft that fails, or a model that does not answer, is replaced by a plain template sentence built from the same facts. NWS drills and test messages are filtered out before they reach the app. The verdict block has no overall score of its own; each activity's score is under [What it's good for](#what-its-good-for). ### The four tiles Under the sentence are four tiles. By day they are about the beach; **after sunset and before sunrise** (beach time) the card turns dark and they turn to the sky. | By day | Shows | After dark | Shows | |---|---|---|---| | **Rip risk** | The forecaster's word — *Low*, *Moderate* or *High*, colour-coded — with the surf height under it (*surf 2–4 ft*) | **Tide** | Height now with ↑ or ↓, and the next high or low | | **Water** | Sea-surface temperature, with the air temperature under it | **Moon** | Illumination as a percentage, and the phase | | **Tide** | Height now with ↑ or ↓, and the next high or low (*low 2:40 PM*) | **Sunrise** | The next sunrise. After midnight it is this morning's, with its rating; in the evening it is tomorrow's, with no rating, because the sky forecast rates only this morning's | | **Sunset** | Today's sunset time and its rating | **Water** | Sea-surface temperature, with the air temperature | Rip risk and surf height come from the NWS Wilmington surf zone forecast for this beach. Water is NDBC buoy 41024, just off Sunset Beach — a buoy with **no wave sensor**, which is why surf height is a forecaster's number rather than an instrument's. Air is the Open-Meteo forecast, or the buoy's air temperature if the model is missing. The tide is the NOAA prediction for the Sunset Beach pier. Directly under the card is one line that is always there: *"No lifeguards here. This is a forecast; the water and the flags in front of you come first."* ## Alerts and warnings When there is anything to show, a block of warnings sits under the verdict: - **NWS alerts** for this area, each as *event, window* — for example *Heat Advisory, Sat 1:47 PM – Sun 8:00 PM* — with the issuing office on the line below. Alerts already in force sort above ones that have not begun, which are marked *— not in effect yet*. **Tap an alert** to open it in full: **Covers**, **Issued by**, **Severity**, **Urgency**, **Begins** and **Ends**, a **What to do** section, the complete NWS text, and the headline **As filed**. The text is carried in the app; there is no link out to an NWS web page. - **Verdict warnings** — safety notes the scoring attaches, such as a moderate rip current risk riding along with a good walking day, or *"No rip current forecast right now, and no lifeguards. Stay where you can stand, and know how to escape a rip."* out of season. This block does not appear on a quiet day. ## Best time today The best stretch of the day, scored hour by hour with the same model as the activity scores below it, so the two can't disagree. The first row is the window — *1:00 PM – 5:00 PM* — and what it is best for, with scores: *Shelling 85 · Surf 55*. Under it is a **day bar** from sunrise to sunset: the best window in green, a tick for each high and low tide and for rain starting, and a line for now. The tide and rain times are spelled out under the bar. After today's daylight is spent the section is titled **Best time tomorrow** and shows tomorrow. When no hour scores well it says so: *"No hour left today scores good for a swim, a walk or surfing."* **All windows** opens the full almanac — see [When to go](https://docs.neuralconfig.com/sunset-beach/app/when-to-go/). ## Next hours A strip you can scroll sideways, one column per hour starting with *Now*: a weather glyph, the temperature and the chance of rain. Above or below it, when they apply: - **Thunder** — the peak chance in the next 24 hours and its hours, for example *"56% chance of thunder, 2:00 PM to 6:00 PM."* This is the NWS forecast chance for this grid square, not lightning detection. - **Fog** — at 7 or more out of 10, a warning with the hour it peaks. The hourly forecast is Open-Meteo; thunder and fog come from the NWS gridpoint forecast. The ⓘ explainer, *Thunder, fog and the next rain*, says why rain is given to the hour and fog as an index rather than a distance. ## What it's good for Four tiles, one per activity — **Swimming**, **Surfing**, **Beach walk & shelling** and **Sunset watching** — each with its score out of 100 and the reason that moved it most, such as *"Rip current risk: Low"*. Tap one for its detail screen: - the score and its rating, or **Capped at N** when a hard limit decided it whatever else is good — swimming and surfing are capped at 10 after dark, swimming at 54 when there is no rip current forecast, and sunset watching at 10 once the sun has set. A **What decides it** card then names the cap and how long it applies, and a line says what the conditions would have scored without it; - any warning for that activity; - **What went into it** — every condition that added or subtracted points, drawn as bars, ending in a *Start N, total M* line so you can check the arithmetic. The ⓘ explainer, *How scoring works*, says plainly that the weights are opinionated guesses that have not been tuned against real outcomes, so trust the order more than the exact numbers. The model is on [How the app judges things](https://docs.neuralconfig.com/sunset-beach/data/scoring/). ## Sunrise & sunset One card that shows the **morning before 10 AM** (beach time) and the **evening after**. It prints a rating — **Spectacular**, **Promising**, **Average** or **Flat** — beside the sunrise or sunset time, with a one-line reason. Under that, in the morning: **Civil dawn** and **Golden hour ends**; in the evening: **Golden hour** and **Civil dusk**. The rating is judged on the layered cloud profile at the sunset (or sunrise) hour rather than a single sky-cover percentage — a "99% cloud" sky that is all high cloud is close to ideal, while low cloud blocks the light. If the model has no data the card shows the source's error, or, when there is no error text, *"No sunset forecast available."* (*"No sunrise forecast available."* in the morning). ## The week ahead The next four days, one row each: the day, a weather glyph, the high and low, the chance of rain, and that day's best pick with its start time — for example *Shelling, 1:43 PM*. A **★** marks the best day this week for that kind of thing. A rainy or stormy day whose best pick scores under 55 reads **Stay in**. **The week, day by day** opens **Seven days** on the Plan tab — see [The Plan tab](https://docs.neuralconfig.com/sunset-beach/app/events/). The ⓘ explainer, *How far the week actually reaches*, explains which columns are exact (tide times, sunrise) and which are forecast. ## Water quality Whether NC DEQ has a **swimming advisory** posted at any of the three ocean sampling stations on this beach. The header's right-hand side shows the age of the last sample (*today*, *3d ago*). - On a normal day the section is one line — for example *"No swimming advisory. The water was last tested 4 days ago: 9 MPN/100 mL (standard: 104)."* - If any station is under advisory, or the three disagree, each station is listed by name with its status and latest reading. - If an inch or more of rain had fallen when the sample was taken, a line says so: bacteria run high for a day or two after heavy rain. - If a **sewage spill** has been reported nearby, a line describes it (tinted red only if it reached surface water). - When rain or a spill applies and the stations aren't listed one by one, a **Last tested** row gives the date and reading (*9 MPN/100ml · limit 104*), and a last line says how many advisories the state has on record for these three stations and when the most recent was. The measurement is enterococcus; the state posts an advisory above **104 MPN/100ml**, covering roughly 200 feet either side of the sign. Sampling runs about five times a month April to November and monthly outside it, so a clear result is often days old — the ⓘ explainer, *Water quality*, is worth reading. The pier and inland gauge readings on the Water tab are a different thing and are not a bacterial test. ## Air & sun | Row | What it shows | Source | |---|---|---| | **UV index** | UV now. The caption is the burn time — *burn in ~25 min, fair skin* — when the sun is strong enough to burn, or otherwise *peaks N* for the next 24 hours | Open-Meteo forecast | | **Air quality** | US AQI with its category — only when the AQI is above 50; a warning line appears when the category carries advice | Open-Meteo Air Quality (CAMS) | ## Practical One row: **Parking** reads *Paid* or *Free* with the reason — *"Paid parking is in effect until 5:00 PM."*, *"Parking is free until 9 AM tomorrow."* and so on — followed by a **Beach info** button that opens More › Beach info, where the rate card, lots and how to pay live. See [Beach info](https://docs.neuralconfig.com/sunset-beach/app/beach-info/). ## Coming up The next three items on the events timeline — title, time (or *All day*) and day — with a **See all** button that switches to the Plan tab. See [The Plan tab](https://docs.neuralconfig.com/sunset-beach/app/events/). ## Where each number comes from | Section | Upstream | |---|---| | Verdict headline and sentence | Written by the backend from the scored facts below; worded by an AI model and checked against those facts, or a template | | Verdict tiles | NWS surf zone forecast (rip risk, surf), NDBC 41024 (water), Open-Meteo (air), NOAA tide predictions, Open-Meteo layered cloud (sunset and sunrise ratings), moon and sun geometry | | Alerts and warnings | NWS alerts; warnings from the backend's scoring | | Best time today, What it's good for | Computed by the backend, hour by hour, from the readings and forecasts | | Next hours | Open-Meteo hourly forecast; NWS gridpoint forecast (thunder, fog) | | Sunrise & sunset | Open-Meteo layered cloud, solar geometry | | The week ahead | The backend's planner | | Water quality | NC DEQ recreational water quality (three ocean stations), NC DEQ sanitary sewer overflows | | Air & sun | Open-Meteo forecast, Open-Meteo Air Quality | | Practical | The town's parking ordinance, computed from the clock | | Coming up | Town calendar, pier concerts, launches | The full list, with cadence and known limits, is on [Where every number comes from](https://docs.neuralconfig.com/sunset-beach/data/sources/). ## Next steps - [The Water tab](https://docs.neuralconfig.com/sunset-beach/app/water/): The tide card, the coming days' tides, the surf, and the offshore and inland forecasts. - [How the app judges things](https://docs.neuralconfig.com/sunset-beach/data/scoring/): Activity scores and caps, the layered-cloud sunset model, rip and surf verdicts. - [Where every number comes from](https://docs.neuralconfig.com/sunset-beach/data/sources/): Every upstream source, what it feeds, and its cadence and limits. - [Alerts and notifications](https://docs.neuralconfig.com/sunset-beach/alerts/notifications/): Tide reminders, special-trip alerts and pushed condition changes. --- # The Water tab Source: https://docs.neuralconfig.com/sunset-beach/app/water/ The **Water** tab answers what the water is doing at the beach, in three parts. A **tide card** holds the height right now, the **Tide chart**, today's highs and lows as chips, and **Against the prediction** (how far the measured water is running above or below the tide table). **In the surf** is the NWS surf zone forecast for this beach, with the swell and the water temperature. **Further out** is three rows that each open their own screen: **Offshore**, **The sound and the ICW**, and **Shellfish harvesting**. All tide times and heights are harmonic predictions for **Sunset Beach Pier, NOAA CO-OPS station 8659897** — astronomical maths, not a live gauge. Pull down to refresh. The toolbar has search on the left, and share and the bell (which opens [tide alerts](https://docs.neuralconfig.com/sunset-beach/alerts/notifications/)) on the right. :::caution Rip current risk and surf height here are a National Weather Service forecast for a stretch of coast, not an observation of the water in front of you. There is no wave sensor and no water level sensor at Sunset Beach, and there are no lifeguards. This app is not a safety service — look at the sea, posted flags and signs, and official warnings before you go in. ::: :::note[Coming from 1.0?] Version 1.1 cut this screen from seven sections to three. The tide height, the surge reading, the chart and the highs and lows are now one card. The offshore forecast and the inland gauges moved one tap down under **Further out**, and **Shellfish** moved here from Beach info (the Info tab in 1.0). Old links and Shortcuts to those sections still open the right place. ::: ## The tide card: how high is the water right now? The card's header reads **Tide chart**. At the top is the current predicted height in feet, large, with **Rising** or **Falling** beside it and a line such as *"high 4.8 ft at 6:42 PM, in 2h"*. Heights are above mean lower low water (MLLW), the datum NOAA publishes for this station. If the tide source is down the card is replaced by the source's error (for example *"The source didn't respond."*), or by *"No tide predictions available."* when there is no error text. ### Tide chart The predicted curve from **six hours ago to eighteen hours ahead**, with each high and low marked and labelled with its time and a dashed line at *now*. The chart's vertical range is fitted to the curve, so a two-foot swing looks like a two-foot swing. VoiceOver reads it as an audio graph with a summary (*"Tide height from six hours ago to eighteen hours ahead, between 0.3 and 4.9 feet, with 3 highs and lows."*). If the curve has no points in range the row reads *"No tide data for this window."* ### Today's highs and lows Under the chart, one chip per high or low on today's calendar day at the beach, each with **High** or **Low**, the time and the height. The next one is filled and labelled **· next**. Once today's last high or low has passed, the chips move to the day the next one falls on and are labelled **Tomorrow** (or the weekday), rather than showing four chips that are all behind you. ## Against the prediction: is the water running higher than the table? The last row of the tide card is the one measured number on the screen. Everything else on the card is a prediction, and this row says how far the real water is running from it. - On a quiet day (under a quarter of a foot either way): *"The water is running about where the tide table says it should, with no meaningful wind push on this stretch of coast."* - When it is noteworthy (a quarter of a foot or more) the app does the arithmetic on the next high for you: *"Running 0.4 ft above the table: the 6:42 PM high is more like 5.2 ft."* The amount is tinted amber, or red at a foot or more. - Under it, **Measured at** names the station, how far away it is and how old the reading is: **Springmaid Pier**, about 24 nautical miles down the coast. Tap the row for the explainer, *Water above the tide table*. Sunset Beach Pier lost its instrument in 2008 and has served predictions only ever since, so the anomaly is borrowed from Springmaid Pier (CO-OPS 8661070), the nearest station that measures, on the same straight run of coast. What is borrowed is only the *difference* between what that station observed and what it was predicted to do — mostly wind pushing water against the coast. The actual water level there, and that pier's flood thresholds, do not transfer and are never shown. ## Coming days: when are the highs and lows after today? A folded **Coming days** row below the card. Open it for up to the next **eight** highs and lows after the ones the chips show — each row is **High** or **Low**, the day, the time and the height. The predictions behind them run about two weeks ahead, which is also how far ahead [tide alerts](https://docs.neuralconfig.com/sunset-beach/alerts/notifications/) can be queued. ## In the surf: rip current risk, surf height and swell The NWS Wilmington **Surf Zone Forecast** for zone **NCZ110, Coastal Brunswick**, which names Sunset Beach and splits rip current risk and surf height into two sub-zones: *East of Ocean Isle Beach* and *Ocean Isle Beach West*. Sunset Beach lies west of Ocean Isle, so **the west row is this beach specifically**, and that is what the app shows. The two frequently disagree — on the day the app was built, east read Low and 1–3 feet while west read Moderate and 2–4 feet. The section header shows when NWS issued the forecast (*NWS, 10:59 AM*). | Row | What it shows | |---|---| | Warning rows | Any headline the forecaster issued, in sentence case (the product itself is all capitals) — for example *"Moderate risk of rip currents in effect from 6 AM EDT Saturday through Saturday evening"* | | **Rip current risk** | Today's risk — *Low*, *Moderate* or *High*, colour-coded | | **Surf** | Today's surf height, such as *2–4 ft* | | Prose | The forecaster's remarks for today, when there are any | | **Swell** | The swell height measured at the **Frying Pan Shoals** buoy (NDBC 41013), with its period and direction (*every 9 s from the southeast*) | | **Water** | The sea temperature from the **Sunset Nearshore** buoy (NDBC 41024) at the beach | | Tomorrow | The next labelled day's rip risk and surf (*Moderate risk · 2–4 ft*) | The tab says why under **Further out**, whose footer reads *"No wave sensor exists at Sunset Beach. Surf comes from the NWS forecast; swell from the Frying Pan Shoals buoy, about 50 miles offshore."* If the forecast cannot be read this section shows the source's error, or *"Couldn't read the surf forecast."* when there is no error text. Wilmington issues the surf zone forecast daily in season. A forecast more than about 30 hours old is flagged stale, and one more than three days old is not shown at all, because its day names no longer mean this week — so out of season this section can show the error line with only the swell and water rows under it. Days beyond the labelled table are written as one paragraph for the whole zone, and the app deliberately does **not** show them here; they appear on a day's page in [Plan](https://docs.neuralconfig.com/sunset-beach/app/events/) marked *all of Coastal Brunswick*. The same forecast feeds the **Rip risk** tile and the swimming score on [Today](https://docs.neuralconfig.com/sunset-beach/app/today/). ## Further out: Offshore The **Offshore** row shows the current period's wind and seas in one line; tap it for the screen. Its header is titled with the current forecast period — *Offshore — Tonight*, *Offshore — Saturday* — with the zone id **AMZ252** at the right. It is the NWS Coastal Waters Forecast for the water **from Cape Fear NC to Little River Inlet SC, out 20 nautical miles**, written by a forecaster at the Wilmington office. Only the current period is shown; the product itself runs to about a week. | Row | What it shows | |---|---| | **Wind** | The period's wind, in the forecaster's words | | **Seas** | Sea height, with the swell breakdown as the caption when the forecaster gave one | | **Wave model** | Open-Meteo's modelled total wave height in feet, with period and direction — the second opinion | | Weather | The period's weather, in prose | | **Next few days** | The forecast synopsis | Two sources sit side by side on purpose. The forecaster is describing twenty nautical miles of open water; the wave model is a ~25 km grid whose nearest point is several miles offshore, and the footer says so: *"The wave model's nearest grid point is about 6 miles offshore. That's most of why it can differ from the forecast."* Where they disagree, both are shown rather than one being quietly preferred. Seas offshore run larger than the surf at the shoreline, so none of this is a forecast for the swash — and nothing here measures waves at this beach, which remains a genuine gap. With no forecast loaded the screen says *"No offshore forecast right now."* ## Further out: The sound and the ICW Three USGS gauges, none of them in the sea. The row's one-line summary is the waterway temperature, the river clarity and the oxygen level; tap it for the screen. They are here because what the rivers carry reaches this coast a few days later, and runoff is most of why the nearshore water goes from clear to murky. With no readings the screen says *"No gauge readings right now."* | Row | Gauge | What it tells you | |---|---|---| | **Waterway temp** | Intracoastal Waterway at Nixons Crossroads, about 12 miles away | The waterway's temperature — *not* the sea. **Water** under In the surf is the buoy in the sea at the beach; in spring the two differ by several degrees | | **Oxygen** | Same gauge | Dissolved oxygen, mg/L | | **Conductance** | Same gauge | Specific conductance in µS/cm — tracks saltiness, so a drop after heavy rain is freshwater runoff diluting the waterway | | **Turbidity** | Waccamaw River above Conway, about 30 miles away | Sediment, in FNU — the number behind the runoff sentence | | Warning row | Nixons Crossroads | *"The tide is pushing the waterway backwards right now."* when discharge is negative — the tide pushing the waterway upstream, not a fault | | Prose | Waccamaw | *"Regional rivers are running clear, with little recent runoff."*, *"Some sediment in the regional rivers after recent rain."*, or *"Rivers are running muddy (N FNU). Expect murkier water near shore and poorer visibility."* | | Prose | Cape Fear River at Lock 1, about 90 river miles inland | *"Cape Fear flow is low (… cfs), so little river water is pushing toward the coast."*, *"Cape Fear flow is moderate (… cfs)."*, or *"Cape Fear is running high (… cfs). More fresh water and sediment is heading for the coast over the next few days."* | The footer names which gauge each reading came from and ends *"None of these is measured in the surf."* A **Swim advisories & bacteria** button switches to Today's water quality card, because the state's bacterial testing is a different programme on a different screen — see [the Today tab](https://docs.neuralconfig.com/sunset-beach/app/today/). ## Further out: Shellfish Whether NC DEQ has the water beside this beach shut to shellfish harvest. The row's summary reads *"None closed within 6 nm"*, *"1 area closed within 6 nm"* or *"N areas closed within 6 nm"*; tap it for the screen. The headline is one of *"NCDEQ lists no temporary closure for the N shellfish management units within 6 nautical miles; the nearest is X nautical miles out."* (with one unit: *"…for the one shellfish management unit within 6 nautical miles; it is X nautical miles out."*), *"NCDEQ has closed shellfish harvest at \, X nautical miles from the pier."* (with how many more are closed), or *"NCDEQ lists no shellfish management unit within 6 nautical miles of the beach."* Below it: one row per management unit within 6 nautical miles with its status and distance from the pier, a **Standing classification** list for the conditionally approved growing areas, and a line naming the **permanently prohibited** waters. The header shows when the state last touched the data — the only freshness signal the layer has. Two different things are on this screen and are kept apart because together they read as a contradiction. A **closure** is temporary — conditionally approved waters shut after heavy rain and reopen when the water clears. A **classification** is the standing category of a body of water. Tubbs Inlet can be classified conditionally approved and open while the unit covering the same water is shut today; where the two disagree, the closure is the more recent word. Prohibited waters — the canals behind the island — are prohibited permanently. The state publishes no start or end date for a closure, so the app cannot say when one began or how long it will last. :::caution None of this is permission to harvest. Check the state's own map before taking anything. The shellfish status is a regulatory harvest status and says nothing about whether it is safe to swim — that is **Water quality** on the Today tab. ::: ## Where each number comes from | Section | Upstream | |---|---| | Tide now, Tide chart, highs and lows, Coming days | NOAA CO-OPS predictions, station 8659897 Sunset Beach Pier | | Against the prediction | NOAA CO-OPS station 8661070 Springmaid Pier — observed minus predicted | | In the surf | NWS Wilmington Surf Zone Forecast, zone NCZ110, sub-zone Ocean Isle Beach West; NDBC buoys 41013 (swell) and 41024 (water temperature) | | Offshore | NWS Wilmington Coastal Waters Forecast, zone AMZ252; Open-Meteo Marine wave model | | The sound and the ICW | USGS gauges 02110777, 02110550 and 02105769 | | Shellfish | NC DEQ Conditional Management Units (temporary closures) and Shellfish Growing Area Classification | Cadence and limits for each are on [Where every number comes from](https://docs.neuralconfig.com/sunset-beach/data/sources/). ## Next steps - [Alerts and notifications](https://docs.neuralconfig.com/sunset-beach/alerts/notifications/): Tide reminders are scheduled on the phone from these predictions; here is how they work. - [The Today tab](https://docs.neuralconfig.com/sunset-beach/app/today/): The verdict, the swim score that uses this rip forecast, and the water quality card. - [Where every number comes from](https://docs.neuralconfig.com/sunset-beach/data/sources/): Every upstream source with cadence and known limits, including why there is no wave sensor here. - [Limits and what it doesn't know](https://docs.neuralconfig.com/sunset-beach/data/limits/): One beach, no lifeguards, no wave or water-level sensor, and the other stated gaps. --- # The Plan tab — the week, what's worth a trip, launches and events Source: https://docs.neuralconfig.com/sunset-beach/app/events/ The **Plan** tab answers the three questions someone renting a house for a week asks, in order. **Which day for the thing I came for?** — **Seven days**, one row per day naming its best pick, with chips to narrow it to swimming, shelling, sunset, sunrise or wildlife. **Is anything worth driving for?** — **Worth a trip**: the best Bird Island crossing this week and the next moonrise, if it is a full moon rising over the ocean. **What's on?** — the **Next visible launch** when there is one, then **Events**, every dated thing at the beach over the next **45 days**. Pull down to refresh. The toolbar has search on the left, and share and the bell (Alerts) on the right. :::note[Coming from 1.0?] Plan replaces the **Events** tab, and its Seven days replace the **This week** planner that used to sit on the Nature tab. The event-kind filter chips (Music, Market and so on) are gone; Plan's chips filter the week instead. Old links, Shortcuts and searches for Events or This week still open Plan. ::: ## Which day is best for what I want to do? The chips sit under the heading *The best time for each thing, this week*: **Anything**, **Swim**, **Shelling**, **Sunset**, **Sunrise** and **Wildlife** (dolphins, shorebirds, ghost crabs and turtles together). A chip is only offered when at least one day this week has a pick of that kind, so a missing chip means there is nothing of that kind to choose between, not that something is broken. The chip row is hidden when only **Anything** would be left. If a refresh takes the chosen kind off the week, the rows go back to **Anything**. **Seven days** is one row per day, today first: | Part of the row | What it shows | |---|---| | Day | **Today**, then the weekday | | Sky | One symbol: clear, partly cloudy, cloudy, rain or storm, from daytime cloud, rain chance and thunder | | Range | High and low temperature and the daytime rain chance (*84° / 72° · 20%*) | | Pick | The day's best pick of the chosen kind, coloured by its rating, with its start time and score on the line below (*Shelling* over *7:10 AM · 82*). A **★** before the name marks the best day this week for that kind | | **Stay in** | Replaces the pick on a rain or storm day whose best pick scores under 55 — the sky and the scores agree | | **—** | Nothing of the chosen kind scored on that day | Picks are the almanac's own windows, scored against other windows of their kind, plus a **Swimming** pick built from the hourly swim scores (swimming has no almanac window, because it is a matter of the hour rather than the tide or the light). Unscored windows — a turtle hatch watch in peak season — are never picks. The footer reads *"★ is the best day of its kind this week. Weather after day three comes from a coarser model. Tap a day for its tides, surf and every window."* That footer is the section's only note on how far the week reaches; the longer explainer, *How far the week actually reaches*, is the ⓘ on Today's **The week ahead** card. Today's **The week ahead** card shows the rows for the next four days (tomorrow onwards), without scores, and its **The week, day by day** button opens this section. ## What does a day's page show? Tap a day for its page, titled **Today**, **Tomorrow** or the date: | Row | What it shows | How far it reaches | |---|---|---| | **High** / low temperature, **Rain** (highest daylight chance) | Open-Meteo hourly forecast | All week; from the fourth day the rain figure is captioned **coarse model** | | **Water** | Water temperature, captioned **measured** (the buoy off this beach) or **modeled** (a ~25 km grid) | All week, but only the buoy reading is a measurement | | **Surf** | Surf height, with the rip current risk as the caption | The first two days are the forecaster's "Ocean Isle Beach West" row — this beach. The next days come from the extended paragraph and are captioned **all of Coastal Brunswick**. After the forecast stops the row is absent — nothing is ever carried forward from the day before | | **Swimming** | **Good**, **Caution** or **Poor** with a reason | Poor on high rip risk whatever the water temperature; caution on moderate risk or water below 68°F; absent when there is neither a rip forecast nor a temperature, and when there is no rip forecast and the water is 68°F or warmer (below 68°F it still reads Caution) | | **Thunder** | Peak chance and the hours holding it, from the NWS gridpoint | All week | | **Low water** | Low tide times only — the question this page answers is about low water; the full table is on the Water tab | Exact all week | | **Sun** | Sunrise–sunset | Exact all week | Below that, **Best times** lists every pick for the day, best first, one per kind, each with its time span and score. A pick opens the window's detail screen, where you can set a reminder — see [When to go](https://docs.neuralconfig.com/sunset-beach/app/when-to-go/). The footer explains: *"Each is scored against other days of its kind, not against each other. A great shelling low and a great sunset answer different questions."* :::caution The Swimming row and the Swim pick are planning aids built from the NWS rip current forecast, a water temperature and the hourly scores. Sunset Beach has **no lifeguards**, and the app is not a safety service — rip current risk and surf height here are forecasts, not observations of the water in front of you. Look at the sea, posted flags and signs, and official warnings before anyone gets in. ::: ## Worth a trip: Bird Island and a full moon over the ocean **Worth a trip** appears when this week has something worth driving for: - **Bird Island & the Kindred Spirit mailbox** — the best low-tide crossing this week, only when it rates at least **good** (55 or more); ties go to the earlier day. The row shows the day, time span, the window's subtitle and its score, and opens the window's detail. - **Moonrise over the ocean** — only the **next** moonrise, and only when it is a moon at least 85% lit rising over open water, with its phase, how much is lit and which way to face. A qualifying moonrise later in the week is not shown here until it is the next one; the almanac on Nature › When to go lists every one. While it is shown here it is left out of the events list below. ## Next visible launch The card appears only when the Worker has a launch it expects you to be able to **see from the beach**. It shows the launch name, the launch time with a relative countdown, and the visibility verdict, for example *"Good chance. Look SE, about 18° above the horizon, around T+360s. You'll need a clear ocean horizon."* Tap it to open the launch detail screen. A **Cached** or **Unavailable** badge under the card means the launch schedule is not live — see [How fresh the data is](https://docs.neuralconfig.com/sunset-beach/data/freshness/). "Visible" is the Worker's model verdict, not a promise: a launch counts as visible when its modelled trajectory clears the horizon from Sunset Beach, it is not a daytime launch, and its visibility score is at least 30 out of 100. Launches that fail that test still appear as ordinary rows in the events list with their verdict as the subtitle (for example *"Not visible — stays below the horizon."* or *"Daytime launch — not visible from here."*). Only launches from Cape Canaveral / Kennedy Space Center and Wallops Island are considered at all; every other pad on Earth is too far away or on the wrong side of the horizon. The model itself — inferred inclination, ascent corridor, refraction, twilight lighting — is described in [How the app judges things](https://docs.neuralconfig.com/sunset-beach/data/scoring/). :::note Trajectories are inferred and launch times slip, so every verdict is probabilistic. Tap the ⓘ beside **Next visible launch** for the in-app explanation, titled "How visibility is worked out". ::: ### The launch detail screen The screen is titled with the launch provider (for example "SpaceX") and has up to five sections: | Section | What it shows | |---|---| | **Verdict** | The launch name, a score ring (0–100), the verdict sentence, and **high**, **medium** or **low** confidence. Below that: the launch time and day, the status from Launch Library 2, any model notes, and — when the orbit allows both a northeasterly and a southeasterly corridor — the warning *"The orbit's inclination allows either a northeast or a southeast path, so the trajectory is uncertain. Both are modeled, and confidence is lower."* | | **Ascent from the beach** | A chart of the rocket's elevation above the horizon against minutes after launch, with a "best view" marker. Below the dashed line the vehicle is under the horizon from here. Shown only when the model produced an ascent profile. | | **Where to look** | **Direction** (compass point and degrees true), **Elevation** above the horizon, **Best at** (the best-looking moment as a wall-clock time at the beach, with T+seconds), and **Distance** in miles to the pad. | | **Mission** | Rocket, orbit, pad and the mission description. | | **Links** | **Watch live** when the operator has published a webcast (only a handful of launches do), and **Launch page** — the operator's own page, or a Space Launch Now page for launches without one. Both open in your browser. | The "best" moment is the best-*looking* one, not peak elevation. The two differ because the plume is usually only sunlit earlier in the ascent, and a plume against a lit daytime sky is not visible however high it climbs. When a visible launch is under an hour away the app can also show it as a Live Activity on the Lock Screen — see [Widgets](https://docs.neuralconfig.com/sunset-beach/alerts/widgets/). ## What is on the events list? **Events** is one dated list of everything happening at the beach over the next **45 days**, grouped by the calendar day *at the beach*: | Kind | What it is | Where it comes from | |---|---|---| | Music | Sunset Sound Waves concerts at Town Park, the pier's summer concert series, and any other music on the town calendar | Town calendar feed, the town's Sunset Sound Waves schedule page, the pier's events page | | Market | Markets, festivals and fairs | Town calendar feed | | Community | Anything on the town calendar that isn't one of the other kinds | Town calendar feed | | Holiday | Holiday closures and observed holidays | Town calendar feed | | Launch | Rocket launches from Cape Canaveral / KSC and Wallops Island, visible or not | Launch Library 2 | | Sky | Today's sunset (with *Forecast:* and its rating) and, when the moon is at least 85% lit and rises over open water, "Moonrise over the ocean" | Computed by the Worker from solar and lunar geometry | Council meetings, garbage and recycling collections, and private bookings are on the town's calendar too, but the app filters them out — only things a person might turn up for are shown. Every entry has a start time (or **All day**), the venue where it differs from the subtitle, and a small outward-arrow icon when tapping it opens the source page in your browser — the town calendar, the town's Sound Waves schedule page or the pier's events page. Launch rows open the launch detail screen inside the app instead, and the sunset and moonrise rows open nothing. When nothing at all is on, the section reads **"Nothing scheduled in the next few weeks."** Days are grouped by the calendar day at the beach (US Eastern time), not the day on your phone — a 9 PM concert is on Thursday at the pier whatever time zone you are in. Each day's header shows the date and, for the next week, **today**, **tomorrow** or **in N days**. ## What "series" means next to a concert A concert marked **series** (in amber) was **reconstructed from a stated weekly pattern rather than read from a feed**. The town's calendar carries the Sunset Sound Waves season opener as a single event with no recurrence rule, so expanding the feed alone would show one concert in May and nothing all summer. The town's schedule page states the pattern in prose — each Wednesday from late May, 6 to 8 PM at Town Park — so the rest of the season is generated from that rule. Every generated occurrence is titled **"Sunset Sound Waves concert"** and tagged **series**. The backend records why, in a note the app does not display: > A weekly series on the town's schedule page. The season is assumed to end on > Labor Day. Two consequences worth knowing: - **No per-week line-up.** The town does not publish who is playing on a given Wednesday anywhere the app can read, so the row never names an artist. - **The season end is an assumption.** Occurrences stop at Labor Day (the first Monday in September) because that is when these series conventionally end, not because the town has said so. Pier concerts are different: they are read from the pier's own events page, which lists each date and artist individually (Thursdays, 6–8 PM unless the page says otherwise), so they carry the artist's name and no "series" label. That page is a hand-maintained web page rather than a feed, so it can stop parsing when the pier redesigns it — see [Limits](https://docs.neuralconfig.com/sunset-beach/data/limits/). ## Sharing and alerts The share button in the toolbar produces a text summary of what is on — see [Sharing](https://docs.neuralconfig.com/sunset-beach/alerts/sharing/). Launch and full-moon alerts are set up on the Alerts screen, which the bell in this tab's toolbar opens — see [Alerts and notifications](https://docs.neuralconfig.com/sunset-beach/alerts/notifications/). ## Next steps - [When to go](https://docs.neuralconfig.com/sunset-beach/app/when-to-go/): How each window behind the picks is timed and rated, and how to set a reminder for one. - [How the app judges things](https://docs.neuralconfig.com/sunset-beach/data/scoring/): The launch visibility model and the scoring behind every pick. - [Where every number comes from](https://docs.neuralconfig.com/sunset-beach/data/sources/): The town calendar feed, the pier's events page, the Sound Waves schedule page and Launch Library 2, with how often each is refreshed. - [Limits and what it doesn't know](https://docs.neuralconfig.com/sunset-beach/data/limits/): Why the concert series is inferred, why the pier page can stop parsing, and how far the week's forecast really reaches. --- # The Nature tab — whales, sightings, birds, turtles and the map Source: https://docs.neuralconfig.com/sunset-beach/app/nature/ The **Nature** tab leads with the one thing worth knowing out there this week, then what's biting, then what people have actually recorded near Sunset Beach, then the sky after dark and what the season says to expect. In order: | Part | Sections | |---|---| | Top | **Happening now**, **Right whales** (in season only), **Fishing**, **Seen near here lately** | | **Overhead** | **Migration radar**, **Birds** | | **Through the year** | **Times & seasons**, **Sea turtles**, **What you might see** | Every data section has a ⓘ button that explains the limits of the data beside it. Nothing on this tab is a live animal position; the closest it comes is a NOAA slow zone that exists because a right whale was recently detected inside it. The almanac half — Times & seasons, When to go and The year — is covered on its own page, [When to go](https://docs.neuralconfig.com/sunset-beach/app/when-to-go/), and the Fishing screen on [Fishing](https://docs.neuralconfig.com/sunset-beach/app/fishing/). The seven-day planner that used to open from this tab is now **Seven days** on the Plan tab. This page covers the rest. A screen opened from this tab, from search or from Siri whose data has not loaded — the map, When to go, The year, Sightings, Birds, Migration radar or Fishing — shows **Not loaded** with *"This didn't load. Go back and pull down to try again."* rather than an empty page. Pull to refresh on the tab, or check Sources under **More**. ## What is "Happening now"? **Happening now** is a single card at the top of the tab naming the most important thing going on this week. The app picks it in a fixed order, taking the first that applies: | Order | Shown when | What the card says | |---|---|---| | 1 | A right whale slow zone is active nearby | The whale headline, the zone's name and distance, and the 500-yard approach rule | | 2 | Tonight's or last night's bird migration is **heavy** or **intense** | *"Heavy migration last night"* (or *tonight*), with about how many birds were over the county at the peak and their heading. Tap for the Migration radar screen. | | 3 | Sea turtles are nesting or hatching (anything but off season) | The season phase, the nest count (*"18 nests this season, 6 hatched so far."*) with the Turtle Watch "as of" date — or, when that count is more than 21 days old, the season's own description instead — and *"Keep lights off the beach at night."* while lights-out applies. Tap for what to do on the beach. | | 4 | Right whale season, nothing detected | The season headline and note, with the approach rule | | 5 | Otherwise | **This month**: the month's headline and what to look for. Tap for The year. | Above the card, a line names the month and its headline (*"October · …"*), unless the card is already the month. ## Right whales Shown only in season (**November to April**) or whenever a detection-triggered slow zone is active nearby; out of season with nothing detected the section is left off the screen. It shows a headline, a season note, one row per active **Dynamic Management Area** (name, distance and compass direction from the beach, what triggered it, and the date it is in force to), and always the approach rule: > Federal law requires staying 500 yards from a North Atlantic right whale. > That applies to boats, paddleboards, drones and swimmers. The headline is one of four sentences depending on the state: | State | Headline | |---|---| | A slow zone is active within 200 miles | *"NOAA has an active right whale slow zone N miles DIR of the beach. A whale was sighted / heard on a hydrophone / detected inside it within about the last two weeks."* | | December–March, nothing detected | *"Peak right whale season. No slow zone from a recent detection is active nearby, but this is the calving ground, and mothers with calves pass close to shore."* | | November or April, nothing detected | *"Right whales are in season here (November to April), but this is outside the December to March peak. No slow zone is active nearby."* | | May–October | *"Out of season. Right whales are on their feeding grounds off New England and Canada and return to this coast to calve from about November."* | The zones are NOAA's own regulatory response to whales, published as ArcGIS feature services. A **Dynamic Management Area** is a voluntary vessel slow zone created because a right whale was seen or heard inside it within about the last two weeks — so a zone appearing offshore means a whale was recently there, not that one is there now. **Seasonal Management Areas** are the mandatory speed zones that run 1 November to 30 April. The season note tells you that the water off this beach is inside the federally designated calving-ground **critical habitat** — the boundary starts at the surf line, not miles out. ## Seen near here lately Up to **six tiles** of animals, from three places in this order: 1. the three animals most recorded on **iNaturalist** within about **25 miles** (40 km) over the last **14 days**, each with its count (*"12 sightings"*); 2. up to two **notable** birds from eBird, with the place (*"notable · Bird Island"*, or *"private location"* when it was a birder's home — see [Birds](#birds)); 3. animals that are here on almost any visit in this month, labelled **always here** — brown pelican, bottlenose dolphin, sanderling and great blue heron year-round, and ghost crab from April to October. These are written by hand, not counted. Plants and fungi are left off the tiles: the 25-mile circle takes in the Green Swamp, whose pitcher plants and flytraps would otherwise lead them. They stay on the full list. Below the tiles, **"All N recent sightings"** opens the Sightings screen and **Nature map** opens the map. The section header shows the radius, and if the source is down you see the upstream error (or **"No sightings available."** when there is no error text). iNaturalist records are photographs uploaded by whoever happened to be out with a phone, identified by other users — live, often the same afternoon, unlike the OBIS records under *What you might see*. The bias is the thing to hold on to: a cluster of records marks where people walked, not where animals are, and an empty stretch usually means nobody went there. It is thin on exactly the animals people ask about — within 25 miles there have been a handful of whale and dolphin records in eight years, because almost nobody photographs a dorsal fin from the strand. ### The Sightings screen Two sections: - **Whales, turtles and sharks** — three rows (*Whales & dolphins*, *Sea turtles*, *Sharks & rays*) with the total number of records in the last **eight years** and a one-line verdict such as *"Only 5 records in 8 years. Most recent: August 27, 2025. Too few to draw conclusions from; people rarely photograph these from shore."* The counts run over eight years rather than the recent window because a month would show nothing and imply an empty ocean. - **Last 30 days** — every recent record, colour-dotted by group. Tap one for the sighting sheet: when it was seen, distance and direction, place, whether it is **Research grade** (identification confirmed by other users), and **Open on iNaturalist**. Some pins are missing on purpose: iNaturalist blurs the location of species at conservation risk, which on this beach means every sea turtle, so those records are counted but never mapped. ## Migration radar What the weather radar saw moving over **Brunswick County** after dark, from **BirdCast** (Cornell Lab of Ornithology, Colorado State University and UMass Amherst). The section shows a headline sentence and, when there was a measured night with anything moving, three figures for the night's peak: **Peak rate** in birds/km/hr, **Over the county** (birds aloft at once) and **Heading** with speed in m/s. After dark, an **Aloft right now** row shows the live rate. A link **"Last night, hour by hour"** (or **"Tonight, hour by hour"** while the night is still running) opens the Migration radar screen, and **"Tonight's forecast map"** opens BirdCast's forecast page in your browser — the forecast half is not published in any feed, so it is a link rather than a panel. Almost all songbird migration happens at night, so the numbers describe the last night rather than this moment; by day the radar is seeing insects and weather, BirdCast marks those readings invalid, and the panel does not show them — by day it is still describing the last night. Radar cannot tell one species from another — for names, use the Birds section. The panel is absent entirely on a Worker that does not send migration data, and when the feed is down shows the upstream error (or **"No migration radar available."** when there is no error text). ### The Migration radar screen | Section | What it shows | |---|---| | Header (*Brunswick County, NC*) | The headline and, after dark, **Aloft right now**. | | **Through the night** / **Tonight so far** | One row per two-hour sample from 7 PM to 8 AM: the local time, a bar scaled to the night's peak, the rate, and the direction and mean height in metres. The busiest hour is highlighted. | | **What this is** | **Night readings** — how many samples were usable out of how many radar files — and the caveat that this is county-wide radar, not a count over this beach. | | Links | **Tonight's forecast map**, **Brunswick County dashboard**, **How to cite BirdCast**. | The intensity words in the headline (light, moderate, heavy, intense) are the app's own banding of the peak rate, not a Cornell scale: under 25 birds/km/hr is light, under 100 moderate, under 400 heavy, and 400 and above intense. ## Sea turtles The season phase and the year's totals. The headline is one of **Off season**, **Nesting season**, **Nesting and hatching overlap**, **Hatching season** or **Late hatching**, computed from the published nesting and incubation windows for North Carolina, with a detail line (in hatching phases it names roughly when the nests now due were laid). From **1 May to 31 October** a **Lights out** warning is shown: hatchlings follow the brightest horizon, and light spilling onto the sand sends them inland instead of to sea. | Dates | Phase | |---|---| | Before 1 May, after 15 November | Off season — "No nesting or hatching activity. Patrols resume on May 1." | | 1 May – 30 June | Nesting season | | 1 July – 31 August | Nesting and hatching overlap | | 1 September – 15 October | Hatching season | | 16 October – 15 November | Late hatching | Below that, three counts — **Nests**, **Hatched** (boils — mass hatchling emergences) and **False crawls** — scraped from the **Sunset Beach Turtle Watch Program**'s own page, with the program's "as of" date in the section header. When the page can't be read you see the reason instead (for example *"Season totals couldn't be read from the Turtle Watch page."*, or out of season *"Season totals aren't posted out of season."*). **"What to do on the beach"** opens the guidance list (fill in holes, take gear off overnight, shield lights, red flashlight only, no flash photography, keep dogs leashed, don't disturb marked nests). Individual nest hatch dates aren't published anywhere — the program posts season totals, not per-nest due dates — so the app can tell you that hatching is underway but not which night to stand on which dune. ## Birds One row, **Birds this week**, with the number of species reported and how many are notable (*"84 species · 3 notable"*). Tap it for the Birds screen, which lists **Notable** and **Reported nearby** with counts, dates and places. The notable birds themselves also appear as tiles under *Seen near here lately*. The records come from **eBird** (Cornell Lab of Ornithology): checklists submitted within about **19 miles** (30 km) in the last **7 days**, plus **notable** records — species eBird's own regional filters flag as unusual for this place and date — over the last 14 days. Like the community sightings, this measures effort as much as presence; a quiet week usually means nobody went birding. Some birders log from home, and eBird names those places by street address or coordinates. The app never shows them: a place eBird marks as private, or whose name reads as an address, coordinates or a yard, is shown as **private location**, and its position is rounded to about a kilometre before it reaches the map or the distance. If the server has no eBird key the section reads **Not set up** (*"Bird sightings from eBird aren't set up on this server yet."*) rather than pretending the upstream is broken. Version 1.0 called the same state *Not configured*. If the feed is down, you see the upstream error (or **"No bird data available."** when there is no error text). ## What you might see Six curated species — North Atlantic right whale, humpback whale, bottlenose dolphin, loggerhead sea turtle, green sea turtle and white shark — with the months each is expected off this beach. In season, only the species currently in season are listed, tagged **in season**; out of season for everything, all six are shown. Tap one for **When**, **Where to look**, the scientific name, group, and the number of **OBIS records** nearby (historical). Seasons here are curated from published natural history, not derived from record counts. OBIS (the Ocean Biodiversity Information System) supplies only the corroborating record totals, and those lag by months to years — nothing here is a live sighting. Deriving seasons from OBIS record dates would report bottlenose dolphins as a February animal; they are year-round residents, and the records cluster in winter because that is when the right-whale aerial surveys fly. ## Nature map Opened from the **Nature map** row under *Seen near here lately*. A map centred on the beach showing, when present, the right whale **calving habitat** outline, any Seasonal Management Areas, any active slow zone (**"Active slow zone — a whale was detected here"**), up to 90 recent community sightings as coloured dots (Birds, Mammals, Reptiles, Insects, Plants, Mollusks), up to 20 notable eBird records, and a pin for Sunset Beach. Tap a dot for the sighting sheet. The caption states how many sightings are drawn from the last 30 days and how many more are withheld because iNaturalist blurs protected-species locations — there is no honest point to draw for those. The map deliberately draws **no individual tracked animals**. There is no public feed of live shark or whale positions near this beach: OCEARCH's tracker has no open endpoint and Movebank gates every study behind licence acceptance. What is drawn instead is NOAA's regulatory response to whales. ## Fishing The Fishing section sits near the top of the tab, under Right whales. It shows **What's biting**: the species caught off the pier in the latest report, with *"Caught off the pier on \ · water at the pier \°"*. With no report it reads **Seasons, bait and limits** and the reason. Two kinds of warning can follow: - *"\ is biting, but you can't keep one right now."* — biting and closed to possession. - *"\ is biting. Check the current proclamation before you keep one."* — biting, but the season dates the app holds have lapsed, so it can't say whether you may keep one. Tap the row for the Fishing screen — see [Fishing](https://docs.neuralconfig.com/sunset-beach/app/fishing/). ## Next steps - [When to go](https://docs.neuralconfig.com/sunset-beach/app/when-to-go/): The almanac windows and The year — the Times & seasons half of this tab. - [Fishing](https://docs.neuralconfig.com/sunset-beach/app/fishing/): What's biting off the pier, what is peaking, and what you may keep. - [Where every number comes from](https://docs.neuralconfig.com/sunset-beach/data/sources/): NOAA right whale layers, iNaturalist, BirdCast, eBird, the Turtle Watch page and OBIS, with refresh cadence. - [Limits and what it doesn't know](https://docs.neuralconfig.com/sunset-beach/data/limits/): No shark tracker, no eBird without a key, no per-nest hatch dates. --- # When to go — the almanac windows, reminders and The year Source: https://docs.neuralconfig.com/sunset-beach/app/when-to-go/ The almanac answers *when* to walk out of the door, not just what conditions are now. It builds **windows** — a start and end time for shelling, the Bird Island walk, dolphins, ghost crabs, turtle hatch watch, right whales, shorebirds, a near-full moonrise over the ocean, sunrise and sunset — for the next **seven days**, from tide predictions, sunrise, dusk and moonrise. Each window's **timing is exact** (astronomy and harmonics) and its **rating is a forecast** for that hour, so treat the clock as reliable and the score as an outlook. No window predicts an animal; they predict the conditions for looking. You can ask for a **reminder** half an hour before any window starts. The same windows feed the **When to go** screen, **Times & seasons** on the Nature tab, and the **Seven days** on the [Plan tab](https://docs.neuralconfig.com/sunset-beach/app/events/), which arranges them by day with the weather. **The year** is a separate month-by-month guide to what is worth coming back for. ## Where to find it - **Nature tab → Times & seasons** (under the **Through the year** heading): *What you might see in* this month (opens **The year**), the single best window coming up, and **All windows — next 7 days**, which opens the **When to go** screen. - **Today tab → Best time today** has an **All windows** button that opens the same screen. - **Plan tab → Seven days**: one row per day naming its best window; tap a day for all of its windows. See [The Plan tab](https://docs.neuralconfig.com/sunset-beach/app/events/). - Search "almanac", "when to go", "windows" or "best time to look" — see [Search](https://docs.neuralconfig.com/sunset-beach/app/search/). ## The ten kinds of window | Window | When it is generated | Timed by | Certainty | |---|---|---|---| | **Shelling** | Every daylight low tide | 2 hours before low water to 1 hour after, cut to that day's civil dawn and dusk; peak at low water | Forecast | | **Bird Island & the Kindred Spirit mailbox** | Every daylight low tide | 2 hours either side of low water, cut to that day's civil dawn and dusk | Forecast | | **Dolphin watch** | Twice a day, all year | **First light** (sunrise to +2 h) and **Last light** (2 h before sunset to sunset) | Forecast | | **Ghost crabs** | April to October, every night | 30 minutes after civil dusk, for 3 hours | Deterministic | | **Turtle hatch watch** | Tonight and tomorrow night while the turtle season is in a hatching phase (July to mid-November) | Civil dusk, for 4 hours | Deterministic | | **Right whale watch** | Peak calving season (December to March), today and tomorrow only | 2 to 6 hours after sunrise | Forecast | | **Shorebirds** | Northbound April–May and southbound July–October, one per day at a daylight low | 1.5 hours either side of low water, cut to that day's civil dawn and dusk | Forecast | | **Moonrise over the ocean** | When the moon is at least 85% lit and rises over open water (azimuth 75°–155°) | 15 minutes before to 45 minutes after moonrise | Deterministic | | **Sunrise** | Every day the forecast covers | 30 minutes before to 20 minutes after sunrise | Forecast | | **Sunset** | Every day the forecast covers | 20 minutes before to 30 minutes after sunset | Forecast | **Deterministic** windows are timed by tide, sun and moon only — the time is exact and so is what they promise. **Forecast** windows are timed the same way but rated on the weather forecast, so the rating can move. (A deterministic window's rating can still use the forecast — ghost crabs lose points on a cold or wet night — but what it promises does not depend on it.) The distinction is why a reminder for a forecast window tells you to check the rating rather than stating it, and why an alert that a *sunset will be good* has to be pushed by the server under **When conditions change** rather than scheduled ahead on the phone — see [Alerts and notifications](https://docs.neuralconfig.com/sunset-beach/alerts/notifications/). The window detail screen states which kind it is at the bottom: *"Set by tide, sun and moon only, so the time and the rating won't change."* or *"Timed by tide and sun, rated on the forecast. The rating can change."* ## How a window is rated Every window starts at 50 and adds or subtracts named points, printed verbatim under **Why** on the detail screen — for shelling, lines such as *"…ft low — very low water"* (+17), *"…ft spring range — the most beach uncovered"* (+13) and *"Early low — you'll be ahead of the crowd"* (+10). The result is a score from 0 to 100 and a rating: **great** (75 and above), **good** (55–74), **fair** (35–54) or **poor** (below 35). Points compare a window **to a typical one of its own kind**, not to everything else on the beach. Anything true of every occurrence scores zero: it is always dark during the ghost crab window and always migration season during a shorebird window, so those facts are listed with no points rather than lifting every score by the same amount. Moon phase is not scored alongside tidal range for shelling, because the moon is *why* the range is what it is. Where nothing varies at all — a turtle hatch window in peak season — the window is **unscored**: the list shows **in season** instead of a number, and the detail screen shows the reasoning with no rating, because a number there would be invented. Only this day's forecast counts: a day the weather forecast cannot reach earns no weather or surf points, rather than inheriting today's. The full point tables live in [How the app judges things](https://docs.neuralconfig.com/sunset-beach/data/scoring/). ## The When to go screen - **Next** — the best window starting in the next 12 hours (best, not soonest: a mediocre window in an hour does not outrank a great one this evening; unscored windows only win if nothing else is on), with a score ring. - Windows grouped by day — **Today**, **Tomorrow**, then the date (*Thu, Aug 20*) — each row showing the title, the time span and a score badge (or **in season**). - **Sun & moon** — sunrise, sunset, the moon's illumination and phase, moonrise and moonset with compass direction, and a note when the moon rises over open water tonight (*"Full moon rising over open water tonight."* or *"The moon rises over open water tonight, not behind the mainland."*). - A footer: *"Times come from tide predictions, sunrise and moonrise, so they're exact. Each score comes from the forecast for that hour, so it isn't. Trust the time; treat the rating as an outlook. Nothing here predicts animals, only the conditions for looking."* ## What does a window's detail screen show? Tap a window for its detail: the subtitle, day and time span, **Peak at** the tide extreme or sun event, the **Outlook** badge, **Remind me** (below), **Why**, **What this promises** (the window's own statement of what it guarantees — for shelling, *"This scores how much beach the tide uncovers and whether the surf has been washing shells in. It can't tell you what's actually there."*), **On the beach** guidance, any caveat (the Bird Island walk warns: *"Start back before the tide turns. The channel at Mad Inlet shifts from year to year and water crosses the flats well before high tide."*), and the deterministic-or-forecast line at the bottom. :::note The ⓘ beside **Times & seasons**, **Next** and **Why** opens the in-app note "How the almanac works", which says the same in fewer words. ::: ## How do I get a reminder for a window? Tap **Remind me** on the window's detail screen. The phone sends one notification **30 minutes before the window starts**, and the footer under the button says when (*"A notification 30 minutes before it starts, at 5:40 PM."*). Once set, the row reads **Reminder at 5:40 PM** with a **Remove** button. - **What it says.** The notification is titled with the window and its time span (*"Shelling, 6:10 AM–9:10 AM"*) and reads *"Starts in 30 minutes."* For a forecast window it adds *"The rating depends on the forecast, so check it before you go."* It never repeats the rating, because the rating can change between when you set the reminder and when it fires. - **Which windows offer it.** Any window up to 12 hours long whose reminder time is still in the future. A window starting within the next half hour has no button. - **Permission.** The first tap asks for notification permission. If you decline, nothing is saved. If notifications are off for Sunset Beach in iOS Settings, the button is disabled and the footer says *"Notifications are off for Sunset Beach in iOS Settings, so reminders can't be delivered."* - **It is one-off and stays on the phone.** Each reminder is for that one occurrence; nothing is sent to the server. A reminder keeps its own copy of the window's times, so it still fires if the window later drops out of the almanac. At most **10** reminders still to fire can be set. With 10 set, the button is disabled and the footer reads *"You have 10 reminders set, the most the app keeps. Remove one to add this."* - **Tapping it** opens that window's detail screen. Reminders are separate from the standing alerts on the Alerts screen (tides, full moon, launches) — see [Alerts and notifications](https://docs.neuralconfig.com/sunset-beach/alerts/notifications/). ## Where is the This week planner now? Version 1.1 moved the seven-day planner from the Nature tab to the **Plan** tab, where it is called **Seven days**: one row per day with its sky, high and low, rain chance and best pick, and a tap through to a day's tides, surf, swimming, thunder, low water, sun times and every window. Today's **The week ahead** shows the rows for the next four days. Both are described on [The Plan tab](https://docs.neuralconfig.com/sunset-beach/app/events/). ## The year, month by month **The year** lists all twelve months with three or four items each and the month's headline under them — for example January, *"Right whale calving season, and the year's best shelling"*; May, *"Turtle nesting opens; peak northbound migration"*; August, *"Peak hatching"*; September, *"Hatching, migration, and the best beach weather of the year"*. The current month is tagged **now**, and the Nature tab's **What you might see in** row lists the current month's items. It is curated from published natural history for this coast, not computed, and does not change with the forecast. ## Next steps - [The Plan tab](https://docs.neuralconfig.com/sunset-beach/app/events/): The same windows arranged by day, with each day's weather, surf and swimming, and what's on. - [How the app judges things](https://docs.neuralconfig.com/sunset-beach/data/scoring/): The point tables behind every window, and how activity, sunset and launch scores are built. - [The Nature tab](https://docs.neuralconfig.com/sunset-beach/app/nature/): Times & seasons sits under Through the year, alongside what's around now and what's overhead. - [Alerts and notifications](https://docs.neuralconfig.com/sunset-beach/alerts/notifications/): Standing tide, moon and launch alerts, and why good-sunset alerts are pushed rather than scheduled. --- # Fishing — what's biting, what's peaking and what you may keep Source: https://docs.neuralconfig.com/sunset-beach/app/fishing/ The **Fishing** screen (Nature tab → the **Fishing** row, near the top) has three parts that are deliberately never blended: **What's biting** — yesterday's catch off the Sunset Beach Fishing Pier, from the pier's own morning report; a curated seasonal almanac of the **twelve fish worth naming from this strand**, shown as **Peaking this month**, **Starting next month** and **Everything worth casting at**; and **Before you keep one** — North Carolina's recreational size and bag limits, read by hand off the proclamations that set them, with a date stamp and a live check for newer proclamations. A fish being caught is an observation, a fish peaking is an almanac, and a size limit is the law; where they disagree, the screen shows both. ## What's biting The pier posts a short report at around half past five every morning — tides, the day's forecast, the water temperature off the end of the pier, and a line reading "yesterday's catch". The section shows: - The catch list, for example *Whiting · Spanish · Croaker*, captioned **"Caught \, reported the next morning"** — the report posted this morning describes fishing that has already happened, so the catch date is the day before the post. - **Water at the pier** — the temperature measured at the end of the pier, which is more local than any other water temperature in the app. - A warning for every fish on the pier's list that you may not, or may not know you may, keep: - **Closed** — the season is known to be shut: *"Southern flounder is on the pier's list, but it's illegal to keep one right now. The season opens \."* The second sentence appears only when the opening date is known and still ahead. - **Check** — the season dates the app holds are for a year that has passed: *"Southern flounder is on the pier's list, but this app doesn't have this year's season dates. Check the current proclamation before you keep one."* This pairing is the most useful thing on the screen — flounder are caught here all summer and the season is a fortnight long. - **The pier's report** — a link that opens the pier's blog in your browser. - The date of the catch in the section header, and a footer: *"The pier posts its report each morning, and the catch it lists is from the day before. One pier, one day, and a fish being caught says nothing about whether you may keep it."* The pier shuts for the winter and the reports stop with it. When the newest report is more than 10 days old the section adds *"The pier is closed for the winter. This is the season's last report, not yesterday's."* and keeps showing the last report with its real date on it — a gap over the winter is the season, not a fault. If the report cannot be read at all you see *"The pier's daily report couldn't be read, so nothing here is live. The seasons below are an almanac."* It is one pier: a fish that isn't on the list wasn't necessarily absent from the surf a mile west, only unreported. The same catch line also appears as the **Fishing** row on the Nature tab, and a fish that is biting but can't be kept is pulled forward there too: *"Southern flounder is biting, but you can't keep one right now."*, or, when this year's dates aren't known, *"Southern flounder is biting. Check the current proclamation before you keep one."* ## Peaking this month, Starting next month, Everything worth casting at The almanac covers twelve species: **Whiting** (sea mullet), **Florida pompano**, **Bluefish**, **Spot**, **Atlantic croaker**, **Red drum**, **Black drum**, **Spotted seatrout**, **Southern flounder**, **Sheepshead**, **Spanish mackerel** and **King mackerel** — the pier's own catch vocabulary plus the inlet species people walk to Tubbs Inlet for. - **Peaking in \** lists the species whose peak months include the current month. It is absent when nothing peaks. - **Starting next month** lists species not peaking now whose peak includes next month. - **Everything worth casting at** lists all twelve. Its footer names anything the pier reported that isn't one of the twelve: *"The pier also reported: …"* Each row shows the fish's name, a green **caught** tag when it is on the pier's most recent list, a red **closed** tag when its season is known to be shut right now, a grey **check** tag when the season dates the app holds belong to a year that has passed, and a subtitle with where to fish for it (surf, pier, inlet, just offshore), the size limit and the bag limit — or **"no state size or bag limit"** for whiting and pompano, which the state's table does not cover at all. Tap a fish for its detail: **When** (the season in words), **What works** (bait and rig), **Worth knowing**, **Where**; **What you may keep** — a warning when the season is shut (*"The 2026 recreational season is September 1–14. Outside it, possession is unlawful. Opens \ — N days away."*, the last sentence only when the opening is known and ahead) or unknown, the size (with how it is measured: *"total length, snout to tail tip"* or *"to the fork of the tail, not the tip"*), the bag limit, any detail, a warning when a proclamation naming this fish was issued after the numbers were last checked, a **Read from** row naming the proclamation the numbers came from, and a footer for a fish whose limits move by proclamation — *"These limits change. The state has opened and closed this fishery mid-season by proclamation, so check before you go."* for high risk, *"These numbers have changed by proclamation in recent years."* for medium; **Proclamations in force** — each opens as a PDF from the Division of Marine Fisheries; and **About this fish** with the scientific name, other names and a twelve-box **Peak months** strip. Peak months are curated from published natural history for this coast, not derived from any dataset of records. A peak is a peak, not a fence — nothing here claims a fish is absent out of season, and the almanac never overrides the pier's report. Whiting peak in spring and again in autumn and are still on the list most summer mornings. ## Before you keep one North Carolina sets recreational limits by **proclamation**, and proclamations change mid-season. The state publishes a summary table of size and bag limits, which is the obvious thing to copy and the wrong thing to trust: when the numbers in the app were checked, that table was out of date in two places at once (it said flounder was closed with no season, although the 2026 season had already been set for 1–14 September by a proclamation issued 3 June; its bluefish footnote said three fish a day while its own table cell said five — the proclamation says five). So every number in the app is read by hand off the proclamation that actually sets it, and the section shows: - The caveat: *"North Carolina sets limits by proclamation, and they change mid-season. When these were checked, the state's own summary table was out of date on flounder and bluefish. Treat these as a prompt to look, not as the law. Verify before you keep a fish."* - Four links: **Recreational size and bag limits** (the state's table), **Proclamations in effect**, **Fish Rules: limits for where you're standing**, and **The pier's daily report**. - A footer stating the vintage: *"Limits last checked against the proclamations on \. The state's summary table is dated \. Proclamations in force that name these fish: N."* The list of proclamations in force is fetched live so the app can tell you when a newer one naming a fish has landed since the numbers were read — the only condition under which they might be wrong. If that list could not be fetched the section says so: *"Couldn't read the list of proclamations in force, so nothing here has been checked against it."* Southern flounder is the sharp case: the 2026 recreational season is **1–14 September**, one fish per person per day, minimum 15 inches total length, and outside that window possession is unlawful. Because the window is set each year by proclamation the app treats flounder as **high** proclamation risk, and its detail screen says so. Between the end of the 2026 season (14 September) and the end of the year, flounder is **closed**: the red tag stays, and the warnings drop their *"The season opens …"* sentence because the next season's dates do not exist yet. From 1 January 2027 the app no longer knows the season's dates, so it stops saying **closed** or **illegal** — that would be a claim nobody has checked. Flounder gets a grey **check** tag instead, the pier warning becomes the *"…this app doesn't have this year's season dates"* sentence above, and the detail screen says *"The 2026 season has passed, and this app doesn't have this year's dates yet. Check the current proclamation before keeping one."* The *"A proclamation naming this fish was issued after these numbers were last checked"* warning is added only when such a proclamation is actually in the live list. Read the current proclamation before keeping one. :::caution None of this is legal advice. It is a prompt to look, and every screen links the document. Verify against the proclamation before you keep a fish. The ⓘ beside **Before you keep one** opens the in-app note "Size and bag limits", which explains the same. ::: ## Next steps - [The Nature tab](https://docs.neuralconfig.com/sunset-beach/app/nature/): Where the Fishing screen lives, alongside sightings, turtles, birds and the map. - [Where every number comes from](https://docs.neuralconfig.com/sunset-beach/data/sources/): The pier's report feed and the NC DMF proclamation list, with how often each is refreshed. - [Limits and what it doesn't know](https://docs.neuralconfig.com/sunset-beach/data/limits/): Fishing limits are read by hand and stamped; the pier report is one pier, one day. --- # More and Beach info — rules, access, parking, cams, ships and the tropics Source: https://docs.neuralconfig.com/sunset-beach/app/beach-info/ In version 1.1 the fifth tab is **More**, and the beach reference that used to fill the **Info** tab is one row inside it, **Beach info**. More holds what is about the app — alerts, sources, what it doesn't know, who made it, support — and Beach info holds what is about the beach: the town's rules, how you get onto the sand, whether you pay to park right now, the cams, what that ship on the horizon probably is, and whether the National Hurricane Center is watching anything. Old links still work: a Shortcut, search result or saved link to an Info section opens the same section on Beach info. ## What is on the More tab? Three groups, top to bottom: | Row | What it shows | |---|---| | **Alerts** | What is switched on — for example *Tides · Full moon · Push* — or *Off in iOS Settings*, *Not set up* or *All off*. Opens the Alerts screen. | | **Sources** | How many upstreams are live, cached or down (*"N of M live"*, plus *"· N cached"* or *"· N down"* when any are). Opens the Sources screen. Shown once data has loaded. | | **Known gaps** | What the app doesn't measure or can't get. Opens the Known gaps screen. | | **Beach info** | *Parking, rules, access*. Opens the Beach info screen described below. | | **Made by** card | NeuralConfig's card: *"The useful kind of AI"*, then *"We built this app. We can build yours."* and *"Apps, websites and practical AI for businesses: systems that answer your calls, cut the busywork and connect to the tools you already run."* Two buttons: **Work with us**, which opens NeuralConfig's services page in Safari, and **How it's built**. | | **User guide**, **Support** | Open these docs and the support site in Safari. | | **Privacy** | *No tracking*. Opens the privacy policy. | | **Terms & safety** | *Not a safety service*. Opens the terms. | | **Acknowledgements** | The organisations behind the data. | | **Version** | The app version with its build number in brackets, for example *1.1.0 (300)*. Support will ask for this. | Alerts, Known gaps, Beach info and the links at the bottom appear even when nothing has loaded — the day the beach is unreachable is the day you want the support link. The footer reads *"Links open in Safari."* The Sources screen is described in [How fresh the data is](https://docs.neuralconfig.com/sunset-beach/data/freshness/), and the alert settings in [Notifications](https://docs.neuralconfig.com/sunset-beach/alerts/notifications/). ### Known gaps The app's absences, on one screen under the heading **Not measured or not published**. Until 1.1 these were the last section of the Sources screen, under *What this doesn't know*. The list: - There's no wave sensor at Sunset Beach. Surf height is the National Weather Service forecast; wave readings come from a buoy about 50 miles offshore and a 25 km wave model. - No live shark tracking. OCEARCH doesn't publish an open feed, so the app shows historical records from OBIS. - No ship tracking. Open ship-position (AIS) data returned nothing near the beach, so the app links to tracking sites. - Bird migration counts come from weather radar over Brunswick County, at night only. Radar counts birds but can't tell species. - Weekly concert line-ups aren't published, only the schedule. Those dates are marked "series". - Turtle Watch publishes season totals, not hatch dates for individual nests. - Score weights are judgment calls, not fitted to outcome data. ### How it's built Opened from the made-by card's **How it's built** button. It is written for two readers: each section says what happens in plain words, with the technical version in an *Under the hood* note beneath it. It covers how the data is gathered, checked and delivered, where AI is used and how the model was chosen, and what keeps the app trustworthy and running. The same write-up is in these docs as [How it's built](https://docs.neuralconfig.com/sunset-beach/data/how-its-built/). ### Acknowledgements The organisations whose data the app uses, in three groups: **Public agencies** (NOAA's National Weather Service, National Hurricane Center, Tides & Currents, National Data Buoy Center and Fisheries; the U.S. Geological Survey; NC DEQ), **Open data and science** (Open-Meteo, credited *"Weather data by Open-Meteo.com, CC BY 4.0"*; The Space Devs' Launch Library 2; eBird; BirdCast; iNaturalist and its observers; OBIS) and **Here at the beach** (the Sunset Beach Turtle Watch Program, the Town of Sunset Beach, and the Sunset Beach Pier). ## What is on the Beach info screen? Tap **Beach info** on More. Everything curated here — rules, ramps, contact details, parking rates — was read off the town's own pages and carries the date it was read (the parking rates carry the year they were set for); facts the town does not publish are listed as missing rather than guessed. The sections, in order: **Getting there** · **Rules on the beach** · **Paid parking** · **Rates** · **Good to know** · **Paying** · **Beach cams** · **Ships offshore** · **The tropics** · **Where this comes from**. If nothing at all has loaded the screen says *"Nothing here loaded. Sources shows what went wrong."* **Shellfish** is no longer here: in 1.1 it moved to the Water tab, under **Further out**. What it shows is described in [Shellfish](#shellfish) below. ## Getting there The section leads with the one fact that changes what you do: > There are no lifeguards at Sunset Beach. Swim near other people and know > where the nearest access is. Then **Wheelchair-accessible access points** — the four with permanent ramps or paved surfaces and mobi-mats over the sand: **The Gazebo, at the end of Sunset Blvd S**, **1st Street**, **3rd Street** and **40th Street**; the pier is wheelchair accessible too. The town loans beach wheelchairs and walkers — book through Town Hall in advance and call for the current fee and notice period. **Town Hall** is 910-579-6297, 700 Sunset Blvd. N., Sunset Beach, NC 28468, Monday – Friday 8 AM – 5 PM except holidays. :::caution The app is not a safety service. Sunset Beach has no lifeguards, and the rip current risk, surf height and swim advisories elsewhere in the app are forecasts and periodic samples from the National Weather Service and NC DEQ — not observations of the water in front of you. Look at the sea, posted flags and signs, and official warnings. ::: ## Rules on the beach The dog rule leads and is computed for the current moment, because it is the only rule that changes during the day. Dogs are off the beach strand **9 AM – 6 PM, the Friday before Memorial Day through Labor Day**; outside that they are allowed on a leash. The row reads one of: | Right now | Row | |---|---| | In season, 9 AM – 6 PM | *"Dogs are off the beach until 6 PM."* | | In season, outside those hours | *"Allowed now, on a leash — off the beach again from 9 AM."* | | Out of season | *"Allowed any time out of season, on a leash."* | Below it, the town's rules as a flat list — the app does not rank them, because ranking would imply it knows which ones get enforced: - Dogs must be leashed anywhere in town off your own property. Ten feet maximum, and no electronic leashes. - Carry bags and clean up after your dog — **$100 per offence**. - No glass on the beach. - No bonfires, charcoal or gas grills on the beach at any time. Grills stay ten feet clear of any structure. - No fireworks on the beach at any time. - No vehicles of any kind on the beach, including motorised bikes and e-bikes. - Umbrellas anywhere. Canopies, tents and cabanas are capped at 12 × 12 feet, set in a single line between the trashcan poles, and are not allowed between 3rd and 29th Streets. - Nothing goes on the beach before 7 AM, and everything comes off by sunset. - Refill your holes and knock down sandcastles before you leave, or by sunset — whichever comes first. The footer gives the date the rules were read off the town's rules page: *"Taken from the town's rules page on \. If anything differs, the town is right."* ## Paid parking, Rates, Good to know and Paying Parking is a calendar, not a feed, so the app computes it. The paid season is **April 1 – October 31**, enforced **9:00 AM – 5:00 PM** daily in season; free before, after, overnight and for the rest of the year. **Paid parking** shows the state right now — *"Paid parking is in effect until 5:00 PM."*, *"Parking is free until 9 AM."*, *"Parking is free until 9 AM tomorrow."*, *"Parking is free until April 1."* or *"Parking is free for the rest of the year — the paid season ended October 31."* — plus **Season**, **Enforced**, and either **Free again at** (while paid) or **Paid parking starts** (while free). In November and December the app deliberately does not say paid parking resumes on 1 April, because the rates for the new year have not been adopted yet. **Rates**, as set by the town for 2026 (council reviews rates annually, and the year is printed under the table): | Rate | Price | Note | |---|---|---| | Hourly | $5 | three-hour maximum | | Day | $20 | | | Week | $80 | | | Season | $175 | | **Good to know** lists the town lots — **Gazebo**, **Street Scape**, **Main St West** — and four rules: handicap parking is free with a valid plate or hangtag; spaces marked with green curb stops are for low-speed vehicles; town taxpayers get two free seasonal passes; and, since 13 July 2026, parking is prohibited on the side streets from 7th through 11th. **Paying** links out to the vendor, **SurfCAST by Otto** — the online payment portal, the App Store app, and the citations page (**Pay or appeal**) — plus the **Town parking page**. The rules themselves are Municode Chapter 72. ## Beach cams Four links that open in Safari. None is embedded in the app — the town's cam is a still image rather than a stream, and re-hosting somebody else's camera is a permission question, not a technical one. | Cam | Operated by | Note | |---|---|---| | Pier and strand | SurfChex | Looks down the beach from the pier. The most useful one for surf. | | Pier cams | Sunset Beach Fishing Pier | The pier's own cameras, including the end of the pier. | | Bridge and causeway | sunsetbeachncwebcam.com | The causeway approach — worth a look before driving over in summer. | | Town cam index | Town of Sunset Beach | The town's own page. A still image rather than a stream. | ## Ships offshore Three named kinds of traffic so a shape on the horizon has a name — **Wilmington traffic** (container ships and tankers to and from the Port of Wilmington, well out and usually the largest thing on the horizon), **Tug and barge tows** (closer in; a tug with a barge on a long wire reads as two hulls with open water between them), and **Dredges, during beach nourishment** (a hopper dredge works within sight of the strand for weeks when a project is running; nothing here can tell you whether one is running now) — and three live-map links that open in Safari: **VesselFinder**, **MyShipTracking** and **MarineTraffic**, each centred on the beach. The app carries **no live vessel layer of its own**. That is a decision, not a gap: an AIS feed boxed on this beach was tested twice and delivered nothing, and the reasoning is recorded once, on the **Known gaps** screen under More. ## The tropics The National Hurricane Center's Atlantic outlook, issued four times a day whether or not anything exists. When nothing is brewing the card says so — *"The Atlantic is quiet: no tropical cyclones, and the National Hurricane Center isn't watching anything for development."* — because that is the answer most people are looking for. When something is being watched it names each area with its formation chance (of the form *"N% in 7 days"* — the longer window first) and the forecaster's discussion, and turns amber once an area's chance reaches 50%. The header shows how long ago the outlook was issued. A formation chance is about whether a storm forms at all, somewhere in the Atlantic — not whether one reaches North Carolina. Local impacts come from the National Weather Service and appear as alerts on the Today tab. That is why the tropics live here rather than on Today. ## Shellfish Moved to the Water tab in 1.1: **Water › Further out › Shellfish**. See [Further out: Shellfish](https://docs.neuralconfig.com/sunset-beach/app/water/#further-out-shellfish). ## Where this comes from A **Where the data comes from** row that opens the Sources screen, a **Town rules page** link, and the list of what the town does not publish in a form the app can carry — so a reader who scrolls this screen looking for a restroom is told why there isn't one listed rather than left to conclude the app forgot: - A per-access list of amenities — the town publishes its accesses as an interactive map, not a table. - Restroom and foot-wash locations. - What a beach wheelchair costs, and how far ahead to book it. The footer reads *"Anything the town doesn't publish is listed above."* The Sources screen itself — every upstream with its status — is described in [How fresh the data is](https://docs.neuralconfig.com/sunset-beach/data/freshness/). ## Next steps - [How fresh the data is](https://docs.neuralconfig.com/sunset-beach/data/freshness/): The Sources screen behind the Sources row on More, and what live, cached and last known good mean. - [The Today tab](https://docs.neuralconfig.com/sunset-beach/app/today/): Water quality, NWS alerts and the Practical section that Beach info complements. - [Where every number comes from](https://docs.neuralconfig.com/sunset-beach/data/sources/): The NHC outlook, the NC DEQ shellfish layers and the curated town content, with refresh cadence. - [Limits and what it doesn't know](https://docs.neuralconfig.com/sunset-beach/data/limits/): No live ship tracking, no restroom list, and why the cams are links rather than video. --- # Search Source: https://docs.neuralconfig.com/sunset-beach/app/search/ Search is one field over everything the app can show. Tap the **magnifier in the top-left corner of any of the five tabs** and type what you are looking for — *tides*, *dogs*, *UV*, *parking*, *rip current*, *size limit* — and a ranked list comes back as you type. Every result is somewhere the app can already take you: a **section** on a screen (search switches tab, pushes the screen and scrolls to it), a whole **screen**, an **explainer** (the ⓘ notes, opened right there as a sheet), or a payload item — a **fish**, a **species**, an almanac **window**, a rocket **launch** or an upstream **source**. Search matches on hand-written synonyms as well as titles, so *dog* finds *Rules on the beach* and *shark tracker* finds **Known gaps**, the screen that says the app does not have one. It works from a saved copy while a refresh is still running and when the network is down (on the very first launch there is no tab bar, and so no magnifier, until the first payload arrives). It is not on the web page. ## How to open it | From | How | |---|---| | Any tab | The **magnifier** in the top-left corner of Today, Water, Plan, Nature and More | | Siri | *"Search Sunset Beach"* or *"Find something in Sunset Beach"* — Siri asks *"What are you looking for?"* and opens the sheet with your answer typed in | | Shortcuts app | The **Search the Beach** action, with a **Search for** parameter | | A link | `sunsetbeach://search?q=uv` opens the sheet with *uv* already in it; `sunsetbeach://search` opens it empty | The sheet is titled **Search**; the field's placeholder reads *"Tides, dogs, UV, parking…"*. On iOS 18 and later the keyboard comes up by itself when the sheet opens empty; on iOS 17 you tap the field first. **Done** closes it. Search is a sheet rather than a sixth tab, so it opens over whatever tab you are on and returns you there. ## What is searchable Everything below is in the index. The first three groups are built into the app and do not depend on the payload; the rest come from the current payload. | Kind (as shown on the result) | What | Count | Where a tap goes | |---|---|---|---| | **Section** | Every catalogued section header in the app, from *Right now* on Today to *Before you keep one* on Fishing | 53 | Switches to the tab, pushes the screen if the section is on a pushed one, and scrolls straight to that section | | **Screen** | Every screen worth finding by name: the five tabs, Beach info, Nature map, When to go, The year, Sightings, Birds, Migration radar, Fishing, Sources, Alerts, How it's built, Acknowledgements | 17 | Opens the screen | | **Explainer** | The ⓘ notes, matched on their whole text — so *500 yards* finds *Right whales* and *March to November* finds *Yesterday's catch* | 26 | Opens the note as a sheet over the results; your query is kept | | **Fish** | Every species on the Fishing screen, by common name, other name or scientific name, and the text of its season, bait and note | From the payload | Nature › Fishing › that fish | | **Species** | Every animal in *What you might see*, by common or scientific name | From the payload | Nature › that species | | **Window** | Every almanac window in the next seven days, e.g. *Ghost crabs*, with the day and start time as its subtitle | From the payload | Nature › When to go › that window | | **Launch** | Every launch on the schedule, by name, provider, rocket, mission, orbit or pad | From the payload | Plan › that launch | | **Source** | Every upstream on the Sources screen, by name or detail | From the payload | More › Sources › that source | Terms for things the app **does not have** are indexed on purpose and point at the screen that says so: *shark tracker*, *ocearch*, *satellite*, *iss*, *space station* and *wave height at this beach* all resolve to **Known gaps** (More › Known gaps), which was titled *What this doesn't know* before version 1.1 — the old title still finds it. Each result row shows the title, a subtitle when there is one, and a caption that says the kind and where it lives — *Section · Water*, *Fish · Nature › Fishing*, *Source · More › Sources*, or just *Explainer* or *Screen*. Results filed under **Alerts** open the Alerts sheet. ## How results are ranked Matching is case- and accent-insensitive, and a query only matches at the **start of a word** — *uv* matches *UV index* but not *survey* or *curve*. Each result gets one score, highest first: | Match | Rank | |---|---| | The title is exactly the query | 1 | | The title starts with the query | 2 | | A synonym is exactly the query | 3 | | A word in the title starts with the query | 4 | | A synonym starts with the query, or contains a word that does | 5 | | A word in the body (an explainer's text, a fish's bait line, a source's detail) starts with the query | 6 | For *dog*, **Rules on the beach** wins because *dog* is one of its exact synonyms; an explainer whose text merely mentions dogs ranks below it. Ties break by kind — section, fish, species, window, launch, source, explainer, screen — so a section beats the explainer about it and a screen comes last; then alphabetically by title. At most **8 results per kind** are shown, so forty matching launches cannot bury the one section you wanted. The list re-ranks on every keystroke and is flat — not grouped by tab — so the best answer is always the first row. The synonyms are hand-written and deliberately not fuzzy: a wrong guess on a screen about beach rules is worse than no hit. Some examples that work: | You type | You get | |---|---| | *high tide*, *tide table*, *when is low tide* | **Highs & lows** (Water) | | *rip current*, *undertow* | **In the surf** (Water) | | *uv*, *sunscreen*, *how hot*, *sunburn* | **Air & sun** (Today) | | *swim advisory*, *bacteria*, *is it safe to swim* | **Water quality** (Today) | | *dog*, *leash*, *fine*, *alcohol*, *tents* | **Rules on the beach** (More › Beach info) | | *how much is parking*, *hourly* | **Rates** (More › Beach info) | | *restroom*, *wifi*, *showers* | **Where this comes from** (More › Beach info) — the section that lists what the town doesn't publish | | *size limit*, *bag limit*, *can i keep it* | **Before you keep one** (Nature › Fishing) | | *lights out*, *hatching*, *nests* | **Sea turtles** (Nature) | | *storm surge*, *flooding*, *springmaid* | **Against the prediction** (Water) | | *push notifications*, *sunset alert* | **When conditions change** (Alerts) | | *help*, *support*, *privacy*, *version* | **This app** (More) | | *fireworks*, *market*, *concert*, *this week* | **Plan** (screen) | ## What you see when there is nothing to show - **Before you type:** *"Search the beach — Every section, screen and explainer in the app, including its known gaps."* - **No match:** *"Nothing for "your query""* with the line *"Sources lists every data feed and links to the app's known gaps."* and an **Open Sources** button, which takes you to the Sources screen under More. ## Search, Siri, Shortcuts and iOS Spotlight The app's search index is used in three places, and it is worth knowing which is which: - **In the app** — the sheet described on this page. - **Siri and the Shortcuts app** — every searchable section and screen (except the four Alerts sections, which all open the one Alerts sheet that is itself a place) is also a *place* that Siri and Shortcuts can open, and typing into the Shortcuts picker's field runs the same synonym-aware ranking: *uv* offers *Air & sun*, *size limit* offers *Before you keep one*. Ten Siri shortcuts are built in (each with two to four wordings), including the one that opens search. See [Siri, Spotlight and Shortcuts](https://docs.neuralconfig.com/sunset-beach/alerts/siri-shortcuts/) for the full list. - **iOS Spotlight** shows the app's Siri shortcuts as tiles (for example *Search*), and tapping one opens the app. Spotlight does **not** search the app's sections, explainers or data itself — the app does not publish its index to system search. Type your question in the app's own search sheet, or say *"Search Sunset Beach"*. Search does not read tide times or numbers: *tide at 3pm* is a question, not a search, and it will match the tide sections rather than answer. ## Next steps - [Siri, Spotlight and Shortcuts](https://docs.neuralconfig.com/sunset-beach/alerts/siri-shortcuts/): The ten built-in phrases, the places Siri can open, and the sunsetbeach:// links behind them. - [Get the app and find your way around](https://docs.neuralconfig.com/sunset-beach/app/getting-started/): The five tabs, the toolbar buttons and what the ⓘ explainers are. - [Beach info](https://docs.neuralconfig.com/sunset-beach/app/beach-info/): The More tab, where the Sources screen lives, and what the town does and doesn't publish. --- # Alerts and notifications Source: https://docs.neuralconfig.com/sunset-beach/alerts/notifications/ Sunset Beach, NC can notify you about **tides**, a **full moon rising over the ocean**, **visible rocket launches**, any single **window you ask to be reminded about**, and — if you opt in — **conditions changing for the worse**, a **sunset worth walking down for** and a **sunrise worth getting up for**. Open the **bell** in the top-right corner of the Today, Water or Plan tab, or tap the **Alerts** row on the **More** tab, to reach the **Alerts** screen. The tide, moon, launch and window reminders are scheduled on your phone from the last conditions the app loaded and fire with no signal; the three "When conditions change" alerts are the only ones sent from the server, and they are **off by default**. Nothing is scheduled until you allow notifications, and iOS asks only once. :::caution Sunset Beach has no lifeguards and this app is not a safety service. Rip current risk, surf height and swim advisories come from the National Weather Service and NC DEQ and are forecasts and periodic samples, not observations of the water in front of you. Never let this app, or any app, substitute for looking at the sea, posted flags and signs, and official warnings. ::: ## Where the Alerts screen is Tap the **bell** in the top-right of **Today**, **Water** or **Plan**, or tap the **Alerts** row on the **More** tab (its value summarises what is on — for example *"Tides · Full moon · Launches · Push"*, *"All off"*, *"Not set up"* or *"Off in iOS Settings"*). The screen is titled **Alerts** and has four sections, in this order: **Tides**, **Worth a special trip**, **When conditions change** and **Queued**. Tap **Done** to close it. You can also say "Alerts in Sunset Beach" to Siri, open `sunsetbeach://alerts`, or search for "alerts" inside the app — all three open the same screen (see [Siri, Spotlight and Shortcuts](https://docs.neuralconfig.com/sunset-beach/alerts/siri-shortcuts/)). The **Tides** section header carries an ⓘ note titled **How alerts work**; it explains the on-phone scheduling described below. ## Two kinds of alert | | Scheduled on this phone | Pushed from the server | |---|---|---| | **Which alerts** | Tides · Full moon over the ocean · Visible rocket launches · Remind me | When the water gets worse · A sunset worth walking down for · A sunrise worth getting up for | | **Default** | On (tides: Lows, 45 min before; moon: on; launches: on, 30 min before); Remind me only when you tap it | Off | | **Needs a connection to fire** | No — fires with the app closed and the phone offline | Yes — sent by the Sunset Beach Worker through Apple's push service | | **Leaves the device** | Nothing | Your device token and the topics you opted into | | **Why this way** | Tide times, moonrise, launch times and window times are knowable in advance | Rip risk, advisories, spills, weather alerts and tonight's cloud are not | The Alerts screen's own footer puts it this way: *"These three come from the app's server, so they need a connection. Everything above is scheduled on this phone and works with no signal, but a phone can't know in advance that the rip risk will go up this afternoon. Turning all three off removes this phone from the server."* ## Tides **Notify me about** — a segmented control with **Off / Lows / Highs / Both**. The default is **Lows**: low water is what the app's scoring rewards, and high-tide alerts would double the interruptions to say "less beach". **How much warning** — appears once tides are not Off. Choices are **At the tide, 15 min before, 30 min before, 45 min before, 60 min before, 90 min before**; the default is **45 min before**. Each alert is titled like *"Low tide at 3:42 PM"* and its body gives the predicted height and the lead time — *"0.3 ft in 45 minutes."* — followed by a note when it applies: *"Wide, hard-packed sand — the best of the cycle for walking and shelling."* for a low of 1 ft or under, *"High water — not much dry sand."* for a high, and *"The lowest tide in the forecast."* for the lowest low in the loaded window. Tapping a tide alert opens the **Water** tab. The section footer is a caveat worth repeating: *"Tide times are astronomical predictions for Sunset Beach Pier, not readings from a live gauge. Wind and pressure can shift the real water level."* ## Worth a special trip Two toggles, both **on by default**. The footer says: *"Both are rare — a handful of times a month at most."* - **Full moon over the ocean** — *"Only when a near-full moon rises over open water, not behind the mainland"*. The alert fires **15 minutes before moonrise** (this lead is fixed) with the title *"Full moon rising over the Atlantic"* and a body giving the moonrise time and compass bearing. It is queued only on nights the Worker marks as a near-full moon (85% or more illuminated) rising over the ocean. Unlike tides, only the **next moonrise** in the conditions the app last loaded is queued, so the moon alert fires only if the app has loaded conditions that day. Tapping it opens **Today**; moonrise and its bearing are on **Nature › When to go › Sun & moon**. - **Visible rocket launches** — *"Only launches expected to rise above the horizon from here"*. When it is on, a **Launch warning** picker appears with the same choices as tides but labelled **At liftoff** instead of "At the tide"; the default is **30 min before**. The alert is titled like *"Falcon 9 launch at 8:12 PM"* and its body is the visibility verdict (for example *"Good chance. Look SE, about 18° above the horizon, around T+360s. You'll need a clear ocean horizon."*), the mission name, and *"Launch times slip, so check before you go out."* Tapping it opens that launch's detail screen on **Plan**. See [How the app judges things](https://docs.neuralconfig.com/sunset-beach/data/scoring/) for the visibility model. ## Remind me about one window Any window on **Nature › When to go** that lasts under **12 hours** has a **Remind me** button on its detail screen. Tap it and the app schedules a single notification **30 minutes before the window starts**; the footer says when, *"A notification 30 minutes before it starts, at 1:12 PM."* The 30-minute lead is fixed. Once set, the button becomes *"Reminder at 1:12 PM"* with a **Remove** button. - The notification is titled with the window and its times, like *"Shelling, 1:42 PM–4:42 PM"*, and says *"Starts in 30 minutes."* - Windows rated on the forecast — a sunset, for example, is timed by the sun but rated on the cloud — add *"The rating depends on the forecast, so check it before you go."* The reminder never repeats a rating that may have changed. Windows rated on tide, sun and moon alone don't add this line. - Tapping it opens that window's detail screen. - A reminder keeps its own times, so it still fires if the window later drops out of the app's forecast. It is removed once the window has started. - If notifications haven't been decided yet, the first tap asks iOS for permission; declining saves nothing. If notifications are off in iOS Settings, the button is disabled and says *"Notifications are off for Sunset Beach in iOS Settings, so reminders can't be delivered."* - Long windows, such as a whale season, don't offer a reminder, and neither does a window that starts less than about half an hour from now. - The app keeps at most **10** reminders still to fire. With 10 set, the button is disabled and the footer says *"You have 10 reminders set, the most the app keeps. Remove one to add this."* ## When conditions change (pushed) Three toggles, all **off by default**. Turning any one on registers your device with the push service; turning all three off withdraws it — the footer ends *"Turning all three off removes this phone from the server."* **Is this phone actually registered?** With notifications allowed and any of the three on, a line under the toggles says which: *"This phone is set up for these alerts"*, *"Registering with the push service…"*, or *"Couldn't register this phone: …"* with the reason and a **Try again** button. A toggle that is on does not by itself mean pushes can reach you; this line does. | Toggle | Caption on screen | What is actually sent | |---|---|---| | **When the water gets worse** | *Rip current risk rising to High, a swim advisory, a spill nearby, or a National Weather Service alert* | See the table below — the `safety` topic. | | **A sunset worth walking down for** | *30 to 75 minutes ahead, only when the clouds look set for a good one* | *"Tonight's sunset looks spectacular"* / *"Sunset is at 8:03 PM."*, once per day, sent between 30 and 75 minutes before sunset, only when the sunset model rates the evening **spectacular**. | | **A sunrise worth getting up for** | *Up to 90 minutes ahead, so before 5 AM in midsummer. It won't break through Do Not Disturb* | *"Sunrise looks spectacular"* / *"Sunrise is at 6:24 AM."*, once per day, sent between 45 and 90 minutes before sunrise, only when the model rates it **spectacular**. Delivered quietly, so Do Not Disturb keeps it silent. | The **safety** topic sends exactly four things, and only when they **change**: | Event | Fires when | Title and body | Interruption | |---|---|---|---| | Rip current risk rising | The NWS surf zone forecast's rip level rises **to High** (never on the way down) | *"Rip current risk is now High"* — *"The National Weather Service advises staying out of the water. There are no lifeguards at Sunset Beach."* | Time Sensitive | | Swim advisory posted | NC DEQ posts an advisory at a monitored station that was not under one before | *"Swim advisory posted"* — *"The state posted a swim advisory for \."* | Time Sensitive | | Sewage spill reported | A spill appears within ten nautical miles in the last fortnight and none was reported before | *"Sewage spill reported nearby"* — the spill headline | Normal | | NWS alert issued | A National Weather Service alert appears that has not been announced before (once per issuance). Drills and test messages, which NWS publishes on the same feed, are never sent | The alert's event name (e.g. *"Rip Current Statement"*) — *"In effect from 8 AM to 8 PM."* (times on the hour drop the *:00*) | Time Sensitive when NWS severity is Severe or Extreme, otherwise normal | What is deliberately **not** pushed: a rip level falling back to Moderate (good news is not an interruption), an alert or advisory that was already in force when you switched the toggle on, and launch slips (those go to the Live Activity instead — see [Widgets and the launch Live Activity](https://docs.neuralconfig.com/sunset-beach/alerts/widgets/)). The Worker checks for changes every five minutes, and the very first check after it starts only records what it sees and sends nothing, so switching push on never produces a burst about conditions that have been true for hours. Tapping a rip current alert opens the top of **Today**, where the verdict and the current conditions are; tapping an NWS alert opens the **Alerts** screen. Tapping a swim advisory or spill alert opens **Today** at **Water quality**; tapping a sunset or sunrise alert opens **Today** at **Next hours**. ### Why there is no local "good sunset" alert Whether tonight's sunset is worth the walk depends on cloud that has not formed yet, so it cannot be scheduled on the phone in advance the way a tide can. That is exactly why the sunset and sunrise alerts live in the pushed section rather than the scheduled one, and why they need a connection. ## Queued The **Queued** section lists what is actually sitting in iOS's notification queue — up to 12 rows, with the total count in the header — each with its title, the day and time it fires, and how far away that is. *"Alerts are on"* and *"alerts will fire"* are different claims; this section shows the second. - iOS allows an app **64** pending notifications, so the app budgets them: at most **40 tide alerts, 6 launch alerts and 10 window reminders** per queue, plus the one moon alert described above. - The tide predictions the app loads run about **15 days** ahead, so the queue runs dry if the app is not opened for longer than that. The footer reads *"Scheduled … ago from data loaded … ago. Open the app now and then to keep these up to date."* Every successful load of conditions rebuilds the whole queue. - Anything less than a minute away is not scheduled at all. - **Send a test notification** fires *"Alerts are working"* / *"Tide alerts will look like this."* about five seconds later. It is disabled until notifications are allowed. When the list is empty the row explains why: | Message | Meaning | |---|---| | *"Nothing queued — notifications are off for this app."* | Permission is denied in iOS Settings. | | *"Nothing queued yet. Tap Turn on notifications above."* | You have alerts switched on but have not yet granted permission. | | *"Nothing queued yet. Turn an alert on and iOS will ask for permission."* | Permission not asked yet and every alert is off. | | *"Nothing queued yet. The app has to load conditions once before it can schedule alerts."* | Permission granted, alerts on, but no conditions loaded yet. | | *"Nothing queued. Every alert is off."* | Permission granted, all alerts off. | ## Permission and what iOS asks The app **never asks for notification permission at launch**. The first time you open the Alerts screen before permission has been decided, a **Turn on notifications** button appears at the top with the footer *"iOS will ask once. Nothing is scheduled until you allow it."* Tapping it shows the standard iOS prompt (alerts and sounds — no badge). If you have declined, the screen shows *"Notifications for this app are off in iOS Settings, so none of these alerts can go off."* with an **Open iOS Settings** link. Nothing can fire — local or pushed — until you allow notifications there. Alerts that fire while the app is open are still shown as a banner with sound. Alert times are computed in the beach's own time zone (Eastern), so a tide at 3:42 PM means 3:42 PM at the pier even if your phone is elsewhere. ## Next steps - [Widgets and the launch Live Activity](https://docs.neuralconfig.com/sunset-beach/alerts/widgets/): The home-screen and lock-screen widgets, and the countdown that appears for a visible launch. - [Siri, Spotlight and Shortcuts](https://docs.neuralconfig.com/sunset-beach/alerts/siri-shortcuts/): Say 'Alerts in Sunset Beach' or open sunsetbeach://alerts to reach this screen. - [Privacy](https://docs.neuralconfig.com/sunset-beach/data/privacy/): Exactly what leaves your phone when you turn a pushed alert on. - [Troubleshooting](https://docs.neuralconfig.com/sunset-beach/troubleshooting/): Alerts not firing, an empty queue, or a widget saying No data. --- # Widgets and the launch Live Activity Source: https://docs.neuralconfig.com/sunset-beach/alerts/widgets/ Sunset Beach, NC ships three widgets. **Sunset Beach** (*"The verdict, the next tide and the next good window."*) comes in four sizes: home-screen **small** and **medium**, and lock-screen **rectangular** and **inline**. **Tide** is a small home-screen widget with the tide curve. **This week** is a medium or large home-screen widget with the best thing to do each day. Every Sunset Beach size shows the overall beach **score** (the inline one gives it up while an NWS alert is in force). The larger sizes add the verdict, the rip risk and water temperature, the best time of day, the next tide, an active weather alert, and the next almanac window. All three widgets fetch the same small summary from the backend about every **30 minutes**, and show **No data** with a reason if they cannot. Separately, a **Live Activity** counts down a visible rocket launch on the Lock Screen and in the Dynamic Island for the hour before liftoff. ## What each widget size shows | Size | Shows | Tapping it opens | |---|---|---| | **Small** (home screen) | *"Sunset Beach"* with the score in the corner · the verdict headline · the rip risk and water temperature (*"Rip low · 79°"*) · the best time (*"Best 1:30–5 PM"*, or *"Best tomorrow 9 AM–1 PM"* once today's daylight is spent). An active NWS alert replaces the last two lines. With no best time, the next tide stands in | **Today's best time** for the best-time line; **Water** for the tide; **Today** while an alert is shown | | **Medium** (home screen) | Left: score · headline · surf height. Right: the next **two** tides, the next almanac window (title, rating if scored, and how far away), and any alert or warning | Tide rows → **Water**; next window → **When to go**; anywhere else → **Today** | | **Rectangular** (lock screen) | *"Sunset Beach 88"* · the rip risk, water temperature and next tide (*"Rip low · 79° · Low 2:40 PM"*; *"Water 76° · …"* when there is no rip forecast) · third line: an NWS alert if in force, otherwise tonight's sunset and its sky rating (*"Sunset 6:57 PM · average"*) while it's still ahead, otherwise the next window (*"Shelling in 2h 10m"*) | **Today** | | **Inline** (lock screen, beside the clock) | An NWS alert if in force; otherwise *"88 · Low 1:48 PM"*; otherwise *"Beach 88"* | **Today** | Times are in the beach's own time zone (Eastern). The sunset's sky rating is one of *spectacular*, *promising*, *average* or *flat*. **Alerts outrank warnings.** A National Weather Service alert (*"Coastal Flood Warning"*) is a public hazard notice; a warning (*"High rip current risk — NWS advises staying out of the water."*) is the app's own scoring advice. When both exist the alert wins, shown with a stop-sign octagon; when several alerts are in force the first is shown with a count, *"Hurricane Force Wind Warning +2"*. The app's warnings are all about the rip current, so on the small widget a warning colors the rip line and adds a warning triangle (*"Rip moderate · 84°"*, or *"No rip forecast · 76°"* out of season) rather than replacing the best time. On the medium widget a warning is shown in full. On the two lock-screen sizes only NWS alerts are shown, never warnings, and on the inline widget an alert displaces the tide entirely. National Weather Service drills and test messages are filtered out before they reach the widget, so they are never shown. **A clock icon beside the score** means at least one of the sources behind the summary is a **last known good** copy or couldn't be reached. Those sources are the buoys, the NWS forecast grid and alerts, the surf zone forecast, tides, sky and air quality. See [How fresh the data is](https://docs.neuralconfig.com/sunset-beach/data/freshness/). **An unscored window shows no rating.** If the next almanac window's rating is not meaningful for that occurrence, the widget prints its title and time without a rating word rather than inventing one. ## The Tide widget **Tide** (small, home screen) draws the next **12 hours** of the tide curve at the pier, with a dot for where the water is now. Underneath it gives the next high or low with its height (*"Low 2:40 PM · 0.3 ft"*) and the turn after that (*"high 8:58 PM"*). The top corner says whether the tide is **rising** or **falling**. Tapping it opens the tide chart on **Water**. ## The This week widget **This week** (*"The best thing to do each day this week, and which day is best for it."*) comes in two home-screen sizes: | Size | Shows | |---|---| | **Medium** | Five days, starting today: the day, a weather icon, the score of that day's best pick, and a short name for it (*Shells*, *Swim*, *Surf*, *Dolphins*, *Sunset*) | | **Large** | Seven days, one row each: the day, a weather icon, the high and low temperature, the pick's full name and its score. A day where nothing scores well says so | A **★** beside a score marks the best day this week for that kind of thing. The picks are the same ones the Plan tab's **Seven days** shows, and tapping the widget opens it. ## How and when it refreshes - All three widgets read the same summary. The widget fetches its own **summary** from the backend — a payload of a few KB built for it — with a **20-second** timeout. It does not load the full conditions payload the app uses. - After a successful fetch it asks iOS to refresh again in **30 minutes**; the Worker refreshes its sources every 5 minutes and nothing behind the summary is cached for less than 2 minutes, so refreshing faster would only re-read the same bytes. iOS treats the interval as a hint and may space refreshes further apart. - It also comes back about a minute after the next thing on its face passes — a tide turn, the end of the best time, or sunset — so a passed low tide isn't shown as the next one for half an hour. These refreshes are at least 5 minutes after the last fetch, so a run of close events can't use up the day's refreshes. - After a failed fetch it retries in **10 minutes**. - The widget shows a single point in time, not a series of future entries — everything on it depends on a forecast or observation, so nothing is extrapolated between refreshes. - The widget does not need the app to be open, and it always talks to the deployed Worker; opening the app also asks iOS to refresh it (at most once every 15 minutes). ## "No data" and the placeholder | What you see | Meaning | |---|---| | **No data** with a wifi-exclamation icon (small and medium) — the medium size adds the reason underneath, e.g. *"HTTP 503"* or *"The request timed out."* | The widget's last fetch of its summary failed. It retries in 10 minutes. Check that the phone is online; if the app itself loads, the widget will recover on its next refresh. | | *"Sunset Beach —"* (rectangular) or *"Beach —"* (inline) | The same failure on a lock-screen size, which has no room for a reason. | | A score of **88**, *"Go. Best for surfing."*, *"Rip moderate · 84°"* and *"Best 1:30–5 PM"*, or a High tide at 3:29 AM | This is the fixed **sample** shown in the widget gallery and while iOS renders a placeholder; it is not live data. | | *"The week isn't available yet."* (This week) | The summary arrived but had no week in it. It fills in on a later refresh. | ## The launch Live Activity When a rocket launch that the visibility model expects to be **visible from the beach** is within **one hour before** its scheduled liftoff (and up to **15 minutes after**), the app starts a **Live Activity**. On the Lock Screen it shows the rocket and mission (*"Falcon 9 · Bandwagon 5"*) beside a countdown, then where to look in one line, *"Look SE, about 25° up"*. Under that, a bar fills from an hour before liftoff to the moment the plume is best seen, with *"Best look about 6 min after liftoff"*. If the best moment isn't known, the bar runs to liftoff. When the launch is not going normally, the headline says so instead and the bar is hidden: 1. *"Scrubbed — no launch tonight."* if the launch has been scrubbed; 2. *"Holding. \"* if the launch is on hold; 3. the full look direction if there is no short one, e.g. *"Good chance. Look SE, about 18° above the horizon, around T+360s. You'll need a clear ocean horizon."*; 4. otherwise *"Visible from the beach."* or *"Not expected to rise above the horizon here."* In the Dynamic Island it shows a paper-plane glyph with the countdown, and the expanded view adds the rocket and, in two lines, the status or the full look direction. The countdown ticks on the phone itself, so it stays right with no signal. What the phone cannot know — the launch time **slipping**, a **hold**, a **scrub**, a launch going up, or a change in **where to look** and when the best look comes — is pushed to the activity by the Worker, which checks every five minutes and sends only when something has actually changed. The activity ends and clears immediately when the launch flies, fails or is scrubbed, and iOS marks it out of date 15 minutes after the scheduled liftoff if nothing further arrives. Two things to know: - **The app has to be open to start it.** The activity is started when the app loads conditions (on launch and on every refresh) and finds a qualifying launch inside the window; the app targets iOS 17.0, which does not support starting an activity by push. Once started, updates arrive whether or not the app is open. - **Live Activities must be allowed** for Sunset Beach in iOS Settings; if they are turned off the app silently does nothing. The Live Activity is separate from the **Visible rocket launches** alert on the Alerts screen, which is a one-off local notification at your chosen lead time — see [Alerts and notifications](https://docs.neuralconfig.com/sunset-beach/alerts/notifications/). ## Next steps - [Alerts and notifications](https://docs.neuralconfig.com/sunset-beach/alerts/notifications/): Tide, moon and launch alerts, and the pushed conditions alerts. - [How fresh the data is](https://docs.neuralconfig.com/sunset-beach/data/freshness/): What the clock icon beside the score means and how last-known-good works. - [Plan tab](https://docs.neuralconfig.com/sunset-beach/app/events/): Seven days, rocket launches and the next visible launch. --- # Siri, Spotlight and Shortcuts Source: https://docs.neuralconfig.com/sunset-beach/alerts/siri-shortcuts/ Sunset Beach, NC adds **ten App Shortcuts** that work with Siri, Spotlight and the Shortcuts app as soon as the app is installed — say *"Tide times in Sunset Beach"*, *"Rip current risk in Sunset Beach"* or *"Alerts in Sunset Beach"* and the app opens on that screen. Behind them are **three actions** you can use in your own shortcuts: **Open Beach Screen** (pick any of 66 screens and sections), **Search the Beach** (opens the app's search with your words typed in) and **Open Beach Alerts**. Every one of them works by opening a `sunsetbeach://` link, and you can open those links yourself. Nothing here speaks an answer — every phrase and action **opens the app** on the right screen rather than reading a tide time aloud. ## The ten phrases Every phrase must contain the app's name, so say it as written. Each tile below has more than one phrasing; any of them works. | Say | Opens | |---|---| | *"Tide times in Sunset Beach"* · *"When is high tide in Sunset Beach"* · *"When is low tide in Sunset Beach"* · *"Show me the tides in Sunset Beach"* | Water › **Highs & lows** | | *"Water quality in Sunset Beach"* · *"Is the water safe in Sunset Beach"* · *"Swim advisories in Sunset Beach"* | Today › **Water quality** | | *"Conditions in Sunset Beach"* · *"How warm is the water in Sunset Beach"* · *"Water temperature in Sunset Beach"* | The top of **Today**: the verdict and the current conditions | | *"Rip current risk in Sunset Beach"* · *"Surf forecast in Sunset Beach"* · *"Is it rough in Sunset Beach"* | Water › **In the surf** | | *"Sunset time in Sunset Beach"* · *"When is sunset in Sunset Beach"* | Today › **Sunrise & sunset** | | *"Beach rules in Sunset Beach"* · *"Dog rules in Sunset Beach"* · *"Can I bring my dog in Sunset Beach"* | More › Beach info › **Rules on the beach** | | *"Parking in Sunset Beach"* · *"Where do I park in Sunset Beach"* | More › Beach info › **Paid parking** | | *"Sea turtles in Sunset Beach"* · *"Turtle nests in Sunset Beach"* | Nature › **Sea turtles** | | *"Search Sunset Beach"* · *"Find something in Sunset Beach"* | The **search** sheet — Siri asks *"What are you looking for?"* | | *"Alerts in Sunset Beach"* · *"Open Sunset Beach alerts"* | The **Alerts** screen | In the Shortcuts app these appear as a **Sunset Beach** group of ten tiles (short titles: Tide times, Water quality, Conditions, Surf zone, Sunset, Beach rules, Parking, Sea turtles, Search, Alerts). Ten is Apple's limit for ready-made App Shortcuts, which is why the other places are reached through the **Open Beach Screen** action instead. :::caution The rip current, surf and water-quality screens these phrases open show National Weather Service forecasts and NC DEQ samples. Sunset Beach has no lifeguards and the app is not a safety service — look at the sea, posted flags and signs, and official warnings before you go in. ::: ## The three Shortcuts actions | Action | What it does | Parameter | |---|---|---| | **Open Beach Screen** | *"Opens any section or screen in Sunset Beach, including ones several taps deep."* These are the same places the app's own search reaches. Summary reads *Open \ in Sunset Beach*. | **Screen** — a *Beach Screen* (see below) | | **Search the Beach** | *"Opens Sunset Beach's search with your words already typed in."* Summary reads *Search Sunset Beach for \*. | **Search for** — free text (*"Anything the app might know: tides, dogs, UV, parking."*) | | **Open Beach Alerts** | *"Opens Sunset Beach's alert settings and the alerts already scheduled."* | none | All three open the app in the foreground; none returns a value to the shortcut. ### The Beach Screen picker **Beach Screen** is the list of places the app can open: **66** entries — the **17 screens** (Today, Water, Plan, Nature, More, Beach info, Nature map, When to go, The year, Sightings, Birds, Migration radar, Fishing, Sources, Alerts, How it's built, Acknowledgements), followed by **49 sections**, each shown with its title and where it lives (*"Water"*, *"Nature › Fishing"*, *"More › Beach info"*). The four sections of the Alerts screen are deliberately not listed separately, because all of them open the same sheet; pick **Alerts**. Typing into the picker searches with the **app's own search index**, including its synonyms, so *"uv"* offers **Air & sun**, *"dog"* offers **Rules on the beach**, and *"size limit"* offers **Before you keep one** (three screens deep under Nature › Fishing). A saved shortcut stores the place's `sunsetbeach://` link; if a future version of the app stops recognising it, the Shortcuts editor shows the parameter as broken rather than silently opening a different screen. Shortcuts saved with version 1.0 keep working: a saved **Events** or **This week** opens Plan, a saved **Beach info** (the old Info tab) opens More › Beach info, and a saved **Sources** opens More › Sources. ### Spotlight The ten App Shortcuts are what iOS lists for Sunset Beach in Spotlight and in Siri suggestions. The app does not add its own Spotlight index of tides, species or events — for that, use the in-app search (see [Search](https://docs.neuralconfig.com/sunset-beach/app/search/)). ## Deep links: the `sunsetbeach://` scheme Every shortcut, widget tap and notification tap opens the app through one of these links, and you can use them yourself (from a Shortcuts *Open URL* action, for example). A link the app does not recognise is ignored — the app opens where you left it rather than on an arbitrary screen. | Link | Opens | |---|---| | `sunsetbeach://today`, `sunsetbeach://tides`, `sunsetbeach://plan`, `sunsetbeach://nature`, `sunsetbeach://more` | The five tabs (`tides` is the Water tab) | | `sunsetbeach://events`, `sunsetbeach://launches` | Older names for the Plan tab, still honoured | | `sunsetbeach://info` | The 1.0 Info tab: opens More › Beach info | | `sunsetbeach://sources`, `sunsetbeach://info/sources` | Older names for More › Sources, still honoured | | `sunsetbeach://more/beachInfo` · `/sources` · `/unknowns` · `/built` · `/acknowledgements` | Beach info, Sources, Known gaps, How it's built, Acknowledgements | | `sunsetbeach://tides/offshore` · `/inland` · `/shellfish` | Water's **Further out** screens: Offshore, The sound and the ICW, Shellfish | | `sunsetbeach://nature/map` · `/almanac` · `/year` · `/sightings` · `/birds` · `/migration` · `/fishing` | Nature map, When to go, The year, Sightings, Birds, Migration radar, Fishing | | `sunsetbeach://nature/almanac/` | One window's detail screen on When to go (this is what a **Remind me** notification opens) | | `sunsetbeach://nature/planner` | The 1.0 This week screen: opens **Seven days** on Plan | | `sunsetbeach://launch/` | One launch's detail screen on Plan; a bare `sunsetbeach://launch` opens the Plan tab | | `sunsetbeach://section/` | Switches to the right tab, pushes any screens needed, and scrolls to that section | | `sunsetbeach://alerts` | The Alerts screen (from any tab, without changing tab) | | `sunsetbeach://search` and `sunsetbeach://search?q=uv` | The search sheet, empty or with a query typed in | ### Section ids Use these after `sunsetbeach://section/`. Sections filed under Alerts open the Alerts screen. | Screen | Section ids (title) | |---|---| | Today | `todayRightNow` (Right now: the top of the screen, with no heading) · `todayActivities` (What it's good for) · `todayWhenToGo` (Best time today) · `todaySunset` (Sunrise & sunset) · `todayAirAndSun` (Air & sun) · `todayUpcoming` (Coming up) · `todayPractical` (Practical) · `todayWaterQuality` (Water quality) · `todaySkyAhead` (Next hours) · `todayBestDays` (The week ahead) | | Water | `waterSurfZone` (In the surf) · `waterSurge` (Against the prediction) · `waterChart` (Tide chart) · `waterExtremes` (Highs & lows) | | Water › Offshore, The sound and the ICW, Shellfish | `waterOffshore` (Offshore) · `waterInland` (The sound and the ICW) · `infoShellfish` (Shellfish) | | Plan | `plannerBest` (Seven days) · `eventsNextLaunch` (Next visible launch) | | Nature | `natureWhenToGo` (Times & seasons) · `natureRightWhales` (Right whales) · `natureSightings` (Seen near here lately) · `natureBirds` (Birds) · `natureMigration` (Migration radar) · `natureTurtles` (Sea turtles) · `natureFishing` (Fishing) · `natureMarineLife` (What you might see) | | Nature › Fishing | `fishingBiting` (What's biting) · `fishingPeaking` (Peaking this month) · `fishingNext` (Starting next month) · `fishingAll` (Everything worth casting at) · `fishingRules` (Before you keep one) | | Nature › When to go | `almanacNext` (Next) · `almanacSunMoon` (Sun & moon) | | Nature › Sightings, Birds | `sightingsList` (Whales, turtles and sharks) · `birdsNotable` (Notable) | | More | `infoAbout` (This app) | | More › Beach info | `infoGettingThere` (Getting there) · `infoRules` (Rules on the beach) · `infoWhereFrom` (Where this comes from) · `infoTropical` (The tropics) · `infoParking` (Paid parking) · `infoRates` (Rates) · `infoGoodToKnow` (Good to know) · `infoPaying` (Paying) · `infoCams` (Beach cams) · `infoShips` (Ships offshore) | | More › Sources | `sourcesUpstreams` (Every source) | | More › Known gaps | `sourcesGaps` (Known gaps) | | Alerts | `alertsTides` (Tides) · `alertsSpecial` (Worth a special trip) · `alertsPush` (When conditions change) · `alertsQueued` (Queued) | :::note `sunsetbeach://` links only work on a phone with the app installed. Messages and other apps will not reliably turn them into tappable links, which is why the app's share sheet sends text with the public web address instead — see [Sharing conditions](https://docs.neuralconfig.com/sunset-beach/alerts/sharing/). ::: ## Next steps - [Search](https://docs.neuralconfig.com/sunset-beach/app/search/): What the in-app search covers, and the index the Beach Screen picker shares with it. - [Alerts and notifications](https://docs.neuralconfig.com/sunset-beach/alerts/notifications/): What the Alerts screen that 'Open Sunset Beach alerts' reaches can do. - [Sharing conditions](https://docs.neuralconfig.com/sunset-beach/alerts/sharing/): What the share button sends, and why it is text rather than a deep link. --- # Sharing conditions Source: https://docs.neuralconfig.com/sunset-beach/alerts/sharing/ The **share button** (the square-with-arrow icon in the top-right corner of the **Today**, **Water** and **Plan** tabs) opens the standard iOS share sheet with a short **text message** already composed: the headline for that screen, the numbers behind it, an *"As of …"* stamp giving when the reading was generated, and the public web address `https://sunsetbeach.neuralconfig.com` on the last line. The recipient reads the answer in the notification and can open the web page for the rest; nothing about the message needs the app installed. Nature and More have no share button, because nothing on them is timely. ## What each screen sends Each message is a few lines separated by line breaks. Anything the app does not currently have (a missing water temperature, say) is left out rather than shown as a dash, so a thin day makes a shorter message, never a punctured one. | Screen | Lines in the message | Example first line | |---|---|---| | **Today** | 1. *"Sunset Beach — "* + the verdict headline
2. air temperature · water temperature · surf height · rip current risk
3. *"Next window: \, \."* if the almanac has one
4. *"As of \."*
5. `https://sunsetbeach.neuralconfig.com` | *"Sunset Beach — Active alert: Heat Advisory"* then *"85° air · 85° water · surf around 2 feet · low rip current risk"* | | **Water** | 1. *"Sunset Beach tides — next \ \, \ ft."*
2. *"Surf around 2 feet · low rip current risk"* when the surf zone forecast is available
3. the stamp and the address | *"Sunset Beach tides — next low 5:02 PM, -0.1 ft."* | | **Plan** | If a **visible** launch is coming: *"Visible launch from Sunset Beach: \"*, its date and time, and the visibility verdict. Otherwise: *"Next at Sunset Beach: \, \."* Then the stamp and the address. | *"Visible launch from Sunset Beach: Falcon 9 …"* then *"Good chance. Look SE, about 18° above the horizon, around T+360s. …"* | Times are in the beach's own time zone (Eastern). The stamp reads like *"As of Aug 16 at 3:09 PM."* (the exact form follows the phone's region settings) :::caution The surf height and rip current risk in a shared message are the National Weather Service surf zone forecast for the day, as of the stamp — not the water in front of whoever reads it. Sunset Beach has no lifeguards and the app is not a safety service. ::: Three details are deliberate: - **The stamp is when the reading was generated, not when you tapped Share.** Conditions move, and *"surf around 2 feet, low rip current risk"* sent at three o'clock is wrong by six unless the message says when it was true. On a day the app is showing last-known-good data, the two times can be hours apart. - **The link is always the public web page**, `https://sunsetbeach.neuralconfig.com`, never a `sunsetbeach://` link — those only work on a phone with the app installed. See [Siri, Spotlight and Shortcuts](https://docs.neuralconfig.com/sunset-beach/alerts/siri-shortcuts/) for what the app-only links do. - **A launch is preferred over a sooner concert** on Plan. A visible launch is the rarest thing the app knows and loses its value if nobody is told in time. ## When the button is missing The share button is only drawn when there is something to send: - **Today** always has a share button once conditions have loaded — the verdict headline is the one thing the app always has. - **Water** shows it only when there is a next tide extreme to name; without a tide prediction the button is absent rather than greyed out. - **Plan** shows it only when there is a visible launch ahead or a future item on the events timeline. - **Nature** and **More** (including Beach info) never have one — a species range or a parking rule is as true tomorrow, so sharing those is sharing the app, which the address at the end of every message already does. - Before conditions load (or on the load-failed screen) there is nothing to share and no button. :::note Sharing sends **only** the composed text through the iOS share sheet. It does not attach a screenshot, an image, or a link that opens the app on a particular screen — the public web page has no per-section addresses to link to. ::: ## Next steps - [Today tab](https://docs.neuralconfig.com/sunset-beach/app/today/): The verdict headline the Today share opens with. - [Water tab](https://docs.neuralconfig.com/sunset-beach/app/water/): Highs & lows and the surf zone forecast behind the Water share. - [Plan tab](https://docs.neuralconfig.com/sunset-beach/app/events/): Visible launches and the town timeline behind the Plan share. - [How fresh the data is](https://docs.neuralconfig.com/sunset-beach/data/freshness/): Why the 'As of' stamp can be older than the moment you shared. --- # Where every number comes from Source: https://docs.neuralconfig.com/sunset-beach/data/sources/ Everything in Sunset Beach comes from public data about this one beach, fetched by the Worker at `sunsetbeach.neuralconfig.com` and never by your phone. The Worker reads **more than 20 public data sources**, plus a handful of things it computes with no upstream at all (sun and moon, the almanac, parking, beach rules, the camera and ship-tracker links). Nothing is scraped or fetched on your behalf; the same cached copy serves everyone. This page is the full list, one row per upstream, with what it feeds and what it cannot tell you. :::caution Sunset Beach is **not a safety service** and the beach has **no lifeguards**. Rip current risk, surf height and swim advisories come from the National Weather Service and NC DEQ and are forecasts and periodic samples — not observations of the water in front of you. Never let this app, or any app, substitute for looking at the sea, posted flags and signs, and official warnings. ::: ## The upstreams **Refresh** is how long the Worker keeps a copy before asking the upstream again. **Fallback** is how long a last-known-good copy may be shown, labelled as such, if the upstream is down (see [How fresh the data is](https://docs.neuralconfig.com/sunset-beach/data/freshness/)). Where no fallback is listed it is the default of 1 day. | # | Upstream | What it is | Feeds | Refresh | Known limits | |---|---|---|---|---|---| | 1 | **NDBC 41024** "Sunset Nearshore (SUN2)" | NOAA buoy at 33.837N 78.477W, essentially off the beach | Today: wind, pressure, air and water temperature | 5 min | **Reports no wave data at all** — WVHT/DPD/APD/MWD are always missing and it has no spectral file. Meteorology and sea-surface temperature only. | | 2 | **NDBC 41013** "Frying Pan Shoals" (spectral) | NOAA buoy ~50 mi offshore SE | Water: Offshore — swell height, period and direction, wind-wave, steepness | 5 min | The **only live wave observation** available. It is 50 miles out, not the surf at the beach. | | 3 | **NDBC 41110** "Masonboro Inlet" | NOAA nearshore waverider about 50 miles ENE | Sources screen cross-check row (water temperature) | 5 min | Sanity check only; the app prints its water temperature and declares no agreement. | | 4 | **NWS Surf Zone Forecast NCZ110** | Human-written NWS Wilmington text product; the app reads the **"Ocean Isle Beach West"** sub-zone row | Today: rip current risk, surf height, water temperature; Water: In the surf; Plan: Seven days | index 15 min, product 30 min | The best beach-specific source. Days 0–1 are the West sub-zone; the extended days are written once for the whole Coastal Brunswick zone (Ocean Isle to the state line) and are labelled as covering the whole zone. An issuance more than 30 hours old is marked Cached, and one more than 72 hours old is not shown at all. | | 5 | **NWS gridpoint ILM 70,57** | Raw NWS forecast grid for 33.8807,-78.5111 | Today: Weather ahead, thunder chance, fog risk, wind; the cloud gate in the launch model; planner | 10 min | Coarser past about day 3, and labelled so. `lightningActivityLevel` and `probabilityOfTropicalStormWinds` are present upstream and deliberately not read. | | 6 | **NWS active alerts** | `api.weather.gov/alerts/active?point=…` for the beach | Today headline ("Active alert: …"), safety push | 2 min; fallback 2 h | Public domain. Only alerts covering this point; drills and tests (CAP `status` other than `Actual`) are dropped before they reach the app, the widget or a push, and so are cancellations and any alert past its end or expiry time. | | 7 | **CO-OPS 8659897** "Sunset Beach Pier" | NOAA harmonic tide predictions: highs and lows 15 days ahead, 6-minute curve 4 days | Water: Tide chart, Highs & lows; almanac; tide alerts | 6 h; fallback 4 d | **Predictions only** — the station lost its water-level sensor in 2008. 8659898 "Sunset Beach Bridge" has no predictions and is not used. | | 8 | **Open-Meteo Marine** | Wave model (GFS-Wave / ICON-Wave / WAM) on a ~25 km grid | Water: forecast waves, sea temperature ahead; planner | 15 min | The model cell is offshore of the beach; the app says how far offshore it is. Non-commercial tier. | | 9 | **Launch Library 2** (The Space Devs) | `launch/upcoming` list, 40 launches, `mode=detailed` | Plan: rocket launches, the next launch; Live Activity; launch alerts | 4 h, dropping to 5 min while a visible launch is within T−75 to T+20 min; fallback 7 d | Only **Cape Canaveral / KSC** and **Wallops Island** pads are modelled. Anonymous limit ~15 requests/hour per IP; on a failed fetch (typically a 429) the Worker falls back to its last-known-good copy (up to 7 d) and also tries The Space Devs' `lldev` mirror, whose data can lag, and says so in the source name. The mirror replaces the old copy only when it has a current one; with no copy of its own, the Worker takes any mirror copy up to 7 d old. | | 10 | **Open-Meteo forecast** | Radiation, UV, layered cloud (low/mid/high), visibility, temperature, precipitation, wind — 7 days plus the past day | Today: Sunrise & sunset, Air & sun (UV, burn time), when rain starts; planner | 15 min | Drives the sunset and sunrise model. Non-commercial tier. | | 11 | **Open-Meteo Air Quality** (CAMS) | US AQI, PM2.5, PM10, ozone, NO2, SO2, CO, dust | Today: Air & sun; activity scores | 30 min | Modelled, not a monitor on the beach. | | 12 | **Town calendar + concerts** | Three parts: the Town of Sunset Beach Office 365 ICS feed (3 h, fallback 14 d); the town's Sunset Sound Waves schedule page (24 h, 30 d); the Sunset Beach Fishing Pier events page, scraped (12 h, 30 d) | Plan tab; Coming up on Today | see left | 45 days ahead. The Wednesday concert **series** is reconstructed from the town's stated weekly pattern, marked **series**, and its season end is **assumed to be Labor Day**. The pier page is HTML and will break if redesigned; unparsed lines are shown raw. | | 13 | **USGS NWIS gauges** | Three gauges: 02110777 Intracoastal Waterway at Nixons Crossroads (~12 mi), 02110550 Waccamaw River above Conway (~30 mi), 02105769 Cape Fear River at Lock 1 (~90 mi) | Water: Inland water | 30 min | Each gauge is fetched and cached on its own, so one failing gauge costs only its own readings; the panel is Cached if any gauge fell back or failed, and Unavailable only when all three fail. The ICW gauge is the only local one. Cape Fear discharge is an upstream pressure indicator, not a measurement of anything at the beach. | | 14 | **OBIS** | Ocean Biodiversity Information System occurrence records for six species in a ~35-mile box | Nature: Times & seasons, What you might see | 7 d; fallback 60 d | **Historical records with a lag of months to years** — never live sightings. Record dates measure survey effort, so seasons are curated, not derived from them. | | 15 | **Sunset Beach Turtle Watch Program** | sunsetbeachturtles.org home page, scraped for the season's nest / false crawl / boil totals, plus a computed NC season model | Nature: Sea turtles; almanac hatch window | 6 h; fallback 14 d | Season totals only — **no per-nest hatch dates** exist publicly. If the scrape finds no numbers, the season model still shows and says the totals weren't found. | | 16 | **iNaturalist** | Community observations within 40 km: last 30 days, species counts over 14 days, and 8 years of whales/dolphins, sea turtles, sharks/rays | Nature: Seen near here lately, Nature map | 6 h / 24 h / 7 d; fallback 7 / 14 / 30 d | **Measures observers, not animals**. Protected species (all sea turtles) have deliberately blurred locations and are not drawn as points. Rate-limited; the Worker coordinates fetches globally. | | 17 | **NOAA NEFSC right whale layers** | Dynamic Management Areas (3 h, fallback 3 d), Seasonal Management Areas (12 h, 7 d), critical habitat Unit 2 (30 d, 180 d) | Nature: Right whales; almanac whale window | see left | Slow zones and habitat, **not whale positions** — no public feed of individual whale positions exists. An empty zone layer is a real answer, not a failure. | | 18 | **eBird** (Cornell Lab) | Recent observations within 30 km over 7 days, and notable (rarity) records over 14 days | Nature: Birds, Notable | 1 h; fallback 7 d | **The only source that needs an API key** (`EBIRD_API_KEY`). Without one the panel reads "Not set up", not broken. Measures birding effort as much as birds. A birder's home is shown as *private location*, rounded to about a kilometre. | | 19 | **BirdCast** (Cornell Lab) | Radar migration for Brunswick County (US-NC-019), read from BirdCast's public S3 bucket; the night from 7 PM to 8 AM sampled every two hours | Nature: Migration radar | listing 10 min (fallback 3 d); each object 7 d | Observed only — the forecast bucket is not public, so the app links out for it. County-wide volume, never species; daytime readings are invalid by design. | | 20 | **NC DEQ Recreational Water Quality** | ArcGIS FeatureServer: advisory status, enterococcus results and posting history for ocean stations **S1, S2, S3** on this beach, plus the swim-season table | Today: Water quality; safety push | 6 h; fallback 30 d (swim season 30 d / 365 d) | **Sampling is weekly**, so a clear result can be most of a week old. Sound-side stations are deliberately excluded. | | 21 | **NCDEQ shellfish** | Conditional management unit closures within 6 nautical miles (3 h, fallback 7 d) and the standing growing-area classification (7 d, 90 d) | Water: Further out › Shellfish | see left | Read from `Status`; `HA_STATUS` disagrees on every closed unit statewide and is not used. **No closure start or end date exists** — only when the state last edited the layer. | | 22 | **Turtle Watch scrape vs. the standardised nest database** | seaturtle.org nest database, beach 23 "Sunset Beach plus Bird Island" | Nothing in the app — an internal cross-check | 6 h; fallback 7 d | Publishes **only whether the two nest counts agree** (within two). No figure from seaturtle.org appears anywhere: its terms withhold permission to reference the data without written consent. | | 23 | **NCDEQ sanitary sewer overflows** | Reported spills within 10 nautical miles in the last 14 days | Today: a conditional line inside Water quality | 1 h; fallback 2 d | Renders **nothing at all** when empty, which is the normal state (about one a month county-wide, mostly inland). | | 24 | **NHC Atlantic Tropical Weather Outlook** | `nhc.noaa.gov/index-at.xml`, issued four times a day | Beach info: The tropics | 1 h; fallback 2 d | Basin-wide formation chances, **not a local forecast**. `CurrentStorms.json` is deliberately not parsed. | | 25 | **CO-OPS 8661070** "Springmaid Pier" | Observed vs. predicted water level at the nearest instrumented station, about 24 nautical miles down the coast | Water: Against the prediction | 10 min; fallback 3 h | **Only the anomaly** (observed minus predicted) is carried across; the absolute level and that station's flood thresholds are never shown. | | 26 | **NWS Coastal Waters Forecast AMZ252** | Human-written nearshore forecast, Cape Fear to Little River Inlet out 20 nm | Water: Offshore | list 15 min; product 1 h, fallback 24 h | A forecast, not a wave observation. AMZ250 also says NC and is the wrong side of Cape Fear. | | 27 | **Sunset Beach Fishing Pier daily report** | The pier's blog RSS at `apps.sunsetbeachpier.com` | Nature: Fishing (What's biting); pier water temperature | 1 h; fallback 30 d | The catch is **yesterday's**, from one pier. Read over plain HTTP because the host's certificate is for another name. The pier shuts for the winter, so a months-old report is the season, not a fault. | | 28 | **N.C. DMF proclamations in effect** (finfish) | The state's proclamation list, read page by page until a short page, at most 8 pages | Fishing: Before you keep one | 6 h; fallback 30 d | The **limits themselves are read by hand** and stamped with a date; this feed only says whether a newer proclamation names a fish. A failed page, or hitting the 8-page cap, marks the list Cached. Not legal advice. | A buoy whose newest report is more than 3 hours old counts as failed, so its readings show as Cached or Unavailable rather than as live. ## What is computed, not fetched These have no upstream, so they can be neither stale nor unavailable. The Sources screen lists four of them (Almanac, Parking, Beach rules & access, Ships offshore) as *"Calculated by the app's own server. No outside source."*; the rest simply have no row: | Panel | Computed from | |---|---| | Sun and moon (sunrise, sunset, twilight, golden hour, moonrise over the ocean) | Astronomy for 33.8807, −78.5111 | | Almanac ("When to go") and Seven days | Tide, sun, moon, plus the forecast sources above | | Activity scores, best time and the week's picks | The forecast and observation sources above — see [How the app judges things](https://docs.neuralconfig.com/sunset-beach/data/scoring/) | | The summary line at the top of Today | Written by Claude Haiku (Anthropic), or a Workers AI model as fallback, from facts the server has already computed, and checked against them before it is shown. The model is given those facts only — nothing about you or your phone. | | Coming up (Today) | Events, launches and sky, already fetched | | Parking | The town's paid-parking ordinance as a function of the date and time | | Beach rules & access | Read off the town's Beach Rules and Beach Access Points pages, dated 2026-08-09 | | Beach cams and Ships offshore | Curated links opened in Safari — nothing is fetched or tracked | ## Where to see this live In the app: **More › Sources** lists the upstream panels with a status dot, under the section **"Every source"** (shellfish, spills, the tropical outlook, surge and the Coastal Waters Forecast have no row there), followed by up to four computed rows — Almanac, Parking, Beach rules & access and Ships offshore. Those are counted too, so the total in the More tab's **Sources** row (*"N of M live"*) includes them and is higher than the number of upstream panels. Tap a row for the source name, the upstream link (**View at the source**) and any fallback reason. The standing gaps are on their own screen, **More › Known gaps**. On the web: the **Where this comes from** table at the bottom of the page. ## Next steps - [How fresh the data is](https://docs.neuralconfig.com/sunset-beach/data/freshness/): Cache lifetimes, the 5-minute warmer, and what 'last known good' means on a card. - [Limits and what it doesn't know](https://docs.neuralconfig.com/sunset-beach/data/limits/): One beach, no lifeguards, no wave sensor, and the sources that are scraped by courtesy. - [How the app judges things](https://docs.neuralconfig.com/sunset-beach/data/scoring/): Activity scores, the sunset model, rip verdicts and launch visibility. --- # How fresh the data is Source: https://docs.neuralconfig.com/sunset-beach/data/freshness/ Nothing in Sunset Beach is fetched live when you open the app. A cron job on the Worker runs **every 5 minutes**, refreshes every upstream whose cache has expired, and publishes one assembled copy of the conditions that every phone and browser then reads. So a reading is at most its source's cache lifetime plus up to two cron ticks old — for the buoys that means roughly 5–15 minutes, for tides up to 6 hours (they are predictions, so it doesn't matter), and for a fishing report up to an hour. When an upstream is down, the Worker serves the **last copy that worked** and labels it — **"Cached"** on the Sources screen, **"Showing last good reading"** in the row's detail — rather than showing nothing or passing old data off as live. ## The pipeline, end to end ```mermaid flowchart LR U[More than 20 public data sources] -->|"fetched by cron every 5 min"| E[Edge cache per source TTL] E -->|"good fetch also written"| K[KV last-known-good copy] E --> C["Assembled conditions published to KV"] K -.->|"upstream down: served flagged stale"| C C --> P[iOS app and web page] E -->|"small summary"| W[Home-screen widget] ``` In prose: the cron fetches each upstream through the same code path a reader would, honouring that source's cache lifetime; a successful fetch is stored in the edge cache and also written to KV as the last-known-good copy; the cron then assembles the whole conditions payload once and publishes it to KV, and every request serves that copy verbatim. If an upstream fails or returns something unparseable, the KV copy is served in its place, flagged as stale with a reason. The widgets read a much smaller summary, built from the same cached sources and reused for up to a minute; a widget asks for it about every 30 minutes (10 after a failure), and iOS may space that out further. ## How often each source is refreshed The lifetime is set by what the upstream actually does. The full per-source table is on [Where every number comes from](https://docs.neuralconfig.com/sunset-beach/data/sources/); this is the shape of it. | Source | Refresh | Why | |---|---|---| | NWS active alerts | 2 min | safety feed | | NDBC buoys 41024, 41013, 41110 | 5 min | stations post every ~10 min | | NWS gridpoint forecast | 10 min | amended forecasts show up quickly | | Springmaid Pier surge, BirdCast bucket listing | 10 min | 6-minute and 10-minute upstreams | | Open-Meteo sky, marine; surf zone forecast index; coastal waters index | 15 min | hourly models, products issued a few times a day | | Surf zone forecast product, air quality | 30 min | | | eBird, pier fishing report, tropical outlook, sewer spills, coastal waters product | 1 h | | | Town calendar ICS, shellfish closures, right whale slow zones | 3 h | | | Launch Library 2 | 4 h, or **5 min** while a visible launch is within T−75 to T+20 min | rate-limited upstream; the short window is what lets a slip reach a Live Activity | | Tides, turtle counts, water quality, iNaturalist recent, proclamations, nest-database canary | 6 h | deterministic or slow-moving | | Pier concert page, seasonal whale zones | 12 h | | | Sound Waves page, iNaturalist species counts | 24 h | | | OBIS, iNaturalist megafauna, BirdCast objects, shellfish classification | 7 d | historical, immutable, or a standing category | | Right whale critical habitat | 30 d | a 2016 regulatory boundary | ## The published conditions copy The conditions the app loads are not rebuilt per request. The cron assembles them once per tick and publishes the result to KV; readers get that copy until it is **10 minutes** old (twice the cron cadence, so an ordinary KV lag never forces a rebuild), after which a request recomputes it. A refresh that finds nothing new costs the phone almost nothing, because it only checks its saved copy is current. The practical effect: the interpolated tide height, countdowns and the sun's position can lag by up to two ticks, and the app's *Updated …* time tells you exactly when the copy was built. ## What "Cached" and "last known good" mean Every fetched panel carries whether it is live, when it was fetched, and, if it fell back, why. The app turns that into one of three states: | Status | Sources row badge | Row detail | Meaning | |---|---|---|---| | Live | *(no badge, shows how long ago it was fetched)* | "Live" | The upstream answered inside its refresh window. | | Cached | **"Cached"** | **"Showing last good reading"**, with a "Showing cached data because" line giving the reason in a plain sentence, such as *"The source is limiting how often we can ask (HTTP 429)."* | The upstream failed, timed out, rate-limited, or returned something unparseable, so the previous good copy is shown. Its fetched time is when *that* copy was fetched. | | Down | **"Unavailable"** | "Unavailable", with an "Error" line | No usable copy exists — the panel shows nothing. | The Sources screen (**More › Sources**) opens with a strip counting **Live / Cached / Down** out of the total, then *"Updated \. "Cached" means a source failed, so the app is showing its last good reading."* The **More** tab carries the same tally in its **Sources** row (*"N of M live"*, with *"· N cached"* and *"· N down"* added only when non-zero). Tap a row for its detail, with **View at the source**. A few rows — Almanac, Parking, Beach rules & access, Ships offshore — are calculated or copied by the app itself and say so. What the app can't measure at all is on **More › Known gaps**, not here. How long a fallback may be shown depends on the source: **1 day** unless the adapter says otherwise, and longer where a stale answer still beats none — 30 days for water quality, the pier report and the proclamations (the pier shuts for the winter, so a months-old report is the truthful answer), 7 days for launches and eBird. It is shorter where an old answer misleads: 3 hours for the surge anomaly (a day-old anomaly describes a different weather system) and 2 hours for NWS alerts. Past that window the panel goes to Down rather than showing something misleading. :::note A panel assembled from several upstreams is only as fresh as its oldest part and only as live as its stalest. Tides (hi/lo list plus the 6-minute curve), events (three feeds), fishing (pier report plus proclamations), right whales (four layers) and water quality (four layers) all report the oldest fetched time and go "Cached" if any part fell back — including a part that failed outright, since the panel is then incomplete. ::: ## The app's memory Separately from caching, the cron keeps a small diary: once an hour it writes a ~1 KB projection of the published payload (the verdict, the sunset rating and the cloud profile it came from, the rip level, water temperatures, the surge anomaly, the next tide, turtle counts, AQI, the pier's catch list) to KV for **90 days**, and once a day rolls the hours up into a record kept for **two years**, so the app's forecasts can be compared with what the sky then did. Nothing on the phone reads this; it exists so the sunset and score weights can one day be tuned against outcomes. ## Next steps - [Where every number comes from](https://docs.neuralconfig.com/sunset-beach/data/sources/): The full table of upstreams, with each source's refresh and fallback window. - [Limits and what it doesn't know](https://docs.neuralconfig.com/sunset-beach/data/limits/): Staleness bounds, upstream rate limits and the fragile scrapes. - [Troubleshooting](https://docs.neuralconfig.com/sunset-beach/troubleshooting/): What to do when a panel says Cached or Unavailable, or the app can't reach the beach. --- # How the app judges things Source: https://docs.neuralconfig.com/sunset-beach/data/scoring/ Every judgement Sunset Beach makes is a **sum of named, signed contributions** that the app prints back verbatim, so you can always see why. Four activities (Swimming, Surfing, Beach walk & shelling, Sunset watching) each start at 50 and add or subtract points for rip risk, water temperature, surf, wind, rain, sun and air quality; some conditions **cap** a score outright, such as swimming after dark. The headline is weighted toward the best of them. The same scoring runs **hour by hour** to find the day's **best time**, and the summary line at the top of Today is written by **Claude Haiku** from those computed facts, then checked by code before it is shown. The sunset and sunrise outlook is judged on the **layered cloud profile** at that hour, not total cloud cover. Rip and swim verdicts come straight from the NWS surf zone forecast's rip level. Rocket-launch visibility is a geometry-and-lighting model built on the Worker. Almanac windows score *this occurrence against a typical one of its kind*. All of the weights are, in the code's own words, opinionated guesses tuned against nothing but judgement about this beach. :::caution None of this is a safety service. Sunset Beach has **no lifeguards**, and rip current risk here is an NWS forecast for a stretch of coast, not an observation of the water in front of you. Look at the sea, posted flags and signs, and official warnings before you go in. ::: ## Activity scores ("What it's good for") Each activity starts at **50** and its contributions are added, then clamped to 0–100. Ratings: **great** ≥ 75, **good** ≥ 55, **fair** ≥ 35, otherwise **poor**. Tap an activity on Today to see every contribution, with a **Start 50, total** line so you can check the arithmetic. | Activity | What adds or subtracts points | Ceiling | |---|---|---| | **Swimming** | Rip level None +15 / Low +5 / Moderate −25 / High −50 · water ≥ 78°F +20, ≥ 72 +12, ≥ 65 −5, colder −25 · surf midpoint ≤ 2 ft +12, ≤ 4 ft −5, higher −20 · ≥ 50% rain −12 · burn time ≤ 20 min −8 · air quality (see below) | **10 after dark** (*"After dark — nobody can see a swimmer in trouble"*) — bath-warm water is still true at 2 AM, so darkness caps the score rather than merely deducting. **54 with no rip forecast** (the top of *fair*, *"Rip current forecast unavailable"*) | | **Surfing** | surf 3–6 ft +25, ≥ 2 ft +8, smaller −25 · swell period ≥ 10 s +20, ≥ 7 s +8, shorter −10 · wind < 5 mph +15, offshore +18, onshore > 12 mph −20, otherwise −5 · steepness printed at 0 | **10 after dark** (*"After dark — you can't see the waves coming"*) | | **Beach walk & shelling** | tide ≤ 1 ft +25, ≤ 2.5 +12, ≤ 4 −5, higher −20 · falling tide +8 · wind > 20 mph −20, > 14 −8, else +8 · rain ≥ 60% −25, ≤ 15% +8 · air 65–88°F +10, > 95 or < 45 −15 · feels-like ≥ 8° hotter −8 · air quality | none — after dark is a −10 (*"After dark — fine for a walk, but shelling needs a flashlight"*), because a low-tide walk at 11 PM is a real reason to go out | | **Sunset watching** | (sunset model score − 50) × 0.6, with the high-cloud and low-cloud percentages printed at 0 · ≥ 50% rain −15 · wind < 12 mph +5 · falls back to total cloud (25–70% +15, else −5) if the layered profile is missing | **10 once tonight's sunset has passed** (*"The sun has already set"*), lifting at midnight | ### How do caps work? A **cap** is a ceiling, not another negative row: no amount of warm water makes swimming in the dark something to recommend, so the two should not be able to cancel out. The activity screen shows a capped score as **Capped at N**, with *"Without the cap these conditions would score M."*, and puts the cap above the contributions under **What decides it** — for example *"This overrides everything below until \."* The rows are then headed **What went into the M**, so they still add up. A cap is only reported when it changed the number: a surf score of 4 at night was decided by the surf, not the dark. **Air quality** applies to swimming and walking: US AQI ≤ 50 +5, ≤ 100 −3, ≤ 150 −15, worse −30. Wind and its direction come from buoy 41024 first and the NWS grid second; the shore normal is taken as 190°, so wind from about 10° is offshore. "Dark" means the sun is below −6° (past civil twilight). A **warning** rides along with the swimming score and is shown even when the headline is positive: at rip level 3, *"High rip current risk — NWS advises staying out of the water."*; at level 2, *"Moderate rip current risk and no lifeguards. Stay where you can stand, and know how to escape a rip."*; with no rip forecast at all, *"No rip current forecast right now, and no lifeguards. Stay where you can stand, and know how to escape a rip."* With none of those, a burn time of 20 minutes or less gives *"Strong sun: bare skin burns in about N minutes."* Out of season NWS stops issuing the surf zone forecast, but it still issues a **Rip Current Statement** when it expects life-threatening rips. With no forecast and a statement in force, the rip level is taken as **High** (level 3): the swimming score and warning above follow it, and the Rip risk tile on Today reads **High** with *"NWS statement"* under it. Today's hour-by-hour scores follow it too, so the best time and the Plan tab's picks for today agree with the tile. When there is a forecast, its own level is used. ### The headline The overall score is **0.6 × the best activity + 0.4 × the mean** of all four — a flat day is still a great walking day, and that is the answer the question wants. If any live NWS alert is active (drills and tests are filtered out) the headline is `Active alert: `; otherwise ≥ 75 → *"Go. Best for …"* (or *"Good day for swimming."* when swimming is the pick — the app never says "Go." beside swimming), ≥ 55 → *"Worth the trip — good for …"*, ≥ 35 → *"Mixed. … is the pick if you go."*, else *"Not a great day for the beach."* With no rip forecast, swimming is never the pick. If nothing could be scored at all, the score is 0 and the headline reads *"No data"* (or the active alert). This headline is what the widgets show. On Today, from version 1.1, the summary line described below takes its place at the top of the screen. ## How is the best time chosen? **Every daylight hour is scored by the same function as the activity tiles**, fed that hour's forecast instead of this minute's readings — so the best time and the tiles can only differ by what the forecast says about the hour. Three activities are scored per hour: swimming, beach walk & shelling, and surfing. Sunset watching is left out; it is one moment a day. Per hour, the inputs are the NWS gridpoint forecast for wind, air temperature, cloud and rain (Open-Meteo's hour when the gridpoint is missing), the tide height and trend at that hour, the hour's UV, the sun's elevation (so caps for dark apply), and the day's surf zone forecast and water temperature. Swell period and air quality are observations, so they only count for today. The **best window** is built around the single best hour of any activity: 1. Find the best hour. Ties go to the earlier hour. 2. If that hour scores below **55** (*good*), there is no best time today. 3. Otherwise extend the window either side while that same activity stays within **8 points** of its peak and at or above 55. The window ends at sunset at the latest. 4. List every activity that is *good* somewhere in the window, best first. Today's best time runs from now on. Once today's daylight is spent — under an hour left before sunset — it is tomorrow's instead, and Today says **Best time tomorrow**. The Plan tab's per-day Swimming pick uses the same procedure for swimming alone. ## Who writes the summary at the top of Today? The headline and sentence at the top of Today (for example *"Good beach afternoon."* then *"Low rip risk and 79° water. Best: shelling, 1:30–5 PM."*) are written in three tiers: | Tier | Writer | Used when | |---|---|---| | 1 | **Claude Haiku 5.5** | Normally. | | 2 | **gpt-oss-120b** on Cloudflare Workers AI | Claude's call fails, or its draft fails the check. | | 3 | A fixed **template** | Both fail. | **No writer computes anything.** The server works out every figure first — rip risk, water and air temperature, tide height and next high or low, rain and thunder times, tonight's sunset and outlook, the alerts already in force, the best window, every activity score — and the writer is only given those. Rain or thunder that has already started is given as *now*, not as a clock time, and an alert that starts later (an advisory beginning tomorrow morning) is left out until it is in force. Then **code checks every draft before it is shown**. A draft is rejected if: - it contains a number or time that is not in the facts, or a real one next to the wrong thing (a tide time given as the time to swim); - it denies forecast rain or thunder, or leaves out the thunder; - it states a rip risk other than the forecast's, any rip risk when there is no forecast, or *no* rip risk or forecast when there is one; - it mentions swimming without saying not to, when the rip risk is moderate, high or unknown, or it is night; - an active NWS alert isn't named in the headline, or it names an advisory, warning, statement or weather watch that is not in force; - the headline names the wrong part of the day, or either line is too long (headline 40 characters, sentence 220). So the worst a model can do is be replaced by the template. The template is plain: *"Good beach morning."*, *"Decent beach afternoon."*, *"Not much of a beach evening."*, *"Night at the beach."*, or *"\ in effect."*, then the rip risk and water, any thunder or rain, and the best time (or the next tide). A summary is kept while it still passes the current facts. It is rewritten when the facts change in substance, at most once an hour, and replaced within 15 minutes if the facts move out from under it (the tide height it quoted has changed). Between rewrites you may see the template wording; that is expected. How the models were chosen is shown on **More › How it's built**. ## The sunset and sunrise model Judged on the Open-Meteo cloud profile at the sunset (or sunrise) hour — never on total cloud cover, because "99% cloud" that is all high cirrus is close to ideal while 60% low stratus kills it. The score starts at **35**: | Factor | Points | |---|---| | **The canvas** — high cloud × 0.8 + mid cloud × 0.4 | < 10 → +5 "clear sky with little color" · < 25 → +18 · **25–75 → +35 "broken high cloud to catch the color"** · ≤ 90 → +18 "thick high cloud that may mute the color" · higher → +8 "solid high overcast, likely to stay gray" | | **The blocker** — low cloud | ≤ 15% → +20 "clear western horizon" · ≤ 40 → +5 · ≤ 70 → −15 "low cloud likely to block the sun" · higher → −30 "thick low cloud" | | Visibility | ≥ 9 mi +5 · < 4 mi −10 "hazy" | Ratings: **spectacular** ≥ 78, **promising** ≥ 60, **average** ≥ 40, else **flat**. The same function scores the sunrise hour with "eastern horizon" in the wording. If the sunset hour is more than two hours outside the forecast the outlook is not scored at all. **Burn time** is 200 ÷ UV index minutes, never under 5. ## Rip current, surf and swim verdicts The rip level is read from the NWS Surf Zone Forecast's words for the "Ocean Isle Beach West" sub-zone: **None = 0, Low = 1, Moderate = 2, High = 3**. That level drives the swimming score above, the **Swim** verdict on each day's screen under the Plan tab's **Seven days**, and the safety push (a rise to High). That per-day swim call is: level 3 → **poor** "stay out of the water"; level 2 → **caution**; water below 68°F → **caution** "cold enough to cut a swim short"; otherwise **good**. Days beyond the sub-zone rows carry the whole-zone forecast and say so; days with no rip forecast at all only get a verdict if the water is below 68°F (**caution**). **Good** needs a rip forecast, so with none, warmer water gets no verdict. ## Rocket-launch visibility Only launches from **Cape Canaveral / KSC** and **Wallops Island** are modelled. For each, the Worker infers a launch corridor from the target orbit (ISS-class flies northeast with high confidence; GTO east/southeast; 35–50° inclination is ambiguous and both corridors are tried; unknown orbit tries 45°, 90° and 135° at low confidence), propagates a representative ascent for 10 minutes in 10-second steps, and at each step asks three things: how high above Sunset Beach's horizon the vehicle is, whether its **plume is still in sunlight**, and how **dark your sky** is. - Below **1° elevation** a moment counts for nothing. - Lighting dominates: full daylight scores 2; sun just down 25 (8 if the plume is in shadow); the **twilight sweet spot** (sun −3° to −18°) 55 lit / 22 unlit; full dark 45 / 20 — plus a geometry term that keeps rising with elevation. - Range: best moment under 500 km +10, under 800 +6, under 1200 +3. - **Cloud is a hard gate**: ≤ 20% +10, ≤ 50% +5, ≤ 80% −5 *"Mostly cloudy (N%) — cloud could easily hide it."*, higher −25 *"Overcast (N%) — very likely hidden."* More than 7 days out there is no cloud forecast and the note says so. - **Daylight is a ceiling of 12**, whatever the geometry. Verdicts: ≥ 70 *"Excellent. Look …"*, ≥ 50 *"Good chance …"*, ≥ 30 *"Marginal …"*, else *"Unlikely to be seen from here."*, plus *"Not visible — stays below the horizon."* and *"Daytime launch — not visible from here."* A launch is **visible** — and eligible for the Next visible launch card, the Live Activity and launch alerts — only when it clears the horizon, is not in daylight, and scores ≥ 30. Every launch carries where and when to look (compass point, elevation, T+ seconds) and a confidence that drops when the corridor is ambiguous or the peak is under 3°. ## Almanac windows Each "When to go" window (Shelling, Bird Island & the Kindred Spirit mailbox, Dolphin watch, Ghost crabs, Turtle hatch watch, Right whale watch, Shorebirds, Moonrise over the ocean, Sunrise, Sunset) starts at 50 and scores only what **varies between occurrences** — the tide height and range for a shelling low, low cloud on the horizon for a moonrise, rain for a hatch watch. Things true of every occurrence ("Nests almost always hatch after dark") print at 0 points so the reasoning still shows. Ratings use the same 75/55/35 bands. A window whose contributions are all zero is unscored and shows its reasoning **without a rating**. Every window also states its certainty — **deterministic** (tide, sun, moon: knowable years out, so it can be scheduled as a local alert) or **forecast** (rests on weather and decays with horizon) — and what it promises, which says exactly what it guarantees: a shelling window scores the conditions that expose shells, never what is lying there. For example, a **Shelling** low scores the low-tide height (a minus tide +24, ≤ 0.5 ft +17, ≤ 1.2 +8, ≤ 2 −2, higher −18), the tidal range (≥ 5.5 ft spring +13, ≥ 4.5 +6, neap −8), that day's surf (≥ 4 ft +14, ≥ 2.5 +6, calmer −6), an early low within 3 hours of dawn +10, and the hour's weather. The **Sunset** and **Sunrise** windows carry the sunset model's own score, unaltered, so the almanac and the Today card can never disagree. ## Next steps - [Where every number comes from](https://docs.neuralconfig.com/sunset-beach/data/sources/): Which upstream each input to these models is read from. - [The Today tab](https://docs.neuralconfig.com/sunset-beach/app/today/): Where the verdict, activity scores and sunset outlook appear. - [Events and rocket launches](https://docs.neuralconfig.com/sunset-beach/app/events/): How the visibility verdict is shown for each launch. - [When to go](https://docs.neuralconfig.com/sunset-beach/app/when-to-go/): The almanac windows these scores feed. --- # Limits and what it doesn't know Source: https://docs.neuralconfig.com/sunset-beach/data/limits/ Sunset Beach covers **one beach** — Sunset Beach, North Carolina — and nothing transfers to the next beach up the coast. It is **not a safety service**: the beach has **no lifeguards**, and rip risk, surf height and swim advisories are forecasts and periodic samples, not observations of the water in front of you. No instrument at this beach measures **waves** or **water level**; wave numbers come from a buoy 50 miles offshore or a 25 km model, and surge is borrowed from a South Carolina pier. Several sources are **scraped by courtesy** and can break; several are **rate-limited** and fall back to a last-known-good copy; one (eBird) needs a key; one (the seaturtle.org nest database) is never republished. Fishing limits are **read by hand** and dated. This page lists all of it, in the app's own words where it has them. :::caution From the app's support page: *It is not a safety service. Sunset Beach has no lifeguards. Rip current risk, surf height and swim advisories in this app come from the National Weather Service and NCDEQ. They are forecasts and periodic samples, not observations of the water in front of you. Never let this app, or any app, substitute for looking at the sea, posted flags and signs, and official warnings.* ::: ## What the app itself says it doesn't know The **Known gaps** screen (**More › Known gaps**) lists these seven lines, verbatim, under the heading **Not measured or not published**. In version 1.0 the same list was the last section of the Sources screen, titled *What this doesn't know*. - There's no wave sensor at Sunset Beach. Surf height is the National Weather Service forecast; wave readings come from a buoy about 50 miles offshore and a 25 km wave model. - No live shark tracking. OCEARCH doesn't publish an open feed, so the app shows historical records from OBIS. - No ship tracking. Open ship-position (AIS) data returned nothing near the beach, so the app links to tracking sites. - Bird migration counts come from weather radar over Brunswick County, at night only. Radar counts birds but can't tell species. - Weekly concert line-ups aren't published, only the schedule. Those dates are marked "series". - Turtle Watch publishes season totals, not hatch dates for individual nests. - Score weights are judgment calls, not fitted to outcome data. ## Measurement gaps | Gap | What is shown instead | |---|---| | **No wave observation at the beach.** NDBC 41024 sits off the beach but has no wave sensor. | Live waves from NDBC 41013 (Frying Pan Shoals, ~50 mi SE); forecast waves from Open-Meteo Marine's ~25 km cell; the beach-specific number is the NWS surf height for "Ocean Isle Beach West". The Coastal Waters Forecast (AMZ252) is a human forecast for the water inside 20 nm — still not the surf. | | **No water-level sensor at the beach.** CO-OPS 8659897 lost its instrument in 2008 and serves predictions only. | The tide card is a harmonic prediction. "Against the prediction" borrows only the *anomaly* (observed minus predicted) from CO-OPS 8661070 Springmaid Pier, about 24 nm down the coast; the absolute level and that pier's flood thresholds are never shown. | | **Swim advisory sampling is weekly**, so a clear result can be most of a week old, and bacteria spike after rain. | The card shows the sample date and its age. Sewer spills within 10 nm in the last 14 days render as a line inside the card between samples — and render nothing when empty, which is normal. | | **A shellfish closure has no start or end date** — the state's layer carries none. | The card says what the state says now and when the state last edited the layer. Nothing here is permission to harvest. | | **The tropical outlook is basin-wide.** A formation chance for a wave off Africa is not a forecast for this beach. | Local impacts arrive through NWS alerts, which the app carries separately. | | **No live whale, shark or dolphin positions exist publicly.** OCEARCH has no open feed; iNaturalist has a handful of cetacean records in eight years. | NOAA's right whale slow zones and calving habitat, historical OBIS records, and iNaturalist sightings — each labelled as what it is, not as animal positions. | | **iNaturalist measures observers, not animals**, and blurs every sea turtle's location deliberately. | The panel says so; obscured records are not drawn as points; group tallies cover a 200-record page (sampled records), not the whole window. | | **Bird migration is a county aggregate, sampled every two hours after dark.** A short sharp peak between samples is missed; daytime readings are invalid by design. | Last night's peak and what is aloft now, with a citation to BirdCast; the forecast half is not public, so the app links out. | | **The catch report is one pier, and it is yesterday's.** The pier closes for the winter; its reports run March to November. | The date is stated; the seasonality almanac stands in over the winter. | | **No per-nest hatch dates.** The Turtle Watch posts season totals; the standardised nest database confirms the gap rather than closing it. | A computed NC season model says which phase the season is in and what to do (lights out, fill holes, gear off the beach). | | **Ships are not tracked** — a 55-nm AIS box returned zero messages in two live tests. | A curated note on what actually passes and links to three public trackers. | | **ISS and satellite passes are not offered.** | Nothing — recorded as a decision so it isn't researched again. | ## Staleness bounds Every source has a refresh lifetime (2 minutes for NWS alerts, 5 minutes for buoys, up to 30 days for a regulatory boundary) and a **fallback window** during which a last-known-good copy may be shown, labelled "Cached" — **1 day** by default, longer where a stale answer beats none (30 days for water quality, the pier report and proclamations; 7 days for launches, eBird and shellfish closures) and shorter where an old one misleads (3 hours for surge, 2 hours for NWS alerts). Past that window a panel goes "Unavailable". The assembled conditions copy itself can be up to two 5-minute cron ticks old before it is rebuilt. Full detail on [How fresh the data is](https://docs.neuralconfig.com/sunset-beach/data/freshness/). ## Upstream rate limits and fallbacks | Upstream | Limit | What the app does | |---|---|---| | **Launch Library 2** | ~15 requests/hour per IP, anonymous; Cloudflare's egress addresses are shared, so 429s happen regardless of the app's own rate | 4-hour cache coordinated globally through KV (5 minutes while a visible launch is imminent); on failure, it falls back to its own last-known-good copy (up to 7 days old) and also asks The Space Devs' `lldev` mirror, whose data may lag (the source name says so). It switches to the mirror only when the mirror holds a current copy. If both are old it keeps its own copy, and if it has no copy at all it takes whatever the mirror has, up to 7 days old. An optional `LL2_API_KEY` (Patreon-gated, not free) would move it off the shared bucket. | | **iNaturalist** | Rate-limits the Worker for the same shared-address reason | 6 h / 24 h / 7 d caches coordinated through KV; fallback 7 / 14 / 30 days. | | **eBird** | **Requires a free API key** (`EBIRD_API_KEY`); returns 403 without one | Without a key the panel reads **"Not set up"** (1.0 said *Not configured*) rather than broken, and nothing else degrades. | | **Open-Meteo** (marine, forecast, air quality) | Free tier is non-commercial | Used as-is; the app is free, with no ads or purchases. | ## Sources that are scraped, and can break These are HTML pages read by courtesy rather than by API, cached hard so they are hit a handful of times a day, and they fail soft: - **Sunset Beach Fishing Pier events page** (Thursday concert series) — if the layout changes, unparsed lines are shown as raw text rather than dropped. If the page loads but no concerts can be read from it, the app shows no note saying so. - **Sunset Sound Waves schedule page** — the Wednesday Town Park series is reconstructed from the town's stated weekly pattern because the town's own calendar feed carries only the season opener; every generated date is marked **"series"** in the app, and the season end is **assumed to be Labor Day** because it isn't published. - **Sunset Beach Turtle Watch home page** — season totals; if none are found the panel says *"Season totals couldn't be read from the Turtle Watch page."* and the season model still shows. - **N.C. DMF proclamation list** — a server-rendered view, read page by page until a short page, at most 8 pages; a page that fails, or hitting that cap, marks the list Cached. - **The pier's daily report** is RSS, not scraped, but is read over plain HTTP because the host's certificate is issued for another name. ## What is deliberately not parsed or shown - **NHC `CurrentStorms.json`** — returns an empty array in a quiet Atlantic, so a storm parser written against it would be a guess; the app reads the Tropical Weather Outlook instead and links to NHC. - **NWS gridpoint `lightningActivityLevel` and `probabilityOfTropicalStormWinds`** — present as keys with empty `values` arrays here (the first has never carried a value at this gridpoint; the second is populated only when a tropical system threatens), and with no unit key; each would render as a confident nothing. - **Open-Meteo 15-minute precipitation** — accepted but cosmetic at this latitude (each quarter is the hour ÷ 4), so "when rain starts" is by the hour. - **BirdCast `birds_passed`** — a fixed multiple of the migration rate with undocumented units. - **seaturtle.org nest counts** — the project withholds permission to reference its data without written consent, so the Worker only checks whether its count *agrees* with the Turtle Watch scrape, and no figure from it appears anywhere. - **The pier report's tide lines** — CO-OPS gives the same pier's tides to the minute. - **OCEARCH, Movebank, AISStream, satellite passes** — see above. ## Fishing limits are read by hand Size and bag limits are **not fetched**. They are read by hand off the N.C. Division of Marine Fisheries proclamations that set them and stamped with a date (as of 2026-07-01, verified 2026-10-04 in the current build). What *is* fetched is the list of finfish proclamations in force, so the app can flag a fish whose governing document is newer than the curated number and link you to it. The state's own summary table was wrong in two places when checked, which is why it isn't scraped. None of it is legal advice: confirm against [NC DMF](https://www.deq.nc.gov/about/divisions/marine-fisheries/rules-proclamations-and-size-and-bag-limits/recreational-size-and-bag-limits) before you keep a fish. ## The summary line is worded by a model, not computed by one The headline and sentence at the top of Today are written by Claude Haiku (or a Workers AI model, or a fixed template) from figures the server has already computed. A model can choose the words but cannot add a fact: code rejects any draft with a number, time or rip risk that isn't in the data, and the template is shown instead. Two things follow: - The wording can switch between a model's sentence and the plainer template between rewrites. That is expected, not an error. - The summary is never more current than the data behind it — see the staleness bounds above. How it works in full: [Who writes the summary at the top of Today?](https://docs.neuralconfig.com/sunset-beach/data/scoring/#who-writes-the-summary-at-the-top-of-today) ## The judgement calls are guesses The activity scores, the sunset model and the almanac window weights are "opinionated guesses tuned against nothing but judgement about this beach". The Worker now keeps a daily record of what it forecast against what happened so they can one day be tuned; until then treat a rating as a considered opinion. See [How the app judges things](https://docs.neuralconfig.com/sunset-beach/data/scoring/). ## Next steps - [Where every number comes from](https://docs.neuralconfig.com/sunset-beach/data/sources/): Each upstream source with its station, refresh and known limits. - [How fresh the data is](https://docs.neuralconfig.com/sunset-beach/data/freshness/): Cache lifetimes, fallback windows and what Cached and Unavailable mean. - [How the app judges things](https://docs.neuralconfig.com/sunset-beach/data/scoring/): The thresholds behind every verdict, and why they are guesses. - [Troubleshooting](https://docs.neuralconfig.com/sunset-beach/troubleshooting/): What to do when a panel is Cached, Unavailable or Not set up. --- # Privacy — what leaves your phone Source: https://docs.neuralconfig.com/sunset-beach/data/privacy/ Sunset Beach collects one thing: an Apple push token, not linked to you and not used for tracking — sent only when you switch on a pushed alert, or while a launch Live Activity is running (the app starts one when it loads conditions in the hour before a visible launch, unless Live Activities are off for the app in iOS Settings). There is **no account**, **no analytics or crash reporting**, **no advertising identifier**, **no location services** (the app is about one fixed beach and never asks where you are), and **no third-party SDKs** — the iOS app has zero external package dependencies, and its privacy manifest declares one collected data type — a Device ID (the push token), not linked to you, not used for tracking, for app functionality. The App Store label is *Data Not Linked to You: Identifiers*. Two kinds of request leave the phone: a plain fetch of beach conditions from the app's own server, which carries no identifier; and, **only if you switch on one of the three "When conditions change" alerts** (or a launch Live Activity is running), your device's Apple push token sent to the shared NeuralConfig push service so the Worker can notify you. Everything else — tide, moon and launch alerts, **Remind me** reminders, your preferences, the last conditions loaded — stays on the device. Version 1.1 added no new kind of request. ## What connects to what | Request | Where | What it carries | When | |---|---|---|---| | Beach conditions | `sunsetbeach.neuralconfig.com` | Nothing about you — the same public data everyone gets. No cookie, no device or user identifier. | On launch, on pull-to-refresh, and on returning to the app after five minutes or more | | Widget summary | `sunsetbeach.neuralconfig.com` | Same — a small public summary, identical for everyone | On WidgetKit's schedule, asked for about every 30 minutes | | Push registration | `push.neuralconfig.com` | Your APNs **device token** (hex), the APNs environment (`sandbox`/`production`), and the list of topics you opted into: `safety`, `sunset`, `sunrise` | Only while at least one "When conditions change" toggle is on; re-sent on each launch so a reissued token replaces the old one | | Push withdrawal | `push.neuralconfig.com` | The token to remove | When you switch the last "When conditions change" toggle off — the Alerts screen says *"Turning all three off removes this phone from the server."* | | Live Activity token | `push.neuralconfig.com` | An **activity** push token, `kind: "liveactivity"`, the APNs environment, and the launch's id — addressed to one running Live Activity, with no topics, so it is never in the audience an alert push queries | While a launch Live Activity is on your Lock Screen, if Live Activities are enabled for the app | | Links out | Beach cams, ship trackers, every **View at the source** link on the Sources screen, and the guide, support, privacy, terms and neuralconfig.com links on the More tab | Opened in Safari — you are then on that site under its privacy policy | When you tap them | The Worker in turn reads NOAA, the National Weather Service, USGS, NC DEQ, Open-Meteo, Cornell Lab and the other public sources listed on [Where every number comes from](https://docs.neuralconfig.com/sunset-beach/data/sources/). **Those requests come from the server, not from your phone**, so none of those organisations ever sees your device or your network. The same is true of the AI-written summary at the top of Today. The server sends a language model (Claude Haiku from Anthropic, or a Cloudflare Workers AI model as fallback) the beach facts it has already computed — tide, rip risk, water temperature and so on — and nothing else. No request from your phone, and nothing about you or your device, is part of it; everyone sees the same summary. ## Alerts: local versus pushed Tide alerts, "Full moon over the ocean", "Visible rocket launches" and **Remind me** reminders on almanac windows are **scheduled locally** on the phone from data the app already holds — they need no server, register no token, and fire with no signal. Only the three toggles under **"When conditions change"** — *When the water gets worse*, *A sunset worth walking down for*, *A sunrise worth getting up for* — need the Worker to reach your phone, and all three are **off by default**. The push service is shared by every NeuralConfig app because an Apple push credential is team-scoped; it treats the topic strings as opaque and never learns what they mean. See [Alerts and notifications](https://docs.neuralconfig.com/sunset-beach/alerts/notifications/). ## What is stored on your device - **Your alert preferences** — which tide, moon, launch and push alerts you have switched on, and their lead times — in the app's own `UserDefaults`. This is the only "required-reason" API the privacy manifest declares. - **Your Remind me reminders** — each window's name, start and end time — in the same `UserDefaults`. A reminder is dropped once its window has started, so the list never grows. - **The last conditions the app successfully loaded**, saved verbatim in the app's Application Support folder (excluded from backup) so it can draw the beach immediately on opening and still show something with no signal. The app also keeps the ordinary iOS HTTP cache. Deleting the app removes all of it from the phone. A push token registered at the time stays on the push service until Apple reports it invalid on the next send, and is removed then; to remove it at once, switch the "When conditions change" alerts off before deleting the app. Nothing is written to a shared App Group. ## Location, maps and MapKit The Nature map draws NOAA zone outlines and iNaturalist points with MapKit. It does not show your position, does not use a location manager, and the app has no location entry in its Info.plist — iOS will never show a location prompt for it. iNaturalist's coordinates for protected species are already blurred by iNaturalist before they reach the app. ## The published privacy policy The app's privacy policy is at [https://neuralconfig.com/privacy/sunset-beach/](https://neuralconfig.com/privacy/sunset-beach/), with the product terms addendum at [https://neuralconfig.com/terms/sunset-beach/](https://neuralconfig.com/terms/sunset-beach/). `https://sunsetbeach.neuralconfig.com/privacy` redirects there. Its "What is stored on your device" list matches the one above; the opt-in push registration described on this page is what the current build does. ## Questions Support is at [https://support.neuralconfig.com/sunset-beach](https://support.neuralconfig.com/sunset-beach?from=docs). ## Next steps - [Alerts and notifications](https://docs.neuralconfig.com/sunset-beach/alerts/notifications/): Which alerts are local, which are pushed, and the defaults for each. - [Where every number comes from](https://docs.neuralconfig.com/sunset-beach/data/sources/): The public agencies the Worker reads on your behalf. --- # How Sunset Beach is built Source: https://docs.neuralconfig.com/sunset-beach/data/how-its-built/ Sunset Beach, NC tells you whether now is a good time to go to the beach, and why. It draws on **more than 20 public data sources**, from ocean buoys and tide gauges to the pier's fishing report, refreshed **every five minutes** and turned into hourly scores for this one beach. The app shows no ads, needs no account and does no tracking. This page follows the **How it's built** screen, which you open with the **How it's built** button on the NeuralConfig card on the **More** tab. The screen is written for two readers. Each section says what happens in plain words, and an **Under the hood** note under it gives the technical version. Both are always visible. The four tiles at the top of the screen: | Tile | Caption | |---|---| | **20+** | public data sources | | **5 min** | between refreshes | | **14** | AI models tested before choosing one | | **0** | ads, accounts or tracking | ## How it works ```mermaid flowchart TD F["More than 20 public data sources
NOAA · NWS · USGS · NC DEQ · Open-Meteo · eBird · iNaturalist · and more"] W["One Cloudflare Worker
gathers, checks, scores and publishes"] F -->|every 5 minutes| W W --> A[App] W --> G[Widgets] W --> L[Launch countdown] W --> P[Alerts] ``` Three steps, as the screen numbers them: 1. **Gather.** Every five minutes, a small program in the cloud collects the latest forecasts, tides, buoy readings, alerts, wildlife sightings and events. *Under the hood:* a Cloudflare Worker on a cron trigger, with source adapters that each have their own cache, timeout and last-good fallback. 2. **Check and score.** A response that arrives broken is rejected, and the last good reading stays. Then swimming, surfing, shelling and sunset watching are scored for every hour of the day. *Under the hood:* each score starts at 50 and adds or subtracts listed factors; some conditions cap it outright, like swimming after dark. Sun, moon and launch sightlines are computed on the server. 3. **Deliver.** One result feeds the app, the home-screen widgets, the lock-screen launch countdown and alerts, so they all show the same thing. *Under the hood:* published once to KV and served with ETag revalidation; push through APNs from a shared sender; a native SwiftUI app with WidgetKit, ActivityKit and App Intents. None of the app, the widgets or the alerts fetch from the upstream sources themselves. The full list of sources is on [Where every number comes from](https://docs.neuralconfig.com/sunset-beach/data/sources/), and the scoring, with every threshold, is on [How the app judges things](https://docs.neuralconfig.com/sunset-beach/data/scoring/). ## Where AI is used The screen's heading for this is *"AI writes the words. Code checks the facts."* A strip of three boxes shows the order: **code** works out the figures, **Claude** writes the summary, **code** checks every number. **Claude** writes the headline and the one-line summary at the top of Today, working only from figures the app has already calculated. Before anything is shown, code checks every number and time in it against those figures. If one doesn't match, you see a plain template instead. **Every score and every computed time in the app is calculated by code, not by a model.** Readings come straight from the sources. *Under the hood:* Claude Haiku 5.5, with gpt-oss-120b on Workers AI as the fallback and a template as the last resort. Every draft is checked against the data, and the summary is rewritten when the facts change. ### How the summary is written and checked The summary is written by a model, but **only from facts the Worker has already computed**, and every draft is checked before anyone sees it: 1. **Claude Haiku 5.5** writes first. 2. If that call fails, or its draft fails the check, **gpt-oss-120b** on Cloudflare Workers AI gets the same prompt. 3. If that fails too, a **template** built directly from the facts is shown. The check compares every number and time in the draft with the facts it was written from. A model can only change the wording, never a fact. A draft is kept while it still matches the current facts. It is rewritten at most once an hour when the facts change, and at most every 15 minutes when the facts have moved out from under it (for example, the tide height it quoted has changed). The full list of what the check rejects is on [How the app judges things](https://docs.neuralconfig.com/sunset-beach/data/scoring/#who-writes-the-summary-at-the-top-of-today). ## Which model, and why Under the heading **Chosen by testing**, the screen says: *"Fourteen models each summarized 30 recorded beach days, twice. Three got every fact right all 60 times. Claude Haiku 5.5 is the one in use, with gpt-oss-120b as the backup."* Its table keeps the rows that explain the choice — the model in use, its backup, and faster models that didn't get the facts right often enough: | Model | Role | Facts right | Speed | |---|---|---|---| | Claude Haiku 5.5 | In use | 60/60 | 3.9 s | | gpt-oss-120b | Backup, on Workers AI | 60/60 | 10.2 s | | Claude Sonnet 5.5 | — | 60/60 | 3.9 s | | Llama 3.3 70B | — | 56/60 | 1.0 s | | Llama 3.1 8B | — | 43/60 | 2.8 s | **Facts right** means every number and time in the summary matched the data. **Speed** is the median time to write one summary. ## Built to be trusted - **It shows its working.** Tap any score to see what raised or lowered it. Every score starts at 50, and the listed factors add up to it. - **The best hour, not just the best day.** Each activity is scored hour by hour, so the app can tell you when to go, not only whether to. - **Gaps are listed, not hidden.** No wave sensor exists at this beach, so surf height is a forecast and labelled as one. **More › Known gaps** lists everything else the app can't measure. - **Nothing tracks you.** No accounts, ads or tracking. If you turn on alerts or follow a launch, a notification token is the only thing that leaves your phone. The details are on [Privacy](https://docs.neuralconfig.com/sunset-beach/data/privacy/). ## Built to keep running - **When a source fails**, the app keeps showing the last good reading and marks it **Cached**, instead of going blank. See [How fresh the data is](https://docs.neuralconfig.com/sunset-beach/data/freshness/). - **Tested in two time zones.** Every proposed change is tested under two time zones, which catches the off-by-an-hour mistakes daylight saving time causes. - **A broken source sends an email.** If a source stays broken, an alert email goes to NeuralConfig, so it gets fixed instead of quietly going stale. *Under the hood:* CI on every pull request, run under UTC and America/New_York. Per-source health in every payload, with alerting on top. The screen ends with *"Designed and built by NeuralConfig."* and a **neuralconfig.com** link, which opens NeuralConfig's services page in Safari. ## Next steps - [How the app judges things](https://docs.neuralconfig.com/sunset-beach/data/scoring/): The scores, caps and thresholds the Worker computes before any model writes a word. - [Where every number comes from](https://docs.neuralconfig.com/sunset-beach/data/sources/): Every upstream source the Worker reads, and what each one feeds in the app. - [How fresh the data is](https://docs.neuralconfig.com/sunset-beach/data/freshness/): The 5-minute refresh, per-source cache times and last-known-good copies. --- # Troubleshooting Source: https://docs.neuralconfig.com/sunset-beach/troubleshooting/ Almost everything that looks broken in Sunset Beach, NC is one of two things: your phone could not reach the backend, or the backend could not reach one of its upstream sources and is telling you so. The app never passes old data off as current — it labels it — so the fix is usually to read the label, check your connection, and pull to refresh. Nothing below needs an account, a login or a reinstall; the app has none of those. If a symptom is not here, reach the [support team](https://support.neuralconfig.com/sunset-beach?from=docs) with what screen you were on, what it said, what you expected and roughly when, and the app version from More › This app › **Version**. If a number looked wrong, the **Sources** screen (More › Sources) and the ⓘ note beside that section say where it came from — mentioning that saves a lot of guessing. ## The app won't load | What you see | What it means | What to do | |---|---|---| | A full screen reading **"Can't load conditions"**, a reason, and a **Try again** button | The app has no saved copy on this phone and its request to `sunsetbeach.neuralconfig.com` failed or timed out. Requests give up after 30 seconds and the whole attempt after 60. | Check you have signal, then tap **Try again**. Once one load has succeeded the app keeps a copy on disk and shows it on the next cold start instead of this screen. | | The reason is **"The server sent an error (HTTP 5xx)."** | The backend answered with an error. | Retry in a minute. | | The reason begins **"Couldn't read the server's reply: …"** | The backend's payload no longer matches what this build of the app expects. A saved copy that fails to decode is deleted, so this only appears on a fresh load. | Update the app from the App Store. | | The web page says **"Reading the instruments…"** for a long time, or **"Couldn't load conditions: …"** | Same as the app: the page could not fetch the conditions from the backend. | Reload; the browser's own error follows the colon. | ## A banner sits at the top of every tab | Banner | What it means | What to do | |---|---|---| | **"Showing saved data. …"** | A refresh failed after an earlier successful load. What follows is the network error. Everything on screen is as old as the *Updated …* time. | Pull down on any tab to refresh. | | **"Saved … Refreshing…"** | The app drew the copy saved on disk while it waits for the network. It waits for connectivity rather than failing at once. | Give it up to a minute or check your signal. If the request then fails, this becomes the *Showing saved data* banner. | ## A card says Cached or Unavailable Only a panel that is **not** live gets a badge, so a badge is information, not noise. | Badge | What it means | What to do | |---|---|---| | **Cached** (clock icon) on a row in Sources, or under the Plan tab's next visible launch | That upstream could not be reached, and the backend is serving its **last known good** copy. The Sources row's detail reads *Showing last good reading* and says when it was fetched and, under *Showing cached data because*, why it fell back. | Nothing on the phone will fix it — the fault is upstream. The reading is real, just older than usual. See [How fresh the data is](https://docs.neuralconfig.com/sunset-beach/data/freshness/). | | **Unavailable** (warning triangle) | That upstream failed and there is no fallback copy within its window, so the panel is missing or empty. | Wait for the source to come back. The Sources row shows the error for that source. | | The **More** tab's Sources row reads *N of N live · N cached · N down* | Some of the app's upstream sources (on any tab) are cached or down. | Open **Sources** for the per-row reason. | | **"Nothing here loaded. Sources shows what went wrong."** on Beach info | The loaded data carried none of Beach info's content — very unusual, because most of it is curated on the backend rather than fetched. (With no connection and no saved copy you would see *Can't load conditions* instead.) | Pull to refresh; if it persists, contact support. | | On Sources, the launch source is named **"The Space Devs Launch Library 2 (dev mirror — data may lag)"** | Launch Library rate-limited the backend, so it switched to The Space Devs' mirror. It does that when the mirror has a current copy and its own copy is out of date, or when it has no copy from the last 7 days at all. | Expected under load; launch times may be hours behind. If the launch row reads **Cached** instead, the mirror had nothing current either, so the app is keeping its own older copy on purpose. | ## A section is empty or missing | What you see | What it means | What to do | |---|---|---| | An error from the source — for example *"The source didn't respond."* — in place of the tide card on Water | CO-OPS predictions could not be fetched and no cached copy exists. The app shows the source's own error; *"No tide predictions available."* appears only when there is no error text. | Wait; predictions are cached for 6 hours once they load. | | The source's error, or *"Couldn't read the surf forecast."*, under In the surf on Water | The NWS surf zone product could not be fetched or parsed. | Wait for the next issuance. | | **"No tide data for this window."** on the tide chart | You are looking at a restored or stale payload whose curve no longer covers now. | Pull to refresh. | | The source's error, or *"No sunset forecast available."* / *"No sunrise forecast available."*, on Today | Open-Meteo's sky data is missing. | Wait; it refreshes every 15 minutes. | | An error from the source under Water › Further out (or, when it gives none, *"No offshore forecast right now."*, *"No gauge readings right now."* or *"No shellfish closures loaded."*) | That upstream failed with no cached copy. The text is the source's own error, such as *"The source didn't respond."* | Check the Sources screen. | | The **Right whales** section is not on the Nature tab | Out of season and no management area is in force — the section hides itself by design. | Not a fault. | | Birds says **"Not set up"** / *"Bird sightings from eBird aren't set up on this server yet."* | The deployed backend has no eBird API key. eBird is the only source that needs one. | Nothing on the phone; the operator sets the key. | | An error from the source in a Nature section (or, when it gives none, *"No sightings available."*, *"No bird data available."*, *"No migration radar available."*, *"No turtle data available."* or *"No marine life data available."*) | That upstream failed with no cached copy. The text is the source's own error, such as *"The source didn't respond."* | Check the Sources screen. | | A Nature screen (map, When to go, The year, Sightings, Birds, Migration radar, Fishing) shows **Not loaded** — *"This didn't load. Go back and pull down to try again."* | You reached it (from search, Siri or a link) while that part of the data is missing — its upstream failed, or the saved copy predates it. | Go back, pull to refresh, then try again; check Sources. | | The migration radar shows a sentence and no numbers | No measurable migration was recorded last night, or no night has been measured yet — the sentence says which. By day the panel still shows last night's figures. | Not a fault. | | **"Season totals couldn't be read from the Turtle Watch page."** under Sea turtles | The Sunset Beach Turtle Watch page couldn't be read, or changed shape; the season model still shows. (Out of season it reads *"Season totals aren't posted out of season."*, which is not a fault.) | If it persists, report it to support. | | **"Nothing scheduled in the next few weeks."** on Plan | No calendar, concert or launch entries in the next 45 days. | Pull to refresh; check Sources. | | Some days in **Seven days** show **—** | That day has no window of the kind you picked. A chip only appears for a kind that occurs somewhere this week. | Tap **Anything**, or another chip. | | No **Next visible launch** card | No upcoming launch passes the visibility test — launches are still listed as rows. | Not a fault. See [How the app judges things](https://docs.neuralconfig.com/sunset-beach/data/scoring/). | | Fishing says **"The pier is closed for the winter. This is the season's last report, not yesterday's."** | The newest pier report is more than ten days old. | Not a fault. | | **"The pier's daily report couldn't be read, so nothing here is live. The seasons below are an almanac."** | The pier's RSS feed was unreachable. | Wait; check Sources. | | **"Couldn't read the list of proclamations in force, so nothing here has been checked against it."** | The NC DMF proclamations page was unreachable. | Confirm limits against NC DMF before keeping a fish — always. | | A "When to go" window reads **in season** rather than a score | Nothing varied for that occurrence (a turtle hatch window in peak season, for example), so there is nothing to score. Scoring is per window, so the same kind can be scored on another day. | Not a fault. See [When to go](https://docs.neuralconfig.com/sunset-beach/app/when-to-go/). | | Search shows **"Nothing for "…""** | Nothing in the index — sections, screens, explainers, fish, species, windows, launches or sources — has a word starting with what you typed. | Try a shorter word. | | The keyboard does not appear when search opens | Auto-focus needs iOS 18; on iOS 17 tap the field. | Tap the field. | ## Alerts never fire, or never arrive The tide, moon and launch alerts are scheduled on the phone; the "When conditions change" alerts are pushed from the backend and are **off by default**. The Alerts sheet opens from the bell on Today, Water and Plan, or from the **Alerts** row on the More tab. Full detail is on [Alerts and notifications](https://docs.neuralconfig.com/sunset-beach/alerts/notifications/). | What you see | What it means | What to do | |---|---|---| | **"Notifications for this app are off in iOS Settings, so none of these alerts can go off."** / **"Nothing queued — notifications are off for this app."** | You declined the permission prompt. iOS asks only once. | Tap **Open iOS Settings** → Notifications → Sunset Beach → Allow. The app picks up the change when you switch back to it. | | **"Nothing queued yet. Tap Turn on notifications above."** (or *"Turn an alert on and iOS will ask for permission."*) | Permission has never been requested. | Tap **Turn on notifications**. | | **"Nothing queued yet. The app has to load conditions once before it can schedule alerts."** | Permission is granted but the app has never loaded a payload. | Get online, let it load, reopen Alerts. | | **"Nothing queued. Every alert is off."** | Every *scheduled* alert (tides, moon, launches) is off. Pushed alerts are never queued on the phone, so this also shows when only pushed alerts are on. | Turn one on if you want scheduled alerts; pushed alerts are unaffected. | | The queue count falls to zero after a couple of weeks unopened | Local alerts are built from the last payload; tide predictions run about 15 days ahead. | Open the app — every load rebuilds the queue. | | **Send a test notification** is greyed out | Permission is not granted. | Allow notifications first. | | No pushed alerts although the "When conditions change" toggles are on | Three possibilities: registration with the push service failed (the Alerts screen then says *"Couldn't register this phone: …"* under the toggles), nothing has *changed* since the first check (the first check after switching on records state and sends nothing), or conditions have simply stayed the same. | If it says it couldn't register, tap **Try again**. Otherwise remember these fire only on a change — rip risk rising to High, a new advisory, a new spill, a new NWS alert, a spectacular sunset or sunrise. | | Tapping an NWS alert push opens the Alerts screen, not Today | That is where it points. | Not a fault. | ## Widgets and the Live Activity | What you see | What it means | What to do | |---|---|---| | A widget reads **"No data"** with *"HTTP 5xx"* or *"The request timed out."* | The widget's own fetch of its summary failed. It retries in about 10 minutes. | Check connectivity. Opening the app and letting it load also asks iOS to refresh the widget (at most every 15 minutes). | | A widget shows a score of **88** and *"Go. Best for surfing."* | That is the placeholder used in the widget gallery and before the first refresh. | Wait for the first refresh (up to 30 minutes). | | The **This week** widget says *"The week isn't available yet."* | The summary it fetched carried no week of days. | Wait for the next refresh. | | A small clock icon beside the widget score | The summary was built from last-known-good data. | Nothing to do; see [How fresh the data is](https://docs.neuralconfig.com/sunset-beach/data/freshness/). | | The launch Live Activity never appears | Live Activities are disabled for the app, the app was not opened during the window (an hour before launch to 15 minutes after), or the launch is not visible from the beach. | Enable Live Activities in iOS Settings and open the app inside the window. See [Widgets and the launch Live Activity](https://docs.neuralconfig.com/sunset-beach/alerts/widgets/). | | The Live Activity reads **"Scrubbed — no launch tonight."** or **"Holding. …"** | The backend pushed the provider's new status. | Informational. | ## Siri, Shortcuts and sharing | What you see | What it means | What to do | |---|---|---| | A Siri phrase does nothing, or opens the Today tab | The phrase must include the app's name; without it Siri has nothing to match. | Say the phrase as listed on [Siri, Spotlight and Shortcuts](https://docs.neuralconfig.com/sunset-beach/alerts/siri-shortcuts/). | | A Shortcut's screen parameter shows as broken after an app update | The section it pointed at no longer exists under that id. | Re-pick the screen in the Shortcut. | | The share button is missing on Water or Plan | Water has nothing to share without a next tide extreme; Plan has nothing without a visible launch or a future event. | Expected. See [Sharing conditions](https://docs.neuralconfig.com/sunset-beach/alerts/sharing/). | | Shared text says *As of* an hour ago | The stamp is the payload's own time, and the payload may be last-known-good. | Pull to refresh before sharing. | ## Things that look wrong but aren't - **Times look off while you are travelling.** Every time in the app is the beach's own (US Eastern), whatever time zone your phone is in. - **"Water" on Today and "Waterway temp" under Water › Further out › The sound and the ICW differ by several degrees.** One is the sea buoy, the other an Intracoastal Waterway gauge about 12 miles away. The swimmer's number is Today's. - **Water quality says "No swimming advisory" but a spill line is showing.** Spills are reported between the weekly water samples — that line exists precisely so a clean reading is not taken at face value. - **Beach cams don't play inside the app.** They open in Safari, and the town's cam is a still image. - **There is no live ship position on a map.** The app names what a ship probably is from published schedules and links to trackers; it has no vessel layer. ## Next steps - [How fresh the data is](https://docs.neuralconfig.com/sunset-beach/data/freshness/): What Cached and last known good mean, and how old each source can be. - [Alerts and notifications](https://docs.neuralconfig.com/sunset-beach/alerts/notifications/): Local versus pushed alerts, their defaults, and the permission flow. - [Limits and what it doesn't know](https://docs.neuralconfig.com/sunset-beach/data/limits/): The gaps that are by design, not faults. - [Where every number comes from](https://docs.neuralconfig.com/sunset-beach/data/sources/): Every upstream and its known limits.