{"adoption": {"forks": 456, "observed_at": "2026-08-28T04:07:10.125966+00:00", "stars": 2683}, "canonical_url": "https://ross.abutalabs.com/products/apartment", "card": {"archived": false, "artifact_type": "library", "description": "Database multi-tenancy for Rack (and Rails) applications", "domain": ["web-development", "databases", "backend"], "enriched": true, "function": ["database", "orm", "middleware"], "health_score": 20, "homepage": null, "language": "Ruby", "license": null, "license_family": "other", "maturity": "maintenance", "member_repos": ["influitive/apartment"], "name": "influitive/apartment", "platform": ["ruby"], "pushed_at": "2024-06-12T15:18:38+00:00", "repo": "influitive/apartment", "stars": 2683, "tags": ["multitenancy", "rails", "activerecord", "postgresql-schemas", "tenant-isolation", "web-server"], "topics": [], "urls": [], "use_cases": ["isolate each customer's data in its own database schema in a Rails app", "switch tenants per request based on subdomain or user", "run migrations across all tenants", "sequester account or company data while sharing some common data", "create and manage tenants programmatically in a SaaS application"], "what_it_is": "Apartment is a Ruby gem providing database-level multi-tenancy for Rack and Rails applications, supporting tenant isolation via PostgreSQL schemas or separate databases. It offers tenant creation, switching, and per-request tenant management integrated with ActiveRecord.", "when_to_avoid": ["you use row-level tenancy (a tenant_id column) rather than schema/database isolation", "you're on a non-Ruby stack or non-ActiveRecord ORM", "you need a project under active development - it is in maintenance mode with no license file"], "when_to_choose": ["you're building a Rails/Rack SaaS app needing schema- or database-per-tenant isolation", "you want drop-in ActiveRecord multi-tenancy with per-request tenant switching middleware"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/apartment", "repo": "influitive/apartment", "role": "main", "score": 32}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:07:10.125966+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T02:17:53.140937+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2c87da40e63d04ca96c3cd3f69307f871c03ac12673af80a7334202b553af004", "fetched_at": "2026-08-28T04:07:10.125966+00:00", "kind": "readme", "missing": false, "url": "https://github.com/influitive/apartment"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:07:10.125966+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T02:17:53.140937+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2c87da40e63d04ca96c3cd3f69307f871c03ac12673af80a7334202b553af004", "fetched_at": "2026-08-28T04:07:10.125966+00:00", "kind": "readme", "missing": false, "url": "https://github.com/influitive/apartment"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T02:17:53.140937+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2c87da40e63d04ca96c3cd3f69307f871c03ac12673af80a7334202b553af004", "fetched_at": "2026-08-28T04:07:10.125966+00:00", "kind": "readme", "missing": false, "url": "https://github.com/influitive/apartment"}], "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:07:10.125966+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:07:10.125966+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:07:10.125966+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T02:17:53.140937+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2c87da40e63d04ca96c3cd3f69307f871c03ac12673af80a7334202b553af004", "fetched_at": "2026-08-28T04:07:10.125966+00:00", "kind": "readme", "missing": false, "url": "https://github.com/influitive/apartment"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:07:10.125966+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:07:10.125966+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T02:17:53.140937+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2c87da40e63d04ca96c3cd3f69307f871c03ac12673af80a7334202b553af004", "fetched_at": "2026-08-28T04:07:10.125966+00:00", "kind": "readme", "missing": false, "url": "https://github.com/influitive/apartment"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:07:10.125966+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:07:10.125966+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:07:10.125966+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T02:17:53.140937+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2c87da40e63d04ca96c3cd3f69307f871c03ac12673af80a7334202b553af004", "fetched_at": "2026-08-28T04:07:10.125966+00:00", "kind": "readme", "missing": false, "url": "https://github.com/influitive/apartment"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:07:10.125966+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:07:10.125966+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T02:17:53.140937+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2c87da40e63d04ca96c3cd3f69307f871c03ac12673af80a7334202b553af004", "fetched_at": "2026-08-28T04:07:10.125966+00:00", "kind": "readme", "missing": false, "url": "https://github.com/influitive/apartment"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T02:17:53.140937+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2c87da40e63d04ca96c3cd3f69307f871c03ac12673af80a7334202b553af004", "fetched_at": "2026-08-28T04:07:10.125966+00:00", "kind": "readme", "missing": false, "url": "https://github.com/influitive/apartment"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T02:17:53.140937+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2c87da40e63d04ca96c3cd3f69307f871c03ac12673af80a7334202b553af004", "fetched_at": "2026-08-28T04:07:10.125966+00:00", "kind": "readme", "missing": false, "url": "https://github.com/influitive/apartment"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T02:17:53.140937+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2c87da40e63d04ca96c3cd3f69307f871c03ac12673af80a7334202b553af004", "fetched_at": "2026-08-28T04:07:10.125966+00:00", "kind": "readme", "missing": false, "url": "https://github.com/influitive/apartment"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "longevity": 100, "rhythm": 35}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": ["no_releases", "no_license"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 5089, "days_push": 812, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 32, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}