{"adoption": {"forks": 1554, "observed_at": "2026-08-28T04:09:58.447489+00:00", "stars": 7358}, "canonical_url": "https://ross.abutalabs.com/products/crosspoint-reader", "card": {"archived": false, "artifact_type": "application", "description": "Open-source e-reader firmware", "domain": ["embedded-systems", "hardware", "cross-platform", "files"], "enriched": true, "function": ["embedded", "file-system", "http-server", "websocket", "internationalization", "theme"], "health_score": 100, "homepage": "https://crosspointreader.com", "language": "C", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["crosspoint-reader/crosspoint-reader"], "name": "crosspoint-reader/crosspoint-reader", "platform": ["embedded", "iot"], "pushed_at": "2026-08-26T16:22:49+00:00", "repo": "crosspoint-reader/crosspoint-reader", "stars": 7358, "tags": ["e-reader", "eink", "firmware", "epub", "esp32", "ereader", "opds", "webdav", "ota-updates", "stardict", "localization", "web-server"], "topics": ["eink", "ereader", "esp32", "firmware", "e-reader", "epub", "epub-reader"], "urls": [], "use_cases": ["read epubs on an esp32 e-ink device", "replace stock e-reader firmware with open source", "transfer books to my e-reader over wifi", "browse and download books via OPDS", "sync reading progress with KOReader", "install custom fonts and themes on my e-reader", "look up words with a dictionary while reading"], "what_it_is": "CrossPoint Reader is open-source, community-maintained e-reader firmware for ESP32-C3-based Xteink X3/X4 devices. It provides EPUB rendering, wireless file transfer, OPDS browsing, themes, and extensive customization on e-ink hardware.", "when_to_avoid": ["you have a Kindle, Kobo, or other non-ESP32 e-reader", "you need PDF or DRM-protected book support", "you want a polished commercial product with vendor support"], "when_to_choose": ["you own an Xteink X3 or X4 e-ink device and want hackable, community-driven firmware", "you want EPUB reading with wireless workflows like WebDAV, OPDS, and OTA updates", "you value open source, localization, and deep customization of your e-reader"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/crosspoint-reader", "repo": "crosspoint-reader/crosspoint-reader", "role": "main", "score": 82}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:09:58.447489+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T17:38:25.453013+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "dfcf8cde1a42ba2a73759d4c72a633784c8b1044f05164e06ae9ea58f0eb0c98", "fetched_at": "2026-08-28T04:09:58.447489+00:00", "kind": "readme", "missing": false, "url": "https://github.com/crosspoint-reader/crosspoint-reader"}, {"content_hash": "225ef73f75e29cd24809f9eb97259fdc54293083431efbaeae62146f40e7d563", "fetched_at": "2026-08-29T08:33:43.876632+00:00", "kind": "homepage", "missing": false, "url": "https://crosspointreader.com"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:09:58.447489+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T17:38:25.453013+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "dfcf8cde1a42ba2a73759d4c72a633784c8b1044f05164e06ae9ea58f0eb0c98", "fetched_at": "2026-08-28T04:09:58.447489+00:00", "kind": "readme", "missing": false, "url": "https://github.com/crosspoint-reader/crosspoint-reader"}, {"content_hash": "225ef73f75e29cd24809f9eb97259fdc54293083431efbaeae62146f40e7d563", "fetched_at": "2026-08-29T08:33:43.876632+00:00", "kind": "homepage", "missing": false, "url": "https://crosspointreader.com"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T17:38:25.453013+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "dfcf8cde1a42ba2a73759d4c72a633784c8b1044f05164e06ae9ea58f0eb0c98", "fetched_at": "2026-08-28T04:09:58.447489+00:00", "kind": "readme", "missing": false, "url": "https://github.com/crosspoint-reader/crosspoint-reader"}, {"content_hash": "225ef73f75e29cd24809f9eb97259fdc54293083431efbaeae62146f40e7d563", "fetched_at": "2026-08-29T08:33:43.876632+00:00", "kind": "homepage", "missing": false, "url": "https://crosspointreader.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:09:58.447489+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:09:58.447489+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:09:58.447489+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T17:38:25.453013+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "dfcf8cde1a42ba2a73759d4c72a633784c8b1044f05164e06ae9ea58f0eb0c98", "fetched_at": "2026-08-28T04:09:58.447489+00:00", "kind": "readme", "missing": false, "url": "https://github.com/crosspoint-reader/crosspoint-reader"}, {"content_hash": "225ef73f75e29cd24809f9eb97259fdc54293083431efbaeae62146f40e7d563", "fetched_at": "2026-08-29T08:33:43.876632+00:00", "kind": "homepage", "missing": false, "url": "https://crosspointreader.com"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:09:58.447489+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:09:58.447489+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T17:38:25.453013+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "dfcf8cde1a42ba2a73759d4c72a633784c8b1044f05164e06ae9ea58f0eb0c98", "fetched_at": "2026-08-28T04:09:58.447489+00:00", "kind": "readme", "missing": false, "url": "https://github.com/crosspoint-reader/crosspoint-reader"}, {"content_hash": "225ef73f75e29cd24809f9eb97259fdc54293083431efbaeae62146f40e7d563", "fetched_at": "2026-08-29T08:33:43.876632+00:00", "kind": "homepage", "missing": false, "url": "https://crosspointreader.com"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:09:58.447489+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:09:58.447489+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:09:58.447489+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T17:38:25.453013+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "dfcf8cde1a42ba2a73759d4c72a633784c8b1044f05164e06ae9ea58f0eb0c98", "fetched_at": "2026-08-28T04:09:58.447489+00:00", "kind": "readme", "missing": false, "url": "https://github.com/crosspoint-reader/crosspoint-reader"}, {"content_hash": "225ef73f75e29cd24809f9eb97259fdc54293083431efbaeae62146f40e7d563", "fetched_at": "2026-08-29T08:33:43.876632+00:00", "kind": "homepage", "missing": false, "url": "https://crosspointreader.com"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:09:58.447489+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:09:58.447489+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T17:38:25.453013+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "dfcf8cde1a42ba2a73759d4c72a633784c8b1044f05164e06ae9ea58f0eb0c98", "fetched_at": "2026-08-28T04:09:58.447489+00:00", "kind": "readme", "missing": false, "url": "https://github.com/crosspoint-reader/crosspoint-reader"}, {"content_hash": "225ef73f75e29cd24809f9eb97259fdc54293083431efbaeae62146f40e7d563", "fetched_at": "2026-08-29T08:33:43.876632+00:00", "kind": "homepage", "missing": false, "url": "https://crosspointreader.com"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T17:38:25.453013+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "dfcf8cde1a42ba2a73759d4c72a633784c8b1044f05164e06ae9ea58f0eb0c98", "fetched_at": "2026-08-28T04:09:58.447489+00:00", "kind": "readme", "missing": false, "url": "https://github.com/crosspoint-reader/crosspoint-reader"}, {"content_hash": "225ef73f75e29cd24809f9eb97259fdc54293083431efbaeae62146f40e7d563", "fetched_at": "2026-08-29T08:33:43.876632+00:00", "kind": "homepage", "missing": false, "url": "https://crosspointreader.com"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T17:38:25.453013+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "dfcf8cde1a42ba2a73759d4c72a633784c8b1044f05164e06ae9ea58f0eb0c98", "fetched_at": "2026-08-28T04:09:58.447489+00:00", "kind": "readme", "missing": false, "url": "https://github.com/crosspoint-reader/crosspoint-reader"}, {"content_hash": "225ef73f75e29cd24809f9eb97259fdc54293083431efbaeae62146f40e7d563", "fetched_at": "2026-08-29T08:33:43.876632+00:00", "kind": "homepage", "missing": false, "url": "https://crosspointreader.com"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T17:38:25.453013+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "dfcf8cde1a42ba2a73759d4c72a633784c8b1044f05164e06ae9ea58f0eb0c98", "fetched_at": "2026-08-28T04:09:58.447489+00:00", "kind": "readme", "missing": false, "url": "https://github.com/crosspoint-reader/crosspoint-reader"}, {"content_hash": "225ef73f75e29cd24809f9eb97259fdc54293083431efbaeae62146f40e7d563", "fetched_at": "2026-08-29T08:33:43.876632+00:00", "kind": "homepage", "missing": false, "url": "https://crosspointreader.com"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 99, "longevity": 19, "rhythm": 96}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 273, "days_push": 7, "days_rel": 26, "gap_med": 2, "n_releases_24m": 28}, "score": 82, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}