diff --git a/src/gui/src/UI/UIDesktop.js b/src/gui/src/UI/UIDesktop.js
index 64679cc23..7729701af 100644
--- a/src/gui/src/UI/UIDesktop.js
+++ b/src/gui/src/UI/UIDesktop.js
@@ -38,6 +38,7 @@ import UIWindowSettings from "./Settings/UIWindowSettings.js"
import UIWindowTaskManager from "./UIWindowTaskManager.js"
import truncate_filename from '../helpers/truncate_filename.js';
import UINotification from "./UINotification.js"
+import UIWindowWelcome from "./UIWindowWelcome.js"
import launch_app from "../helpers/launch_app.js"
import item_icon from "../helpers/item_icon.js"
@@ -898,6 +899,19 @@ async function UIDesktop(options){
//-------------------------------------------
if(!window.is_embedded && !window.is_fullpage_mode){
refresh_item_container(el_desktop, {fadeInItems: true})
+
+ // Show welcome window if user hasn't already seen it and hasn't directly navigated to an app
+ if(!window.url_paths[0]?.toLocaleLowerCase() === 'app' || !window.url_paths[1]){
+ if(!isMobile.phone && !isMobile.tablet){
+ setTimeout(() => {
+ puter.kv.get('has_seen_welcome_window').then(async (val) => {
+ if(val === null){
+ await UIWindowWelcome();
+ }
+ })
+ }, 1000);
+ }
+ }
}
// -------------------------------------------
diff --git a/src/gui/src/UI/UIWindow.js b/src/gui/src/UI/UIWindow.js
index e8eebd77c..3f8a2c2ed 100644
--- a/src/gui/src/UI/UIWindow.js
+++ b/src/gui/src/UI/UIWindow.js
@@ -417,6 +417,10 @@ async function UIWindow(options) {
taskbar_zindex = parseInt(taskbar_zindex);
backdrop_zindex = taskbar_zindex > zindex ? taskbar_zindex : zindex;
}
+
+ // dominant backdrop will cover over toolbar as well
+ if(options.backdrop_covers_toolbar)
+ backdrop_zindex = 999999;
h = `
` + h + `
`;
}
diff --git a/src/gui/src/UI/UIWindowWelcome.js b/src/gui/src/UI/UIWindowWelcome.js
new file mode 100644
index 000000000..6215dd081
--- /dev/null
+++ b/src/gui/src/UI/UIWindowWelcome.js
@@ -0,0 +1,91 @@
+/**
+ * Copyright (C) 2024 Puter Technologies Inc.
+ *
+ * This file is part of Puter.
+ *
+ * Puter is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
+import UIWindow from './UIWindow.js'
+
+async function UIWindowWelcome(options){
+
+ options = options ?? {};
+
+ let h = '';
+ // close button containing the multiplication sign
+ h += `
×
`;
+ h += `
`;
+ h += `
`;
+ h += ``;
+ h += `
`;
+ h += `
`;
+ h += `
Welcome to your Personal Internet Computer
`;
+ h += `
Store files, play games, find awesome apps, and much more! All in one place, accessible from anywhere at any time.