{"adoption": {"forks": 241, "observed_at": "2026-08-28T04:08:28.252724+00:00", "stars": 3887}, "canonical_url": "https://ross.abutalabs.com/products/groupdate", "card": {"archived": false, "artifact_type": "library", "description": "The simplest way to group temporal data", "domain": ["databases", "data-visualization", "web-development", "analytics"], "enriched": true, "function": ["date-time", "database", "data-visualization", "orm"], "health_score": 79, "homepage": null, "language": "Ruby", "license": "MIT", "license_family": "permissive", "maturity": "stable", "member_repos": ["ankane/groupdate"], "name": "ankane/groupdate", "platform": ["ruby", "jvm"], "pushed_at": "2026-08-15T21:06:45+00:00", "repo": "ankane/groupdate", "stars": 3887, "tags": ["activerecord", "time-series", "grouping", "timezones", "rails", "chartkick"], "topics": [], "urls": [], "use_cases": ["group records by day, week, or month in Rails", "count users created per day with time zone support", "build time series charts from database data", "aggregate metrics by hour of day or day of week", "fill missing periods in a time series report", "group analytics data by quarter or year"], "what_it_is": "A Ruby gem that makes it simple to group ActiveRecord data by time periods like day, week, month, or hour, with full time zone and daylight saving time support. It returns complete time series and pairs well with Chartkick for charting.", "when_to_avoid": ["you're not using Ruby or ActiveRecord", "you need advanced aggregations like median or percentiles (use ActiveMedian)", "your data isn't stored in a supported database or in arrays/hashes"], "when_to_choose": ["you use Rails or ActiveRecord and need time-based grouping", "correct time zone and DST handling matters for your reports", "you want complete series with zero-filled periods for charting", "you need grouping across PostgreSQL, MySQL, SQLite, or Redshift"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/groupdate", "repo": "ankane/groupdate", "role": "main", "score": 76}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:08:28.252724+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T18:25:39.207527+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "98b3b0c688b9544e11285cb679079a97745bf66b806c9bef680e7f2deb642f33", "fetched_at": "2026-08-28T04:08:28.252724+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ankane/groupdate"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:08:28.252724+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T18:25:39.207527+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "98b3b0c688b9544e11285cb679079a97745bf66b806c9bef680e7f2deb642f33", "fetched_at": "2026-08-28T04:08:28.252724+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ankane/groupdate"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T18:25:39.207527+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "98b3b0c688b9544e11285cb679079a97745bf66b806c9bef680e7f2deb642f33", "fetched_at": "2026-08-28T04:08:28.252724+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ankane/groupdate"}], "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:28.252724+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:08:28.252724+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:08:28.252724+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T18:25:39.207527+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "98b3b0c688b9544e11285cb679079a97745bf66b806c9bef680e7f2deb642f33", "fetched_at": "2026-08-28T04:08:28.252724+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ankane/groupdate"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:08:28.252724+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:08:28.252724+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T18:25:39.207527+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "98b3b0c688b9544e11285cb679079a97745bf66b806c9bef680e7f2deb642f33", "fetched_at": "2026-08-28T04:08:28.252724+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ankane/groupdate"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:08:28.252724+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:08:28.252724+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:08:28.252724+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T18:25:39.207527+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "98b3b0c688b9544e11285cb679079a97745bf66b806c9bef680e7f2deb642f33", "fetched_at": "2026-08-28T04:08:28.252724+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ankane/groupdate"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:08:28.252724+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:08:28.252724+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T18:25:39.207527+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "98b3b0c688b9544e11285cb679079a97745bf66b806c9bef680e7f2deb642f33", "fetched_at": "2026-08-28T04:08:28.252724+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ankane/groupdate"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T18:25:39.207527+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "98b3b0c688b9544e11285cb679079a97745bf66b806c9bef680e7f2deb642f33", "fetched_at": "2026-08-28T04:08:28.252724+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ankane/groupdate"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T18:25:39.207527+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "98b3b0c688b9544e11285cb679079a97745bf66b806c9bef680e7f2deb642f33", "fetched_at": "2026-08-28T04:08:28.252724+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ankane/groupdate"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T18:25:39.207527+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "98b3b0c688b9544e11285cb679079a97745bf66b806c9bef680e7f2deb642f33", "fetched_at": "2026-08-28T04:08:28.252724+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ankane/groupdate"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 97, "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": 4885, "days_push": 18, "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}}