{"adoption": {"forks": 81, "observed_at": "2026-08-28T04:04:20.196995+00:00", "stars": 1312}, "canonical_url": "https://ross.abutalabs.com/products/whenwords", "card": {"archived": false, "artifact_type": "library", "description": "A relative time formatting library, with no code.", "domain": ["developer-tools", "programming-languages"], "enriched": true, "function": ["date-time"], "health_score": 58, "homepage": null, "language": null, "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["dbreunig/whenwords"], "name": "dbreunig/whenwords", "platform": ["cross-platform", "python", "rust", "ruby", "php", "elixir"], "pushed_at": "2026-01-20T17:09:49+00:00", "repo": "dbreunig/whenwords", "stars": 1312, "tags": ["spec-only", "no-code", "ai-generated-code", "language-agnostic", "relative-time", "human-readable-dates", "test-driven-spec", "localization", "swift"], "topics": [], "urls": [], "use_cases": ["format timestamps as '3 hours ago' style relative strings", "parse human duration strings like '2h 30m' into seconds", "format seconds as readable durations like '2 hours, 30 minutes'", "show contextual dates like 'Today', 'Yesterday', or 'Last Tuesday'", "collapse date ranges into smart strings like 'March 5–7, 2024'", "generate a time formatting library in any language via AI coding tools"], "what_it_is": "whenwords is a relative time formatting library that ships only a specification (SPEC.md), language-agnostic test cases (tests.yaml), and install instructions—no implementation code. Developers generate the actual library in their language of choice (Ruby, Python, Rust, Elixir, Swift, PHP, Bash, etc.) by pasting a prompt into an AI coding assistant and iterating until all spec tests pass.", "when_to_avoid": ["you need a battle-tested, maintained implementation with a real maintainer fixing bugs", "you cannot or do not want to use AI coding assistants to generate code", "you need extensive locale/internationalization support beyond the spec"], "when_to_choose": ["you need consistent relative-time formatting across multiple languages from one spec", "you want a small, AI-generated utility library you can regenerate and verify against shared tests", "you prefer spec-and-tests artifacts over vendored dependencies"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/whenwords", "repo": "dbreunig/whenwords", "role": "main", "score": 44}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:04:20.196995+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T04:49:01.900103+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "8616b007262acf95cc7138a558361d2364a9deb1ae76407cda3615e9d75474b3", "fetched_at": "2026-08-28T04:04:20.196995+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dbreunig/whenwords"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:04:20.196995+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T04:49:01.900103+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "8616b007262acf95cc7138a558361d2364a9deb1ae76407cda3615e9d75474b3", "fetched_at": "2026-08-28T04:04:20.196995+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dbreunig/whenwords"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T04:49:01.900103+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "8616b007262acf95cc7138a558361d2364a9deb1ae76407cda3615e9d75474b3", "fetched_at": "2026-08-28T04:04:20.196995+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dbreunig/whenwords"}], "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:04:20.196995+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:04:20.196995+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:04:20.196995+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T04:49:01.900103+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "8616b007262acf95cc7138a558361d2364a9deb1ae76407cda3615e9d75474b3", "fetched_at": "2026-08-28T04:04:20.196995+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dbreunig/whenwords"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:04:20.196995+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:04:20.196995+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T04:49:01.900103+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "8616b007262acf95cc7138a558361d2364a9deb1ae76407cda3615e9d75474b3", "fetched_at": "2026-08-28T04:04:20.196995+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dbreunig/whenwords"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:04:20.196995+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:04:20.196995+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:04:20.196995+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T04:49:01.900103+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "8616b007262acf95cc7138a558361d2364a9deb1ae76407cda3615e9d75474b3", "fetched_at": "2026-08-28T04:04:20.196995+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dbreunig/whenwords"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:04:20.196995+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:04:20.196995+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T04:49:01.900103+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "8616b007262acf95cc7138a558361d2364a9deb1ae76407cda3615e9d75474b3", "fetched_at": "2026-08-28T04:04:20.196995+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dbreunig/whenwords"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T04:49:01.900103+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "8616b007262acf95cc7138a558361d2364a9deb1ae76407cda3615e9d75474b3", "fetched_at": "2026-08-28T04:04:20.196995+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dbreunig/whenwords"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T04:49:01.900103+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "8616b007262acf95cc7138a558361d2364a9deb1ae76407cda3615e9d75474b3", "fetched_at": "2026-08-28T04:04:20.196995+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dbreunig/whenwords"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T04:49:01.900103+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "8616b007262acf95cc7138a558361d2364a9deb1ae76407cda3615e9d75474b3", "fetched_at": "2026-08-28T04:04:20.196995+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dbreunig/whenwords"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 63, "longevity": 16, "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": 237, "days_push": 225, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 44, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}