diff --git a/src/app.lisp b/src/app.lisp
new file mode 100644
index 0000000..03cc600
--- /dev/null
+++ b/src/app.lisp
@@ -0,0 +1,15 @@
+(defpackage #:hp/app
+  (:use #:cl)
+  (:local-nicknames (#:routes #:hp/routes/*))
+  (:import-from #:lack)
+  (:export #:*app*))
+(in-package #:hp/app)
+
+(defparameter *app*
+  (lack:builder (:static
+                 :path "/static/"
+                 :root (asdf:system-relative-pathname :hp "static/"))
+                routes:*index-app*))
+
+; for clackup cmd
+*app*
diff --git a/src/main.lisp b/src/main.lisp
index c354ca1..22e8a42 100644
--- a/src/main.lisp
+++ b/src/main.lisp
@@ -2,29 +2,24 @@
   (:nicknames #:hp/main)
   (:use #:cl)
   (:import-from #:clack)
-  (:import-from #:lack)
-  (:local-nicknames (#:pages #:hp/pages/**/*))
-  (:export #:start-app
-           #:stop-app))
+  (:import-from #:hp/app
+                #:*app*)
+  (:export #:start-server
+           #:stop-server))
 (in-package :hp)
 
-(defparameter *handler* nil)
+(defparameter *server* nil)
 
-(defun start-app ()
-  (unless *handler*
-    (setf *handler*
-          (clack:clackup (lack:builder
-                          (:static
-                           :path "/static/"
-                           :root (asdf:system-relative-pathname
-                                  :hp
-                                  "static/"))
-                          pages:*index-app*)
-                         :address "localhost"
-                         :port 3000))))
+(defun start-server ()
+  (if *server*
+      (format t "Server is already running.~%")
+      (setf *server* (clack:clackup *app*
+                                    :address "localhost"
+                                    :port 3000))))
 
-(defun stop-app ()
-  (when *handler*
-    (clack:stop *handler*)
-    (setf *handler* nil)
-    t))
+(defun stop-server ()
+  (if *server*
+      (prog1 
+          (clack:stop *server*)
+        (setf *server* nil))
+      (format t "No servers running.~%")))
diff --git a/src/pages/index.lisp b/src/pages/index.lisp
deleted file mode 100644
index d0f8ad1..0000000
--- a/src/pages/index.lisp
+++ /dev/null
@@ -1,43 +0,0 @@
-(defpackage #:hp/pages/index
-  (:use #:cl)
-  (:local-nicknames (#:jg #:jingle))
-  (:local-nicknames (#:mk #:markup))
-  (:local-nicknames (#:ui #:hp/ui/*))
-  (:local-nicknames (#:utils #:hp/utils/*))
-  (:export #:*index-app*))
-(in-package #:hp/pages/index)
-
-(mk:enable-reader)
-
-(defparameter *counter* 0)
-
-(mk:deftag counter (&key id value)
-  <div id=id >,(progn value)</div>)
-
-(defun index-page (params)
-  (declare (ignore params))
-  (jg:with-html-response
-    (mk:write-html
-     <ui:layout>
-       <counter id="counter" value=*counter* /> 
-       <button hx-target="#counter" hx-post="/decrease"> - </button>
-       <button hx-target="#counter" hx-post="/increase"> + </button>
-     </ui:layout>)))
-
-(defun increase (params)
-  (declare (ignore params))
-  (jg:with-html-response
-    (mk:write-html <counter id="counter" value=(incf *counter*) />)))
-
-(defun decrease (params)
-  (declare (ignore params))
-  (jg:with-html-response
-    (mk:write-html <counter id= "counter" value=(decf *counter*) />)))
-
-(defparameter *index-app* (jg:make-app))
-
-(utils:register-routes
- *index-app*
- `((:method :GET  :path "/"         :handler ,#'index-page)
-   (:method :POST :path "/increase" :handler ,#'increase)
-   (:method :POST :path "/decrease" :handler ,#'decrease)))
diff --git a/src/routes/index.lisp b/src/routes/index.lisp
new file mode 100644
index 0000000..852b541
--- /dev/null
+++ b/src/routes/index.lisp
@@ -0,0 +1,30 @@
+(defpackage #:hp/routes/index
+  (:use #:cl)
+  (:local-nicknames (#:mk #:markup))
+  (:local-nicknames (#:jg #:jingle))
+  (:local-nicknames (#:ui #:hp/ui/*))
+  (:local-nicknames (#:utils #:hp/utils/*))
+  (:export #:*index-app*))
+(in-package #:hp/routes/index)
+
+(mk:enable-reader)
+
+;;; View
+
+(mk:deftag page ()
+  <ui:layout>
+    <h1>Hello HTMX from Common Lisp!</h1>
+  </ui:layout>)
+
+;;; Controller
+
+(defun index (params)
+  (declare (ignore params))
+  (jg:with-html-response
+    (mk:write-html <page />)))
+
+(defparameter *index-app* (jg:make-app))
+
+(utils:register-routes
+ *index-app*
+ `((:method :GET :path "/" :handler ,#'index)))