diff --git a/justfile b/justfile
index 58c3d1c..9ffac81 100644
--- a/justfile
+++ b/justfile
@@ -6,7 +6,7 @@ sync:
 
 freshdeps: deps sync
 
-lint: lint-ruff lint-django lint-woodpecker
+lint: lint-ruff lint-django lint-woodpecker lint-markdown
 
 lint-ruff:
   ruff check .
@@ -18,6 +18,9 @@ lint-django:
 lint-woodpecker:
   -woodpecker-cli lint .woodpecker/workflow.yaml
 
+lint-markdown:
+  pymarkdown scan .
+
 serve:
   python -m django runserver
 
diff --git a/requirements/dev.in b/requirements/dev.in
index 4a9c2d2..45f88d4 100644
--- a/requirements/dev.in
+++ b/requirements/dev.in
@@ -8,3 +8,4 @@ rich                  # pretty exceptions on dev/console
 ruff                  # linter
 uv                    # resolver for pip-compile-multi
 genbadge[tests,coverage]  # create badges from coverage reports and pytest
+pymarkdownlnt         # lint markdown files, note: it's "lnt" at the end, not "lint"
diff --git a/requirements/dev.txt b/requirements/dev.txt
index 6c6128c..e6b7f0f 100644
--- a/requirements/dev.txt
+++ b/requirements/dev.txt
@@ -1,4 +1,4 @@
-# SHA1:c1b1a9cb6cb941c70ba198b50670c6604e0daead
+# SHA1:0fe30e8de6a24fe0b1d50d82a23038919d203909
 #
 # This file is autogenerated by pip-compile-multi
 # To update, run:
@@ -6,11 +6,13 @@
 #    pip-compile-multi
 #
 -r test.txt
+application-properties==0.8.2
 asttokens==3.0.0
 build==1.2.2.post1
 certifi==2025.1.31
 charset-normalizer==3.4.1
 click==8.1.8
+columnar==1.4.1
 decorator==5.2.1
 defusedxml==0.7.1
 django-debug-toolbar==5.0.1
@@ -35,16 +37,20 @@ prompt-toolkit==3.0.50
 ptyprocess==0.7.0
 pure-eval==0.2.3
 pygments==2.19.1
+pymarkdownlnt==0.9.29
 pyproject-hooks==1.2.0
+pyyaml==6.0.2
 requests==2.32.3
 rich==13.9.4
 ruff==0.11.0
 setuptools==76.0.0
 stack-data==0.6.3
+tomli==2.2.1
+toolz==1.0.0
 toposort==1.10
 traitlets==5.14.3
 types-pyyaml==6.0.12.20241230
 urllib3==2.3.0
-uv==0.6.6
+uv==0.6.7
 wcwidth==0.2.13
 wheel==0.45.1