Field intelligence / model 1.0

Fruiting Forecast

Forecasting is not identification. Never consume a wild mushroom without expert verification. Access and collecting rules must be checked independently.
Mission setup

Define the search area

SCORING MODEL FF-1.6.0
Ready. Enter a location or use browser location.
No mission loaded

Weather history before trail miles.

Choose a location and Fruiting Forecast will sample broad sectors, compare each supported species against its own fruiting model, and explain what is known—and what is missing.

01 · Set radius02 · Query conditions03 · Rank opportunity
The field guide / About

Read the conditions.
Plan the hunt.

Fruiting Forecast is a field-planning tool for mushroom hunters. It combines weather, habitat, seasonal timing, recent regional observations, public-land context, collecting rules, and mapped access points to help answer three separate questions.

These are deterministic opportunity scores, not probabilities. They do not identify mushrooms, determine edibility, or guarantee legal access or collecting permission.

01 / BIOLOGYWhere might mushrooms be fruiting?

02 / HUNTABILITYWhere can I realistically go?

03 / ACCESSWhere should I start?

Evidence check

This analysis

Analysis evidence describes the loaded result, not a live service-health test. Overlay visibility, AI configuration and storage mode describe this browser now. Available evidence may be cached or dated. No retained GIS data can mean missing coverage or a failed load; the saved record does not always distinguish them.

✓ Available · △ Partial / verify · — Unavailable · Optional. Disabled means hidden by your choice; unsupported means the browser lacks a capability; no data found is not a service outage. Not configured means no saved AI key.

Progressive enhancement

What works in each mode

Each added layer answers another field question. A missing optional layer does not invalidate the evidence that did arrive.

01 / Basic forecast

Conditions before trail miles

✓ Built-in species seasonal model, weather history and forecast, moisture, temperature and drying model, plus biological opportunity ranking. Regional iNaturalist observations contribute when available.

— Without GIS: no detailed habitat scoring, named public-property recommendations, collecting-rule intelligence, parking/access pins or property Huntability.

Missing GIS inputs are omitted rather than filled with neutral or fake values.

02 / GIS enhanced

Put conditions in habitat

✓ DuckDB-Wasm and published tiles add forest/canopy, host-tree-group evidence, soil, terrain, species habitat scoring and geographic sector intelligence. More complete, high-quality evidence can strengthen confidence.

✓ The normalized catalog covers all 922 relevant CONUS land tiles. A layer may be verified empty, and a network or browser failure can still make evidence unavailable for one analysis. Host groups are broad modeled associations, not observed individual trees.

03 / Huntability & access enhanced

Choose a practical starting point

✓ Where the datasets exist: named properties, ownership/access classification, collecting-rule status, Huntability, Recommended Hunt Score, public-land boundaries and mapped access points with a Suggested Start.

Public land does not automatically mean mushroom collecting is legal.

A mapped parking or access point is not a mushroom location. Access points can be missing even when property Huntability works.

04 / AI Analyst enabled · Optional

A second reading of the evidence

✓ With OpenRouter configured: explain deterministic results, create field briefs, research current online mushroom reports with supported web tools, and answer questions about the current forecast.

— It cannot alter deterministic scores, improve a species score, invent missing GIS evidence, turn unknown collecting rules into allowed, or identify a mushroom as safe to eat.

OpenRouter is interpretation only. It is not part of the scoring engine.

Mapped access evidence

Trailheads, surface parking and gates come from state OpenStreetMap PBF extracts prepared by Geofabrik. HIGH and MEDIUM describe mapped evidence, not independently verified legal access. Public land does not guarantee vehicle access; collecting permission is shown separately. Missing OSM evidence does not mean inaccessible. Parking-area pins represent real mapped parking polygons, not public-land centroids. Road proximity is a local sanity check, not routing or passenger-car suitability.

© OpenStreetMap contributors, ODbL 1.0 · Geofabrik extracts. Snapshot dates and checksums are recorded per access tile in the manifest.

Dependencies / fallback reference

Capability matrix

CapabilityWhat it providesRequiresIf unavailable
WeatherRain, soil moisture, temperature and drying pressure.Open-Meteo + network, or a fresh local cache.Refresh stops if the request fails. Existing results and saved analyses remain viewable.
Seasonal modelEPA-region profiles and season gates; unmodeled regions remain unsupported.App JavaScript.✓ Available whenever the app runs. Season alone cannot fetch a new forecast.
Habitat GISSampled forest, canopy, host groups, soil and terrain.DuckDB-Wasm + published Parquet tiles; HTTP hosting.Missing habitat is omitted, never assigned 50. Evidence coverage falls; biology can still be scored.
Public landsNamed property geometry, ownership and property candidates.Published public-land GIS; independent collecting-rule lookup.No named-property Huntability recommendations. Sector biology remains usable.
Collecting rulesALLOWED, ALLOWED_WITH_LIMITS, PERMIT_REQUIRED, PROHIBITED or UNKNOWN_VERIFY.Scoped rule dataset matched to a property or agency.Unmatched rules stay UNKNOWN_VERIFY. A failed rule-file request retains geometry with UNKNOWN_VERIFY rules.
Access pointsPublished parking, trailheads, entrances, gates and ramps; Suggested Start.Property pipeline + published access-point GIS.No suitable mapped start means access evidence unavailable, not inaccessible. Access confidence falls; biology remains independent.
Recent observationsSpecies-level regional fruiting signal over 21 days.iNaturalist + network, or a fresh local cache.Failed species queries are omitted and available weights renormalized. Missing is not zero activity.
BasemapInteractive geographic context.Leaflet assets + OpenStreetMap tiles over the network.If Leaflet fails, sector buttons replace the map. If only tiles fail, the background may be blank; lists/details still work.
AI AnalystOptional explanations, field briefs, online research and Q&A.Saved OpenRouter key + model + network; web-tool support for research.Analyst calls fail or stay disabled when not configured. Deterministic forecasting is unaffected.
Local historySaved analyses, hunt records and photo blobs.IndexedDB opening and successful writes.If database opening fails, the current session can run but saving is unavailable. Later write failures may interrupt analysis completion.
GIS persistenceLocal reuse of downloaded GIS bytes.OPFS attempt + DuckDB; IndexedDB byte cache as fallback.Transient DuckDB still attempts GIS. Cache reuse depends on retained bytes; complete offline reuse is not guaranteed.
Architecture

Separate questions. Separate evidence.

A single-file browser app queries static GIS prepared ahead of time; there is no runtime GIS backend. Providers normalize evidence before the deterministic scorer evaluates species.

STATIC GIS + DUCKDB-WASMWhere?

Sampled habitat

OPEN-METEOWhen?

Weather + built-in season

iNATURALISTIs it happening?

Regional reports

Deterministic scorer → Biological Opportunity
MAPPED ACCESS + COLLECTING RULESHuntability

Combines with biology → Recommended Hunt Score

PUBLISHED ACCESS POINTSWhere to start

Confidence + straight-line habitat distance → Suggested Start

RESULTS → OPENROUTERInterpretation only

Briefs, research & Q&A. No path back into scoring.

Model literacy

Understanding the numbers

Biological Opportunity

“How favorable do current conditions look?” Species-specific weather, season, habitat and observation components are weighted over the evidence available, then multiplied by a seasonal gate. It does not answer “Can I legally go there?” Ownership, rules, access pins and AI do not feed this score.

Huntability

“How actionable is this property?” Collecting-rule status (42 points), source evidence (16) and mapped physical access (up to 24) are normalized over available evidence. Missing access is omitted and lowers access confidence. Public ownership alone adds no points. Prohibited collecting is capped at 8; private ownership at 5. The actionability label still matters: a number never grants permission.

Recommended Hunt Score

round(Biological Opportunity × Huntability / 100 × access confidence)

For example, biology 80, Huntability 75 and HIGH access evidence produce 60. Access confidence is 1 for HIGH, 0.9 for MEDIUM or legacy, and 0.75 when no suitable start is mapped. Property cards use the property's best species; property details use the selected species. Recommendations also group by actionability, so their order is not simply descending score. Access never increases a recommendation above its biological opportunity; habitat already contributes to biology and is not multiplied twice.

Confidence

Evidence availability and quality, not the chance of finding a mushroom. The model uses the share of available component weight, a weather-quality factor and habitat quality from sample coverage, host evidence and soil coverage. Missing components reduce available weight; habitat quality also matters, so gaining weak evidence need not increase confidence.

Always read the score's scope.

The best overall species score is that species' best sampled sector. The selected sector score describes the sector you opened. A named-property score uses habitat inside that property and weather from its nearest sampled sector. An overall 82 and a selected-sector 70 can both be correct; they describe different places. Compare like with like.

Reading the map

Base views & independent overlays

Opportunity shows selected-species biology; Habitat fit shows species-specific GIS fit; Forest cover shows sampled forest share. Huntability colors named properties by access/rule evidence, while sector circles use broad access utility.

Public land and Parking & access points are independent overlays. You can view biological Opportunity while still displaying public-property boundaries and parking/trailhead pins. Disabling an overlay hides it; it does not remove its evidence or change scores.

Sector circles are not mushroom locations. Access pins are not mushroom locations. Public-land polygons are screening boundaries, not guaranteed legal collecting areas. Saved property details remain useful even if boundary geometry is no longer cached.

Field troubleshooting

What happens when something fails?

Open-Meteo unavailable

No new weather can be fetched. A fresh cached response can serve a normal analysis; forced refresh requires the network. A failed refresh leaves the previous result intact, and saved analyses remain viewable if retained. No invented weather replaces a failed request.

iNaturalist unavailable

Each failed species query becomes missing observation evidence. Its weight is omitted and available evidence reweighted; confidence loses that component's coverage. Missing observations are not zero mushroom activity. A successful search with zero reports is different: it is available evidence of no reports found, not proof there are no mushrooms.

Habitat tile unavailable

The app attempts remaining tiles. Sectors without usable habitat omit it, never assign 50, and lose evidence coverage. Weather-based evidence remains usable. Partial samples do not establish full regional coverage.

Public-land dataset or collecting rules unavailable

Without usable property data, there is no named-property Huntability recommendation; biological sector results remain usable. An unmatched or absent rule stays UNKNOWN_VERIFY, never allowed. A failed or malformed collecting-rule request retains available property geometry with UNKNOWN_VERIFY.

Access-point dataset unavailable

No parking/trailhead pins are synthesized from property centroids. A property with no suitable mapped access says “Suggested start unavailable.” Tile errors and empty searches can both produce no points; retained analyses do not always distinguish those causes. Biology remains unchanged; missing access lowers confidence, not a claim of inaccessibility.

OpenRouter unavailable or not configured

No new analyst brief, online research or Q&A can be generated. Already attached intelligence can remain viewable. A saved key means configured, not a verified connection or supported web tools. The deterministic forecast is unchanged.

OPFS unavailable or storage blocked

The app first initializes DuckDB-Wasm, then attempts an OPFS database. If opening OPFS or creating its tables fails, it continues with transient DuckDB. Downloaded GIS byte buffers use the existing IndexedDB cache when writes succeed. If DuckDB itself fails, GIS falls back to basic mode.

Current limitation: an OPFS “ready” state means the database opened, not that all habitat, property and access rows were durably imported. The query path still reads registered Parquet buffers. Complete offline reuse is not guaranteed, even with OPFS; tiles and engine assets may need downloading again. A GIS cache write failure is reported and the downloaded bytes remain usable for this session.

Published evidence / not an availability promise

GIS coverage

Regional model provenance, maturity and implementation notes ↗

Manifest not loaded yet.

The normalized national catalog declares habitat, public-land, access and fire evidence for all 922 relevant CONUS land tiles. Verified-empty layers are complete source-query results with zero rows. A successful catalog declaration does not guarantee today's download or browser query will succeed.

Your browser / your field records

Storage & privacy

Small settings, including your OpenRouter key and selected model, use guarded localStorage. Caches, analysis history, hunts and photo blobs use IndexedDB. GIS attempts DuckDB/OPFS persistence with the byte-cache fallback described above. localStorage shares a budget with other pages on this GitHub Pages origin.

Analysis history is retained for up to 90 days and 60 records; the re-creatable cache is capped at 64 records with source-specific expiry. Hunts and photos are user-managed; deleting hunts deletes their photos.

API keys stay in browser settings and are sent only to OpenRouter for model loading and explicit analyst requests. Diagnostics redact the key and authorization headers. Browser storage is not encrypted secret storage. AI actions send a compact forecast evidence digest and your question to OpenRouter; hunt photos stay local. Weather, observation, geocoding and map providers receive the requests needed for their features; this public page also includes Junkdrawer Analytics Lite.

Clearing browser/site storage may remove saved configuration, cached GIS, analysis history, hunt records, or photos depending on which storage is cleared.

Conditions are not identification

Fruiting Forecast estimates conditions for finding mushrooms. It does not identify a specimen and never determines that a mushroom is safe to eat.

Verify mushroom identification independently. Verify property boundaries, current collecting rules, gates, seasonal closures and access before heading out.

Deterministic model trace

Explain score

Offline field record

Log a hunt

Local archive · 90 days / 60 max

Analysis history

Storage, provenance & optional intelligence

Data and diagnostics

Progressive static enhancement

GIS Habitat Intelligence

DuckDB-Wasm queries compact static Parquet tiles in this browser. Weather forecasting remains available if GIS cannot load.

Not initialized
GIS initializes only when an analysis intersects available static coverage.
Optional · never used for scoring

OpenRouter field analyst

The deterministic model decides the forecast. OpenRouter can explain it or research supplemental reports only.

Not configured
Enter and save a key to load the current catalog.
Advanced manual model fallback

Use only when catalog loading fails or a new model is not yet listed.

GIS Local Cache

DuckDB persistencechecking…Habitat tiles-Public-land tiles-Access-point tiles-Disk used-Last update-

Diagnostics

Implementation decisions: implementation note. Weather: Open-Meteo. Observations: iNaturalist. Optional AI: OpenRouter. Map: OpenStreetMap contributors.

Non-negotiable field rule

Finding is not identifying

This app never determines that a mushroom is safe to eat.

Opportunity scores estimate the likelihood of fruiting conditions for a broad taxon and area. They do not establish identity, edibility, freshness, contamination, land access, or collecting legality. Species groups can include toxic or poorly known members.

Use multiple current field references, inspect all diagnostic features, make a spore print where appropriate, and obtain in-person verification from a qualified local expert before consumption. When in doubt, leave it.