The background job renders the screenshot

No async. No JS.

class Website::RenditionJob < ApplicationJob
  def perform(cache)
    rendition = cache.build_rendition
    rendition.render!    # headless Chrome
    rendition.save!
  end
end
12 / 45