1.8 KiB
Molodetz
Blog roll of the Molodetz community. Quiet, serif, slightly provocative. Posts are markdown in SQLite, written by retoor through an admin area. Flyers and memes are galleries. Join is a real sign-up form ("I'm in"). The whole site is in English; the old Dutch paths (/rol, /standaard, /mensen, /binnen, /voorwaarden) redirect with 301.
Built to the frozen DPP template (/workspace/dpp/dptemplate.md). See SELECTION.md for the module choice and COMPLIANCE.md for the review.
Running
make install # venv in .venv, pip install -e ".[dev]", Chromium, git hooks
cp .env.example .env # only when there is no .env yet; chmod 600 .env
make dev # http://127.0.0.1:8088, reload
make prod # workers, pinned static version
Without make:
.venv/bin/python -m uvicorn molodetz.main:app --host 127.0.0.1 --port 8088
The first start creates the administrator from MOLODETZ_ADMIN_USERNAME / MOLODETZ_ADMIN_EMAIL / MOLODETZ_ADMIN_PASSWORD in .env, seeds the placeholder posts once and syncs the gallery. A one-time migration (system.migrate.english) translates content seeded by older Dutch versions. Log in at /auth/login, admin at /admin.
Testing
make test # unit + api + e2e (Playwright, headless)
make test-headed # visible with slow motion
make check-ui # six static gates + em-dash + json_error order
make preflight # import, pyflakes, JS syntax, sqlglot lint, check-ui
make coverage
make locust-headless
CLI
molodetz --help: roles, API keys, posts list/import (.md and .pdf via pypdf), join requests, backups, prunes, sql-lint, emoji regenerate.
Data
Everything lives under data/ (database molodetz.db, uploads, backups, keys, locks). .env and data/ are in .gitignore.