{"adoption": {"forks": 42253, "observed_at": "2026-08-28T04:11:53.226348+00:00", "stars": 29255}, "canonical_url": "https://ross.abutalabs.com/products/javascript30", "card": {"archived": false, "artifact_type": "learning-resource", "description": "30 Day Vanilla JS Challenge", "domain": ["web-development", "frontend", "tutorials"], "enriched": true, "function": ["developer-tools"], "health_score": 71, "homepage": "https://JavaScript30.com", "language": "HTML", "license": null, "license_family": "other", "maturity": "stable", "member_repos": ["wesbos/JavaScript30"], "name": "wesbos/JavaScript30", "platform": ["browser", "cross-platform"], "pushed_at": "2026-06-01T07:32:38+00:00", "repo": "wesbos/JavaScript30", "stars": 29255, "tags": ["javascript", "vanilla-js", "dom-manipulation", "coding-challenge", "free-course", "html", "css", "education"], "topics": [], "urls": [], "use_cases": ["learn vanilla javascript without frameworks", "practice dom manipulation exercises", "find project ideas to improve javascript skills", "30 day javascript challenge for beginners to intermediate developers", "get starter files and solutions for javascript tutorials", "build small javascript projects to practice fundamentals"], "what_it_is": "JavaScript30 is a free 30-day vanilla JavaScript coding challenge by Wes Bos, with starter files and completed solutions for 30 small projects built without frameworks, libraries, or compilers. The repository accompanies the video course and hosts community guides, recaps, and alternative solutions.", "when_to_avoid": ["you are a complete beginner who has never written JavaScript", "you want to learn a specific framework like React or Vue", "you need production-ready code or an actively maintained library"], "when_to_choose": ["you already know some JavaScript basics and want hands-on practice with the DOM", "you want framework-free exercises to strengthen core JS skills", "you prefer project-based learning with video tutorials and completed solutions"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/javascript30", "repo": "wesbos/JavaScript30", "role": "main", "score": 70}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:11:53.226348+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T16:53:04.594575+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0b43b8ba7070c815b992c04ebd0cf9445a27a98e1def33fcf0d6bca204df79a6", "fetched_at": "2026-08-28T04:11:53.226348+00:00", "kind": "readme", "missing": false, "url": "https://github.com/wesbos/JavaScript30"}, {"content_hash": "2853ac4012b8286f902930086cea16ed781fbad75e537e5444463b60af7930db", "fetched_at": "2026-08-29T07:50:12.123776+00:00", "kind": "homepage", "missing": false, "url": "https://JavaScript30.com"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:11:53.226348+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T16:53:04.594575+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0b43b8ba7070c815b992c04ebd0cf9445a27a98e1def33fcf0d6bca204df79a6", "fetched_at": "2026-08-28T04:11:53.226348+00:00", "kind": "readme", "missing": false, "url": "https://github.com/wesbos/JavaScript30"}, {"content_hash": "2853ac4012b8286f902930086cea16ed781fbad75e537e5444463b60af7930db", "fetched_at": "2026-08-29T07:50:12.123776+00:00", "kind": "homepage", "missing": false, "url": "https://JavaScript30.com"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T16:53:04.594575+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0b43b8ba7070c815b992c04ebd0cf9445a27a98e1def33fcf0d6bca204df79a6", "fetched_at": "2026-08-28T04:11:53.226348+00:00", "kind": "readme", "missing": false, "url": "https://github.com/wesbos/JavaScript30"}, {"content_hash": "2853ac4012b8286f902930086cea16ed781fbad75e537e5444463b60af7930db", "fetched_at": "2026-08-29T07:50:12.123776+00:00", "kind": "homepage", "missing": false, "url": "https://JavaScript30.com"}], "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:11:53.226348+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:11:53.226348+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:11:53.226348+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T16:53:04.594575+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0b43b8ba7070c815b992c04ebd0cf9445a27a98e1def33fcf0d6bca204df79a6", "fetched_at": "2026-08-28T04:11:53.226348+00:00", "kind": "readme", "missing": false, "url": "https://github.com/wesbos/JavaScript30"}, {"content_hash": "2853ac4012b8286f902930086cea16ed781fbad75e537e5444463b60af7930db", "fetched_at": "2026-08-29T07:50:12.123776+00:00", "kind": "homepage", "missing": false, "url": "https://JavaScript30.com"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:11:53.226348+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:11:53.226348+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T16:53:04.594575+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0b43b8ba7070c815b992c04ebd0cf9445a27a98e1def33fcf0d6bca204df79a6", "fetched_at": "2026-08-28T04:11:53.226348+00:00", "kind": "readme", "missing": false, "url": "https://github.com/wesbos/JavaScript30"}, {"content_hash": "2853ac4012b8286f902930086cea16ed781fbad75e537e5444463b60af7930db", "fetched_at": "2026-08-29T07:50:12.123776+00:00", "kind": "homepage", "missing": false, "url": "https://JavaScript30.com"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:11:53.226348+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:11:53.226348+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:11:53.226348+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T16:53:04.594575+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0b43b8ba7070c815b992c04ebd0cf9445a27a98e1def33fcf0d6bca204df79a6", "fetched_at": "2026-08-28T04:11:53.226348+00:00", "kind": "readme", "missing": false, "url": "https://github.com/wesbos/JavaScript30"}, {"content_hash": "2853ac4012b8286f902930086cea16ed781fbad75e537e5444463b60af7930db", "fetched_at": "2026-08-29T07:50:12.123776+00:00", "kind": "homepage", "missing": false, "url": "https://JavaScript30.com"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:11:53.226348+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:11:53.226348+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T16:53:04.594575+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0b43b8ba7070c815b992c04ebd0cf9445a27a98e1def33fcf0d6bca204df79a6", "fetched_at": "2026-08-28T04:11:53.226348+00:00", "kind": "readme", "missing": false, "url": "https://github.com/wesbos/JavaScript30"}, {"content_hash": "2853ac4012b8286f902930086cea16ed781fbad75e537e5444463b60af7930db", "fetched_at": "2026-08-29T07:50:12.123776+00:00", "kind": "homepage", "missing": false, "url": "https://JavaScript30.com"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T16:53:04.594575+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0b43b8ba7070c815b992c04ebd0cf9445a27a98e1def33fcf0d6bca204df79a6", "fetched_at": "2026-08-28T04:11:53.226348+00:00", "kind": "readme", "missing": false, "url": "https://github.com/wesbos/JavaScript30"}, {"content_hash": "2853ac4012b8286f902930086cea16ed781fbad75e537e5444463b60af7930db", "fetched_at": "2026-08-29T07:50:12.123776+00:00", "kind": "homepage", "missing": false, "url": "https://JavaScript30.com"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T16:53:04.594575+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0b43b8ba7070c815b992c04ebd0cf9445a27a98e1def33fcf0d6bca204df79a6", "fetched_at": "2026-08-28T04:11:53.226348+00:00", "kind": "readme", "missing": false, "url": "https://github.com/wesbos/JavaScript30"}, {"content_hash": "2853ac4012b8286f902930086cea16ed781fbad75e537e5444463b60af7930db", "fetched_at": "2026-08-29T07:50:12.123776+00:00", "kind": "homepage", "missing": false, "url": "https://JavaScript30.com"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T16:53:04.594575+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0b43b8ba7070c815b992c04ebd0cf9445a27a98e1def33fcf0d6bca204df79a6", "fetched_at": "2026-08-28T04:11:53.226348+00:00", "kind": "readme", "missing": false, "url": "https://github.com/wesbos/JavaScript30"}, {"content_hash": "2853ac4012b8286f902930086cea16ed781fbad75e537e5444463b60af7930db", "fetched_at": "2026-08-29T07:50:12.123776+00:00", "kind": "homepage", "missing": false, "url": "https://JavaScript30.com"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 85, "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": 3556, "days_push": 93, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 70, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}