What is covered today
Every number here is inlined from the published @goable-io/profiles-catalog package at build time: 607 sub-spots across 46 countries, 229 clusters and 33 regional overrides on top of 28 base profiles. Filter by family, country, coverage status and endpoint to see whether Discovery works for your activity and region.
Rock Climbing
Trekking
Alpine Skiing (Resort)
Kitesurfing
Surfing
Ski Touring
Mountain Biking
Outdoor Bouldering
Paragliding
Freeride Skiing / Snowboarding
Snowboarding (Resort)
Snorkeling
Road Cycling
Windsurfing
Boat Excursion
Bodyboarding
Canyoning
Hang Gliding
Hot-Air Ballooning
Jet Ski / Personal Watercraft
Kayaking
Open Water Swimming
Sailing
Stand Up Paddleboarding
Trail Running
Wakeboarding
Wing Foiling
| Label | What it means | Discovery | Score |
|---|---|---|---|
| Production-ready | Ten or more curated sub-spots, reviewed curves. | Yes | Yes |
| Early coverage | One to nine curated sub-spots. | Partial | Yes |
| Base-profile only | Base curve published, no curated sub-spots yet. | No | Yes |
| Coming soon | Activity not yet in the catalogue. | No | Not yet |
The catalogue exposes three coverage statuses today. Base-profile only is the worldwide scoring floor every listed activity already has, even before any curated sub-spot exists.
Score any coordinate, or discover catalogued spots
Pass any latitude and longitude worldwide for any of the 28 base profiles. The engine resolves the most local profile it has and scores the conditions there. No catalogue entry is required.
Enumerate the curated sub-spots Goable has catalogued in a covered region. Discovery only returns places that already exist in the catalogue, so its reach follows coverage rather than geography.
One base profile, four levels of locality on top
A profile is not one global curve. The catalogue is a five-level hierarchy: a call resolves to the most specific resolved level available, and the confidence reflects how local that match was.
Base
Base profiles across water, snow, air and land. What counts as good wind, swell or snow for a sport.
Region
Regional overrides. The Mediterranean kite season is not the North Sea's.
Cluster
Groups of nearby spots that share a regime.
Sub-spot
A named break, launch or face with its own scoring curve.
Micro
The finest grain, once enough paired outcomes accrue there.
Locality is one input to confidence, not the whole of it
Resolving a call more locally raises one factor, hierarchical_calibration. It never replaces forecast skill, observation quality, source freshness or active drift controls. Overall confidence is the multiplicative fold of every factor, so a perfect local match cannot make a poorly-forecast day look certain.
| meta.maturity | factor | meaning |
|---|---|---|
| provisional | 0.60 | Authored, not yet reviewed. |
| reviewed | 0.80 | Domain-reviewed curve, no local calibration yet. |
| calibrated | 0.95 | Reviewed and calibrated against paired outcomes. |
| resolved level | factor | meaning |
|---|---|---|
| base | 0.85 | Global base curve, no per-spot calibration. |
| region | 0.90 | Regional override resolved. |
| cluster | 0.95 | Cluster-level regime resolved. |
| sub-spot (n < 30) | 0.92 | Sub-spot identity, shrinkage-heavy prior. |
| sub-spot (n >= 100) | 1.00 | Sub-spot with a mature local cohort. |
A brand-new sub-spot has almost no outcomes, so its curve would be noise. The engine shrinks each level toward its parent's prior: a sparse sub-spot borrows strength from its cluster, region and base profile, and only earns independence as real paired outcomes accumulate. The calibration_provenance block records which level resolved and how much local data backed it.
Paired outcomes are tenant-defined operational signals, such as completed sessions, cancellations or reviewed feedback. They calibrate suitability preferences. They do not replace physical safety rules or observed environmental data, and they are not physical ground truth.
Open data, proprietary engine
Activity definitions, curves, citations and review status live in a public repo and ship as an npm package. Anyone can inspect the curve scoring their slot, or propose a regional variant by pull request. Open definitions make the activity logic inspectable.
The proprietary engine resolves location, data quality, calibration and safety policy at request time. The full verdict is not reproducible from the open profile alone, and it is not meant to be. The engine is the moat.
A new activity or regional variant is a single YAML file at catalog/<family>/<slug>/index.yaml, validated against a shared Zod schema in CI. Anyone can propose one. A pull request is a proposal, not inclusion: it passes domain review before it can merge, and only a reviewed, versioned release becomes production-eligible.
- patchTypo, citation or metadata fix. No verdict can move.
- minorA new sub-spot or a regional override. Additive coverage.
- majorA threshold or curve change that can move a verdict, with a deprecation path for the old shape.
The sub-spot tier is an operational decision tier
Every sub-spot carries a tier: 1 | 2 | 3 used by the underwriting maths and by the decision agent. It is not a physical-risk score. The composite mixes three different things: physical difficulty, forecast uncertainty and operational disruption. A place can be physically easy but hard to forecast, physically demanding but forecast well, or high-disruption for reasons that have nothing to do with the weather.
| Dimension | Weight | Source | What it reads |
|---|---|---|---|
| Physical difficulty | 0.5 | Difficulty Atlas | Latent difficulty quantile. How hard the spot is on its own, ranked across the catalogue. Independent of how well we forecast it. |
| Forecast uncertainty | 0.3 | Forecast-verification MV | Passed as (1 minus Brier Skill Score quantile). A poorly-forecast spot raises the bar even when the conditions are easy. |
| Operational disruption | 0.2 | Reported outcomes | Quantile of a disruption ratio over reported sessions. The most stable but most lagging axis, kept lowest so anomalies do not flip a tier. |
The classifier is deterministic and versioned. Its composite is 0.5 · difficulty + 0.3 · (1 - skill) + 0.2 · disruption, with tier boundaries at the natural terciles (1/3 and 2/3). The boundaries are policy constants, not learned from data. Inputs, thresholds and output are reproducible from the persisted factor block plus the classifier version pin, so an actuary can reproduce any tier. Reproducibility is a requirement, not proof of correctness: the policy validity of the weights and boundaries is reviewed separately.
This axis is a ratio of disruptive events over reported sessions. It is operational disruption, not severity: a no-show is not a severity, and a completed session can still have been difficult. The ratio currently blends cancellations, abandons and injuries into one number. Separating a clean operational disruption rate from a distinct safety incident rate is the honest next refinement.
An insurance tier multiplier should not be derived directly from a metric that folds in no-shows and reschedules without separating cause. Disruption is correlated with, but not the same as, insured risk. Treat the tier as a decision input, not a priced hazard rate.
Monitoring
The nightly classifier scores every cell and writes an audit row. No catalogue value changes.
Candidate
Two or more of the three axes become available for a cell, so a composite and tier can be computed.
Review-eligible
Three consecutive nightly classifications agree at full confidence, which opens a pull request with the factor table and reproducibility hash.
Approved
A human reviewer accepts the change from the PR body and it lands in the changelog. A PR is not automatic inclusion.
Effective
The value ships in a versioned catalogue release. Consumers read the pinned version, not a live feed.
Frozen at bind
A tier used to price a policy is frozen at bind and never retroactively recalculated. Historic rows stay interpretable under their fit-time version.
Activation. Automated tier review is operational: the classifier runs nightly and writes an audit row for every cell. Data-driven tier updates activate only after a cell meets the published evidence threshold, which needs at least two of the three axes, each with enough forecast-verification history and reported outcomes to be measurable. Until then the classifier writes tier: null and the expert-reviewed catalogue tier remains the source of truth.
What this does not do
Not a full replay
The open profile lets you inspect the activity logic. It does not let you replay a live verdict, which depends on the engine's location resolution, data quality and safety policy at request time.
Coverage is uneven
Score works on any coordinate, but Discovery only returns curated sub-spots. Most base profiles are still base-profile only, so check the coverage explorer before assuming Discovery works for your region.
Tiers are advisory
A tier is a decision input built from difficulty, forecast uncertainty and operational disruption. It is not a priced hazard rate, and it is frozen at policy bind rather than recalculated retroactively.