{"adoption": {"forks": 250, "observed_at": "2026-08-28T04:07:36.027085+00:00", "stars": 2993}, "canonical_url": "https://ross.abutalabs.com/products/good_job", "card": {"archived": false, "artifact_type": "library", "description": "Multithreaded, Postgres-based, Active Job backend for Ruby on Rails.", "domain": ["web-development", "backend", "developer-tools"], "enriched": true, "function": ["message-queue", "scheduling", "web-framework", "developer-tools"], "health_score": 99, "homepage": "https://goodjob-demo.herokuapp.com/", "language": "Ruby", "license": "MIT", "license_family": "permissive", "maturity": "stable", "member_repos": ["bensheldon/good_job"], "name": "bensheldon/good_job", "platform": ["ruby"], "pushed_at": "2026-08-15T12:32:46+00:00", "repo": "bensheldon/good_job", "stars": 2993, "tags": ["activejob", "job-queue", "background-jobs", "postgres", "cron", "web-dashboard", "multithreaded", "automation", "rails", "postgresql"], "topics": ["ruby-on-rails", "activejob", "activejob-backend", "multithreaded", "rails", "hacktoberfest", "ruby"], "urls": [], "use_cases": ["run background jobs in a Rails app using Postgres as the queue", "schedule recurring cron-like jobs in Rails", "replace Sidekiq or Delayed::Job without adding Redis", "manage and retry failed background jobs from a web dashboard", "control job concurrency and throttling per job class", "process up to a million jobs per day with a simple setup"], "what_it_is": "GoodJob is a multithreaded, Postgres-based Active Job backend for Ruby on Rails. It stores jobs in Postgres, uses advisory locks and LISTEN/NOTIFY for run-once safety and low latency, and includes cron scheduling, batches, concurrency controls, and a web dashboard.", "when_to_avoid": ["you don't use Ruby on Rails or Active Job", "your database is not PostgreSQL", "you need extremely high throughput beyond millions of jobs per day or specialized queue features", "you already run Redis and prefer Sidekiq's ecosystem"], "when_to_choose": ["your Rails app already uses Postgres and you want to avoid extra infrastructure like Redis", "you want full Active Job compatibility with queues, delays, priorities, and retries", "you need cron scheduling, batches, and a built-in monitoring dashboard", "you prefer a lightweight setup runnable inside the web process or a separate CLI process"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/good_job", "repo": "bensheldon/good_job", "role": "main", "score": 96}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:07:36.027085+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T07:30:51.226482+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "dba687e159879bad2daebebaf104bdbd379e45445fea085fa161c8c91bde2280", "fetched_at": "2026-08-28T04:07:36.027085+00:00", "kind": "readme", "missing": false, "url": "https://github.com/bensheldon/good_job"}, {"content_hash": "654471e98593e04bd6f0ded27abc3c3018ef9eb3c8af75d93a1fcfaab1968613", "fetched_at": "2026-08-29T09:46:13.428399+00:00", "kind": "homepage", "missing": false, "url": "https://goodjob-demo.herokuapp.com/"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:07:36.027085+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T07:30:51.226482+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "dba687e159879bad2daebebaf104bdbd379e45445fea085fa161c8c91bde2280", "fetched_at": "2026-08-28T04:07:36.027085+00:00", "kind": "readme", "missing": false, "url": "https://github.com/bensheldon/good_job"}, {"content_hash": "654471e98593e04bd6f0ded27abc3c3018ef9eb3c8af75d93a1fcfaab1968613", "fetched_at": "2026-08-29T09:46:13.428399+00:00", "kind": "homepage", "missing": false, "url": "https://goodjob-demo.herokuapp.com/"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T07:30:51.226482+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "dba687e159879bad2daebebaf104bdbd379e45445fea085fa161c8c91bde2280", "fetched_at": "2026-08-28T04:07:36.027085+00:00", "kind": "readme", "missing": false, "url": "https://github.com/bensheldon/good_job"}, {"content_hash": "654471e98593e04bd6f0ded27abc3c3018ef9eb3c8af75d93a1fcfaab1968613", "fetched_at": "2026-08-29T09:46:13.428399+00:00", "kind": "homepage", "missing": false, "url": "https://goodjob-demo.herokuapp.com/"}], "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:36.027085+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:07:36.027085+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:07:36.027085+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T07:30:51.226482+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "dba687e159879bad2daebebaf104bdbd379e45445fea085fa161c8c91bde2280", "fetched_at": "2026-08-28T04:07:36.027085+00:00", "kind": "readme", "missing": false, "url": "https://github.com/bensheldon/good_job"}, {"content_hash": "654471e98593e04bd6f0ded27abc3c3018ef9eb3c8af75d93a1fcfaab1968613", "fetched_at": "2026-08-29T09:46:13.428399+00:00", "kind": "homepage", "missing": false, "url": "https://goodjob-demo.herokuapp.com/"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:07:36.027085+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:07:36.027085+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T07:30:51.226482+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "dba687e159879bad2daebebaf104bdbd379e45445fea085fa161c8c91bde2280", "fetched_at": "2026-08-28T04:07:36.027085+00:00", "kind": "readme", "missing": false, "url": "https://github.com/bensheldon/good_job"}, {"content_hash": "654471e98593e04bd6f0ded27abc3c3018ef9eb3c8af75d93a1fcfaab1968613", "fetched_at": "2026-08-29T09:46:13.428399+00:00", "kind": "homepage", "missing": false, "url": "https://goodjob-demo.herokuapp.com/"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:07:36.027085+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:07:36.027085+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:07:36.027085+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T07:30:51.226482+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "dba687e159879bad2daebebaf104bdbd379e45445fea085fa161c8c91bde2280", "fetched_at": "2026-08-28T04:07:36.027085+00:00", "kind": "readme", "missing": false, "url": "https://github.com/bensheldon/good_job"}, {"content_hash": "654471e98593e04bd6f0ded27abc3c3018ef9eb3c8af75d93a1fcfaab1968613", "fetched_at": "2026-08-29T09:46:13.428399+00:00", "kind": "homepage", "missing": false, "url": "https://goodjob-demo.herokuapp.com/"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:07:36.027085+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:07:36.027085+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T07:30:51.226482+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "dba687e159879bad2daebebaf104bdbd379e45445fea085fa161c8c91bde2280", "fetched_at": "2026-08-28T04:07:36.027085+00:00", "kind": "readme", "missing": false, "url": "https://github.com/bensheldon/good_job"}, {"content_hash": "654471e98593e04bd6f0ded27abc3c3018ef9eb3c8af75d93a1fcfaab1968613", "fetched_at": "2026-08-29T09:46:13.428399+00:00", "kind": "homepage", "missing": false, "url": "https://goodjob-demo.herokuapp.com/"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T07:30:51.226482+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "dba687e159879bad2daebebaf104bdbd379e45445fea085fa161c8c91bde2280", "fetched_at": "2026-08-28T04:07:36.027085+00:00", "kind": "readme", "missing": false, "url": "https://github.com/bensheldon/good_job"}, {"content_hash": "654471e98593e04bd6f0ded27abc3c3018ef9eb3c8af75d93a1fcfaab1968613", "fetched_at": "2026-08-29T09:46:13.428399+00:00", "kind": "homepage", "missing": false, "url": "https://goodjob-demo.herokuapp.com/"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T07:30:51.226482+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "dba687e159879bad2daebebaf104bdbd379e45445fea085fa161c8c91bde2280", "fetched_at": "2026-08-28T04:07:36.027085+00:00", "kind": "readme", "missing": false, "url": "https://github.com/bensheldon/good_job"}, {"content_hash": "654471e98593e04bd6f0ded27abc3c3018ef9eb3c8af75d93a1fcfaab1968613", "fetched_at": "2026-08-29T09:46:13.428399+00:00", "kind": "homepage", "missing": false, "url": "https://goodjob-demo.herokuapp.com/"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T07:30:51.226482+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "dba687e159879bad2daebebaf104bdbd379e45445fea085fa161c8c91bde2280", "fetched_at": "2026-08-28T04:07:36.027085+00:00", "kind": "readme", "missing": false, "url": "https://github.com/bensheldon/good_job"}, {"content_hash": "654471e98593e04bd6f0ded27abc3c3018ef9eb3c8af75d93a1fcfaab1968613", "fetched_at": "2026-08-29T09:46:13.428399+00:00", "kind": "homepage", "missing": false, "url": "https://goodjob-demo.herokuapp.com/"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 97, "longevity": 100, "rhythm": 93}, "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": 2382, "days_push": 18, "days_rel": 45, "gap_med": 13.0, "n_releases_24m": 39}, "score": 96, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}