{"adoption": {"forks": 183, "observed_at": "2026-08-28T04:04:18.388201+00:00", "stars": 1303}, "canonical_url": "https://ross.abutalabs.com/products/saythanksio", "card": {"archived": false, "artifact_type": "application", "description": "Spreading Thankfulness in Open Source. ", "domain": ["web-development", "developer-tools"], "enriched": true, "function": ["email", "web-framework", "auth", "templating"], "health_score": 100, "homepage": "https://saythanks.io", "language": "Python", "license": null, "license_family": "other", "maturity": "active", "member_repos": ["BlitzKraft/saythanks.io"], "name": "BlitzKraft/saythanks.io", "platform": ["python", "self-hosted"], "pushed_at": "2026-08-26T18:28:40+00:00", "repo": "BlitzKraft/saythanks.io", "stars": 1303, "tags": ["thank-you-notes", "flask", "auth0", "mailersend", "open-source-appreciation", "inbox", "open-source", "web-server"], "topics": ["inbox", "saythanks", "thanks", "thankfulness", "opensource"], "urls": [], "use_cases": ["add a say-thanks button to my project README", "receive thank you notes from users of my open source library", "set up an inbox of appreciation messages for my GitHub project", "let users thank maintainers without exposing email addresses", "self-host a thankfulness inbox for my repositories"], "what_it_is": "SayThanks.io is a hosted Flask web application that gives open source maintainers a link/button to place in their READMEs so users can send short thank-you notes. Notes are delivered by email (via MailerSend) and aggregated in a private per-user inbox, with authentication handled through Auth0 social logins.", "when_to_avoid": ["you need general-purpose feedback, issue tracking, or discussions rather than short thank-you notes", "you require a license-guaranteed usage terms — the repository currently has no license", "you need a self-hosted solution but cannot run Flask with Auth0 and MailerSend dependencies"], "when_to_choose": ["you maintain open source projects and want a simple way to collect user appreciation", "you want a ready-made hosted service with just a link in your README", "you want email notifications plus a private aggregated inbox of thanks"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/saythanksio", "repo": "BlitzKraft/saythanks.io", "role": "main", "score": 87}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:04:18.388201+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T04:51:10.020027+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "800228820a5ef854bc0af539af202a94ba38f4b3a24f68d9bc1aeea470c248a8", "fetched_at": "2026-08-28T04:04:18.388201+00:00", "kind": "readme", "missing": false, "url": "https://github.com/BlitzKraft/saythanks.io"}, {"content_hash": "646a3e1869dd440e0a2720673fda28e5b4af48555aa74a81b4fefcd1484bfd6f", "fetched_at": "2026-08-29T12:09:15.155442+00:00", "kind": "homepage", "missing": false, "url": "https://saythanks.io"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:04:18.388201+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T04:51:10.020027+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "800228820a5ef854bc0af539af202a94ba38f4b3a24f68d9bc1aeea470c248a8", "fetched_at": "2026-08-28T04:04:18.388201+00:00", "kind": "readme", "missing": false, "url": "https://github.com/BlitzKraft/saythanks.io"}, {"content_hash": "646a3e1869dd440e0a2720673fda28e5b4af48555aa74a81b4fefcd1484bfd6f", "fetched_at": "2026-08-29T12:09:15.155442+00:00", "kind": "homepage", "missing": false, "url": "https://saythanks.io"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T04:51:10.020027+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "800228820a5ef854bc0af539af202a94ba38f4b3a24f68d9bc1aeea470c248a8", "fetched_at": "2026-08-28T04:04:18.388201+00:00", "kind": "readme", "missing": false, "url": "https://github.com/BlitzKraft/saythanks.io"}, {"content_hash": "646a3e1869dd440e0a2720673fda28e5b4af48555aa74a81b4fefcd1484bfd6f", "fetched_at": "2026-08-29T12:09:15.155442+00:00", "kind": "homepage", "missing": false, "url": "https://saythanks.io"}], "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:18.388201+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:04:18.388201+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:04:18.388201+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T04:51:10.020027+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "800228820a5ef854bc0af539af202a94ba38f4b3a24f68d9bc1aeea470c248a8", "fetched_at": "2026-08-28T04:04:18.388201+00:00", "kind": "readme", "missing": false, "url": "https://github.com/BlitzKraft/saythanks.io"}, {"content_hash": "646a3e1869dd440e0a2720673fda28e5b4af48555aa74a81b4fefcd1484bfd6f", "fetched_at": "2026-08-29T12:09:15.155442+00:00", "kind": "homepage", "missing": false, "url": "https://saythanks.io"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:04:18.388201+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:04:18.388201+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T04:51:10.020027+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "800228820a5ef854bc0af539af202a94ba38f4b3a24f68d9bc1aeea470c248a8", "fetched_at": "2026-08-28T04:04:18.388201+00:00", "kind": "readme", "missing": false, "url": "https://github.com/BlitzKraft/saythanks.io"}, {"content_hash": "646a3e1869dd440e0a2720673fda28e5b4af48555aa74a81b4fefcd1484bfd6f", "fetched_at": "2026-08-29T12:09:15.155442+00:00", "kind": "homepage", "missing": false, "url": "https://saythanks.io"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:04:18.388201+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:04:18.388201+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:04:18.388201+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T04:51:10.020027+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "800228820a5ef854bc0af539af202a94ba38f4b3a24f68d9bc1aeea470c248a8", "fetched_at": "2026-08-28T04:04:18.388201+00:00", "kind": "readme", "missing": false, "url": "https://github.com/BlitzKraft/saythanks.io"}, {"content_hash": "646a3e1869dd440e0a2720673fda28e5b4af48555aa74a81b4fefcd1484bfd6f", "fetched_at": "2026-08-29T12:09:15.155442+00:00", "kind": "homepage", "missing": false, "url": "https://saythanks.io"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:04:18.388201+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:04:18.388201+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T04:51:10.020027+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "800228820a5ef854bc0af539af202a94ba38f4b3a24f68d9bc1aeea470c248a8", "fetched_at": "2026-08-28T04:04:18.388201+00:00", "kind": "readme", "missing": false, "url": "https://github.com/BlitzKraft/saythanks.io"}, {"content_hash": "646a3e1869dd440e0a2720673fda28e5b4af48555aa74a81b4fefcd1484bfd6f", "fetched_at": "2026-08-29T12:09:15.155442+00:00", "kind": "homepage", "missing": false, "url": "https://saythanks.io"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T04:51:10.020027+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "800228820a5ef854bc0af539af202a94ba38f4b3a24f68d9bc1aeea470c248a8", "fetched_at": "2026-08-28T04:04:18.388201+00:00", "kind": "readme", "missing": false, "url": "https://github.com/BlitzKraft/saythanks.io"}, {"content_hash": "646a3e1869dd440e0a2720673fda28e5b4af48555aa74a81b4fefcd1484bfd6f", "fetched_at": "2026-08-29T12:09:15.155442+00:00", "kind": "homepage", "missing": false, "url": "https://saythanks.io"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T04:51:10.020027+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "800228820a5ef854bc0af539af202a94ba38f4b3a24f68d9bc1aeea470c248a8", "fetched_at": "2026-08-28T04:04:18.388201+00:00", "kind": "readme", "missing": false, "url": "https://github.com/BlitzKraft/saythanks.io"}, {"content_hash": "646a3e1869dd440e0a2720673fda28e5b4af48555aa74a81b4fefcd1484bfd6f", "fetched_at": "2026-08-29T12:09:15.155442+00:00", "kind": "homepage", "missing": false, "url": "https://saythanks.io"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T04:51:10.020027+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "800228820a5ef854bc0af539af202a94ba38f4b3a24f68d9bc1aeea470c248a8", "fetched_at": "2026-08-28T04:04:18.388201+00:00", "kind": "readme", "missing": false, "url": "https://github.com/BlitzKraft/saythanks.io"}, {"content_hash": "646a3e1869dd440e0a2720673fda28e5b4af48555aa74a81b4fefcd1484bfd6f", "fetched_at": "2026-08-29T12:09:15.155442+00:00", "kind": "homepage", "missing": false, "url": "https://saythanks.io"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 99, "longevity": 100, "rhythm": 65}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": ["no_license"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 3582, "days_push": 7, "days_rel": 22, "gap_med": 205.5, "n_releases_24m": 3}, "score": 87, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}