diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..1f106fd
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+/dst/
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..4b63d7c
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,62 @@
+EMIT_ASSETS := index.html 404.html info.html \
+ styles.css icons.css \
+ countdown.js theme.js theme.js \
+ stallman.webp stallman_2024.webp
+SEARCH_REPLACE := lib/search_and_replace/target/release/search_and_replace
+COMPONENTS := head.html header.html nav.html footer.html
+
+.PHONY: build
+build: $(EMIT_ASSETS:%=dst/cz/%) $(EMIT_ASSETS:%=dst/en/%) dst/favicon.ico
+
+.PHONY: clean
+clean:
+ rm -rf dst
+
+$(SEARCH_REPLACE): $(shell find lib/search_and_replace/src)
+ cd lib/search_and_replace && cargo build --release
+
+define make_page
+ cat $(1) | \
+ $(SEARCH_REPLACE) \
+ '' "$$(cat components/$(3)/head.html)" \
+ '' "$$(cat components/$(3)/header.html)" \
+ '' "$$(cat components/$(3)/nav.html)" \
+ '' "$$(cat components/$(3)/footer.html)" \
+ > $(2)
+endef
+
+dst/cz/%.html: cz_%.html $(SEARCH_REPLACE) $(COMPONENTS:%=components/cz/%)
+ @mkdir -p $(@D)
+ $(call make_page,$<,$@,cz)
+
+dst/cz/%.css: %.css
+ @mkdir -p $(@D)
+ ln -f $< $@
+
+dst/cz/%.js: js/%.js
+ @mkdir -p $(@D)
+ ln -f $< $@
+
+dst/cz/%.webp: images/%.jpg
+ @mkdir -p $(@D)
+ magick $< $@
+
+dst/en/%.html: en_%.html $(SEARCH_REPLACE) $(COMPONENTS:%=components/en/%)
+ @mkdir -p $(@D)
+ $(call make_page,$<,$@,en)
+
+dst/en/%.css: %.css
+ @mkdir -p $(@D)
+ ln -f $< $@
+
+dst/en/%.js: js/%.js
+ @mkdir -p $(@D)
+ ln -f $< $@
+
+dst/en/%.webp: images/%.jpg
+ @mkdir -p $(@D)
+ magick $< $@
+
+dst/favicon.ico: images/favicon.ico
+ @mkdir -p $(@D)
+ ln -f $< $@
diff --git a/components/footer.html b/components/cz/footer.html
similarity index 60%
rename from components/footer.html
rename to components/cz/footer.html
index f4450f9..c603285 100644
--- a/components/footer.html
+++ b/components/cz/footer.html
@@ -1,5 +1,3 @@
-
diff --git a/components/head.html b/components/cz/head.html
similarity index 88%
rename from components/head.html
rename to components/cz/head.html
index 4d5b9ce..16cf667 100644
--- a/components/head.html
+++ b/components/cz/head.html
@@ -4,5 +4,4 @@
-
-
+
diff --git a/components/header.html b/components/cz/header.html
similarity index 99%
rename from components/header.html
rename to components/cz/header.html
index 34d201a..8daad3e 100644
--- a/components/header.html
+++ b/components/cz/header.html
@@ -4,4 +4,3 @@
-
diff --git a/components/nav.html b/components/cz/nav.html
similarity index 99%
rename from components/nav.html
rename to components/cz/nav.html
index 2031e81..6ecb7b1 100644
--- a/components/nav.html
+++ b/components/cz/nav.html
@@ -6,4 +6,3 @@