← Back to Work

CoastCast

CH Studios · Apple Developer Academy Challenge 5

Live on TestFlight SwiftUI CoreML Python FastAPI WeatherKit WidgetKit App Intents Live Activities MapKit iOS 17+
54 Michigan Beaches
5 Great Lakes
40yr ML Training Data
6+ Live Data Sources

Overview

CoastCast is a full-platform iOS beach conditions app covering 54 Michigan beaches across all five Great Lakes. It aggregates real-time data from six sources — WeatherKit, NOAA buoy stations, NWS weather alerts, TomTom traffic, water quality sensors, and a holiday API — through a Python FastAPI backend, then surfaces that intelligence across the entire iOS ecosystem: in the app, on the home screen, in the Dynamic Island, and through Siri.

The Problem

Michigan has some of the best freshwater beaches in the world — and no reliable way to know if conditions are worth the drive. Weather apps don't show water temperature or wave height. Beach websites are outdated. There's no way to know how crowded a beach will be before you arrive. CoastCast was built to answer one question in under 30 seconds: is it worth going to the beach today?

The Solution

A full-platform iOS app that brings every piece of beach intelligence together and surfaces it wherever the user is — in the app, on a home screen widget, in the Dynamic Island while driving, or through a Siri voice request without ever opening the app. An on-device CoreML model predicts crowd levels with zero latency and no internet required.

Our Role

CH Studios owned the full product: Python FastAPI backend, CoreML model training and integration, SwiftUI frontend, and all native iOS platform integrations. George led the SwiftUI side — map architecture, scoring algorithm, App Intents, WidgetKit, Live Activities, and notifications. Jaiden led the backend and CoreML pipeline.

Key Contributions

  • Map clustering algorithm. Built a grid-based spatial bucketing system from scratch — no third-party library. Grid size scales dynamically with zoom level so clusters stay proportional at any altitude.
  • Beach scoring engine. Weighted algorithm evaluates temperature, wind, precipitation, UV index, proximity, crowd tolerance, and favorites status to rank suggestions for today and the upcoming weekend.
  • CoreML crowd prediction. Trained an XGBoost classifier on 40 years of state park attendance data. Built the Swift-side feature engineering pipeline including cyclical month encoding, historical water temp fallback, and peak summer detection. Runs fully on-device.
  • App Intents and Siri. Two custom intents — one opens a beach in the app, one fetches live conditions and speaks them back through Siri without opening the app at all.
  • WidgetKit and Live Activities. Configurable home screen widget in small and medium sizes with 30-minute refresh. Dynamic Island tracker showing crowd level, water temp, and UV index while driving to the beach.
  • Three-tier notification system. Daily best beach alert scored at delivery time, threshold alerts when a favorite exceeds a score of 70, and severe NWS weather alerts. All refresh hourly via BGTaskScheduler.
  • Parallel data fetching. Used async let to fire the backend and WeatherKit simultaneously, cutting beach detail load time roughly in half versus sequential fetching.

System Architecture

Layer Technology Purpose
Weather WeatherKit Current conditions, 10-day forecast, hourly
Buoy Data NOAA NDBC via FastAPI Water temp, wave height, wave period
Water Quality Beach monitor via FastAPI E. coli levels and swim safety status
Alerts NWS via FastAPI Severity, urgency, and expiry
Traffic TomTom via FastAPI Road speed and closures near each beach
Crowd ML CoreML (XGBoost) On-device — low, moderate, busy
Persistence SwiftData Favorites and user preferences
Home Screen WidgetKit Small and medium widgets, 30-min refresh
Dynamic Island ActivityKit Live conditions while traveling
Siri App Intents Hands-free beach conditions
Background BGTaskScheduler Hourly notification refresh

Platform Features

On-Device ML

Crowd prediction model trained on 40 years of state park data. Zero latency, no internet required. Cyclical month encoding, holiday detection, and water temperature fallback.

Smart Map

Hand-built clustering algorithm — no library. Shows beach counts zoomed out, individual pins zoomed in. Real-time card strip updates as the user pans across Michigan.

Siri Shortcuts

Two App Intents. Ask Siri for conditions at any of 54 beaches — it fetches live data and speaks results without opening the app.

Live Activities

Dynamic Island and Lock Screen tracker with compact, expanded, and minimal regions. Shows crowd level, water temp, and UV index while driving.

Home Screen Widget

Configurable WidgetKit widget — users pin their favorite beach and see live conditions without unlocking their phone. Refreshes every 30 minutes.

Smart Notifications

Three tiers: daily best beach scored at delivery, score threshold alerts, and NWS severe weather push. All powered by hourly background refresh.

Tech Stack

  • SwiftUI — full iOS frontend with NavigationStack and adaptive layouts
  • Swift Concurrency — async let parallel fetching, TaskGroup for concurrent WeatherKit calls
  • WeatherKit — current conditions, 10-day forecast, hourly forecast
  • CoreML — on-device XGBoost crowd prediction, 12 engineered features
  • MapKit — custom clustering algorithm, real-time region filtering
  • WidgetKit + ActivityKit — home screen widgets and Dynamic Island Live Activities
  • App Intents — Siri Shortcuts with AppEntity beach search
  • UserNotifications + BGTaskScheduler — three-tier smart notifications
  • SwiftData — favorites and user preference persistence
  • Python FastAPI — backend aggregating six live data sources, deployed on Render

Outcome

CoastCast is live on TestFlight and in active development. On-device ML inference eliminated backend compute costs for crowd prediction entirely. The app surfaces beach intelligence across every surface of the iPhone — no open required. Full App Store release planned for summer 2026.