npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@goable-io/profiles-catalog

v2.0.0

Published

Open catalog of outdoor activity profiles (water, snow, air, land) that define how weather inputs combine into a 0-100 suitability score. CC BY 4.0.

Readme

Goable Outdoor Activity Profiles Catalog

License: CC BY 4.0 npm

Open catalog of outdoor activity profiles — the data layer that defines how real-time weather inputs combine into a 0-100 suitability score for each activity. Covers four families: water (kitesurf, surf, windsurf, sailing, diving…), snow (ski-touring, freeride, snowboard, cross-country…), air (paragliding, hang-gliding), and land outdoor (trekking, climbing, trail-running).

This catalog is the public data half of the Goable engine. The scoring engine itself is proprietary; the activity definitions — which weather metrics matter, what curves describe "good vs. bad" conditions for each sport, citations and review status for every parameter — are open data under CC BY 4.0.

Why this exists

  • Transparency for partners. Booking platforms, insurance pilots, and tourism boards can audit the exact wind curve scoring their activity.
  • Community contribution. A windsurf school in Salinas, a paragliding club in Annecy, a sailing instructor in Sète — each can submit a regional variant for their spot via PR.
  • Citable research artifact. Each profile lists sources. The catalog ships with CITATION.cff for academic citation.

Installation

npm install @goable-io/profiles-catalog

Four consumption paths ship in the same package:

  • YAML directory at node_modules/@goable-io/profiles-catalog/catalog/ — original files for tools that walk a directory tree.
  • Pre-bundled JSON at @goable-io/profiles-catalog/catalog.json — all profiles indexed by both path and slug. Faster startup.
  • Zod schema + TypeScript types from the package root — for runtime validation of custom profiles or strong typing in TS projects.
  • JSON Schema (Draft 2020-12) at @goable-io/profiles-catalog/profile.schema.json — for non-TS consumers (Python jsonschema, Go gojsonschema, ajv, etc.). Also attached to every GitHub Release.

Schema (v2)

Profiles are organised in a 4-level hierarchy via the spot_kind discriminator:

| spot_kind | Example slug | Required v2 fields | |---|---|---| | base | kitesurfing | (none beyond v1) | | region | kitesurfing-atlantic | extends, region | | cluster | kitesurfing-spot-tarifa | extends, sub_spots[] | | sub-spot | kitesurfing-spot-tarifa-balneario | extends, parent_cluster, coordinates, tier, tier_rationale.en |

Sub-spots inherit dimensions, verdict_buckets, and other scoring fields from their parent cluster when not overridden. The engine's spatial resolver returns the nearest sub-spot within radius_m of incoming request coordinates.

Usage

Read the pre-bundled catalog (v2 dual-index)

import catalog from "@goable-io/profiles-catalog/catalog.json" with { type: "json" }

// By slug (recommended — stable across restructures)
const tarifaBalneario = catalog.profilesBySlug["kitesurfing-spot-tarifa-balneario"]

// By filesystem path (mirrors the catalog/ directory layout)
const tarifaCluster = catalog.profilesByPath["water/kitesurfing/clusters/tarifa/index"]

Validate a custom profile against the schema

import { ProfileSchema, type Profile } from "@goable-io/profiles-catalog"

const myProfile: Profile = ProfileSchema.parse(yourYaml)

// Discriminated union — branch on spot_kind for variant-specific fields
if (myProfile.spot_kind === "sub-spot") {
  console.log(myProfile.coordinates.center, myProfile.tier)
}

Use the JSON Schema from any language

import json, jsonschema, yaml
schema = json.load(open("node_modules/@goable-io/profiles-catalog/dist/profile.schema.json"))
profile = yaml.safe_load(open("my-profile.yaml"))
jsonschema.validate(profile, schema)

See schema/profile.schema.ts for the canonical Zod definition and catalog/<family>/<activity>/index.yaml for examples.

Contributing

See CONTRIBUTING.md. PRs welcome — first review SLA: 1 week.

To propose a new activity, a regional variant, or a curve change:

git clone https://github.com/goable-io/profiles-catalog
cd profiles-catalog
pnpm install
# Add or edit YAMLs under catalog/
pnpm validate   # must pass before opening a PR

Citation

If you use this catalog in research, please cite using the metadata in CITATION.cff. A Zenodo DOI will be minted when v1.0.0 ships.

License

Catalog data (everything under catalog/, schema/, scripts/) is licensed under CC BY 4.0. Attribution required; commercial use permitted.

The Goable scoring engine (a separate proprietary repository) consumes this catalog as an npm dependency. The license boundary is intentional: open data, proprietary engine.