Встраивание действительно возможно как в интерфейсе Discourse (например, над списком тем) с использованием темы, так и с помощью плагина Landing Pages. Для последнего я подготовил пример, используя эту небольшую версию игры Dinosaur. Вы можете сыграть здесь: Pavilion (только для настольных компьютеров).

Для этого не потребовалось никакого программирования. Всё, что я сделал, — загрузил эти ресурсы на наш CDN (перетащил папку в «пространство» DigitalOcean), создал страницу с путём «dinosaur» и скопировал/вставил этот HTML (оба действия через административный интерфейс).
HTML
<div class="landing page dinosaur">
<div class="container">
<h1>Игра с динозавром!</h1>
<canvas id="game" height="200" width="800"></canvas>
<p class="controls">нажмите пробел, чтобы начать</p>
<script src="https://pavilion-assets.nyc3.digitaloceanspaces.com/dinosaur/js/helpers.js"></script>
<script src="https://pavilion-assets.nyc3.digitaloceanspaces.com/dinosaur/js/objects/game-object.js"></script>
<script src="https://pavilion-assets.nyc3.digitaloceanspaces.com/dinosaur/js/objects/cactus.js"></script>
<script src="https://pavilion-assets.nyc3.digitaloceanspaces.com/dinosaur/js/objects/dinosaur.js"></script>
<script src="https://pavilion-assets.nyc3.digitaloceanspaces.com/dinosaur/js/objects/background.js"></script>
<script src="https://pavilion-assets.nyc3.digitaloceanspaces.com/dinosaur/js/objects/score.js"></script>
<script src="https://pavilion-assets.nyc3.digitaloceanspaces.com/dinosaur/js/game.js"></script>
<script>
new Game({
el: document.getElementById("game")
});
window.onkeydown = function(e) {
return e.keyCode !== 32;
};
</script>
</div>
</div>
Плагин Landing Pages реализует настройки CSP и CORS Discourse, которые я уже настроил для обработки скриптов с нашего CDN (через соответствующие настройки сайта).
На следующей неделе я опубликую полную тему в базе знаний «Как размещать и встраивать ресурсы» для этого плагина, чтобы охватить этот случай использования.