Plate

Set the table. Your way.
Plate fetches content from a Snackbox instance, renders Markdown to HTML, and serves the result through a Handlebars theme. It is a read-only consumer — no content management, no authentication, no admin interface.
Motivation
Content management and content presentation are different concerns. Snackbox manages the content; Plate renders it. This separation means the same content can be served by multiple presentation layers, operators can fully customize the appearance by swapping themes, and the presentation layer has no write access to content — shrinking the attack surface to read-only API calls.
Features
- Handlebars theme system with hot-reload — swap themes without restarting the server
- Markdown → sanitized HTML via the Remark/Rehype pipeline
- In-memory LRU cache for API responses with configurable TTL
- Prometheus metrics endpoint for observability
- Rate limiting and Content Security Policy out of the box
- Structured JSON logging via pino (pretty-print in development)
- Built-in Picnic theme — works out of the box, no configuration required
npx plateCLI — scaffold, validate, and preview themes without cloning the repository- RSS feed at
/feedand XML sitemap at/sitemap.xml(requiresSITE_URL) robots.txtserved automatically; includes aSitemap:directive whenSITE_URLis set
Getting started
Deploying Plate? See the Administrator Guide for Docker Compose and systemd deployment, full configuration reference, reverse proxy setup, and resource requirements.
Contributing or building locally? See the Developer Guide for setup, workflow, testing, and commit conventions.
Building a custom theme? See the Theme Developer Guide.
Documentation
| Document | Description |
|---|---|
| Administrator Guide | Deployment, configuration, reverse proxy, metrics |
| Developer Guide | Local setup, workflow, testing, releases |
| Architecture | System design, ports, application layers |
| Theme Developer Guide | Building and validating custom themes |
| Picnic | Built-in theme — screenshots, settings, design details |
| Contributing | How to contribute |
License
Except otherwise noted, all work is licensed under a BSD-3-Clause License.
Contact
- Mail: hello@cozybadger.de
- Page: cozybadger.de
- News: news.cozybadger.de
- Instagram: \@cozybadgerde
- LinkedIn: cozybadgerde