Boat Rudder
Home | Blog | Docs | About
Eng Light

Documentation

Everything you need to understand Boat Rudder, run it and change it. The pages are grouped by what you came here to do: get started, understand how it works, use it day to day, modify the source, or look something up.




Start here

New to Boat Rudder? These three pages take you from zero to a running server.

What is Boat Rudder
The retro-compatible CMS idea: one site served to every browser ever made, from WAP phones to HTML5.

Quick start
Clone, install the dependencies, compile and get the server answering on your machine.

Requirements and dependencies
C17, libsodium, the MongoDB C driver, ImageMagick, and the platforms Boat Rudder is known to build on.




Understand

The concepts behind the code. Read these before changing anything.

Epochs: one site, every browser
The five epochs, how the browser is detected from its User-Agent, and how each content block degrades instead of disappearing.

Architecture
Layers, the thread model, the directory tree and the security decisions that shape the server.

The life of a request
From accept() to the last byte written: listener, connection thread, router, renderer.

The content model
Entries, typed content blocks, categories, menu, languages and media — and how they fit together.

Templates and themes
The per-epoch template convention, the boat-rudder- CSS namespace and how a page is composed.




Use

Running the server and publishing content — for operators and editors.

Configuration
Every key in configs/settings.conf, what it does and what happens when you leave it out.

Build, run and deploy
The boat_rudder_builder.sh actions, debug and production modes, and installing as a systemd service.

HTTPS and certificates
Generating a local certificate for development and wiring a real one for production.

MongoDB: setup and backups
Starting the database, dumping it and restoring it with the bundled scripts.

The dashboard
Login, sessions, the Administrator and Author roles, and a tour of every admin screen.

Creating and editing content
The entry editor: metadata, header, blocks, drag-and-drop reordering, autosave and publishing.

The fourteen block types
What each block does, the extra field it carries, and how it looks on every epoch.

Media library and galleries
Uploading, organising in directories, the image optimizer and the public gallery route.

Categories, menu, languages and users
The four maintainer screens that shape navigation, translation and who may sign in.




Modify

Working on the source. Recipes and the rules that are not up for debate.

Map of the source tree
What lives in each folder under src/ and why it lives there.

C style guide and security rules
Naming, formatting, memory, strings, integers and the CERT checklist every change is reviewed against.

Adding a block type
Step by step: the public renderer, the editor form, and a template for each of the five epochs.

Adding a route or a module
Registering in the router, guarding it with a session role, and returning epoch-aware errors.

Working on epoch templates
Editing markup and CSS without breaking the retro epochs that have neither.




Reference

Look-up tables for when you already know what you are doing.

Route reference
Every public and dashboard route, its method and the guard in front of it.

Database collections
The shape of every MongoDB collection Boat Rudder reads and writes.

Roadmap and status
What is implemented today and what is still ahead.


Boat Rudder