A dynamic blog web server that replaced a Hugo + PHP setup. The server reads Markdown at startup and serves HTML on the fly — no static generation, no rebuilds. Edit a `.md` file and the site updates instantly via hot reload.
One binary contains everything: the blog, OAuth login, search, RSS/sitemap, and static file serving. The only local database (SQLite) is used for the page view counter, sessions, and login audit.
Contents
In short
- Dynamic rendering. Markdown is read at startup; pages are built at request time.
- Two languages out of the box. Russian and English:
/for the primary language,/{lang}/for the rest. - Plugin system and shortcodes. Plugins across several hook categories (markdown, render, tera, middleware, shortcode); shortcodes use
{load:name;params}. - OAuth without PHP. Google and Yandex plus a dev-only mock provider for offline login testing, CSRF via constant-time comparison, JWT sessions.
- Built-in search. Server-side scoring with
<mark>snippets and in-text highlighting. - Warmup and HTML cache. Fully rendered pages are cached (LRU) for anonymous visitors;
--warmup/warmup_enabledpre-warm the cache at startup,/debug/warmupmanually. - Security and operations. Rate limiting, CSP + security headers, gzip/brotli, IP-restricted
/debugand/metrics, TLS (file/self-signed/Let's Encrypt), graceful degradation. - Tests and quality. Unit + integration tests, ≥90% line coverage,
cargo clippy -D warnings— zero warnings.
License
A personal project (ALXPRO.RU).