diff --git a/index.html b/public/index.html
similarity index 100%
rename from index.html
rename to public/index.html
diff --git a/wrangler.toml b/wrangler.toml
index 1e00054..9956f95 100644
--- a/wrangler.toml
+++ b/wrangler.toml
@@ -7,9 +7,9 @@ name = "portfolio"
# Set this to the date you first deploy; Wrangler uses it to pin runtime behavior.
compatibility_date = "2026-09-17"
-# Serves every file in this directory as a static asset. Since index.html sits
-# at the repo root, "." works; move it into e.g. "./public" and update this if
-# you'd rather keep the repo root clean.
+# Serves every file in this directory as a static asset. Kept in ./public
+# (rather than the repo root) so that node_modules created by `npm install`
+# during CI deploys is never picked up as a site asset.
[assets]
-directory = "."
+directory = "./public"
not_found_handling = "404-page"