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
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
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
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 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
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
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
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
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
Frontend:
React + TypeScript + Vite
PWA with Service Worker
Leaflet.js for maps
Database:
SQLite WASM (@sqlite.org/sqlite-wasm v3.52.0)
R*Tree spatial indexing for fast coordinate-based queries
Bun build script to process official SOTA CSV
Data Pipeline:
Fast Bounding Box Queries
↓ Haversine distance calculation
Nearest 20 Summits (< 10ms )
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_deserialize
db . exec ( ' PRAGMA journal_mode = DELETE ' ) ;
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
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
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
Browse the statistics on the homepage
Check “High-Value Unactivated Summits”
Find rare 10pt summits with zero activations
Plan your next adventure
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
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.
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
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
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.
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
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! 📻 ⛰️
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 .