{"adoption": {"forks": 303, "observed_at": "2026-08-28T04:09:43.095720+00:00", "stars": 6400}, "canonical_url": "https://ross.abutalabs.com/products/stripe-recommendations", "card": {"archived": false, "artifact_type": "learning-resource", "description": "How to implement Stripe without going mad", "domain": ["web-development", "backend", "fintech", "developer-tools", "tutorials"], "enriched": true, "function": ["developer-tools", "documentation", "workflow-automation"], "health_score": 23, "homepage": null, "language": null, "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["t3dotgg/stripe-recommendations"], "name": "t3dotgg/stripe-recommendations", "platform": ["cross-platform"], "pushed_at": "2025-02-07T23:38:13+00:00", "repo": "t3dotgg/stripe-recommendations", "stars": 6400, "tags": ["stripe", "payments", "saas", "subscriptions", "webhooks", "nextjs", "typescript", "guide", "best-practices", "nodejs", "web-server"], "topics": ["fullstack", "nextjs", "node", "payments", "stripe", "typescript"], "urls": [], "use_cases": ["implement stripe subscriptions in a saas app", "avoid stripe webhook race conditions", "sync stripe customer data to my database", "set up stripe checkout with nextjs", "handle stripe payment state without split brain", "best practices for stripe integration in typescript"], "what_it_is": "An opinionated guide by Theo Browne on integrating Stripe payments into SaaS applications without common pitfalls. It recommends a single sync function that pulls all Stripe customer data into a KV store, avoiding webhook race conditions and split-brain state.", "when_to_avoid": ["you need one-off payments, marketplaces, or invoicing beyond subscriptions", "you're not using a JavaScript/TypeScript backend", "you want exhaustive Stripe API coverage rather than an opinionated subset"], "when_to_choose": ["you're building a SaaS with subscriptions using TypeScript and a JS backend", "you've been burned by Stripe webhook ordering and partial-update bugs", "you want a simple, battle-tested checkout and sync flow"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/stripe-recommendations", "repo": "t3dotgg/stripe-recommendations", "role": "main", "score": 23}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:09:43.095720+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T17:45:01.105659+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "da5a7710c32034fc438884fafab3ae5dc49a116ee9c28ae62291cca6120df13d", "fetched_at": "2026-08-28T04:09:43.095720+00:00", "kind": "readme", "missing": false, "url": "https://github.com/t3dotgg/stripe-recommendations"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:09:43.095720+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T17:45:01.105659+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "da5a7710c32034fc438884fafab3ae5dc49a116ee9c28ae62291cca6120df13d", "fetched_at": "2026-08-28T04:09:43.095720+00:00", "kind": "readme", "missing": false, "url": "https://github.com/t3dotgg/stripe-recommendations"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T17:45:01.105659+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "da5a7710c32034fc438884fafab3ae5dc49a116ee9c28ae62291cca6120df13d", "fetched_at": "2026-08-28T04:09:43.095720+00:00", "kind": "readme", "missing": false, "url": "https://github.com/t3dotgg/stripe-recommendations"}], "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:43.095720+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:09:43.095720+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:09:43.095720+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T17:45:01.105659+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "da5a7710c32034fc438884fafab3ae5dc49a116ee9c28ae62291cca6120df13d", "fetched_at": "2026-08-28T04:09:43.095720+00:00", "kind": "readme", "missing": false, "url": "https://github.com/t3dotgg/stripe-recommendations"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:09:43.095720+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:09:43.095720+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T17:45:01.105659+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "da5a7710c32034fc438884fafab3ae5dc49a116ee9c28ae62291cca6120df13d", "fetched_at": "2026-08-28T04:09:43.095720+00:00", "kind": "readme", "missing": false, "url": "https://github.com/t3dotgg/stripe-recommendations"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:09:43.095720+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:09:43.095720+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:09:43.095720+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T17:45:01.105659+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "da5a7710c32034fc438884fafab3ae5dc49a116ee9c28ae62291cca6120df13d", "fetched_at": "2026-08-28T04:09:43.095720+00:00", "kind": "readme", "missing": false, "url": "https://github.com/t3dotgg/stripe-recommendations"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:09:43.095720+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:09:43.095720+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T17:45:01.105659+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "da5a7710c32034fc438884fafab3ae5dc49a116ee9c28ae62291cca6120df13d", "fetched_at": "2026-08-28T04:09:43.095720+00:00", "kind": "readme", "missing": false, "url": "https://github.com/t3dotgg/stripe-recommendations"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T17:45:01.105659+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "da5a7710c32034fc438884fafab3ae5dc49a116ee9c28ae62291cca6120df13d", "fetched_at": "2026-08-28T04:09:43.095720+00:00", "kind": "readme", "missing": false, "url": "https://github.com/t3dotgg/stripe-recommendations"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T17:45:01.105659+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "da5a7710c32034fc438884fafab3ae5dc49a116ee9c28ae62291cca6120df13d", "fetched_at": "2026-08-28T04:09:43.095720+00:00", "kind": "readme", "missing": false, "url": "https://github.com/t3dotgg/stripe-recommendations"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T17:45:01.105659+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "da5a7710c32034fc438884fafab3ae5dc49a116ee9c28ae62291cca6120df13d", "fetched_at": "2026-08-28T04:09:43.095720+00:00", "kind": "readme", "missing": false, "url": "https://github.com/t3dotgg/stripe-recommendations"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 5, "longevity": 42, "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": 599, "days_push": 572, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 23, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}