{"adoption": {"forks": 180, "observed_at": "2026-08-28T04:03:16.525220+00:00", "stars": 1025}, "canonical_url": "https://ross.abutalabs.com/products/send2ereader", "card": {"archived": false, "artifact_type": "service", "description": "A service for sending ebooks to a Kobo or Kindle ereader through the built-in browser", "domain": ["self-hosted", "files", "pdf"], "enriched": true, "function": ["file-upload", "http-server", "pdf", "image-processing"], "health_score": 29, "homepage": "https://send.djazz.se", "language": "JavaScript", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["daniel-j/send2ereader"], "name": "daniel-j/send2ereader", "platform": ["self-hosted"], "pushed_at": "2025-04-09T13:14:54+00:00", "repo": "daniel-j/send2ereader", "stars": 1025, "tags": ["ebook-transfer", "kobo", "kindle", "epub", "kepubify", "kindlegen", "ereader", "e-books", "nodejs", "docker", "web-server"], "topics": ["kobo", "kobo-ereader", "epub", "kepub", "ebook", "kindle", "kindlegen"], "urls": [], "use_cases": ["send epub files to my kobo over wifi", "transfer ebooks to kindle without a cable", "self-host an ebook push service", "convert epub to kepub when sending to kobo", "convert epub to mobi for kindle", "crop pdf margins before sending to an ereader"], "what_it_is": "A self-hostable web service for sending ebooks (EPUB, MOBI, PDF, TXT, CBZ, CBR) to a Kobo or Kindle ereader via its built-in browser using a unique key. It optionally converts EPUBs to Kobo EPUB (Kepubify) or Kindle MOBI (KindleGen) and crops PDF margins.", "when_to_avoid": ["you need a managed cloud service with no setup", "you want long-term storage or a library manager rather than transient transfer", "you cannot install external tools like kepubify or kindlegen"], "when_to_choose": ["you want cable-free ebook delivery to a Kobo or Kindle using only the device's browser", "you want a self-hosted alternative to Amazon's Send-to-Kindle", "you need automatic format conversion (kepub/mobi) during transfer"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/send2ereader", "repo": "daniel-j/send2ereader", "role": "main", "score": 39}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:03:16.525220+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T07:08:03.196731+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6052a98b8136df17349a597f6f86efcc6d373db411e250e1b484c3c1f794d6f0", "fetched_at": "2026-08-28T04:03:16.525220+00:00", "kind": "readme", "missing": false, "url": "https://github.com/daniel-j/send2ereader"}, {"content_hash": "0827c326411caccb2a877f39638098a620405561e5676b5eed34186116b78d70", "fetched_at": "2026-08-29T13:08:21.000581+00:00", "kind": "homepage", "missing": false, "url": "https://send.djazz.se"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:03:16.525220+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T07:08:03.196731+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6052a98b8136df17349a597f6f86efcc6d373db411e250e1b484c3c1f794d6f0", "fetched_at": "2026-08-28T04:03:16.525220+00:00", "kind": "readme", "missing": false, "url": "https://github.com/daniel-j/send2ereader"}, {"content_hash": "0827c326411caccb2a877f39638098a620405561e5676b5eed34186116b78d70", "fetched_at": "2026-08-29T13:08:21.000581+00:00", "kind": "homepage", "missing": false, "url": "https://send.djazz.se"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T07:08:03.196731+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6052a98b8136df17349a597f6f86efcc6d373db411e250e1b484c3c1f794d6f0", "fetched_at": "2026-08-28T04:03:16.525220+00:00", "kind": "readme", "missing": false, "url": "https://github.com/daniel-j/send2ereader"}, {"content_hash": "0827c326411caccb2a877f39638098a620405561e5676b5eed34186116b78d70", "fetched_at": "2026-08-29T13:08:21.000581+00:00", "kind": "homepage", "missing": false, "url": "https://send.djazz.se"}], "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:03:16.525220+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:03:16.525220+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:03:16.525220+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T07:08:03.196731+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6052a98b8136df17349a597f6f86efcc6d373db411e250e1b484c3c1f794d6f0", "fetched_at": "2026-08-28T04:03:16.525220+00:00", "kind": "readme", "missing": false, "url": "https://github.com/daniel-j/send2ereader"}, {"content_hash": "0827c326411caccb2a877f39638098a620405561e5676b5eed34186116b78d70", "fetched_at": "2026-08-29T13:08:21.000581+00:00", "kind": "homepage", "missing": false, "url": "https://send.djazz.se"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:03:16.525220+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:03:16.525220+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T07:08:03.196731+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6052a98b8136df17349a597f6f86efcc6d373db411e250e1b484c3c1f794d6f0", "fetched_at": "2026-08-28T04:03:16.525220+00:00", "kind": "readme", "missing": false, "url": "https://github.com/daniel-j/send2ereader"}, {"content_hash": "0827c326411caccb2a877f39638098a620405561e5676b5eed34186116b78d70", "fetched_at": "2026-08-29T13:08:21.000581+00:00", "kind": "homepage", "missing": false, "url": "https://send.djazz.se"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:03:16.525220+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:03:16.525220+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:03:16.525220+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T07:08:03.196731+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6052a98b8136df17349a597f6f86efcc6d373db411e250e1b484c3c1f794d6f0", "fetched_at": "2026-08-28T04:03:16.525220+00:00", "kind": "readme", "missing": false, "url": "https://github.com/daniel-j/send2ereader"}, {"content_hash": "0827c326411caccb2a877f39638098a620405561e5676b5eed34186116b78d70", "fetched_at": "2026-08-29T13:08:21.000581+00:00", "kind": "homepage", "missing": false, "url": "https://send.djazz.se"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:03:16.525220+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:03:16.525220+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T07:08:03.196731+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6052a98b8136df17349a597f6f86efcc6d373db411e250e1b484c3c1f794d6f0", "fetched_at": "2026-08-28T04:03:16.525220+00:00", "kind": "readme", "missing": false, "url": "https://github.com/daniel-j/send2ereader"}, {"content_hash": "0827c326411caccb2a877f39638098a620405561e5676b5eed34186116b78d70", "fetched_at": "2026-08-29T13:08:21.000581+00:00", "kind": "homepage", "missing": false, "url": "https://send.djazz.se"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T07:08:03.196731+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6052a98b8136df17349a597f6f86efcc6d373db411e250e1b484c3c1f794d6f0", "fetched_at": "2026-08-28T04:03:16.525220+00:00", "kind": "readme", "missing": false, "url": "https://github.com/daniel-j/send2ereader"}, {"content_hash": "0827c326411caccb2a877f39638098a620405561e5676b5eed34186116b78d70", "fetched_at": "2026-08-29T13:08:21.000581+00:00", "kind": "homepage", "missing": false, "url": "https://send.djazz.se"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T07:08:03.196731+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6052a98b8136df17349a597f6f86efcc6d373db411e250e1b484c3c1f794d6f0", "fetched_at": "2026-08-28T04:03:16.525220+00:00", "kind": "readme", "missing": false, "url": "https://github.com/daniel-j/send2ereader"}, {"content_hash": "0827c326411caccb2a877f39638098a620405561e5676b5eed34186116b78d70", "fetched_at": "2026-08-29T13:08:21.000581+00:00", "kind": "homepage", "missing": false, "url": "https://send.djazz.se"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T07:08:03.196731+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6052a98b8136df17349a597f6f86efcc6d373db411e250e1b484c3c1f794d6f0", "fetched_at": "2026-08-28T04:03:16.525220+00:00", "kind": "readme", "missing": false, "url": "https://github.com/daniel-j/send2ereader"}, {"content_hash": "0827c326411caccb2a877f39638098a620405561e5676b5eed34186116b78d70", "fetched_at": "2026-08-29T13:08:21.000581+00:00", "kind": "homepage", "missing": false, "url": "https://send.djazz.se"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 15, "longevity": 100, "rhythm": 35}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": ["no_releases"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 2373, "days_push": 511, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 39, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}