{"adoption": {"forks": 100, "observed_at": "2026-08-28T04:05:07.138909+00:00", "stars": 1582}, "canonical_url": "https://ross.abutalabs.com/products/atian25-blog", "card": {"archived": false, "artifact_type": "learning-resource", "description": "天猪部落阁  http://atian25.github.io", "domain": ["developer-tools", "web-development", "tutorials"], "enriched": true, "function": ["documentation", "markdown"], "health_score": 20, "homepage": null, "language": "HTML", "license": null, "license_family": "other", "maturity": "maintenance", "member_repos": ["atian25/blog"], "name": "atian25/blog", "platform": [], "pushed_at": "2019-10-21T04:39:48+00:00", "repo": "atian25/blog", "stars": 1582, "tags": ["blog", "personal-blog", "eggjs", "nodejs", "chinese-language", "github-issues-as-blog", "frontend", "web-server"], "topics": ["blog", "scrat", "egg", "eggjs", "front-end"], "urls": [], "use_cases": ["read articles about the Egg.js Node.js framework", "learn Node.js backend development from an Egg core maintainer", "find frontend engineering and AngularJS experience write-ups", "follow a Chinese-language Node.js technical blog", "learn about testing practices in Node.js", "read resume and career advice from a senior engineer"], "what_it_is": "A personal technical blog ('天猪部落阁') by atian25, an EggJS core developer, hosted on GitHub Pages with articles managed as GitHub issues. Content covers Node.js, the Egg framework, frontend engineering, Angular, and career topics in Chinese.", "when_to_avoid": ["you need actively updated content (last release was 2019)", "you need English-language material", "you are looking for a reusable software tool rather than articles"], "when_to_choose": ["you want first-hand insights into Egg.js design and enterprise Node.js development", "you read Chinese and want practical frontend/Node.js articles", "you are researching the history and rationale behind the Egg framework"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/atian25-blog", "repo": "atian25/blog", "role": "main", "score": 32}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:05:07.138909+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T03:56:08.478629+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "cb852b6503cd9aa1a46104845d22c8df45cc8fd4c2e07f7d0cfc9f534ce79023", "fetched_at": "2026-08-28T04:05:07.138909+00:00", "kind": "readme", "missing": false, "url": "https://github.com/atian25/blog"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:05:07.138909+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T03:56:08.478629+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "cb852b6503cd9aa1a46104845d22c8df45cc8fd4c2e07f7d0cfc9f534ce79023", "fetched_at": "2026-08-28T04:05:07.138909+00:00", "kind": "readme", "missing": false, "url": "https://github.com/atian25/blog"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T03:56:08.478629+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "cb852b6503cd9aa1a46104845d22c8df45cc8fd4c2e07f7d0cfc9f534ce79023", "fetched_at": "2026-08-28T04:05:07.138909+00:00", "kind": "readme", "missing": false, "url": "https://github.com/atian25/blog"}], "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:05:07.138909+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:05:07.138909+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:05:07.138909+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T03:56:08.478629+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "cb852b6503cd9aa1a46104845d22c8df45cc8fd4c2e07f7d0cfc9f534ce79023", "fetched_at": "2026-08-28T04:05:07.138909+00:00", "kind": "readme", "missing": false, "url": "https://github.com/atian25/blog"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:05:07.138909+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:05:07.138909+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T03:56:08.478629+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "cb852b6503cd9aa1a46104845d22c8df45cc8fd4c2e07f7d0cfc9f534ce79023", "fetched_at": "2026-08-28T04:05:07.138909+00:00", "kind": "readme", "missing": false, "url": "https://github.com/atian25/blog"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:05:07.138909+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:05:07.138909+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:05:07.138909+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T03:56:08.478629+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "cb852b6503cd9aa1a46104845d22c8df45cc8fd4c2e07f7d0cfc9f534ce79023", "fetched_at": "2026-08-28T04:05:07.138909+00:00", "kind": "readme", "missing": false, "url": "https://github.com/atian25/blog"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:05:07.138909+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:05:07.138909+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T03:56:08.478629+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "cb852b6503cd9aa1a46104845d22c8df45cc8fd4c2e07f7d0cfc9f534ce79023", "fetched_at": "2026-08-28T04:05:07.138909+00:00", "kind": "readme", "missing": false, "url": "https://github.com/atian25/blog"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T03:56:08.478629+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "cb852b6503cd9aa1a46104845d22c8df45cc8fd4c2e07f7d0cfc9f534ce79023", "fetched_at": "2026-08-28T04:05:07.138909+00:00", "kind": "readme", "missing": false, "url": "https://github.com/atian25/blog"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T03:56:08.478629+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "cb852b6503cd9aa1a46104845d22c8df45cc8fd4c2e07f7d0cfc9f534ce79023", "fetched_at": "2026-08-28T04:05:07.138909+00:00", "kind": "readme", "missing": false, "url": "https://github.com/atian25/blog"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T03:56:08.478629+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "cb852b6503cd9aa1a46104845d22c8df45cc8fd4c2e07f7d0cfc9f534ce79023", "fetched_at": "2026-08-28T04:05:07.138909+00:00", "kind": "readme", "missing": false, "url": "https://github.com/atian25/blog"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "longevity": 100, "rhythm": 35}, "computed_at": "2026-09-02T17:46:02.011165+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": 4500, "days_push": 2508, "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}}