{"adoption": {"forks": 272, "observed_at": "2026-08-28T04:06:30.899740+00:00", "stars": 2250}, "canonical_url": "https://ross.abutalabs.com/products/kmcgeigercounter", "card": {"archived": false, "artifact_type": "library", "description": "A framerate meter that clicks like a Geiger counter when your animation drops a frame", "domain": ["mobile-development", "performance", "developer-tools"], "enriched": true, "function": ["monitoring", "benchmarking", "developer-tools"], "health_score": 20, "homepage": null, "language": "Objective-C", "license": "MIT", "license_family": "permissive", "maturity": "maintenance", "member_repos": ["kconner/KMCGeigerCounter"], "name": "kconner/KMCGeigerCounter", "platform": [], "pushed_at": "2022-07-23T17:48:46+00:00", "repo": "kconner/KMCGeigerCounter", "stars": 2250, "tags": ["framerate-meter", "dropped-frames", "audio-feedback", "objective-c", "debugging-tool", "animation-performance", "ios", "mobile"], "topics": [], "urls": [], "use_cases": ["detect dropped frames in my iOS app animations", "hear an alert when my app drops below 60 fps", "find CPU spikes causing table view scroll jank", "measure animation smoothness during development", "debug main thread stalls affecting framerate", "tell the difference between 55 and 60 fps in my app"], "what_it_is": "An iOS library that acts as a framerate meter, playing a Geiger-counter-style click whenever the app drops a frame during animation. It also displays counts of frames dropped and drawn per second to help developers detect performance hitches.", "when_to_avoid": ["you need to measure GPU-caused frame drops, which this tool cannot detect", "you're profiling on the iOS Simulator, which doesn't reflect device performance", "you need a production monitoring solution rather than a development-time tool"], "when_to_choose": ["you're developing an iOS app and want quick audible feedback on dropped frames", "you want a lightweight in-app framerate meter without external instruments", "you're hunting main-thread CPU hitches like layout or cell configuration stalls"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/kmcgeigercounter", "repo": "kconner/KMCGeigerCounter", "role": "main", "score": 32}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:06:30.899740+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T02:43:52.443645+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e7c835083ecc7a4d6045e1b3fce20da5196b0025d3258d409cf313fed1d2ac7e", "fetched_at": "2026-08-28T04:06:30.899740+00:00", "kind": "readme", "missing": false, "url": "https://github.com/kconner/KMCGeigerCounter"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:06:30.899740+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T02:43:52.443645+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e7c835083ecc7a4d6045e1b3fce20da5196b0025d3258d409cf313fed1d2ac7e", "fetched_at": "2026-08-28T04:06:30.899740+00:00", "kind": "readme", "missing": false, "url": "https://github.com/kconner/KMCGeigerCounter"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T02:43:52.443645+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e7c835083ecc7a4d6045e1b3fce20da5196b0025d3258d409cf313fed1d2ac7e", "fetched_at": "2026-08-28T04:06:30.899740+00:00", "kind": "readme", "missing": false, "url": "https://github.com/kconner/KMCGeigerCounter"}], "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:06:30.899740+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:06:30.899740+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:06:30.899740+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T02:43:52.443645+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e7c835083ecc7a4d6045e1b3fce20da5196b0025d3258d409cf313fed1d2ac7e", "fetched_at": "2026-08-28T04:06:30.899740+00:00", "kind": "readme", "missing": false, "url": "https://github.com/kconner/KMCGeigerCounter"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:06:30.899740+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:06:30.899740+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T02:43:52.443645+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e7c835083ecc7a4d6045e1b3fce20da5196b0025d3258d409cf313fed1d2ac7e", "fetched_at": "2026-08-28T04:06:30.899740+00:00", "kind": "readme", "missing": false, "url": "https://github.com/kconner/KMCGeigerCounter"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:06:30.899740+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:06:30.899740+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:06:30.899740+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T02:43:52.443645+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e7c835083ecc7a4d6045e1b3fce20da5196b0025d3258d409cf313fed1d2ac7e", "fetched_at": "2026-08-28T04:06:30.899740+00:00", "kind": "readme", "missing": false, "url": "https://github.com/kconner/KMCGeigerCounter"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:06:30.899740+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:06:30.899740+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T02:43:52.443645+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e7c835083ecc7a4d6045e1b3fce20da5196b0025d3258d409cf313fed1d2ac7e", "fetched_at": "2026-08-28T04:06:30.899740+00:00", "kind": "readme", "missing": false, "url": "https://github.com/kconner/KMCGeigerCounter"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T02:43:52.443645+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e7c835083ecc7a4d6045e1b3fce20da5196b0025d3258d409cf313fed1d2ac7e", "fetched_at": "2026-08-28T04:06:30.899740+00:00", "kind": "readme", "missing": false, "url": "https://github.com/kconner/KMCGeigerCounter"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T02:43:52.443645+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e7c835083ecc7a4d6045e1b3fce20da5196b0025d3258d409cf313fed1d2ac7e", "fetched_at": "2026-08-28T04:06:30.899740+00:00", "kind": "readme", "missing": false, "url": "https://github.com/kconner/KMCGeigerCounter"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T02:43:52.443645+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e7c835083ecc7a4d6045e1b3fce20da5196b0025d3258d409cf313fed1d2ac7e", "fetched_at": "2026-08-28T04:06:30.899740+00:00", "kind": "readme", "missing": false, "url": "https://github.com/kconner/KMCGeigerCounter"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "longevity": 100, "rhythm": 35}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": ["no_releases"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 4333, "days_push": 1502, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 32, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}