diff --git a/Makefile b/Makefile
index 88584ac..8155e9d 100644
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,4 @@
-TAILWINDCSS_URL=https://github.com/tailwindlabs/tailwindcss/releases/latest/download/tailwindcss-macos-arm64
+TAILWIND_URL=https://github.com/tailwindlabs/tailwindcss/releases/latest/download/tailwindcss-macos-arm64
 TAILWIND_TARGET=tailwindcss-macos-arm64
 BIN_DIR=./bin
 TAILWIND_BIN=$(BIN_DIR)/tailwindcss
@@ -11,7 +11,7 @@ install: ## Download TailwindCSS binary and install other dependencies
 	@echo "Creating bin directory if it doesn't exist..."
 	mkdir -p $(BIN_DIR)
 	@echo "Downloading TailwindCSS binary..."
-	curl -sLO $(TAILWINDCSS_URL)
+	curl -sLO $(TAILWIND_URL)
 	@echo "Making TailwindCSS binary executable..."
 	chmod +x $(TAILWIND_TARGET)
 	@echo "Moving TailwindCSS binary to $(BIN_DIR)..."
@@ -32,4 +32,12 @@ help: ## Display available commands and their descriptions
 
 clean: ## Remove the bin directory and clean up generated files
 	@echo "Removing $(BIN_DIR)..."
-	rm -rf $(BIN_DIR)
\ No newline at end of file
+	rm -rf $(BIN_DIR)
+
+lem: ## Open Lem with TailwindCSS server
+	@echo "Starting make watch in background..."
+	@make watch > /dev/null 2>&1 & \
+	WATCH_PID=$$!; \
+	trap "kill $$WATCH_PID" SIGINT SIGTERM EXIT; \
+	lem; \
+	kill $$WATCH_PID
\ No newline at end of file
diff --git a/src/app.lisp b/src/app.lisp
index ace2fd6..39e40ae 100644
--- a/src/app.lisp
+++ b/src/app.lisp
@@ -11,8 +11,6 @@
 (defparameter *app* (jg:make-app :address "localhost"
                                  :port env:*port*))
 
-(jg:clear-middlewares *app*)
-(jg:clear-routing-rules *app*)
 (fbr:assign-routes *app* :system "hp" :directory "src/routes")
 (jg:install-middleware *app* mw:*recoverer*)
 (jg:install-middleware *app* mw:*path-normalizer*)
diff --git a/src/main.lisp b/src/main.lisp
index b334566..cd75331 100644
--- a/src/main.lisp
+++ b/src/main.lisp
@@ -10,16 +10,10 @@
            #:update))
 (in-package #:hp)
 
-(defparameter *watch-process* nil)
-
 (defun start ()
-  (when (env:dev-mode-p)
-    (setf *watch-process* (uiop:launch-program "make watch")))
   (jg:start *app*))
 
 (defun stop ()
-  (when (env:dev-mode-p)
-    (uiop:terminate-process *watch-process*))
   (jg:stop *app*))
 
 (defun update ()
diff --git a/src/renderer.lisp b/src/renderer.lisp
index d46a4dd..05b6d19 100644
--- a/src/renderer.lisp
+++ b/src/renderer.lisp
@@ -1,7 +1,8 @@
 (defpackage #:hp/renderer
   (:use #:cl
         #:hsx)
-  (:local-nicknames (#:jg #:jingle)))
+  (:local-nicknames (#:jg #:jingle))
+  (:local-nicknames (#:env #:hp/env)))
 (in-package #:hp/renderer)
 
 (defcomp document (&key title description children)
@@ -26,6 +27,8 @@
 
 (defmethod jg:process-response ((app jg:app) result)
   (jg:set-response-header :content-type "text/html; charset=utf-8")
+  (when (env:dev-mode-p)
+    (jg:set-response-header :cache-control "no-store"))
   (call-next-method app
                     (hsx:render-to-string
                      (if (listp result)
diff --git a/src/routes/index.lisp b/src/routes/index.lisp
index f7f4bc1..6ac54da 100644
--- a/src/routes/index.lisp
+++ b/src/routes/index.lisp
@@ -13,7 +13,7 @@
          open: false,
          get isOpen() { return this.open },
          toggle() { this.open = ! this.open },
-     }"
+       }"
        (button :@click "toggle()"
          "Toggle")
        (div :x-show "isOpen"