{"adoption": {"forks": 4604, "observed_at": "2026-08-28T04:11:16.438371+00:00", "stars": 16434}, "canonical_url": "https://ross.abutalabs.com/products/node-lessons", "card": {"archived": false, "artifact_type": "learning-resource", "description": ":closed_book:《Node.js 包教不包会》 by alsotang", "domain": ["tutorials", "web-development", "backend", "developer-tools", "education"], "enriched": true, "function": ["developer-tools", "web-framework", "testing", "web-scraping", "benchmarking"], "health_score": 20, "homepage": null, "language": "JavaScript", "license": null, "license_family": "other", "maturity": "maintenance", "member_repos": ["alsotang/node-lessons"], "name": "alsotang/node-lessons", "platform": ["cross-platform"], "pushed_at": "2022-02-15T02:04:44+00:00", "repo": "alsotang/node-lessons", "stars": 16434, "tags": ["nodejs-tutorial", "express", "mocha", "chinese-language", "course", "beginner-friendly", "nodejs", "javascript"], "topics": ["javascript", "nodejs"], "urls": [], "use_cases": ["learn node.js from scratch", "beginner nodejs tutorial with exercises", "learn express step by step", "practice web scraping with superagent and cheerio", "learn mocha testing in node", "understand node.js concurrency control", "learn mongodb and mongoose basics", "deploy node app to heroku"], "what_it_is": "A Chinese-language Node.js tutorial course ('Node.js 包教不包会') by alsotang, consisting of 19 hands-on lessons covering Express, web scraping, concurrency control, testing, deployment, and MongoDB. Written in 2015, it remains functional but predates modern async/await practices.", "when_to_avoid": ["you need up-to-date best practices like async/await and modern tooling", "you want actively maintained course content", "you need English-language material", "you are looking for advanced or production-grade Node.js guidance"], "when_to_choose": ["you are a Node.js beginner wanting structured, hands-on lessons", "you prefer Chinese-language learning material", "you want practice challenges alongside explanations", "you want to learn classic Node.js tooling like express, mocha, and mongoose"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/node-lessons", "repo": "alsotang/node-lessons", "role": "main", "score": 32}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:11:16.438371+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T17:05:06.692366+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7a685f6fd7f03fa1893b6ae44fe44e581a7f86d0385e6fb1e2e91e2a2f79fc40", "fetched_at": "2026-08-28T04:11:16.438371+00:00", "kind": "readme", "missing": false, "url": "https://github.com/alsotang/node-lessons"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:11:16.438371+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T17:05:06.692366+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7a685f6fd7f03fa1893b6ae44fe44e581a7f86d0385e6fb1e2e91e2a2f79fc40", "fetched_at": "2026-08-28T04:11:16.438371+00:00", "kind": "readme", "missing": false, "url": "https://github.com/alsotang/node-lessons"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T17:05:06.692366+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7a685f6fd7f03fa1893b6ae44fe44e581a7f86d0385e6fb1e2e91e2a2f79fc40", "fetched_at": "2026-08-28T04:11:16.438371+00:00", "kind": "readme", "missing": false, "url": "https://github.com/alsotang/node-lessons"}], "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:16.438371+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:11:16.438371+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:11:16.438371+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T17:05:06.692366+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7a685f6fd7f03fa1893b6ae44fe44e581a7f86d0385e6fb1e2e91e2a2f79fc40", "fetched_at": "2026-08-28T04:11:16.438371+00:00", "kind": "readme", "missing": false, "url": "https://github.com/alsotang/node-lessons"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:11:16.438371+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:11:16.438371+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T17:05:06.692366+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7a685f6fd7f03fa1893b6ae44fe44e581a7f86d0385e6fb1e2e91e2a2f79fc40", "fetched_at": "2026-08-28T04:11:16.438371+00:00", "kind": "readme", "missing": false, "url": "https://github.com/alsotang/node-lessons"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:11:16.438371+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:11:16.438371+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:11:16.438371+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T17:05:06.692366+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7a685f6fd7f03fa1893b6ae44fe44e581a7f86d0385e6fb1e2e91e2a2f79fc40", "fetched_at": "2026-08-28T04:11:16.438371+00:00", "kind": "readme", "missing": false, "url": "https://github.com/alsotang/node-lessons"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:11:16.438371+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:11:16.438371+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T17:05:06.692366+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7a685f6fd7f03fa1893b6ae44fe44e581a7f86d0385e6fb1e2e91e2a2f79fc40", "fetched_at": "2026-08-28T04:11:16.438371+00:00", "kind": "readme", "missing": false, "url": "https://github.com/alsotang/node-lessons"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T17:05:06.692366+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7a685f6fd7f03fa1893b6ae44fe44e581a7f86d0385e6fb1e2e91e2a2f79fc40", "fetched_at": "2026-08-28T04:11:16.438371+00:00", "kind": "readme", "missing": false, "url": "https://github.com/alsotang/node-lessons"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T17:05:06.692366+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7a685f6fd7f03fa1893b6ae44fe44e581a7f86d0385e6fb1e2e91e2a2f79fc40", "fetched_at": "2026-08-28T04:11:16.438371+00:00", "kind": "readme", "missing": false, "url": "https://github.com/alsotang/node-lessons"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T17:05:06.692366+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "7a685f6fd7f03fa1893b6ae44fe44e581a7f86d0385e6fb1e2e91e2a2f79fc40", "fetched_at": "2026-08-28T04:11:16.438371+00:00", "kind": "readme", "missing": false, "url": "https://github.com/alsotang/node-lessons"}], "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": 4350, "days_push": 1661, "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}}