diff --git a/.vscode/settings.json b/.vscode/settings.json
index 8917ea2b3..d7ba09eae 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -1,4 +1,5 @@
 {
   "go.lintOnSave": "workspace",
-  "go.lintTool": "golangci-lint"
+  "go.lintTool": "golangci-lint",
+  "go.inferGopath": false
 }
diff --git a/docker-compose.uffizzi.yml b/docker-compose.uffizzi.yml
index 42b0bb8f1..e232eef4f 100644
--- a/docker-compose.uffizzi.yml
+++ b/docker-compose.uffizzi.yml
@@ -11,7 +11,7 @@ services:
     image: "${MEMOS_IMAGE}"
     volumes:
       - memos_volume:/var/opt/memos
-    command: ["--mode", "dev"]
+    command: ["--mode", "demo"]
 
 volumes:
   memos_volume:
diff --git a/server/profile/profile.go b/server/profile/profile.go
index 0e1c8fe84..3ef9f7f88 100644
--- a/server/profile/profile.go
+++ b/server/profile/profile.go
@@ -12,7 +12,7 @@ import (
 
 // Profile is the configuration to start main server.
 type Profile struct {
-	// Mode can be "prod" or "dev"
+	// Mode can be "prod" or "dev" or "demo"
 	Mode string `json:"mode"`
 	// Port is the binding port for server
 	Port int `json:"-"`
@@ -47,13 +47,13 @@ func checkDSN(dataDir string) (string, error) {
 // GetDevProfile will return a profile for dev or prod.
 func GetProfile() (*Profile, error) {
 	profile := Profile{}
-	flag.StringVar(&profile.Mode, "mode", "dev", "mode of server")
+	flag.StringVar(&profile.Mode, "mode", "demo", "mode of server")
 	flag.IntVar(&profile.Port, "port", 8081, "port of server")
 	flag.StringVar(&profile.Data, "data", "", "data directory")
 	flag.Parse()
 
-	if profile.Mode != "dev" && profile.Mode != "prod" {
-		profile.Mode = "dev"
+	if profile.Mode != "dev" && profile.Mode != "prod" && profile.Mode != "demo" {
+		profile.Mode = "demo"
 	}
 
 	if profile.Mode == "prod" && profile.Data == "" {
diff --git a/server/version/version.go b/server/version/version.go
index c1e3ee26b..2df704de9 100644
--- a/server/version/version.go
+++ b/server/version/version.go
@@ -15,7 +15,7 @@ var Version = "0.10.3"
 var DevVersion = "0.10.3"
 
 func GetCurrentVersion(mode string) string {
-	if mode == "dev" {
+	if mode == "dev" || mode == "demo" {
 		return DevVersion
 	}
 	return Version
diff --git a/store/activity.go b/store/activity.go
index 2ebd94a75..caae9cb2a 100644
--- a/store/activity.go
+++ b/store/activity.go
@@ -38,7 +38,7 @@ func (raw *activityRaw) toActivity() *api.Activity {
 
 // CreateActivity creates an instance of Activity.
 func (s *Store) CreateActivity(ctx context.Context, create *api.ActivityCreate) (*api.Activity, error) {
-	if s.profile.Mode != "dev" {
+	if s.profile.Mode == "prod" {
 		return nil, nil
 	}
 
diff --git a/store/db/db.go b/store/db/db.go
index 2a9d4e9ea..279b22db6 100644
--- a/store/db/db.go
+++ b/store/db/db.go
@@ -49,17 +49,7 @@ func (db *DB) Open(ctx context.Context) (err error) {
 	}
 	db.DBInstance = sqliteDB
 
-	if db.profile.Mode == "dev" {
-		// In dev mode, we should migrate and seed the database.
-		if _, err := os.Stat(db.profile.DSN); errors.Is(err, os.ErrNotExist) {
-			if err := db.applyLatestSchema(ctx); err != nil {
-				return fmt.Errorf("failed to apply latest schema: %w", err)
-			}
-			if err := db.seed(ctx); err != nil {
-				return fmt.Errorf("failed to seed: %w", err)
-			}
-		}
-	} else {
+	if db.profile.Mode == "prod" {
 		// If db file not exists, we should migrate the database.
 		if _, err := os.Stat(db.profile.DSN); errors.Is(err, os.ErrNotExist) {
 			if err := db.applyLatestSchema(ctx); err != nil {
@@ -120,6 +110,19 @@ func (db *DB) Open(ctx context.Context) (err error) {
 				println(fmt.Sprintf("Failed to remove temp database file, err %v", err))
 			}
 		}
+	} else {
+		// In non-prod mode, we should migrate the database.
+		if _, err := os.Stat(db.profile.DSN); errors.Is(err, os.ErrNotExist) {
+			if err := db.applyLatestSchema(ctx); err != nil {
+				return fmt.Errorf("failed to apply latest schema: %w", err)
+			}
+			// In demo mode, we should seed the database.
+			if db.profile.Mode == "demo" {
+				if err := db.seed(ctx); err != nil {
+					return fmt.Errorf("failed to seed: %w", err)
+				}
+			}
+		}
 	}
 
 	return nil
diff --git a/web/src/pages/Auth.tsx b/web/src/pages/Auth.tsx
index 0cb772e6b..ae27e4fe7 100644
--- a/web/src/pages/Auth.tsx
+++ b/web/src/pages/Auth.tsx
@@ -26,8 +26,8 @@ const Auth = () => {
   const actionBtnLoadingState = useLoading(false);
   const { appearance, locale, systemStatus } = globalStore.state;
   const mode = systemStatus.profile.mode;
-  const [username, setUsername] = useState(mode === "dev" ? "demohero" : "");
-  const [password, setPassword] = useState(mode === "dev" ? "secret" : "");
+  const [username, setUsername] = useState(mode === "demo" ? "demohero" : "");
+  const [password, setPassword] = useState(mode === "demo" ? "secret" : "");
   const [identityProviderList, setIdentityProviderList] = useState<IdentityProvider[]>([]);
 
   useEffect(() => {
diff --git a/web/src/store/module/global.ts b/web/src/store/module/global.ts
index 458ec6abd..d994fa52e 100644
--- a/web/src/store/module/global.ts
+++ b/web/src/store/module/global.ts
@@ -65,7 +65,7 @@ export const useGlobalStore = () => {
       return store.getState().global;
     },
     isDev: () => {
-      return state.systemStatus.profile.mode === "dev";
+      return state.systemStatus.profile.mode !== "prod";
     },
     fetchSystemStatus: async () => {
       const { data: systemStatus } = (await api.getSystemStatus()).data;
diff --git a/web/src/store/reducer/global.ts b/web/src/store/reducer/global.ts
index e03c5636f..d1a005b0c 100644
--- a/web/src/store/reducer/global.ts
+++ b/web/src/store/reducer/global.ts
@@ -14,7 +14,7 @@ const globalSlice = createSlice({
     systemStatus: {
       host: undefined,
       profile: {
-        mode: "dev",
+        mode: "demo",
         version: "",
       },
       dbSize: 0,