A tactical coastal reconnaissance and global surf intelligence platform featuring real-time beach webcams, live CCTV streams, swell forecasts, and interactive geospatial mapping across Android, Linux, Windows, and macOS.
SURFsUP is a cross-platform coastal surveillance application designed for surfers, oceanographers, and coastal observers. Styled with an "Orbital Recon" tactical HUD, it maps premier surf breaks, reefs, and point breaks worldwide, providing live CCTV feeds, webcam streams, and marine weather forecasts directly within an interactive geospatial console.
- 🛰️ Orbital Recon Interactive Map:
- Global map view powered by Leaflet and high-performance MarkerCluster.
- Instant pin clustering and smooth panning across global coastlines.
- Detailed spot cards showing break type, swell direction, wind orientation, and live status.
- 📹 Live Coastal CCTV & Webcam Feeds:
- Embedded real-time video streams (HLS
.m3u8, YouTube live, EarthCam, HDOnTap, SurfGuru, Ozolio, WetMet, and direct camera links). - Clean video modal with theater view and stream controls.
- Embedded real-time video streams (HLS
- 📊 Marine Weather & Surf Forecasts:
- Live swell height, wave period, tide predictions, and wind speeds.
- Break classification (Beach Break, Reef Break, Point Break, Rivermouth).
- 🔍 Fast Search & Filter:
- Instant search across hundreds of spots by name, coastline, country, or camera availability.
- Quick-jump navigation with keyboard shortcuts (
/to focus search).
- 🐍 Extensible Data Pipelines (
scripts/):- Automated Python utilities to ingest, deduplicate, scrape, and export global surf spots and live webcam endpoints.
- 🌐 4-Platform Native Support:
- Android: Native Kotlin application with hardware acceleration and full-screen WebView.
- Linux: Standalone desktop build for Linux distributions (Fedora, Ubuntu, Arch).
- Windows: Native Windows 10/11 x64 application with packaged installer.
- macOS: Universal desktop client with native support for both Apple Silicon (M-series) and Intel architectures.
SURFsUP/
├── app/ # Android Native Client (Kotlin, Jetpack, WebView)
│ ├── src/main/java/ # Android bridge & activity lifecycle
│ └── src/main/assets/ # Core web application assets & database
├── Linux app/ # Linux Desktop Client (Electron)
│ ├── main.js # Electron lifecycle & window management
│ ├── preload.js # IPC communication bridge
│ └── src/ # Packaged application sources
├── Windows app/ # Windows Desktop Client (Electron)
│ ├── main.js # Electron lifecycle & Windows tray integration
│ └── preload.js # IPC communication bridge
├── Mac app/ # macOS Desktop Client (Electron)
│ ├── main.js # macOS dock & window handlers
│ └── preload.js # IPC communication bridge
├── scripts/ # Python Data & Scraping Pipelines
│ ├── add_forecast_spots.py # Forecast data scraper & enricher
│ ├── export_spots_json.py # Database synchronization tool
│ └── generate_spots.py # Automated spot generator
└── spots.json # Centralized coastal reconnaissance database
Requirements: Android Studio or Android SDK (API 34+), Java 17+.
# Debug build:
./gradlew assembleDebug
# Release build:
./gradlew assembleRelease
# Output APK: app/build/outputs/apk/release/app-release.apkRequirements: Node.js 18+ and npm.
cd "Linux app"
# Install dependencies:
npm install
# Run in development mode:
npm start
# Build packaged distributable:
npm run dist:linuxRequirements: Node.js 18+ and npm.
cd "Windows app"
# Install dependencies:
npm install
# Run in development mode:
npm start
# Build packaged distributable:
npm run dist:winRequirements: macOS 12+, Node.js 18+, and npm.
cd "Mac app"
# Install dependencies:
npm install
# Run in development mode:
npm start
# Build packaged distributable:
npm run dist:macRequirements: Python 3.10+.
cd scripts
python3 export_spots_json.pyPackaged installers and portable archives are available under Releases:
- Android:
SURFsUP.apk(Universal APK) - Linux (x64):
SURFsUP-Linux-x64.zip - Windows (x64):
SURFsUP-Windows-x64.zip - macOS (Apple Silicon):
SURFsUP-Mac-AppleSilicon-arm64.zip - macOS (Intel):
SURFsUP-Mac-Intel-x64.zip
Follow the simple visual instructions below to install and launch SURFsUP through your operating system's graphical interface:
- Download
SURFsUP.apkfrom Releases directly on your device (or transfer it from PC via USB). - Open your device's Files or Downloads app and tap
SURFsUP.apk. - If Android displays "For your security, your phone is not allowed to install unknown apps from this source":
- Tap Settings in the prompt.
- Toggle "Allow from this source" to ON.
- Tap the back arrow.
- Tap Install and wait for the installer to finish.
- Tap Open to launch the Orbital Recon console, or find the SURFsUP icon in your app drawer.
- Download
SURFsUP-Windows-x64.zipfrom Releases. - Locate the downloaded file in Windows File Explorer (in your
Downloadsfolder). - Right-click
SURFsUP-Windows-x64.zip-> select Extract All... -> click Extract. - Open the extracted
SURFsUP-win32-x64folder. - Double-click
SURFsUP.exeto launch the application. - (First Launch / SmartScreen): If Windows SmartScreen displays "Windows protected your PC":
- Click "More info".
- Click "Run anyway".
- (Optional Desktop Shortcut): Right-click
SURFsUP.exe-> Show more options -> Send to -> Desktop (create shortcut).
- Download the archive matching your Mac's processor from Releases:
SURFsUP-Mac-AppleSilicon-arm64.zip: For Apple Silicon (M1, M2, M3, M4) Macs.SURFsUP-Mac-Intel-x64.zip: For Intel-based Macs.
- In Finder, double-click the
.zipfile to extract it. - Open the extracted folder and drag
SURFsUP.appinto your Applications folder (/Applications). - Launch
SURFsUPfrom your Applications folder, Launchpad, or Spotlight (Cmd + Space). - (First Launch / Gatekeeper Approval):
- If macOS displays "SURFsUP cannot be opened because the developer cannot be verified":
- Option 1: Right-click (or Control-click)
SURFsUP.appin Finder -> choose Open -> click Open in the dialog. - Option 2: Go to System Settings -> Privacy & Security, scroll down to the Security section, and click "Open Anyway".
- Option 1: Right-click (or Control-click)
- If macOS displays "SURFsUP cannot be opened because the developer cannot be verified":
- Download
SURFsUP-Linux-x64.zipfrom Releases. - Open your desktop file manager (Dolphin in KDE, Nautilus / Files in GNOME) and right-click the
.zipfile -> choose Extract Here (or Extract Archive). - Open the extracted
SURFsUP-linux-x64folder. - Enable executable permission:
- Right-click the
SURFsUPbinary -> select Properties. - Navigate to the Permissions tab.
- Check the box "Is executable" (KDE) or "Allow executing file as program" (GNOME).
- Click OK.
- Right-click the
- Double-click
SURFsUPto launch!
Distributed under the MIT License. See LICENSE for details.
Maintained with 🌊 by Prime3vil