{"adoption": {"forks": 387, "observed_at": "2026-08-28T04:08:51.152029+00:00", "stars": 4481}, "canonical_url": "https://ross.abutalabs.com/products/ahoy", "card": {"archived": false, "artifact_type": "library", "description": "Simple, powerful, first-party analytics for Rails", "domain": ["analytics", "web-development", "backend"], "enriched": true, "function": ["analytics", "web-framework", "middleware"], "health_score": 79, "homepage": null, "language": "Ruby", "license": "MIT", "license_family": "permissive", "maturity": "stable", "member_repos": ["ankane/ahoy"], "name": "ankane/ahoy", "platform": ["ruby", "browser"], "pushed_at": "2026-08-17T05:37:32+00:00", "repo": "ankane/ahoy", "stars": 4481, "tags": ["rails", "first-party-analytics", "event-tracking", "visit-tracking", "gdpr", "geocoding", "web-server"], "topics": ["analytics", "first-party-analytics", "rails", "visits", "events"], "urls": [], "use_cases": ["track page visits and user events in a Rails app", "self-host first-party analytics without third-party trackers", "capture traffic sources, utm parameters, and referrers", "record user location and device technology for visits", "track events from JavaScript or native iOS/Android apps", "build GDPR-compliant analytics with data stored in my own database"], "what_it_is": "Ahoy is a first-party analytics library for Rails that tracks visits and events from Ruby, JavaScript, and native apps. Data is stored in your own database by default, with customizable data stores and GDPR compliance options.", "when_to_avoid": ["you need a full dashboard and reporting UI out of the box", "your stack is not Ruby on Rails", "you prefer hosted analytics like Google Analytics or Plausible"], "when_to_choose": ["you run a Rails application and want simple, privacy-friendly analytics", "you want analytics data in your own database for full control", "you need visit and event tracking across web and native apps"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/ahoy", "repo": "ankane/ahoy", "role": "main", "score": 76}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:08:51.152029+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T18:20:32.835322+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "af7fc4d644d8a40b49fe2315c5ea8a340615ba74c3fe09038c5dde365f985428", "fetched_at": "2026-08-28T04:08:51.152029+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ankane/ahoy"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:08:51.152029+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T18:20:32.835322+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "af7fc4d644d8a40b49fe2315c5ea8a340615ba74c3fe09038c5dde365f985428", "fetched_at": "2026-08-28T04:08:51.152029+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ankane/ahoy"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T18:20:32.835322+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "af7fc4d644d8a40b49fe2315c5ea8a340615ba74c3fe09038c5dde365f985428", "fetched_at": "2026-08-28T04:08:51.152029+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ankane/ahoy"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:08:51.152029+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:08:51.152029+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:08:51.152029+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T18:20:32.835322+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "af7fc4d644d8a40b49fe2315c5ea8a340615ba74c3fe09038c5dde365f985428", "fetched_at": "2026-08-28T04:08:51.152029+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ankane/ahoy"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:08:51.152029+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:08:51.152029+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T18:20:32.835322+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "af7fc4d644d8a40b49fe2315c5ea8a340615ba74c3fe09038c5dde365f985428", "fetched_at": "2026-08-28T04:08:51.152029+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ankane/ahoy"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:08:51.152029+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:08:51.152029+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:08:51.152029+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T18:20:32.835322+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "af7fc4d644d8a40b49fe2315c5ea8a340615ba74c3fe09038c5dde365f985428", "fetched_at": "2026-08-28T04:08:51.152029+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ankane/ahoy"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:08:51.152029+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:08:51.152029+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T18:20:32.835322+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "af7fc4d644d8a40b49fe2315c5ea8a340615ba74c3fe09038c5dde365f985428", "fetched_at": "2026-08-28T04:08:51.152029+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ankane/ahoy"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T18:20:32.835322+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "af7fc4d644d8a40b49fe2315c5ea8a340615ba74c3fe09038c5dde365f985428", "fetched_at": "2026-08-28T04:08:51.152029+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ankane/ahoy"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T18:20:32.835322+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "af7fc4d644d8a40b49fe2315c5ea8a340615ba74c3fe09038c5dde365f985428", "fetched_at": "2026-08-28T04:08:51.152029+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ankane/ahoy"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T18:20:32.835322+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "af7fc4d644d8a40b49fe2315c5ea8a340615ba74c3fe09038c5dde365f985428", "fetched_at": "2026-08-28T04:08:51.152029+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ankane/ahoy"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 98, "longevity": 100, "rhythm": 35}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": ["no_releases"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 4571, "days_push": 16, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 76, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}