From 633c6e0b917cb68ee9b81dacee2fa1285b45843f Mon Sep 17 00:00:00 2001 From: Yax Date: Sun, 18 Jan 2026 17:41:33 +0100 Subject: [PATCH] Add live reload support for local development Replace static HTTP server with livereload-based dev server that watches posts/, layout/, and static/ directories for changes, rebuilds the site, and auto-refreshes the browser. --- Makefile | 8 ++++---- devserver.py | 25 +++++++++++++++++++++++++ pyproject.toml | 1 + 3 files changed, 30 insertions(+), 4 deletions(-) create mode 100644 devserver.py diff --git a/Makefile b/Makefile index 205412b..b3a5039 100644 --- a/Makefile +++ b/Makefile @@ -3,14 +3,14 @@ # declare phony targets .PHONY: build test typecheck -# run locally (uses --local-stacosys if stacosys is running on port 8100) +# run locally with live reload (uses --local-stacosys if stacosys is running on port 8100) +# watches posts/ for changes, regenerates site, and auto-refreshes browser site: @if curl -s --connect-timeout 1 http://127.0.0.1:8100/api > /dev/null 2>&1; then \ - uv run python makesite.py --local-stacosys; \ + uv run python devserver.py --local-stacosys; \ else \ - uv run python makesite.py --local; \ + uv run python devserver.py --local; \ fi - cd _site && python -m SimpleHTTPServer 2> /dev/null || python3 -m http.server # run type checks typecheck: diff --git a/devserver.py b/devserver.py new file mode 100644 index 0000000..c2e7d64 --- /dev/null +++ b/devserver.py @@ -0,0 +1,25 @@ +#!/usr/bin/env python3 +"""Development server with live reload.""" + +import subprocess +import sys + +from livereload import Server + + +def rebuild(flag): + subprocess.run(["uv", "run", "python", "makesite.py", flag]) + + +def main(): + flag = sys.argv[1] if len(sys.argv) > 1 else "--local" + rebuild(flag) + server = Server() + server.watch("posts/**/*.md", lambda: rebuild(flag)) + server.watch("layout/*.html", lambda: rebuild(flag)) + server.watch("static/**/*", lambda: rebuild(flag)) + server.serve(root="_site", port=8000, open_url_delay=1) + + +if __name__ == "__main__": + main() diff --git a/pyproject.toml b/pyproject.toml index d36c24c..98e0a37 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -17,6 +17,7 @@ dependencies = [ [dependency-groups] dev = [ "black>=24.10.0", + "livereload>=2.7.1", "mypy>=1.19.1", "types-pygments>=2.19.0.20251121", "types-requests>=2.32.4.20260107",