{"adoption": {"forks": 351, "observed_at": "2026-08-28T04:05:55.194207+00:00", "stars": 1920}, "canonical_url": "https://ross.abutalabs.com/products/chapter", "card": {"archived": true, "artifact_type": "application", "description": "A self-hosted event management tool for nonprofits", "domain": ["web-development", "self-hosted", "developer-tools"], "enriched": true, "function": ["self-hosted", "web-framework", "auth", "authorization", "email", "webhook"], "health_score": 10, "homepage": null, "language": "TypeScript", "license": "BSD-3-Clause", "license_family": "permissive", "maturity": "maintenance", "member_repos": ["freeCodeCamp/chapter"], "name": "freeCodeCamp/chapter", "platform": ["self-hosted", "cross-platform"], "pushed_at": "2023-06-08T14:53:19+00:00", "repo": "freeCodeCamp/chapter", "stars": 1920, "tags": ["event-management", "meetup-alternative", "nonprofit", "typescript", "community-organizing", "rsvp", "nonprofits", "nodejs", "docker", "web-server"], "topics": [], "urls": [], "use_cases": ["self-host a meetup alternative for a nonprofit", "manage chapter events and RSVPs under our own domain", "keep event attendee data under our organization's control", "organize local community group events without Facebook", "run multiple city chapters for one organization", "let members follow chapters and get event notifications"], "what_it_is": "Chapter is a self-hosted event management web application for nonprofits, designed as an alternative to Meetup and Facebook Events. It lets organizations run chapters and events under their own domain while keeping all user data under their control.", "when_to_avoid": ["you want a zero-maintenance hosted SaaS with mobile apps", "you need paid ticketing and payment processing", "your team cannot operate a self-hosted web server", "you need a very mature, actively developed product"], "when_to_choose": ["you are a nonprofit or community group wanting full data ownership", "you want a free, self-hosted alternative to Meetup or Facebook Events", "you need role-based organization, chapter, and event management", "you can deploy and maintain a Docker container"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/chapter", "repo": "freeCodeCamp/chapter", "role": "main", "score": 10}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:05:55.194207+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T03:09:48.945360+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2a7e94adfcad59710a394fb2f59c894de841869d9e528d9a348a80d48a2739dc", "fetched_at": "2026-08-28T04:05:55.194207+00:00", "kind": "readme", "missing": false, "url": "https://github.com/freeCodeCamp/chapter"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:05:55.194207+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T03:09:48.945360+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2a7e94adfcad59710a394fb2f59c894de841869d9e528d9a348a80d48a2739dc", "fetched_at": "2026-08-28T04:05:55.194207+00:00", "kind": "readme", "missing": false, "url": "https://github.com/freeCodeCamp/chapter"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T03:09:48.945360+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2a7e94adfcad59710a394fb2f59c894de841869d9e528d9a348a80d48a2739dc", "fetched_at": "2026-08-28T04:05:55.194207+00:00", "kind": "readme", "missing": false, "url": "https://github.com/freeCodeCamp/chapter"}], "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:05:55.194207+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:05:55.194207+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:05:55.194207+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T03:09:48.945360+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2a7e94adfcad59710a394fb2f59c894de841869d9e528d9a348a80d48a2739dc", "fetched_at": "2026-08-28T04:05:55.194207+00:00", "kind": "readme", "missing": false, "url": "https://github.com/freeCodeCamp/chapter"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:05:55.194207+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:05:55.194207+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T03:09:48.945360+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2a7e94adfcad59710a394fb2f59c894de841869d9e528d9a348a80d48a2739dc", "fetched_at": "2026-08-28T04:05:55.194207+00:00", "kind": "readme", "missing": false, "url": "https://github.com/freeCodeCamp/chapter"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:05:55.194207+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:05:55.194207+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:05:55.194207+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T03:09:48.945360+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2a7e94adfcad59710a394fb2f59c894de841869d9e528d9a348a80d48a2739dc", "fetched_at": "2026-08-28T04:05:55.194207+00:00", "kind": "readme", "missing": false, "url": "https://github.com/freeCodeCamp/chapter"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:05:55.194207+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:05:55.194207+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T03:09:48.945360+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2a7e94adfcad59710a394fb2f59c894de841869d9e528d9a348a80d48a2739dc", "fetched_at": "2026-08-28T04:05:55.194207+00:00", "kind": "readme", "missing": false, "url": "https://github.com/freeCodeCamp/chapter"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T03:09:48.945360+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2a7e94adfcad59710a394fb2f59c894de841869d9e528d9a348a80d48a2739dc", "fetched_at": "2026-08-28T04:05:55.194207+00:00", "kind": "readme", "missing": false, "url": "https://github.com/freeCodeCamp/chapter"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T03:09:48.945360+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2a7e94adfcad59710a394fb2f59c894de841869d9e528d9a348a80d48a2739dc", "fetched_at": "2026-08-28T04:05:55.194207+00:00", "kind": "readme", "missing": false, "url": "https://github.com/freeCodeCamp/chapter"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T03:09:48.945360+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2a7e94adfcad59710a394fb2f59c894de841869d9e528d9a348a80d48a2739dc", "fetched_at": "2026-08-28T04:05:55.194207+00:00", "kind": "readme", "missing": false, "url": "https://github.com/freeCodeCamp/chapter"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "longevity": 100, "rhythm": 35}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": ["no_releases", "archived"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 2515, "days_push": 1182, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 10, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}