No release in over 3 years
Drop-in theme that refreshes the MissionControl::Jobs UI with refined typography, an emerald color palette, and JSON syntax highlighting. Zero configuration — works via Rack middleware without overriding views.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
 Dependencies

Runtime

 Project Readme

MissionControl::Jobs::Theme

CI Gem Version License: MIT

A drop-in visual theme for MissionControl::Jobs — emerald color palette, refined typography, and JSON syntax highlighting. No view overrides, no asset pipeline dependency — just Rack middleware that injects a stylesheet into HTML responses.

Screenshots

Jobs list

Jobs list

Job details

Job page

Worker overview

Worker page

Requirements

Note: Tested with Ruby 3.4, Rails 8.1, and mission_control-jobs 1.1. Earlier versions may work but are not part of the test matrix yet.

Installation

Add to your Gemfile:

gem "mission_control-jobs-theme"

Then run:

bundle install

The theme is active immediately — no configuration required.

How it works

The gem inserts Rack middleware that intercepts HTML responses from the MissionControl::Jobs engine and injects a custom stylesheet (plus optional PrismJS syntax highlighting) before </head>. Assets are served via Rack::Static independently of the host app's asset pipeline — no Propshaft or Sprockets integration required. The CSS overrides Bulma variables and component styles, so the theme stays functional even if upstream markup changes.

Configuration

To customize the defaults, generate an initializer:

bin/rails generate mission_control:jobs:theme:install

This creates config/initializers/mission_control_jobs_theme.rb:

MissionControl::Jobs::Theme.configure do |config|
  # Mount path for MissionControl::Jobs::Engine (auto-discovered by default)
  # config.mount_path = "/jobs"

  # PrismJS syntax highlighting for JSON blocks on detail pages
  # config.syntax_highlighting = true
end
Option Default Description
mount_path nil (auto-discovered) Override the path where MissionControl::Jobs::Engine is mounted. When nil, the gem walks Rails.application.routes to find it automatically, falling back to /jobs.
syntax_highlighting true Enable PrismJS JSON syntax highlighting on job detail pages. Set to false to inject only the CSS theme.

Compatibility

  • Designed for MissionControl::Jobs 1.1+ which uses Bulma for its UI. The theme overrides Bulma variables and component styles.
  • Works with Propshaft and Sprockets — the gem serves its own assets via Rack::Static and does not depend on the host app's asset pipeline.
  • Turbo Drive and Turbo Stream responses pass through without modification.
  • Tested with Solid Queue. Resque should mostly work since the theme is CSS-only, but some adapter-specific views may not be fully styled yet.

Troubleshooting

Theme not appearing

  1. Verify the middleware is loaded — check that MissionControl::Jobs::Theme::Middleware appears in bin/rails middleware output.
  2. Check mount path detection in the console:
    MissionControl::Jobs::Theme::RouteDiscovery.discover(Rails.application.routes)
    If it returns an unexpected path, set config.mount_path explicitly in the initializer.
  3. Ensure the engine is mounted in config/routes.rb:
    mount MissionControl::Jobs::Engine, at: "/jobs"

Apps served under a sub-URI

If your Rails app is deployed under a prefix such as /internal, the /mission_control/... asset URLs injected by the middleware will not include the prefix. Sub-URI support is not yet available.

Stale assets after upgrade

Theme assets are served with immutable cache headers (1-year max-age). After upgrading the gem, browsers may serve stale files. Hard-refresh (Ctrl+Shift+R) or clear the browser cache.

Contributing

Contributions of any kind are appreciated — whether it's a bug report, feature idea, or pull request. Feel free to open an issue or submit a PR.

bin/setup                 # Install dependencies
bundle exec rspec         # Run the test suite
bundle exec rubocop       # Run the linter
bin/console               # Interactive prompt

License

The gem is available as open source under the terms of the MIT License.

This gem bundles the following third-party assets:

  • Albert Sans — SIL Open Font License 1.1 (vendor/assets/mission_control/fonts/Albert_Sans/OFL.txt)
  • Archivo Narrow — SIL Open Font License 1.1 (vendor/assets/mission_control/fonts/Archivo_Narrow/OFL.txt)
  • PrismJS — MIT License