← Back to portfolio

// case_study / ruby_gem

Pressroom Rails Engine

A mountable Ruby on Rails engine that adds block-based article publishing to an existing application without taking ownership of authentication, public routes or product styling.

Packagepressroom · MIT license
CompatibilityRuby 3.4+ · Rails 7.2, 8.0 and 8.1
DeliveryReusable engine published through RubyGems

01 / the product

Editorial tooling inside your Rails app.

Pressroom adds a block editor, article model, drafts, scheduled publication, categories, tags and RSS/Atom feeds to an existing Rails application. The host app keeps control of authentication, users and public URLs.

The block registry is the core abstraction: one Ruby definition drives the editor configuration, server-side rendering, sanitization and plain-text extraction for search.

02 / technology

A composable Rails engine.

  • Mountable Rails Engine with Active Record models, migrations, controllers and helpers.
  • Editor.js for block-based authoring, vendored through the gem and pinned with importmap.
  • Turbo and Stimulus included under private package names to avoid host-app collisions.
  • Sanitized HTML fields, escaped string fields and configurable allow-lists.
  • Built-in paragraph, header, nested list, quote, code, image and delimiter blocks.
  • RSS and Atom feed generation through the Ruby RSS library.
  • Authentication fails closed until the host application supplies an explicit hook.

03 / package surface

Designed for integration.

Pressroom exposes a small public API: configuration, block registration, post/category/tag models, feeds and the render_blocks helper. The package avoids imposing typography or product-level styling on the application that mounts it.

Pressroom RubyGems package page screenshot
RubyGems package page — technical distribution instead of a product UI · open full size ↗

04 / result

Reusable publishing infrastructure.

Pressroom packages a repeatable editorial foundation as a versioned dependency. It can be mounted into a SaaS, marketplace or content-heavy Rails product and extended with application-specific blocks.