{"adoption": {"forks": 91, "observed_at": "2026-08-28T04:06:10.146297+00:00", "stars": 2067}, "canonical_url": "https://ross.abutalabs.com/products/mobile-first-animation", "card": {"archived": false, "artifact_type": "learning-resource", "description": "Gesture-driven animation on the mobile web (React Conf 2019)", "domain": ["frontend", "mobile-development", "web-development"], "enriched": true, "function": ["animation", "ui-components"], "health_score": 20, "homepage": null, "language": "JavaScript", "license": null, "license_family": "other", "maturity": "abandoned", "member_repos": ["aholachek/mobile-first-animation"], "name": "aholachek/mobile-first-animation", "platform": [], "pushed_at": "2020-04-20T12:33:23+00:00", "repo": "aholachek/mobile-first-animation", "stars": 2067, "tags": ["react", "gestures", "mobile-web", "conference-talk", "demos", "spring-animations", "web", "mobile", "javascript"], "topics": ["mobile-first", "mobile-web", "reactjs", "animation", "gestures"], "urls": [], "use_cases": ["learn how to build gesture-driven animations in React", "implement swipeable tabs on mobile web", "create an animated drawer like the Apple Music app", "build dismissable list items with touch gestures", "understand spring physics for UI animation", "optimize animations for low-end mobile devices"], "what_it_is": "A collection of demo source code and interactive slides from a React Conf 2019 talk on gesture-driven animation for the mobile web. It showcases swipeable tabs, drawers, and dismissable lists built with React and spring-based animations.", "when_to_avoid": ["you need production-ready, accessible UI components", "you need desktop variants of these interactions", "you need an actively maintained library with a license"], "when_to_choose": ["you want to learn mobile-first animation techniques in React from a conference talk", "you need reference implementations of gesture-driven UI patterns", "you are exploring spring-based animation approaches"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/mobile-first-animation", "repo": "aholachek/mobile-first-animation", "role": "main", "score": 32}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:06:10.146297+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T02:56:48.557524+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2d12a94c2f44918aa909a6488171655e8a9781df786182cb098a4320a31659be", "fetched_at": "2026-08-28T04:06:10.146297+00:00", "kind": "readme", "missing": false, "url": "https://github.com/aholachek/mobile-first-animation"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:06:10.146297+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T02:56:48.557524+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2d12a94c2f44918aa909a6488171655e8a9781df786182cb098a4320a31659be", "fetched_at": "2026-08-28T04:06:10.146297+00:00", "kind": "readme", "missing": false, "url": "https://github.com/aholachek/mobile-first-animation"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T02:56:48.557524+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2d12a94c2f44918aa909a6488171655e8a9781df786182cb098a4320a31659be", "fetched_at": "2026-08-28T04:06:10.146297+00:00", "kind": "readme", "missing": false, "url": "https://github.com/aholachek/mobile-first-animation"}], "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:10.146297+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:06:10.146297+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:06:10.146297+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T02:56:48.557524+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2d12a94c2f44918aa909a6488171655e8a9781df786182cb098a4320a31659be", "fetched_at": "2026-08-28T04:06:10.146297+00:00", "kind": "readme", "missing": false, "url": "https://github.com/aholachek/mobile-first-animation"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:06:10.146297+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:06:10.146297+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T02:56:48.557524+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2d12a94c2f44918aa909a6488171655e8a9781df786182cb098a4320a31659be", "fetched_at": "2026-08-28T04:06:10.146297+00:00", "kind": "readme", "missing": false, "url": "https://github.com/aholachek/mobile-first-animation"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:06:10.146297+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:06:10.146297+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:06:10.146297+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T02:56:48.557524+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2d12a94c2f44918aa909a6488171655e8a9781df786182cb098a4320a31659be", "fetched_at": "2026-08-28T04:06:10.146297+00:00", "kind": "readme", "missing": false, "url": "https://github.com/aholachek/mobile-first-animation"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:06:10.146297+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:06:10.146297+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T02:56:48.557524+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2d12a94c2f44918aa909a6488171655e8a9781df786182cb098a4320a31659be", "fetched_at": "2026-08-28T04:06:10.146297+00:00", "kind": "readme", "missing": false, "url": "https://github.com/aholachek/mobile-first-animation"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T02:56:48.557524+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2d12a94c2f44918aa909a6488171655e8a9781df786182cb098a4320a31659be", "fetched_at": "2026-08-28T04:06:10.146297+00:00", "kind": "readme", "missing": false, "url": "https://github.com/aholachek/mobile-first-animation"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T02:56:48.557524+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2d12a94c2f44918aa909a6488171655e8a9781df786182cb098a4320a31659be", "fetched_at": "2026-08-28T04:06:10.146297+00:00", "kind": "readme", "missing": false, "url": "https://github.com/aholachek/mobile-first-animation"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T02:56:48.557524+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2d12a94c2f44918aa909a6488171655e8a9781df786182cb098a4320a31659be", "fetched_at": "2026-08-28T04:06:10.146297+00:00", "kind": "readme", "missing": false, "url": "https://github.com/aholachek/mobile-first-animation"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "longevity": 100, "rhythm": 35}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": ["no_releases", "no_license"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 2524, "days_push": 2326, "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}}