{"adoption": {"forks": 122, "observed_at": "2026-09-01T02:14:03.342835+00:00", "stars": 1059}, "canonical_url": "https://ross.abutalabs.com/products/joreilly-confetti", "card": {"archived": false, "artifact_type": "application", "description": "KMP/CMP GraphQL based conference project with Jetpack Compose Android, Compose for Wear, and Compose Multiplatform Desktop, Web and iOS clients along with GraphQL backend.", "domain": ["web-development", "mobile-development", "developer-tools", "cross-platform", "apis"], "enriched": true, "function": ["graphql", "graphql-client", "ui-components", "mobile-framework", "frontend-framework"], "health_score": 81, "homepage": null, "language": "Kotlin", "license": "Apache-2.0", "license_family": "permissive", "maturity": "active", "member_repos": ["joreilly/Confetti"], "name": "joreilly/Confetti", "platform": ["jvm"], "pushed_at": "2026-08-31T20:55:03+00:00", "repo": "joreilly/Confetti", "stars": 1059, "tags": ["kotlin-multiplatform", "compose-multiplatform", "jetpack-compose", "apollo-graphql", "conference-app", "wear-os", "android-auto", "sample-project", "android", "ios", "desktop", "web-server", "swift", "wearos"], "topics": ["android", "graphql", "kotlin", "swift", "apollo-client", "jetpack", "graphql-client", "jetpack-compose", "kmm", "kotlin-multiplatform", "kotlin-multiplatform-mobile", "kotlin-native", "swiftui", "graphql-server", "apollo", "kmp", "compose-desktop", "compose-ios", "compose-multiplatform", "kmp-sample"], "urls": [], "use_cases": ["view conference schedules and session details across devices", "learn Kotlin Multiplatform with Compose Multiplatform", "see how to build a GraphQL backend and clients in Kotlin", "share business logic between Android and iOS apps", "build a Wear OS or Android Auto companion app", "study SwiftUI and Jetpack Compose integration patterns"], "what_it_is": "Confetti is a Kotlin Multiplatform conference app project that lets users browse schedules and session information for a range of tech conferences. It demonstrates a full-stack Compose Multiplatform setup with clients for Android, iOS, Desktop, Web, Wear OS, and Android Auto, backed by an Apollo GraphQL server.", "when_to_avoid": ["you need a production conference platform with full admin features", "your stack is not Kotlin/JVM based", "you need a turnkey app without customizing the GraphQL backend"], "when_to_choose": ["you want a reference implementation of Kotlin/Compose Multiplatform with GraphQL", "you need a cross-platform conference or event schedule app", "you're learning how Apollo Kotlin works across platforms"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/joreilly-confetti", "repo": "joreilly/Confetti", "role": "main", "score": 68}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-09-01T02:14:03.342835+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T06:57:47.312379+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "fc2a792cd6b247a47c6e51db9312ca243c8910775418b3c425abb7ba2f506b9f", "fetched_at": "2026-09-01T02:14:03.342835+00:00", "kind": "readme", "missing": false, "url": "https://github.com/joreilly/Confetti"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-09-01T02:14:03.342835+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T06:57:47.312379+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "fc2a792cd6b247a47c6e51db9312ca243c8910775418b3c425abb7ba2f506b9f", "fetched_at": "2026-09-01T02:14:03.342835+00:00", "kind": "readme", "missing": false, "url": "https://github.com/joreilly/Confetti"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T06:57:47.312379+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "fc2a792cd6b247a47c6e51db9312ca243c8910775418b3c425abb7ba2f506b9f", "fetched_at": "2026-09-01T02:14:03.342835+00:00", "kind": "readme", "missing": false, "url": "https://github.com/joreilly/Confetti"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-09-01T02:14:03.342835+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-09-01T02:14:03.342835+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-09-01T02:14:03.342835+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T06:57:47.312379+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "fc2a792cd6b247a47c6e51db9312ca243c8910775418b3c425abb7ba2f506b9f", "fetched_at": "2026-09-01T02:14:03.342835+00:00", "kind": "readme", "missing": false, "url": "https://github.com/joreilly/Confetti"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-09-01T02:14:03.342835+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-09-01T02:14:03.342835+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T06:57:47.312379+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "fc2a792cd6b247a47c6e51db9312ca243c8910775418b3c425abb7ba2f506b9f", "fetched_at": "2026-09-01T02:14:03.342835+00:00", "kind": "readme", "missing": false, "url": "https://github.com/joreilly/Confetti"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-09-01T02:14:03.342835+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-09-01T02:14:03.342835+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-09-01T02:14:03.342835+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T06:57:47.312379+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "fc2a792cd6b247a47c6e51db9312ca243c8910775418b3c425abb7ba2f506b9f", "fetched_at": "2026-09-01T02:14:03.342835+00:00", "kind": "readme", "missing": false, "url": "https://github.com/joreilly/Confetti"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-09-01T02:14:03.342835+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-09-01T02:14:03.342835+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T06:57:47.312379+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "fc2a792cd6b247a47c6e51db9312ca243c8910775418b3c425abb7ba2f506b9f", "fetched_at": "2026-09-01T02:14:03.342835+00:00", "kind": "readme", "missing": false, "url": "https://github.com/joreilly/Confetti"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T06:57:47.312379+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "fc2a792cd6b247a47c6e51db9312ca243c8910775418b3c425abb7ba2f506b9f", "fetched_at": "2026-09-01T02:14:03.342835+00:00", "kind": "readme", "missing": false, "url": "https://github.com/joreilly/Confetti"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T06:57:47.312379+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "fc2a792cd6b247a47c6e51db9312ca243c8910775418b3c425abb7ba2f506b9f", "fetched_at": "2026-09-01T02:14:03.342835+00:00", "kind": "readme", "missing": false, "url": "https://github.com/joreilly/Confetti"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T06:57:47.312379+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "fc2a792cd6b247a47c6e51db9312ca243c8910775418b3c425abb7ba2f506b9f", "fetched_at": "2026-09-01T02:14:03.342835+00:00", "kind": "readme", "missing": false, "url": "https://github.com/joreilly/Confetti"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 100, "longevity": 100, "rhythm": 8}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 1730, "days_push": 2, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 68, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 5, "stale_scrape": false}}