How Jekyll Admin hooks into Jekyll

Jekyll Admin piggybacks on Jekyll’s built-in Webrick server. We monkey patch the jekyll serve command to hook in two Sinatra servers, one to serve the static front end that lives in lib/jekyll-admin/public/dist via /admin, and one to serve the Ruby API via /_api. Once the Sinatra servers are mounted, they work just like any other Jekyll server (and we rely on third-party plugins like sintra-json and sinatra-cross_origin).

How Jekyll Admin formats Jekyll objects for the API

Whenever possible, we want to stay as close to the to_liquid.to_json representation of Jekyll’s internal object structure as possible, so that we’re (A) using data structure that developers are used to, and (B) so that we can benefit from upstream improvements. To do this, we have the JekyllAdmin::APIable module, which gets included in native Jekyll objects like Pages and Documents to add a to_api method which we can call to generate hashes for use in the API.