diff --git a/src/components/header.lisp b/src/components/header.lisp
new file mode 100644
index 0000000..82bbef8
--- /dev/null
+++ b/src/components/header.lisp
@@ -0,0 +1,28 @@
+(defpackage #:hp/components/header
+  (:use #:cl
+        #:hsx)
+  (:import-from #:jingle
+                #:request-uri)
+  (:export #:~header))
+(in-package #:hp/components/header)
+
+(defparameter *nav-menu*
+  '(("/bio" "bio")
+    ("/work" "work")
+    ("/blog" "blog")))
+
+(defcomp ~header ()
+  (hsx
+   (header :class "flex justify-between pb-2 md:pb-4 border-b-1"            
+     (h1 :class "text-2xl md:text-3xl font-bold"
+       (a :href "/"
+         "skyizwhite"))
+     (nav :class "flex items-end"
+       (ul :preload "mouseover" :class "flex gap-4 text-lg"
+         (loop
+           :for (href label) :in *nav-menu* :collect
+              (if (search href (request-uri jingle:*request*))
+                  (hsx (li :class "text-pink-500"
+                         label))
+                  (hsx (li (a :href href :class "underline hover:text-pink-500"
+                             label))))))))))
diff --git a/src/ui/layout.lisp b/src/components/layout.lisp
similarity index 56%
rename from src/ui/layout.lisp
rename to src/components/layout.lisp
index ea14831..fadd874 100644
--- a/src/ui/layout.lisp
+++ b/src/components/layout.lisp
@@ -1,21 +1,16 @@
-(defpackage #:hp/ui/layout
+(defpackage #:hp/components/layout
   (:use #:cl
         #:hsx)
   (:import-from #:hp/lib/metadata
                 #:~metadata)
-  (:import-from #:jingle
-                #:request-uri)
+  (:import-from #:hp/components/header
+                #:~header)
   (:export #:~layout))
-(in-package #:hp/ui/layout)
+(in-package #:hp/components/layout)
 
 (defun bust-cache (url)
   (format nil "~a?v=~a" url #.(get-universal-time)))
 
-(defparameter *nav-menu*
-  '(("/bio" "bio")
-    ("/work" "work")
-    ("/blog" "blog")))
-
 (defcomp ~layout (&key metadata children)
   (hsx
    (html :lang "ja"
@@ -40,27 +35,11 @@
      (body
        :hx-ext "head-support, response-targets, preload"
        :hx-boost "true" :hx-target-404 "body" :hx-target-5* "body"
-       :class (<>
-                "h-[100svh] flex flex-col bg-[url(/img/bg.webp)] bg-cover bg-center "
-                "p-2 md:p-8")
-       (div :class (<> 
-                     "bg-amber-50/90 flex flex-col flex-1 w-full max-w-[700px] overflow-hidden  shadow-sm "
-                     "px-2 pt-2 mx-auto md:px-8 md:pt-8")
-         (header :class "flex justify-between pb-2 md:pb-4 border-b-1"
-           (h1 :class "text-2xl md:text-3xl font-bold"
-             (a :href "/"
-               "skyizwhite"))
-           (nav :class "flex items-end"
-             (ul
-               :preload "mouseover"
-               :class "flex gap-4 text-lg"
-               (loop
-                 :for (href label) :in *nav-menu*
-                 :collect
-                    (if (search href (request-uri jingle:*request*))
-                        (hsx (li :class "text-pink-500"
-                               label))
-                        (hsx (li (a :href href :class "underline hover:text-pink-500"
-                                   label))))))))
-         (main :class "flex-1 pt-2 pb-4 md:pt-4 md:pb-8 overflow-y-scroll "
-           children))))))
+       :class (<> 
+                "bg-amber-50 flex flex-col h-[100svh] w-full max-w-[700px] "
+                "p-2 md:pt-6 mx-auto")
+       (~header)
+       (main :class "flex-1 px-2 py-6 md:px-4 md:py-8 overflow-y-scroll"
+         children)
+       (footer :class "flex p-2 justify-center text-sm border-t-1"
+         (p "© 2025 Akira Tempaku"))))))
diff --git a/src/renderer.lisp b/src/renderer.lisp
index 23742cf..8d26ca9 100644
--- a/src/renderer.lisp
+++ b/src/renderer.lisp
@@ -9,7 +9,7 @@
   (:import-from #:hp/lib/env
                 #:hp-url
                 #:hp-env)
-  (:import-from #:hp/ui/layout
+  (:import-from #:hp/components/layout
                 #:~layout))
 (in-package #:hp/renderer)
 
diff --git a/src/ui/.keep b/src/ui/.keep
deleted file mode 100644
index e69de29..0000000
diff --git a/tailwind.config.js b/tailwind.config.js
index e7772f0..738e1dd 100644
--- a/tailwind.config.js
+++ b/tailwind.config.js
@@ -3,7 +3,7 @@ module.exports = {
   content: [
     "./src/renderer.lisp",
     "./src/routes/**/*.lisp",
-    "./src/ui/**/*.lisp",
+    "./src/components/**/*.lisp",
   ],
   theme: {
     container: {