diff --git a/make/apkgs.mk b/make/apkgs.mk
index 5c5e586bbfa706726046f066423828256abfcc81..12179efdfce972ad2961caa83b3c7a2154f6dd61 100644
--- a/make/apkgs.mk
+++ b/make/apkgs.mk
@@ -1,13 +1,14 @@
+CONTENT_DIR ?= content
 APKG_TEST_DIR := test/build
 APKG_TEST_OK_FLAG := $(BUILD_PREFIX).apkg-test-ok
 APKG_TEST_FILES := $(shell find $(APKG_TEST_DIR) -name '*.py' -o -name '*.yaml' -o -name '*.html' -o -name '*.csv')
-CONTENT_FILES := $(shell find content -name '*.yaml' -o -name '*.csv' -o -name '*.apkg' -o -name '*.png')
+CONTENT_FILES := $(shell find $(CONTENT_DIR) -name '*.yaml' -o -name '*.csv' -o -name '*.apkg' -o -name '*.png')
 
 $(BUILD_PREFIX)apkgs.d.mk: $(filter %/.apkg-spec.yaml,$(CONTENT_FILES)) $(PYTHON_NEEDED)
 	-mkdir -p $(BUILD_PREFIX)
 	echo 'APKGS := \' > $@
 	$(PYTHON) build/export_apkgs.py --dry-run -t no \
-		-c content \
+		-c $(CONTENT_DIR) \
 		$(and $(BUILD_PREFIX),-o $(BUILD_PREFIX)) \
 	| tr "\n" " " \
 	>> $@
@@ -28,7 +29,7 @@ $(APKG_TEST_OK_FLAG): $(PYTHON_NEEDED) $(APKG_TEST_FILES)
 	touch $(APKG_TEST_OK_FLAG)
 
 .SECONDEXPANSION:
-APKG_CONTENT_DIR = content/$(subst -$(lastword $(subst -, ,$*)),,$*)
+APKG_CONTENT_DIR = $(CONTENT_DIR)/$(subst -$(lastword $(subst -, ,$*)),,$*)
 APKG_DEPS = $(filter $(APKG_CONTENT_DIR)/%,$(CONTENT_FILES))
 APKG_DEPS_SORTED = \
 $(filter %/.apkg-spec.yaml,$(APKG_DEPS)) \
diff --git a/make/node.mk b/make/node.mk
index a6060e2afbc327f3f728de88feb8fc0f559f00a8..b015b2bac81d13ec70ea34870d856ceb6408a3f3 100644
--- a/make/node.mk
+++ b/make/node.mk
@@ -10,7 +10,7 @@ ANNOUNCE := $(BUILD_PREFIX)build/announce/run
 BUILD_TS_SOURCES := $(shell find build -name '*.ts')
 COMPILED_BUILD_BINS := $(GEN_HANZI_DATA) $(ANNOUNCE)
 COMPILED_BUILD_JS := $(patsubst %.ts,$(BUILD_PREFIX)%.js, \
-	$(BUILD_TS_SOURCES))
+	$(BUILD_TS_SOURCES) $(SRC_COMMON_TS))
 
 TS_SRC += $(BUILD_TS_SOURCES)
 MOSTLY_CLEAN += $(COMPILED_BUILD_JS) $(COMPILED_BUILD_BINS)