Skip to content

gibnoob/LakeLogic

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

3 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

 β–ˆβ–ˆβ•—      β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•— β–ˆβ–ˆβ•—  β–ˆβ–ˆβ•—β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—    β–ˆβ–ˆβ•—      β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—  β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•— β–ˆβ–ˆβ•— β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—
 β–ˆβ–ˆβ•‘     β–ˆβ–ˆβ•”β•β•β–ˆβ–ˆβ•—β–ˆβ–ˆβ•‘ β–ˆβ–ˆβ•”β•β–ˆβ–ˆβ•”β•β•β•β•β•    β–ˆβ–ˆβ•‘     β–ˆβ–ˆβ•”β•β•β•β–ˆβ–ˆβ•—β–ˆβ–ˆβ•”β•β•β•β•β• β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•”β•β•β•β•β•
 β–ˆβ–ˆβ•‘     β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•‘β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•”β• β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—      β–ˆβ–ˆβ•‘     β–ˆβ–ˆβ•‘   β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•‘  β–ˆβ–ˆβ–ˆβ•—β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•‘
 β–ˆβ–ˆβ•‘     β–ˆβ–ˆβ•”β•β•β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•”β•β–ˆβ–ˆβ•— β–ˆβ–ˆβ•”β•β•β•      β–ˆβ–ˆβ•‘     β–ˆβ–ˆβ•‘   β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•‘   β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•‘
 β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–ˆβ–ˆβ•‘  β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•‘  β–ˆβ–ˆβ•—β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—    β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β•šβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•”β•β•šβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•”β•β–ˆβ–ˆβ•‘β•šβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—
 β•šβ•β•β•β•β•β•β•β•šβ•β•  β•šβ•β•β•šβ•β•  β•šβ•β•β•šβ•β•β•β•β•β•β•    β•šβ•β•β•β•β•β•β• β•šβ•β•β•β•β•β•  β•šβ•β•β•β•β•β• β•šβ•β• β•šβ•β•β•β•β•β•
               ~  ~  ~  ~  ~  ~  ~  ~  ~  ~  ~  ~  ~
           ><(((ΒΊ>          Minnesota Fisheries Intel         <Β°)))><
               ~  ~  ~  ~  ~  ~  ~  ~  ~  ~  ~  ~  ~

🎣 LakeLogic β€” Your Secret Weapon on the Water

"The difference between a fisherman and a fish whisperer is data." β€” Some guy who limits out every Sunday

LakeLogic is a locally-run web app that arms you with real Minnesota DNR fisheries data β€” fish stocking records, population surveys, lake depth maps, and species searches β€” all from the comfort of your browser before you even back the boat in.

No internet on the water? No problem. LakeLogic caches everything locally so you can scout lakes offline from your cabin, your truck, or your buddy's couch at 2 AM before a big trip.


βš™οΈ How It Works (The Short Version)

  [MN DNR Servers]                     [Your Machine]
        |                                    |
        |  -- npm run download -->           |
        |  Fish stocking records             |
        |  Lake survey data          ======> | [data/] folder
        |  Lake metadata                     |
        |                                    |
        |                            [server.js]
        |                            Node.js + Express
        |                            Port 3000
        |                                    |
        |                             [Browser]
        |                             http://localhost:3000
        |                             YOU, sipping coffee,
        |                             picking your honey hole

LakeLogic has two modes:

  • πŸ“¦ Local Mode (preferred): All data is pre-downloaded and served from disk. Instant results, works offline.
  • 🌐 Live Mode (fallback): If no local data exists, it goes out and scrapes the DNR directly. Slower, but always fresh.

πŸš€ Getting Started (5 Minutes to Your First Lake)

1. Install Dependencies

npm install

2. Download the Lake Data

This is the one-time setup that pulls all the Minnesota fishing data to your machine:

npm run download

β˜• Go grab a coffee. This downloads stocking records, survey data, and metadata for thousands of Minnesota lakes. It's a big haul.

You can also grab just the lake index if you're impatient:

npm run download:lakes

Or pull a specific year's stocking data:

npm run download:year -- --year=2023

3. Fire Up the Server

npm start

Then open your browser to http://localhost:3000 and you're fishing. 🐟


πŸ—ΊοΈ What You Can Do

  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
  β”‚                    LakeLogic Features                β”‚
  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
  β”‚ πŸ” Find a Lake   β”‚ Search by name, click the map,   β”‚
  β”‚                  β”‚ or drop a pin near your cabin     β”‚
  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
  β”‚ 🐟 Species Hunt  β”‚ "Show me every lake with         β”‚
  β”‚                  β”‚ Walleye within 30 miles of me"    β”‚
  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
  β”‚ 🧺 Stocking Data β”‚ See exactly when fish were        β”‚
  β”‚                  β”‚ stocked β€” how many, what size     β”‚
  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
  β”‚ πŸ“Š Survey Data   β”‚ DNR survey reports: CPUE scores,  β”‚
  β”‚                  β”‚ average weights, size ranges      β”‚
  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
  β”‚ πŸ“ Lake Info     β”‚ Depth, acreage, water clarity,    β”‚
  β”‚                  β”‚ littoral zone, nearest town       β”‚
  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

🦟 Species Coverage

LakeLogic recognizes 40+ Minnesota fish species, including all the classics:

  ><(((ΒΊ>  Walleye               ><(((ΒΊ>  Northern Pike
  ><(((ΒΊ>  Muskellunge           ><(((ΒΊ>  Tiger Muskie
  ><(((ΒΊ>  Largemouth Bass       ><(((ΒΊ>  Smallmouth Bass
  ><(((ΒΊ>  Bluegill Sunfish      ><(((ΒΊ>  Black Crappie
  ><(((ΒΊ>  Yellow Perch          ><(((ΒΊ>  Lake Trout
  ><(((ΒΊ>  Rainbow Trout         ><(((ΒΊ>  Brown Trout
  ><(((ΒΊ>  Brook Trout           ><(((ΒΊ>  Channel Catfish
  ><(((ΒΊ>  Lake Sturgeon         ><(((ΒΊ>  Burbot
               ... and many more

πŸ€“ The Nerdy Stuff (API Endpoints)

For the tinkerers who want to build their own tools on top of this:

Endpoint What it does
GET /api/lake-by-id?id=XXXXXXXX Full lake profile by DOW ID
GET /api/lakes-by-point?lat=&lon=&radius= All lakes within a radius (meters)
GET /api/lake-search?name= Search lakes by name
GET /api/fish-stocking?id= Stocking history for a specific lake
GET /api/fish-stocking-history?id= Detailed year-by-year stocking breakdown
GET /api/fish-survey?id= DNR survey data with CPUE & size stats
GET /api/species-search?species=&sort= Find lakes with a specific species
GET /api/species-list All known species in the local dataset
GET /api/geocode?address= Street address β†’ lat/lon (Nominatim)
GET /api/data-status How much local data you have cached

Species Search Sort Options

  sort=recent        β†’  Most recently surveyed or stocked
  sort=cpue          β†’  Catch-Per-Unit-Effort (higher = more bites)
  sort=survey_count  β†’  Total fish counted in surveys
  sort=largest       β†’  Biggest fish recorded (by length)
  sort=recent_stocked β†’ Most recently stocked lakes first
  sort=quantity      β†’  Most fish ever stocked
  sort=area          β†’  Biggest lakes first
  sort=name          β†’  Alphabetical

πŸ“ Project Structure

lakefinder/
β”‚
β”œβ”€β”€ server.js              # The whole backend β€” Express API + scrapers
β”œβ”€β”€ package.json           # Node dependencies & npm scripts
β”‚
β”œβ”€β”€ public/                # Frontend (served at localhost:3000)
β”‚   β”œβ”€β”€ index.html         # Main app shell
β”‚   β”œβ”€β”€ app.js             # All the UI logic
β”‚   └── style.css          # Looks pretty
β”‚
β”œβ”€β”€ scripts/
β”‚   └── download.js        # One-time MN DNR data downloader
β”‚
β”œβ”€β”€ data/                  # Local data cache (built by download.js)
β”‚   β”œβ”€β”€ lakes.json         # Metadata for all MN lakes
β”‚   β”œβ”€β”€ stocking/          # Per-lake stocking JSON files
β”‚   └── surveys/           # Per-lake DNR survey JSON files
β”‚
β”œβ”€β”€ Launcher.cs            # GUI launcher source (C#)
└── launcher_ui.ps1        # PowerShell GUI launcher alternative

πŸͺ„ Standalone Launcher (No Terminal Required)

Don't want to mess with a terminal? There's a GUI launcher:

  • LakeLogic Launcher.bat β€” Double-click this to start the server and open the app in your browser automatically.
  • launcher_ui.ps1 β€” Full PowerShell GUI with Start/Stop buttons and live status.
  ╔══════════════════════════════╗
  β•‘   🎣 LakeLogic Launcher      β•‘
  ╠══════════════════════════════╣
  β•‘  Status: ● Running           β•‘
  β•‘  http://localhost:3000       β•‘
  ╠══════════════════════════════╣
  β•‘   [  START  ]  [  STOP  ]   β•‘
  β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•

☁️ Cloud Deployment & Sync

LakeLogic can be deployed to Google Cloud Run using the provided Dockerfile. It uses Google Cloud Storage (GCS) to store and serve the lake data.

πŸ’Ύ Syncing Data to Cloud

After running a local download or refresh, sync your data to GCS:

npm run upload

πŸš€ Redeploying

To update the server logic or force a fresh data load on the cloud instance:

gcloud run deploy lakelogic --source . --region us-central1

πŸ•οΈ Typical Pre-Trip Workflow

  SATURDAY NIGHT, 10:30 PM
  ─────────────────────────
  1. Double-click LakeLogic Launcher  .............. βœ…
  2. Search "Walleye" within 40 miles of [your spot] βœ…
  3. Sort by CPUE β€” find the honey holes  .......... βœ…
  4. Check stocking history β€” was this lake stocked
     recently, or is it all wild fish?  ............. βœ…
  5. Look at survey data β€” avg weight 2.1 lbs? Nice. βœ…
  6. Set alarm for 4:45 AM  ........................ 😴
  7. Limit out by 8 AM  ............................ 🐟🐟🐟

πŸ”’ Privacy & Data

All data comes from the Minnesota DNR's public API and website. As this application is a derivative work, we acknowledge the MNDNR as the owner and primary contributor of the data and software used. Your fishing secrets stay yours.

Data source: Minnesota DNR LakeFinder


πŸ› Troubleshooting

"No local data found" at startup? β†’ Run npm run download first. That's 99% of issues.

Server won't start on port 3000? β†’ Something else is using that port. Stop it, or change PORT in server.js.

Stocking data looks wrong? β†’ The DNR recently changed their website layout, which we've now fixed in the latest version. As of April 2026, we have performed a full historical refresh (2000–2025). If you see missing data for a new year, run npm run download:year -- --year=<year>.

Species showing up with weird codes like WAE or BCS? β†’ These are DNR shorthand codes. LakeLogic translates them automatically. Here's the full cheat sheet:

  -- Game Fish ---------------------------
  WAE  β†’  Walleye                NOP  β†’  Northern Pike
  MUE  β†’  Muskellunge            SXS  β†’  Saugeye
  SAR  β†’  Sauger                 WON  β†’  White Bass

  -- Bass & Panfish ----------------------
  LMB  β†’  Largemouth Bass        SMB  β†’  Smallmouth Bass
  BLG  β†’  Bluegill Sunfish       BOG  β†’  Bluegill Sunfish
  BLC  β†’  Black Crappie          BCS  β†’  Black Crappie
  WHC  β†’  White Crappie          RKB  β†’  Rock Bass
  YEP  β†’  Yellow Perch           PKS  β†’  Pumpkinseed Sunfish
  PMK  β†’  Pumpkinseed Sunfish    HSF  β†’  Hybrid Sunfish
  GSF  β†’  Green Sunfish

  -- Trout & Salmon ----------------------
  BKT  β†’  Brook Trout            BNT  β†’  Brown Trout
  RBT  β†’  Rainbow Trout          LKT  β†’  Lake Trout
  LAT  β†’  Lake Trout             SPK  β†’  Splake
  TLC  β†’  Tullibee (Cisco)

  -- Catfish & Bullheads -----------------
  CCF  β†’  Channel Catfish        FHC  β†’  Flathead Catfish
  BRB  β†’  Brown Bullhead         BKB  β†’  Black Bullhead
  BLB  β†’  Black Bullhead         YEB  β†’  Yellow Bullhead

  -- Other Sportfish ---------------------
  LKS  β†’  Lake Sturgeon          PSH  β†’  Paddlefish
  BUR  β†’  Burbot                 BOF  β†’  Bowfin (Dogfish)

  -- Rough Fish & Carp -------------------
  COC  β†’  Common Carp            CAP  β†’  Common Carp
  GZS  β†’  Gizzard Shad          QIL  β†’  Quillback
  WTS  β†’  White Sucker           WHS  β†’  White Sucker

  -- Minnows, Shiners & Darters ----------
  FHM  β†’  Fathead Minnow         GOS  β†’  Golden Shiner
  BNM  β†’  Bluntnose Minnow       CSH  β†’  Common Shiner
  BNS  β†’  Blacknose Shiner       SPO  β†’  Spottail Shiner
  SFS  β†’  Spotfin Shiner         BKS  β†’  Blackchin Shiner
  PGS  β†’  Pugnose Shiner         FTD  β†’  Finescale Dace
  BND  β†’  Blacknose Dace         LND  β†’  Longnose Dace
  CRC  β†’  Creek Chub             CNM  β†’  Central Mudminnow
  JND  β†’  Johnny Darter          IOD  β†’  Iowa Darter
  LED  β†’  Least Darter           TPM  β†’  Tadpole Madtom
  BST  β†’  Brook Stickleback

              ~  ~  ~  ~  ~  ~  ~  ~  ~  ~  ~  ~
          ><(((ΒΊ>     Good luck out there!     <Β°)))><
              ~  ~  ~  ~  ~  ~  ~  ~  ~  ~  ~  ~

         "Give a man a fish and you feed him for a day.
          Give a man LakeLogic and he comes home with
          a cooler full every single weekend."

Built for Minnesota anglers, by a Minnesota angler. 🎣

About

Simple local and web app that puts 25 years of MN DNR fisheries data; stocking records, population surveys, and lake maps. All directly on your laptop.

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors