Один бинарь на stdlib, ноль зависимостей: подкоманды serve, vapid, version; статика из embed с ETag и Cache-Control: no-cache; /healthz; заголовки безопасности ADR-021 на всех ответах, включая ошибки; лимит тела 32 КиБ. Путь в логе — в percent-форме: подделать строку журнала запросом нельзя. Ни IP, ни ника, ни query в логах нет. Клиент — знак «Скобы» и слово bare: без script-тегов, inline-стилей и внешних ресурсов. ADR-025: go:embed не выходит за каталог пакета, поэтому объявление статики живёт в корне модуля, а клиент остаётся в web/. ADR-026: 413 отдаётся кодом too_large, неподдерживаемый метод — 404; оба добавлены в перечень protocol.md. Сервер: пользователь bare, /opt/bare, /var/lib/bare, /etc/bare/env 0600, systemd-юнит, nginx с сертификатом certbot (плагин nginx, как у соседей). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015DbCjVfTFq4ZFG8juD45YJ
25 lines
727 B
HTML
25 lines
727 B
HTML
<!doctype html>
|
|
<html lang="ru">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<meta name="theme-color" content="#F7F5F0">
|
|
<title>bare</title>
|
|
<link rel="stylesheet" href="/app.css">
|
|
<link rel="manifest" href="/manifest.json">
|
|
<link rel="icon" href="/icons/icon.svg" type="image/svg+xml">
|
|
<link rel="apple-touch-icon" href="/icons/icon-180.png">
|
|
</head>
|
|
<body>
|
|
<main class="boot">
|
|
<svg class="mark" viewBox="0 0 64 64" fill="none" stroke="currentColor" stroke-width="7" aria-hidden="true">
|
|
<path d="M10 26V10h16"/>
|
|
<path d="M38 10h16v16"/>
|
|
<path d="M54 38v16H38"/>
|
|
<path d="M26 54H10V38"/>
|
|
</svg>
|
|
<span class="word">bare</span>
|
|
</main>
|
|
</body>
|
|
</html>
|