饶(ráo), rich, abundant, fulfilled; 旅(lv̌/lǚ), trip, travel, journey.
A media content management site for articles, videos, photos, etc - built on topcoat and surrealdb — all Rust, single binary.
Demo: https://raolv.com
- topcoat — routing, rendering, sessions, SSE, Tailwind assets
- surrealdb — schemafull tables, created idempotently at startup
- i18n — locales compiled into the binary; root serves directly,
/{locale}paths; browser negotiation + cookie memory (en default, zh)
- Content types: articles, videos, photos, slides
- Media upload with ffmpeg HLS transcoding; orphaned media removed when content is deleted
- Topic tagging, author and admin management
- Sign in / sign up: Argon2id credentials, session + captcha, email activation
Requires stable Rust, a surrealdb instance, and topcoat source at ../tmp/topcoat (pull latest).
PORT=7700; topcoat dev # http://127.0.0.1:7700Config lives in .env (keys defined in src/common/config.rs).
Multi-stage Dockerfile; the topcoat path dependency is swapped to the GitHub main branch at build time.
docker build -t ghcr.io/zzy/raolv:latest .
docker compose up -d- Port
7700; uploads volume/root/raolv-uploads:/app/data/media - External network
surrealdb_net; server.envsetsDB_URLto the surrealdb container - nginx: no rewrites (locale negotiation is in-app), disable buffering, raise timeouts (SSE, video upload)