The "Kumpaw" Epidemic Across Southeast Asia
In Southeast Asian fishing culture (Malaysia, Singapore, Indonesia), the word "kumpaw" is both a badge of honor and a collective grief: it refers to the experience of spending an entire day fishing and returning home completely empty-handed.
Today, most anglers rely on basic generic tide tables designed for commercial shipping. They look at a static high-tide peak and guess when fish will bite. But fish feeding activity is governed by an intricate collision of variables: water movement velocity, barometric pressure fluctuations, water temperature, lunar transit angles, and solunar minor/major windows.
I designed Kumpaw to replace crude tide guessing with real predictive intelligence: taking complex marine physics and condensing it into a single, actionable 0–100 score per fishing spot per 3-hour window.
The Water-Edge Mandate: Offline-First by Construction
Anglers do not fish in air-conditioned cafes with 5G connectivity. They fish in remote mangrove estuaries, offshore wooden jetties, and deep sea boats where mobile connectivity drops to zero. A conventional cloud-first mobile app that expects an internet connection is completely useless at the water's edge.
I architected Kumpaw around an uncompromising offline-first principle:
- Drift (SQLite) Local Store: Every catch log, spot coordinate, and session note is written directly to a local encrypted SQLite database on the device.
- Idempotent Client-Generated UUIDs: All database primary keys are generated on-device using random UUIDv4. When network connectivity returns, the local sync queue syncs records to Supabase PostgreSQL without id collisions or roundtrip latency.
- Offline Map Tiles: Integrated
flutter_mapwith OpenStreetMap vector caching, allowing anglers to navigate secret fishing spots and marine depth contours even when completely offline.
The Kumpaw Index: Precomputed O(1) Reads
Calculating fishability requires heavy mathematical processing: solving harmonic tide equations, querying oceanic swell models, and cross-referencing lunar elevation angles. Running these calculations dynamically when a user opens the app would burn server CPU and cause sluggish loading times.
I engineered a precomputed conditions pipeline:
- Background Cron Aggregation: Using Supabase
pg_cronandpgmq(message queues), workers poll Open-Meteo Marine APIs and compute local astronomical tide charts every 6 hours. - The 0–100 Weighted Formula: The algorithm weighs 4 primary environmental forces:
1. Tidal Current Flow (35%): Fish bite when water moves; slack high and low tides score poorly, while mid-tide velocity peaks score highest.
2. Solunar Lunar Phase (25%): Major feeding windows align with overhead and underfoot lunar transit times.
3. Barometric Tendency (20%): Rapidly dropping pressure shuts down fish activity; stable or gently rising pressure triggers feeding frenzy.
4. Swell & Water Clarity (20%): Turbid sea states and extreme wave heights reduce strike rates for visual predatory species (e.g. Barramundi, Trevally). - O(1) Edge Caching: Calculated scores are stored in a partitioned Postgres table and cached at Cloudflare Edge. When an angler opens a spot, the forecast loads instantly in under 50 milliseconds.
PostGIS Geospatial Engine & Tekong Directory
Generic apps fail because marine conditions vary drastically across short distances. A sheltered mangrove creek in Pontian behaves completely differently from an open offshore reef in Desaru just 60km away.
- PostGIS Spatial Indexing: Using PostgreSQL spatial extensions, Kumpaw matches anglers to verified fishing spots using bounding-box spatial queries (
ST_DWithin). - Tekong & Kolam Directory: A verified marketplace indexing licensed boat captains (Tekong) and commercial pay-lakes (Kolam) across Johor and Singapore, complete with real win rates and bait recommendations.
- The Catch-Log Moat: Anglers log catches (species, weight, rig setup) as well as blank "kumpaw" days. Over time, community verification tunes the predictive formula for specific local spots, building an impenetrable regional data moat.
Cloudflare R2 Media & Zero-Cost Infrastructure
High-resolution catch photos are the lifeblood of fishing communities, but image hosting can quickly bankrupt an independent bootstrapped venture.
- Cloudflare R2 Zero-Egress Storage: Angler catch photos are uploaded directly to a Cloudflare R2 bucket via pre-signed URLs generated by Supabase Edge Functions.
- Edge Image Resizing: A lightweight Cloudflare Worker intercepts image requests, converting heavy mobile camera uploads (often 12MB JPEGs) into compressed WebP thumbnails on the fly.
- \$0/mo Operational Baseline: By combining Supabase free-tier compute, Cloudflare R2 zero-egress policies, and Open-Meteo open weather feeds, Kumpaw operates with zero ongoing fixed infrastructure overhead.
Engineering for the Physical World
- Minimise moving parts over money: The binding constraint on a solo builder is cognitive surface area and 3am production incidents. Choosing PostgreSQL to handle relational data, geospatial queries, cron jobs, and message queues in a single engine prevented multi-vendor integration hell.
- Design the expensive path as precomputed reads: By decoupling complex environmental data ingestion from the user request path, the client remains screamingly fast even on 3G network edges.
- Local culture is the best product wedge: Framing the product around the regional concept of "kumpaw" built instant viral resonance that sterile global tide applications could never replicate.