diff --git a/components/app/windows/fav.vue b/components/app/windows/fav.vue
index 69ad887..d9a0fa1 100644
--- a/components/app/windows/fav.vue
+++ b/components/app/windows/fav.vue
@@ -1,9 +1,11 @@
 <script setup lang="ts">
 import BlurPageBeforeLogin from "~/components/blurPageBeforeLogin.vue";
 const { t } = useI18n();
+const { data: favData, error, pending } = useFetch("/api/user/fav", {});
 </script>
 <template>
   <BlurPageBeforeLogin>
-    <div></div>
+    <div>{{ favData }}</div>
+    <!--Testing only!!!-->
   </BlurPageBeforeLogin>
 </template>
diff --git a/docker-compose.yml b/docker-compose.yml
index 4ced30e..7ed175e 100755
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -1,4 +1,17 @@
 services:
+  reverse-proxy:
+    image: traefik:v3.1
+    command:
+      - "--providers.docker"
+      - "--providers.docker.exposedbydefault=false"
+      - "--entrypoints.web.address=:80"
+    ports:
+      - 127.0.0.1:36694:80
+    volumes:
+      - /var/run/docker.sock:/var/run/docker.sock
+    networks:
+      - web
+
   newsanalyze-service:
     image: ghcr.io/hpware/news-analyze:master
     healthcheck:
@@ -11,12 +24,11 @@ services:
     labels:
       - "traefik.enable=true"
       - "traefik.http.routers.newsanalyze.rule=Host(`news.yuanhau.com`)"
-      - "traefik.http.routers.newsanalyze.entrypoints=websecure"
-      - "traefik.http.routers.newsanalyze.tls=true"
-      - "traefik.http.routers.newsanalyze.tls.certresolver=myresolver"
       - "traefik.http.services.newsanalyze.loadbalancer.server.port=3000"
     restart: unless-stopped
+    deploy:
+      mode: replicated
+      replicas: 2
 
 networks:
   web:
-    external: true
diff --git a/pages/app/mobile/index.vue b/pages/app/mobile/index.vue
deleted file mode 100644
index df2eb98..0000000
--- a/pages/app/mobile/index.vue
+++ /dev/null
@@ -1,6 +0,0 @@
-<template>
-  <div class="justify-center align-center text-center">
-    <span class="text-6xl text-bold">目前沒有手機版本</span>
-    <span class="text-xl">請使用電腦版</span>
-  </div>
-</template>
diff --git a/pages/app/desktop/index.vue b/pages/desktop.vue
similarity index 99%
rename from pages/app/desktop/index.vue
rename to pages/desktop.vue
index 3bb1cc4..c3742fa 100644
--- a/pages/app/desktop/index.vue
+++ b/pages/desktop.vue
@@ -510,7 +510,7 @@ watchEffect((cleanupFn) => {
       </div>
     </div>
     <div class="flex flex-row gap-5">
-      <NuxtLink :to="localePath('/app/desktop?changelang=1', t('nextlang'))">
+      <NuxtLink :to="localePath('/desktop?changelang=1', t('nextlang'))">
         <button
           class="p-1 hover:text-blue-200 transition-all duration-100 hover:bg-gray-500 rounded selection:opacity-0"
         >
diff --git a/pages/home.vue b/pages/home.vue
index aef3aa3..37448eb 100644
--- a/pages/home.vue
+++ b/pages/home.vue
@@ -48,8 +48,8 @@ const cards = [
   {
     icon: GithubIcon,
     title: t("home.cards.title.opensource"),
-    description: t("home.cards.description.opensource")
-  }
+    description: t("home.cards.description.opensource"),
+  },
 ];
 
 const accordionItems = [
@@ -119,7 +119,7 @@ onMounted(() => {
         ></span
       ></span>
       <div class="flex flex-row justify-center align-center gap-0s">
-        <NuxtLink :to="localePath('/app/desktop')">
+        <NuxtLink :to="localePath('/desktop')">
           <button
             class="m-4 mr-1 ml-1 bg-[#8C9393] text-white p-3 rounded-[10px] bg-gradient-to-l from-sky-500 to-purple-600 transition-all duration-150 hover:transform hover:scale-105 hover:shadow-lg"
           >