diff --git a/README.md b/README.md
index c693191..3fc6329 100644
--- a/README.md
+++ b/README.md
@@ -5,8 +5,8 @@ My homepage.
 ## Tech stack
 
 - [Common Lisp](https://lisp-lang.org/)
-- [jingle](https://github.com/dnaeon/cl-jingle): Web framework extending [ningle](https://github.com/fukamachi/ningle)
-- [ningle-fbr](https://github.com/skyizwhite/ningle-fbr): [ningle](https://github.com/fukamachi/ningle) plugin for file-based routing
+- [jingle](https://github.com/dnaeon/cl-jingle): Web framework based on [ningle](https://github.com/fukamachi/ningle)
+- [ningle-fbr](https://github.com/skyizwhite/ningle-fbr): ningle plugin for file-based routing
 - [piccolo](https://github.com/skyizwhite/piccolo): HTML generator
 - [HTMX](https://htmx.org/): high power tools for HTML
 - [Alpine.js](https://alpinejs.dev/): rugged, minimal tool for composing behavior directly in markup
diff --git a/package-lock.json b/package-lock.json
index 12e7633..d380827 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -8,6 +8,9 @@
       "name": "hp",
       "version": "0.0.0",
       "dependencies": {
+        "@alpinejs/anchor": "^3.13.5",
+        "@alpinejs/intersect": "^3.13.5",
+        "@alpinejs/persist": "^3.13.5",
         "alpinejs": "^3.13.5",
         "htmx.org": "^1.9.10"
       },
@@ -31,6 +34,21 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
+    "node_modules/@alpinejs/anchor": {
+      "version": "3.13.5",
+      "resolved": "https://registry.npmjs.org/@alpinejs/anchor/-/anchor-3.13.5.tgz",
+      "integrity": "sha512-SfCW3DvuO3dDZ0jyck/4TiGNAhGAml1htPpYDq7SolA11YQGYjhHCK7Tsi4kgOJAyseE7oV91AI+DCj9xMcPDw=="
+    },
+    "node_modules/@alpinejs/intersect": {
+      "version": "3.13.5",
+      "resolved": "https://registry.npmjs.org/@alpinejs/intersect/-/intersect-3.13.5.tgz",
+      "integrity": "sha512-wBveYNRuZoFFirRq4GmUx1JgD5/7S9b10l8Ps5wQJX/deiRXTY8f1Op0zVTkmIoHLpXyouSsOZz9/U/lPU3NZw=="
+    },
+    "node_modules/@alpinejs/persist": {
+      "version": "3.13.5",
+      "resolved": "https://registry.npmjs.org/@alpinejs/persist/-/persist-3.13.5.tgz",
+      "integrity": "sha512-nmULi5Kp/v5/h4FtGpqyzzMPlulc2fmQ+Olhk0NwTcBKSCZDg6OtXgS998rnHpcWO0jsjCmvXn/Pul2av7D8lA=="
+    },
     "node_modules/@esbuild/aix-ppc64": {
       "version": "0.19.12",
       "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz",
diff --git a/package.json b/package.json
index d3d28b8..a3a4f32 100644
--- a/package.json
+++ b/package.json
@@ -16,6 +16,9 @@
     "vite": "^5.1.4"
   },
   "dependencies": {
+    "@alpinejs/anchor": "^3.13.5",
+    "@alpinejs/intersect": "^3.13.5",
+    "@alpinejs/persist": "^3.13.5",
     "alpinejs": "^3.13.5",
     "htmx.org": "^1.9.10"
   }
diff --git a/src/js/main.js b/src/js/main.js
index 87e1b98..0bcdca9 100644
--- a/src/js/main.js
+++ b/src/js/main.js
@@ -1,8 +1,14 @@
 import './style.css'
 import HTMX from 'htmx.org'
 import Alpine from 'alpinejs'
+import anchor from '@alpinejs/anchor'
+import intersect from '@alpinejs/intersect'
+import persist from '@alpinejs/persist'
 
 window.htmx = HTMX;
 window.Alpine = Alpine
 
+Alpine.plugin(anchor)
+Alpine.plugin(intersect)
+Alpine.plugin(persist)
 Alpine.start()