[{"data":1,"prerenderedAt":558},["ShallowReactive",2],{"navigation":3,"\u002Fdeveloper\u002Farchitecture":61,"\u002Fdeveloper\u002Farchitecture-surround":553},[4,23,46],{"title":5,"path":6,"stem":7,"children":8,"icon":22},"Getting Started","\u002Fgetting-started","1.getting-started\u002F1.index",[9,12,17],{"title":10,"path":6,"stem":7,"icon":11},"Introduction","i-lucide-house",{"title":13,"path":14,"stem":15,"icon":16},"Quick Start","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-rocket",{"title":18,"path":19,"stem":20,"icon":21},"Dashboard","\u002Fgetting-started\u002Fusage","1.getting-started\u002F3.usage","i-lucide-layout-dashboard",false,{"title":24,"icon":22,"path":25,"stem":26,"children":27,"page":22},"Features","\u002Ffeatures","2.features",[28,32,37,42],{"title":18,"path":29,"stem":30,"icon":31},"\u002Ffeatures\u002Fdashboard","2.features\u002F1.dashboard","i-lucide-gauge",{"title":33,"path":34,"stem":35,"icon":36},"Flow Bands","\u002Ffeatures\u002Fflow-bands","2.features\u002F2.flow-bands","i-lucide-activity",{"title":38,"path":39,"stem":40,"icon":41},"Reach Pages","\u002Ffeatures\u002Freach-pages","2.features\u002F3.reach-pages","i-lucide-map-pin",{"title":43,"path":44,"stem":45},"KMZ Import Guide","\u002Ffeatures\u002Fkmz-import","2.features\u002F4.kmz-import",{"title":47,"icon":22,"path":48,"stem":49,"children":50,"page":22},"Developer","\u002Fdeveloper","3.developer",[51,56],{"title":52,"path":53,"stem":54,"icon":55},"Architecture","\u002Fdeveloper\u002Farchitecture","3.developer\u002F1.architecture","i-lucide-layers",{"title":57,"path":58,"stem":59,"icon":60},"Public API","\u002Fdeveloper\u002Fapi","3.developer\u002F2.api","i-lucide-code",{"id":62,"title":52,"body":63,"description":546,"extension":547,"links":548,"meta":549,"navigation":550,"path":53,"seo":551,"stem":54,"__hash__":552},"docs\u002F3.developer\u002F1.architecture.md",{"type":64,"value":65,"toc":529},"minimark",[66,71,80,83,87,92,168,172,216,220,276,280,332,336,343,359,368,372,382,386,393,404,424,427,431,491,495,498,506,509,521],[67,68,70],"h2",{"id":69},"what-this-is","What this is",[72,73,74,75,79],"p",{},"H2OFlows is a ",[76,77,78],"strong",{},"streamflow data platform"," — a gauge dashboard backed by an open reach registry that the entire whitewater community can build on. At its core it aggregates real-time CFS readings from USGS and Colorado DWR, overlays community-defined flow ranges, and ties gauge data to geographic reach records (put-ins, take-outs, rapids, access notes).",[72,81,82],{},"The platform is free, open source, and will remain so. The data belongs to the community.",[67,84,86],{"id":85},"tech-stack","Tech stack",[88,89,91],"h3",{"id":90},"backend","Backend",[93,94,95,108],"table",{},[96,97,98],"thead",{},[99,100,101,105],"tr",{},[102,103,104],"th",{},"Layer",[102,106,107],{},"Choice",[109,110,111,120,128,136,144,152,160],"tbody",{},[99,112,113,117],{},[114,115,116],"td",{},"Language",[114,118,119],{},"Go",[99,121,122,125],{},[114,123,124],{},"Router",[114,126,127],{},"Chi",[99,129,130,133],{},[114,131,132],{},"Database",[114,134,135],{},"PostgreSQL 16 + PostGIS",[99,137,138,141],{},[114,139,140],{},"Migrations",[114,142,143],{},"golang-migrate",[99,145,146,149],{},[114,147,148],{},"AI",[114,150,151],{},"Anthropic Claude (anthropic-sdk-go)",[99,153,154,157],{},[114,155,156],{},"Object storage",[114,158,159],{},"Cloudflare R2 (planned)",[99,161,162,165],{},[114,163,164],{},"Auth",[114,166,167],{},"Supabase (Google OAuth)",[88,169,171],{"id":170},"frontend","Frontend",[93,173,174,182],{},[96,175,176],{},[99,177,178,180],{},[102,179,104],{},[102,181,107],{},[109,183,184,192,200,208],{},[99,185,186,189],{},[114,187,188],{},"Framework",[114,190,191],{},"Nuxt 4",[99,193,194,197],{},[114,195,196],{},"UI",[114,198,199],{},"Nuxt UI (Tailwind CSS v4)",[99,201,202,205],{},[114,203,204],{},"State",[114,206,207],{},"Pinia",[99,209,210,213],{},[114,211,212],{},"Maps",[114,214,215],{},"MapLibre GL",[88,217,219],{"id":218},"infrastructure","Infrastructure",[93,221,222,232],{},[96,223,224],{},[99,225,226,229],{},[102,227,228],{},"Component",[102,230,231],{},"Hosting",[109,233,234,247,258,268],{},[99,235,236,239],{},[114,237,238],{},"API",[114,240,241,242,246],{},"EC2 at ",[243,244,245],"code",{},"api.h2oflows.app"," (Docker Compose + Caddy)",[99,248,249,252],{},[114,250,251],{},"Web app",[114,253,254,255],{},"Netlify at ",[243,256,257],{},"h2oflows.app",[99,259,260,263],{},[114,261,262],{},"Docs",[114,264,254,265],{},[243,266,267],{},"docs.h2oflows.app",[99,269,270,273],{},[114,271,272],{},"DNS",[114,274,275],{},"Cloudflare",[67,277,279],{"id":278},"repositories","Repositories",[93,281,282,292],{},[96,283,284],{},[99,285,286,289],{},[102,287,288],{},"Repo",[102,290,291],{},"Contents",[109,293,294,308,320],{},[99,295,296,305],{},[114,297,298],{},[299,300,304],"a",{"href":301,"rel":302},"https:\u002F\u002Fgithub.com\u002Fh2oflows-app\u002Fapi",[303],"nofollow","h2oflows-app\u002Fapi",[114,306,307],{},"Go backend, migrations, gauge adapters",[99,309,310,317],{},[114,311,312],{},[299,313,316],{"href":314,"rel":315},"https:\u002F\u002Fgithub.com\u002Fh2oflows-app\u002Fweb",[303],"h2oflows-app\u002Fweb",[114,318,319],{},"Nuxt 4 frontend",[99,321,322,329],{},[114,323,324],{},[299,325,328],{"href":326,"rel":327},"https:\u002F\u002Fgithub.com\u002Fh2oflows-app\u002Fdocs",[303],"h2oflows-app\u002Fdocs",[114,330,331],{},"This documentation site",[67,333,335],{"id":334},"gauge-adapters","Gauge adapters",[72,337,338,339,342],{},"The ",[243,340,341],{},"gauge-core"," package in the API implements a plugin interface for data sources. Each adapter is a single file that satisfies the interface. Current adapters:",[344,345,346,353],"ul",{},[347,348,349,352],"li",{},[76,350,351],{},"USGS"," — National Water Information System (waterservices.usgs.gov)",[347,354,355,358],{},[76,356,357],{},"DWR"," — Colorado Division of Water Resources (dwr.state.co.us)",[72,360,361,362,367],{},"Adding a new data source means writing one adapter file. See the ",[299,363,366],{"href":364,"rel":365},"https:\u002F\u002Fgithub.com\u002Fh2oflows-app\u002Fapi\u002Fblob\u002Fmain\u002FCONTRIBUTING.md",[303],"contributing guide"," for details.",[67,369,371],{"id":370},"data-model-key-tables","Data model (key tables)",[373,374,379],"pre",{"className":375,"code":377,"language":378},[376],"language-text","gauges          — gauge metadata (source, external_id, name, lat\u002Flng)\ngauge_readings  — time-series CFS readings per gauge\nreaches         — river sections (slug, name, class, geometry)\nreach_gauges    — many-to-many: reaches linked to gauges\nflow_ranges     — CFS band definitions per reach (too_low \u002F min \u002F optimal \u002F pushy \u002F flood)\nrapids          — rapid inventory per reach (name, class, coords, description)\nreach_access    — put-in\u002Ftake-out\u002Fparking\u002Fshuttle per reach\ndashboards      — named watchlists per user\nwatchlist_items — gauge memberships in dashboards\n","text",[243,380,377],{"__ignoreMap":381},"",[67,383,385],{"id":384},"reach-data-seeding","Reach data seeding",[72,387,388,389,392],{},"Reach content is seeded using AI (Claude) from guidebook knowledge, American Whitewater records, and community trip reports. The ",[243,390,391],{},"cmd\u002Fseed-reaches"," tool defines reaches with local knowledge notes embedded in the seed prompt; the AI generates rapid inventory, access notes, descriptions, and flow ranges.",[72,394,395,396,399,400,403],{},"Every seeded item carries a ",[243,397,398],{},"data_source"," and ",[243,401,402],{},"confidence"," score:",[344,405,406,412,418],{},[347,407,408,411],{},[243,409,410],{},"confidence >= 85"," → auto-verified",[347,413,414,417],{},[243,415,416],{},"confidence 50–84"," → stored as draft, shown with badge",[347,419,420,423],{},[243,421,422],{},"confidence \u003C 50"," → dropped at generation time",[72,425,426],{},"Community corrections and verified field data override AI-seeded content.",[67,428,430],{"id":429},"build-phases","Build phases",[93,432,433,443],{},[96,434,435],{},[99,436,437,440],{},[102,438,439],{},"Phase",[102,441,442],{},"Status",[109,444,445,453,460,468,476,483],{},[99,446,447,450],{},[114,448,449],{},"Phase 1 — Gauge dashboard",[114,451,452],{},"Complete",[99,454,455,458],{},[114,456,457],{},"Phase 2 — Reach pages + user features",[114,459,452],{},[99,461,462,465],{},[114,463,464],{},"Phase 3 — Accounts, alerts",[114,466,467],{},"Deferred (post-pilot)",[99,469,470,473],{},[114,471,472],{},"Phase 4 — Trip planning",[114,474,475],{},"Planned",[99,477,478,481],{},[114,479,480],{},"Phase 5 — Permit trip module",[114,482,475],{},[99,484,485,488],{},[114,486,487],{},"Phase 6 — Public API docs + token issuance",[114,489,490],{},"Parallel to Phase 3+",[67,492,494],{"id":493},"contributing","Contributing",[72,496,497],{},"Non-developer contributions:",[344,499,500,503],{},[347,501,502],{},"Add or verify reach data for rivers you know",[347,504,505],{},"Define flow ranges for local gauges",[72,507,508],{},"Developer contributions:",[344,510,511,518],{},[347,512,513,514,517],{},"Issues tagged ",[243,515,516],{},"good-first-issue"," are the entry point",[347,519,520],{},"Gauge source adapters are the easiest first contribution",[72,522,523,524,528],{},"See ",[299,525,527],{"href":364,"rel":526},[303],"CONTRIBUTING.md"," for development setup.",{"title":381,"searchDepth":530,"depth":531,"links":532},1,2,[533,534,540,541,542,543,544,545],{"id":69,"depth":531,"text":70},{"id":85,"depth":531,"text":86,"children":535},[536,538,539],{"id":90,"depth":537,"text":91},3,{"id":170,"depth":537,"text":171},{"id":218,"depth":537,"text":219},{"id":278,"depth":531,"text":279},{"id":334,"depth":531,"text":335},{"id":370,"depth":531,"text":371},{"id":384,"depth":531,"text":385},{"id":429,"depth":531,"text":430},{"id":493,"depth":531,"text":494},"H2OFlows system architecture — backend, frontend, data model, and hosting.","md",null,{},{"icon":55},{"title":52,"description":546},"Kv2v_26jn2UvHako7fl1xj6yRQKSGMD7IKzT8vwk8e4",[554,556],{"title":43,"path":44,"stem":45,"description":555,"children":-1},"How to structure a Google My Map so its KMZ export imports cleanly into H2OFlows.",{"title":57,"path":58,"stem":59,"description":557,"icon":60,"children":-1},"H2OFlows public API reference — reaches, gauges, flow ranges, conditions.",1778705156241]