# SOTA Peak Finder - Find Summits Worldwide with Offline Support
Table of Contents
Overview
SOTA (Summits On The Air) activators often need to find nearby summits while planning or during activations. With 179,527 summits worldwide in the database, finding the right peak can be challenging—especially when you’re on a mountain with no internet connection.
I created SOTA Peak Finder, a Progressive Web App that puts the entire worldwide SOTA database in your browser, working completely offline after the first visit.
Live Demo: https://matsubo.github.io/sota-peak-finder/
SOTA Peak Finder homepage with global statistics
Why I Built This
The Challenge
As a SOTA activator, I encountered several problems:
- Too many summits: 179,000+ summits worldwide—how do you find nearby ones?
- No internet on mountains: Most summits lack cellular coverage
- Slow website searches: Official SOTA sites require internet and can be slow
- Planning difficulties: Hard to discover summits near your hiking area
- Complex data: Need to filter by points, altitude, region, activation status
The Solution
SOTA Peak Finder solves these problems by:
- Putting the entire database in your browser: 44MB SQLite database with R*Tree spatial indexing
- Working completely offline: PWA with aggressive caching (90 days, 60MB)
- Lightning-fast queries: Sub-10ms search times using SQLite WASM
- GPS-powered discovery: Find 20 nearest summits instantly with distance, bearing, and activation zone detection
- Interactive maps: Click anywhere on the map to search that location
- Comprehensive filtering: Search by association, region, altitude, points, activations
Key Features
🌍 Worldwide Coverage
- 179,527 summits from all SOTA associations globally
- Every region: From Alaska to New Zealand, Japan to Europe
- Complete data: Reference codes, names, coordinates, altitude, points, activation counts
📍 GPS Location Finder
GPS finder showing your location and nearby summits
Tap “ACQUIRE CURRENT LOCATION” to instantly get:
- Your GPS coordinates: Precise latitude/longitude
- Grid Locator: 6-digit Maidenhead (e.g., PM95vr)
- JCC/JCG codes: Japanese location references (Japan only)
- 20 nearest summits with:
- Distance from your location
- Bearing (compass direction)
- Activation zone status (within 25m vertical)
- Summit reference, name, altitude, points
- Number of activations
Interactive Map:
- See all nearby summits plotted on OpenStreetMap
- Click anywhere on the map to search from that point
- Works even without GPS—perfect for planning
🔍 Advanced Search & Filtering
Browse page with comprehensive filtering options
Filter summits by:
- Association: Japan - Honshu, USA - California, England, etc.
- Region: Kanto, Northern California, etc.
- Altitude range: 0-500m, 500-1500m, 1500-3000m, 3000m+
- Points value: 1pt to 10pt
- Activation count: Unactivated only, popular (100+), custom range
- Search: By summit reference or name
Sort by:
- Name
- Altitude
- Points
- Activation count
📊 Global Statistics Dashboard
The homepage displays fascinating insights:
- Total summits: 179,527 worldwide
- Highest peak: 6960m summits
- Most activated: Popular summits by activation count
- Unactivated gems: High-value summits with zero activations
- Association distribution: Top regions by summit count
🌐 Fully Offline
After the first visit, everything works without internet:
- 44MB database: Cached for 90 days
- SQLite WASM: Runs entirely in your browser
- Service Worker: Caches all assets
- Zero network requests: Once loaded, no internet needed
Perfect for:
- Remote mountain activations
- Planning in airplane mode
- Areas with poor cellular coverage
- Saving mobile data
⚡ Lightning Fast
Technical Performance:
- Sub-10ms queries: R*Tree spatial indexing for bounding box searches
- Efficient distance calculation: Haversine formula in JavaScript
- 60% smaller than JSON: SQLite binary format
- Instant offline access: No loading delays
How It Works
Architecture
Frontend:
- React + TypeScript + Vite
- PWA with Service Worker
- Leaflet.js for maps
Database:
- SQLite WASM (
@sqlite.org/sqlite-wasmv3.52.0) - R*Tree spatial indexing for fast coordinate-based queries
- Bun build script to process official SOTA CSV
Data Pipeline:
SOTA CSV (24MB) ↓ bun run build:sotaSQLite Database (44MB) ↓ R*Tree spatial indexFast Bounding Box Queries ↓ Haversine distance calculationNearest 20 Summits (< 10ms)Why SQLite WASM?
I evaluated several approaches:
| Approach | Size | Speed | Offline | Verdict |
|---|---|---|---|---|
| JSON Array | 120MB | Slow | ✅ | Too large |
| IndexedDB | 80MB | Medium | ✅ | No spatial indexing |
| SQLite WASM | 44MB | ⚡ Fast | ✅ | Winner |
| Remote API | 0MB | Slow | ❌ | Requires internet |
SQLite WASM advantages:
- 60% smaller than JSON (binary format)
- R*Tree spatial index for fast bounding box queries
- SQL queries for complex filtering
- Official SQLite compiled to WebAssembly
- Deserialize from memory using
sqlite3_deserialize
Key Technical Detail:
// Must use DELETE journal mode (not WAL)// WAL creates separate -wal/-shm files that don't work with sqlite3_deserializedb.exec('PRAGMA journal_mode = DELETE');Data Processing
The build script (scripts/build-sota-database.mjs):
- Downloads: Official SOTA CSV from storage.sota.org.uk (179,527 summits)
- Parses: CSV with proper quote handling
- Validates: Coordinates, altitude, points
- Creates: SQLite database with schema
- Indexes: R*Tree spatial index for fast queries
- Optimizes: VACUUM, ANALYZE, DELETE journal mode
- Outputs: 44MB binary database
Usage Examples
Planning a SOTA Trip
- Open https://matsubo.github.io/sota-peak-finder/
- Go to “Browse All Summits”
- Filter by association (e.g., “Japan - Honshu”)
- Filter by points (e.g., 8pt or 10pt)
- Filter by altitude (e.g., 1500-3000m)
- Click “Unactivated Only” to find virgin peaks
- Browse results and plan your activation route
During Activation
- Install the PWA on your phone (works offline)
- Hike to the summit
- Open the app (no internet needed)
- Tap “ACQUIRE CURRENT LOCATION”
- Verify you’re within the activation zone (25m vertical)
- See your grid locator for exchange information
- Check nearby summits for future activations
Discovering New Summits
- Browse the statistics on the homepage
- Check “High-Value Unactivated Summits”
- Find rare 10pt summits with zero activations
- Plan your next adventure
Technical Stack
Frontend:
- React 19 + TypeScript
- Vite for build
- Tailwind CSS for styling
PWA:
- Service Worker (vite-plugin-pwa)
- 90-day cache, 60MB limit
- CacheFirst strategy
Database:
- SQLite WASM (official @sqlite.org/sqlite-wasm)
- R*Tree spatial indexing
- Haversine distance calculation
Maps:
- Leaflet.js
- OpenStreetMap tiles
Location:
- Geolocation API
- Maidenhead grid locator calculation
Deployment:
- GitHub Pages
- GitHub Actions CI/CD
- Bun for build scripts
Design System
Technical Cartography
Inspired by vintage radio equipment and topographic maps, the design features:
Typography:
- Rajdhani: Technical, bold headers
- JetBrains Mono: Monospace for coordinates and data
- DM Sans: Readable body text
Color Palette:
- Amber (
#FFA933): Primary buttons, important data - Teal (
#33CCCC): Grid lines, technical labels - Green (
#66FF99): GPS coordinates, active states - Dark base (
#0C1018): Background
Visual Effects:
- Contour line patterns (topographic map style)
- Diagonal grid lines
- CRT scanlines (vintage radio aesthetic)
- Neon glow effects
- Technical corner accents
High contrast for outdoor visibility in bright sunlight.
Version History
v3.1.0 (Current)
- 179,527 summits worldwide
- 44MB optimized database
- R*Tree spatial indexing
- Interactive map with click-to-search
- Grid locator calculation
- JCC/JCG support for Japan
Development Roadmap
- Offline map tile caching
- Summit activation history
- Export to GPX/KML for GPS devices
- Summit statistics and analytics
- Integration with SOTA Watch
Performance Metrics
Database:
- Size: 44MB (60% smaller than JSON)
- Summits: 179,527 worldwide
- Download: ~5 seconds on 3G
- Cache: 90 days offline access
Query Speed:
- Bounding box search: < 5ms
- Distance calculation: < 5ms
- Total nearest 20: < 10ms
PWA:
- First load: ~8 seconds (download database)
- Subsequent loads: < 1 second (cached)
- Offline: Instant
FAQ
Q: Does it work offline? A: Yes! After the first visit, everything works without internet. Perfect for mountain activations.
Q: How large is the database? A: 44MB—downloads once and caches for 90 days.
Q: Which countries are supported? A: All 179,527 SOTA summits worldwide across all associations.
Q: How accurate is the GPS? A: Typically 5-10 meters, but varies based on satellite visibility and terrain.
Q: Does it show if I’m in the activation zone? A: Yes! It detects if you’re within 25m vertical of the summit.
Q: How often is the database updated?
A: I update it periodically from the official SOTA database. You can also rebuild it using bun run build:sota.
Q: Can I use it for planning? A: Absolutely! Use the interactive map and filters to discover summits near your hiking area.
Open Source
The project is MIT licensed and welcomes contributions:
- GitHub: matsubo/sota-peak-finder
- Issues: Bug reports and feature requests
- Pull Requests: Code improvements and new features
Especially welcome:
- Database optimization improvements
- Additional location data (JCC/JCG for other countries)
- UI/UX enhancements
- Translation contributions
Summary
SOTA Peak Finder demonstrates that modern web technologies can deliver desktop-class performance entirely in the browser:
- SQLite WASM enables complex database queries offline
- R*Tree spatial indexing provides sub-10ms searches across 179,527 summits
- PWA makes it work like a native app without installation friction
- 60MB total size (44MB database + 16MB assets) is acceptable for the value provided
For SOTA activators, it’s a game-changer: no more fumbling with slow websites on poor connections, or carrying paper summit lists. Everything you need is in your browser, working instantly, even on a remote mountaintop.
Try it now: https://matsubo.github.io/sota-peak-finder/
73 and good DX! 📻⛰️
Links
- Live Demo: https://matsubo.github.io/sota-peak-finder/
- GitHub: https://github.com/matsubo/sota-peak-finder
- Official SOTA: https://www.sota.org.uk/
This article introduces SOTA Peak Finder, a web app I built for finding SOTA summits worldwide with offline support. For the latest updates, check the GitHub repository.