diff --git a/cookies.data b/cookies.data
index 535b736..acc2da7 100644
Binary files a/cookies.data and b/cookies.data differ
diff --git a/festival-tts b/festival-tts
new file mode 100755
index 0000000..727b07c
--- /dev/null
+++ b/festival-tts
@@ -0,0 +1,20 @@
+#!/bin/bash
+
+# Check if festival is installed
+if ! command -v festival &> /dev/null; then
+ echo "π€ Festival not found. Installing now (requires sudo)..."
+ sudo apt update
+ sudo apt install -y festival
+fi
+
+# Check if user provided text
+if [ $# -eq 0 ]; then
+ echo "Usage: $0 \"text to speak\""
+ exit 1
+fi
+
+TEXT="$1"
+
+# Speak text using festival
+echo "$TEXT" | festival --tts
+
diff --git a/firefox/.parentlock b/firefox/.parentlock
new file mode 100644
index 0000000..e69de29
diff --git a/firefox/application.ini b/firefox/application.ini
new file mode 100644
index 0000000..95ce115
--- /dev/null
+++ b/firefox/application.ini
@@ -0,0 +1,26 @@
+; This file is not used. If you modify it and want the application to use
+; your modifications, move it under the browser/ subdirectory and start with
+; the "-app /path/to/browser/application.ini" argument.
+[App]
+Vendor=Mozilla
+Name=Firefox
+RemotingName=firefox
+Version=141.0.3
+BuildID=20250806102122
+SourceRepository=https://hg.mozilla.org/releases/mozilla-release
+SourceStamp=f3e8f920d75245874ec3bb5c0d9b865129fe7f38
+ID={ec8030f7-c20a-464f-9b0e-13a3a9e97384}
+
+[Gecko]
+MinVersion=141.0.3
+MaxVersion=141.0.3
+
+[XRE]
+EnableProfileMigrator=1
+
+[Crash Reporter]
+Enabled=1
+ServerURL=https://crash-reports.mozilla.com/submit?id={ec8030f7-c20a-464f-9b0e-13a3a9e97384}&version=141.0.3&buildid=20250806102122
+
+[AppUpdate]
+URL=https://aus5.mozilla.org/update/6/%PRODUCT%/%VERSION%/%BUILD_ID%/%BUILD_TARGET%/%LOCALE%/%CHANNEL%/%OS_VERSION%/%SYSTEM_CAPABILITIES%/%DISTRIBUTION%/%DISTRIBUTION_VERSION%/update.xml
diff --git a/firefox/browser/chrome/icons/default/default128.png b/firefox/browser/chrome/icons/default/default128.png
new file mode 100644
index 0000000..b92d78c
Binary files /dev/null and b/firefox/browser/chrome/icons/default/default128.png differ
diff --git a/firefox/browser/chrome/icons/default/default16.png b/firefox/browser/chrome/icons/default/default16.png
new file mode 100644
index 0000000..fe860e4
Binary files /dev/null and b/firefox/browser/chrome/icons/default/default16.png differ
diff --git a/firefox/browser/chrome/icons/default/default32.png b/firefox/browser/chrome/icons/default/default32.png
new file mode 100644
index 0000000..67042db
Binary files /dev/null and b/firefox/browser/chrome/icons/default/default32.png differ
diff --git a/firefox/browser/chrome/icons/default/default48.png b/firefox/browser/chrome/icons/default/default48.png
new file mode 100644
index 0000000..765ea42
Binary files /dev/null and b/firefox/browser/chrome/icons/default/default48.png differ
diff --git a/firefox/browser/chrome/icons/default/default64.png b/firefox/browser/chrome/icons/default/default64.png
new file mode 100644
index 0000000..39e7738
Binary files /dev/null and b/firefox/browser/chrome/icons/default/default64.png differ
diff --git a/firefox/browser/omni.ja b/firefox/browser/omni.ja
new file mode 100644
index 0000000..9ae3b31
Binary files /dev/null and b/firefox/browser/omni.ja differ
diff --git a/firefox/crashhelper b/firefox/crashhelper
new file mode 100755
index 0000000..a87ee57
Binary files /dev/null and b/firefox/crashhelper differ
diff --git a/firefox/crashreporter b/firefox/crashreporter
new file mode 100755
index 0000000..1ad94ca
Binary files /dev/null and b/firefox/crashreporter differ
diff --git a/firefox/defaults/pref/channel-prefs.js b/firefox/defaults/pref/channel-prefs.js
new file mode 100644
index 0000000..6b9d3f1
--- /dev/null
+++ b/firefox/defaults/pref/channel-prefs.js
@@ -0,0 +1,9 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+//
+// This pref is in its own file for complex reasons. See the comment in
+// browser/app/Makefile.in, bug 756325, and bug 1431342 for details. Do not add
+// other prefs to this file.
+
+pref("app.update.channel", "release");
diff --git a/firefox/dependentlibs.list b/firefox/dependentlibs.list
new file mode 100644
index 0000000..66d45de
--- /dev/null
+++ b/firefox/dependentlibs.list
@@ -0,0 +1,14 @@
+libnspr4.so
+libplc4.so
+libplds4.so
+libmozsandbox.so
+libgkcodecs.so
+liblgpllibs.so
+libnssutil3.so
+libnss3.so
+libsmime3.so
+libmozsqlite3.so
+libssl3.so
+libmozgtk.so
+libmozwayland.so
+libxul.so
diff --git a/firefox/firefox b/firefox/firefox
new file mode 100755
index 0000000..1e069b7
Binary files /dev/null and b/firefox/firefox differ
diff --git a/firefox/firefox-bin b/firefox/firefox-bin
new file mode 100755
index 0000000..f086ffa
Binary files /dev/null and b/firefox/firefox-bin differ
diff --git a/firefox/firefox-bin.sig b/firefox/firefox-bin.sig
new file mode 100644
index 0000000..1de71ff
Binary files /dev/null and b/firefox/firefox-bin.sig differ
diff --git a/firefox/firefox.sig b/firefox/firefox.sig
new file mode 100644
index 0000000..726ec77
Binary files /dev/null and b/firefox/firefox.sig differ
diff --git a/firefox/fonts/TwemojiMozilla.ttf b/firefox/fonts/TwemojiMozilla.ttf
new file mode 100644
index 0000000..9f45178
Binary files /dev/null and b/firefox/fonts/TwemojiMozilla.ttf differ
diff --git a/firefox/glxtest b/firefox/glxtest
new file mode 100755
index 0000000..b5248fe
Binary files /dev/null and b/firefox/glxtest differ
diff --git a/firefox/gmp-clearkey/0.1/libclearkey.so b/firefox/gmp-clearkey/0.1/libclearkey.so
new file mode 100755
index 0000000..6122047
Binary files /dev/null and b/firefox/gmp-clearkey/0.1/libclearkey.so differ
diff --git a/firefox/gmp-clearkey/0.1/libclearkey.so.sig b/firefox/gmp-clearkey/0.1/libclearkey.so.sig
new file mode 100644
index 0000000..f0214e8
Binary files /dev/null and b/firefox/gmp-clearkey/0.1/libclearkey.so.sig differ
diff --git a/firefox/gmp-clearkey/0.1/manifest.json b/firefox/gmp-clearkey/0.1/manifest.json
new file mode 100644
index 0000000..85710dc
--- /dev/null
+++ b/firefox/gmp-clearkey/0.1/manifest.json
@@ -0,0 +1,9 @@
+{
+ "name": "clearkey",
+ "description": "ClearKey Gecko Media Plugin",
+ "version": "1",
+ "x-cdm-module-versions": "4",
+ "x-cdm-interface-versions": "10",
+ "x-cdm-host-versions": "10",
+ "x-cdm-codecs": ""
+}
\ No newline at end of file
diff --git a/firefox/icons/updater.png b/firefox/icons/updater.png
new file mode 100644
index 0000000..6f1251b
Binary files /dev/null and b/firefox/icons/updater.png differ
diff --git a/firefox/libfreeblpriv3.so b/firefox/libfreeblpriv3.so
new file mode 100755
index 0000000..f823bd3
Binary files /dev/null and b/firefox/libfreeblpriv3.so differ
diff --git a/firefox/libgkcodecs.so b/firefox/libgkcodecs.so
new file mode 100755
index 0000000..0504317
Binary files /dev/null and b/firefox/libgkcodecs.so differ
diff --git a/firefox/liblgpllibs.so b/firefox/liblgpllibs.so
new file mode 100755
index 0000000..0cb3c8b
Binary files /dev/null and b/firefox/liblgpllibs.so differ
diff --git a/firefox/libmozavcodec.so b/firefox/libmozavcodec.so
new file mode 100755
index 0000000..a19f1f0
Binary files /dev/null and b/firefox/libmozavcodec.so differ
diff --git a/firefox/libmozavutil.so b/firefox/libmozavutil.so
new file mode 100755
index 0000000..a3acc35
Binary files /dev/null and b/firefox/libmozavutil.so differ
diff --git a/firefox/libmozgtk.so b/firefox/libmozgtk.so
new file mode 100755
index 0000000..bcbdd06
Binary files /dev/null and b/firefox/libmozgtk.so differ
diff --git a/firefox/libmozsandbox.so b/firefox/libmozsandbox.so
new file mode 100755
index 0000000..0300b00
Binary files /dev/null and b/firefox/libmozsandbox.so differ
diff --git a/firefox/libmozsqlite3.so b/firefox/libmozsqlite3.so
new file mode 100755
index 0000000..f346db2
Binary files /dev/null and b/firefox/libmozsqlite3.so differ
diff --git a/firefox/libmozwayland.so b/firefox/libmozwayland.so
new file mode 100755
index 0000000..27c40fc
Binary files /dev/null and b/firefox/libmozwayland.so differ
diff --git a/firefox/libnspr4.so b/firefox/libnspr4.so
new file mode 100755
index 0000000..09f3220
Binary files /dev/null and b/firefox/libnspr4.so differ
diff --git a/firefox/libnss3.so b/firefox/libnss3.so
new file mode 100755
index 0000000..cc1ff5c
Binary files /dev/null and b/firefox/libnss3.so differ
diff --git a/firefox/libnssutil3.so b/firefox/libnssutil3.so
new file mode 100755
index 0000000..105b4ba
Binary files /dev/null and b/firefox/libnssutil3.so differ
diff --git a/firefox/libonnxruntime.so b/firefox/libonnxruntime.so
new file mode 100755
index 0000000..3d774c1
Binary files /dev/null and b/firefox/libonnxruntime.so differ
diff --git a/firefox/libplc4.so b/firefox/libplc4.so
new file mode 100755
index 0000000..c82e0ae
Binary files /dev/null and b/firefox/libplc4.so differ
diff --git a/firefox/libplds4.so b/firefox/libplds4.so
new file mode 100755
index 0000000..647c480
Binary files /dev/null and b/firefox/libplds4.so differ
diff --git a/firefox/libsmime3.so b/firefox/libsmime3.so
new file mode 100755
index 0000000..a1a5dd3
Binary files /dev/null and b/firefox/libsmime3.so differ
diff --git a/firefox/libsoftokn3.so b/firefox/libsoftokn3.so
new file mode 100755
index 0000000..df47ecb
Binary files /dev/null and b/firefox/libsoftokn3.so differ
diff --git a/firefox/libssl3.so b/firefox/libssl3.so
new file mode 100755
index 0000000..d38d795
Binary files /dev/null and b/firefox/libssl3.so differ
diff --git a/firefox/libxul.so b/firefox/libxul.so
new file mode 100755
index 0000000..36eb8f3
Binary files /dev/null and b/firefox/libxul.so differ
diff --git a/firefox/libxul.so.sig b/firefox/libxul.so.sig
new file mode 100644
index 0000000..ca95d0f
Binary files /dev/null and b/firefox/libxul.so.sig differ
diff --git a/firefox/omni.ja b/firefox/omni.ja
new file mode 100644
index 0000000..eda9e88
Binary files /dev/null and b/firefox/omni.ja differ
diff --git a/firefox/pingsender b/firefox/pingsender
new file mode 100755
index 0000000..3c2075a
Binary files /dev/null and b/firefox/pingsender differ
diff --git a/firefox/platform.ini b/firefox/platform.ini
new file mode 100644
index 0000000..3bb6d13
--- /dev/null
+++ b/firefox/platform.ini
@@ -0,0 +1,5 @@
+[Build]
+BuildID=20250806102122
+Milestone=141.0.3
+SourceRepository=https://hg.mozilla.org/releases/mozilla-release
+SourceStamp=f3e8f920d75245874ec3bb5c0d9b865129fe7f38
diff --git a/firefox/precomplete b/firefox/precomplete
new file mode 100644
index 0000000..ed8d569
--- /dev/null
+++ b/firefox/precomplete
@@ -0,0 +1,58 @@
+remove "vaapitest"
+remove "updater.ini"
+remove "updater"
+remove "removed-files"
+remove "precomplete"
+remove "platform.ini"
+remove "pingsender"
+remove "omni.ja"
+remove "libxul.so.sig"
+remove "libxul.so"
+remove "libssl3.so"
+remove "libsoftokn3.so"
+remove "libsmime3.so"
+remove "libplds4.so"
+remove "libplc4.so"
+remove "libonnxruntime.so"
+remove "libnssutil3.so"
+remove "libnss3.so"
+remove "libnspr4.so"
+remove "libmozwayland.so"
+remove "libmozsqlite3.so"
+remove "libmozsandbox.so"
+remove "libmozgtk.so"
+remove "libmozavutil.so"
+remove "libmozavcodec.so"
+remove "liblgpllibs.so"
+remove "libgkcodecs.so"
+remove "libfreeblpriv3.so"
+remove "icons/updater.png"
+remove "gmp-clearkey/0.1/manifest.json"
+remove "gmp-clearkey/0.1/libclearkey.so.sig"
+remove "gmp-clearkey/0.1/libclearkey.so"
+remove "glxtest"
+remove "fonts/TwemojiMozilla.ttf"
+remove "firefox.sig"
+remove "firefox-bin.sig"
+remove "firefox-bin"
+remove "firefox"
+remove "dependentlibs.list"
+remove "crashreporter"
+remove "crashhelper"
+remove "browser/omni.ja"
+remove "browser/chrome/icons/default/default64.png"
+remove "browser/chrome/icons/default/default48.png"
+remove "browser/chrome/icons/default/default32.png"
+remove "browser/chrome/icons/default/default16.png"
+remove "browser/chrome/icons/default/default128.png"
+remove "application.ini"
+rmdir "icons/"
+rmdir "gmp-clearkey/0.1/"
+rmdir "gmp-clearkey/"
+rmdir "fonts/"
+rmdir "defaults/pref/"
+rmdir "defaults/"
+rmdir "browser/chrome/icons/default/"
+rmdir "browser/chrome/icons/"
+rmdir "browser/chrome/"
+rmdir "browser/"
diff --git a/firefox/removed-files b/firefox/removed-files
new file mode 100644
index 0000000..e69de29
diff --git a/firefox/update-settings.ini b/firefox/update-settings.ini
new file mode 100644
index 0000000..a83179b
--- /dev/null
+++ b/firefox/update-settings.ini
@@ -0,0 +1,5 @@
+; If you modify this file updates may fail.
+; Do not modify this file.
+
+[Settings]
+ACCEPTED_MAR_CHANNEL_IDS=firefox-mozilla-release
diff --git a/firefox/updater b/firefox/updater
new file mode 100755
index 0000000..d97ff5c
Binary files /dev/null and b/firefox/updater differ
diff --git a/firefox/updater.ini b/firefox/updater.ini
new file mode 100644
index 0000000..84d1b15
--- /dev/null
+++ b/firefox/updater.ini
@@ -0,0 +1,9 @@
+; This Source Code Form is subject to the terms of the Mozilla Public
+; License, v. 2.0. If a copy of the MPL was not distributed with this
+; file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+; This file is in the UTF-8 encoding
+[Strings]
+Title=Firefox Update
+Info=Firefox is installing your updates and will start in a few momentsβ¦
+MozillaMaintenanceDescription=The Mozilla Maintenance Service ensures that you have the latest and most secure version of Mozilla Firefox on your computer. Keeping Firefox up to date is very important for your online security, and Mozilla strongly recommends that you keep this service enabled.
diff --git a/firefox/vaapitest b/firefox/vaapitest
new file mode 100755
index 0000000..9f5f684
Binary files /dev/null and b/firefox/vaapitest differ
diff --git a/pom.xml b/pom.xml
index fb2495b..c33746a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -18,17 +18,17 @@
test
-
+
- io.cucumber
- cucumber-java
- 7.15.0
+ io.cucumber
+ cucumber-java
+ 7.15.0
- io.cucumber
- cucumber-junit
- 7.15.0
- test
+ io.cucumber
+ cucumber-junit
+ 7.15.0
+ test
@@ -70,6 +70,16 @@
17
+
+
+
+ org.codehaus.mojo
+ exec-maven-plugin
+ 3.1.0
+
+ com.ghost.temple.BrowserLauncher
+
+
diff --git a/solo-level b/solo-level
new file mode 100755
index 0000000..aaf9b47
--- /dev/null
+++ b/solo-level
@@ -0,0 +1,4 @@
+#!/bin/bash
+
+/usr/bin/mvn exec:java
+
diff --git a/src/main/java/com/ghost/temple/BrowserLauncher.java b/src/main/java/com/ghost/temple/BrowserLauncher.java
new file mode 100644
index 0000000..4f2048e
--- /dev/null
+++ b/src/main/java/com/ghost/temple/BrowserLauncher.java
@@ -0,0 +1,113 @@
+package com.ghost.temple;
+
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.firefox.FirefoxBinary;
+import org.openqa.selenium.firefox.FirefoxDriver;
+import org.openqa.selenium.firefox.FirefoxOptions;
+import org.openqa.selenium.firefox.FirefoxProfile;
+
+import java.io.File;
+import java.util.Scanner;
+
+public class BrowserLauncher {
+
+ private static WebDriver driver;
+
+ private static final String APP_URL = "http://192.168.31.73:3000/";
+
+ public static void main(String[] args) {
+ // IMPORTANT: Remove WebDriverManager setup here if you already manage drivers elsewhere
+ // WebDriverManager.firefoxdriver().setup(); // uncomment if you want dynamic driver management
+
+ String projectDir = System.getProperty("user.dir");
+
+ // Paths β customize if your automation project has different structure
+ String firefoxBinaryPath = projectDir + "/firefox/firefox";
+ String profilePath = projectDir + "/.mozilla/firefox/b4xl9fej.default-release";
+
+ File firefoxBinary = new File(firefoxBinaryPath);
+ if (!firefoxBinary.exists() || !firefoxBinary.canExecute()) {
+ System.err.println("β Firefox binary missing or not executable at: " + firefoxBinaryPath);
+ System.exit(1);
+ }
+
+ File profileDir = new File(profilePath);
+ if (!profileDir.exists() || !profileDir.isDirectory()) {
+ System.err.println("β Firefox profile directory missing or invalid at: " + profilePath);
+ System.exit(1);
+ }
+
+ FirefoxProfile profile = new FirefoxProfile(profileDir);
+ FirefoxOptions options = new FirefoxOptions();
+ options.setBinary(new FirefoxBinary(firefoxBinary));
+ options.setProfile(profile);
+
+ driver = new FirefoxDriver(options);
+ driver.manage().window().maximize();
+
+ Runtime.getRuntime().addShutdownHook(new Thread(() -> {
+ System.out.println("\nβ JVM Shutdown detected. Saving data before exit...");
+ saveAll();
+ }));
+
+ try {
+ StorageManager.loadStorage(driver, APP_URL);
+ CookieManager.loadCookies(driver, APP_URL);
+
+ System.out.println("π₯ Browser launched with persisted cookies and storage!");
+
+ Scanner scanner = new Scanner(System.in);
+ String input = "";
+
+ while (!input.equalsIgnoreCase("save")) {
+ speakPrompt("Please type save and press Enter to save your work before closing the browser.");
+ System.out.print("> ");
+ input = scanner.nextLine().trim();
+
+ if (!input.equalsIgnoreCase("save")) {
+ System.out.println("β You must save before quitting. Try again.");
+ }
+ }
+
+ Thread.sleep(500);
+
+ saveAll();
+
+ System.out.println("πΎ Storage and cookies saved. Closing browser now...");
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ if (driver != null) {
+ driver.quit();
+ driver = null;
+ }
+ }
+ }
+
+ private static void speakPrompt(String message) {
+ System.out.println(message);
+ try {
+ ProcessBuilder pb = new ProcessBuilder("./festival-tts", message);
+ pb.redirectErrorStream(true);
+ Process process = pb.start();
+
+ try (var reader = new java.io.BufferedReader(new java.io.InputStreamReader(process.getInputStream()))) {
+ while (reader.readLine() != null) {}
+ }
+
+ process.waitFor();
+
+ } catch (Exception e) {
+ System.err.println("β Failed to run festival-tts:");
+ e.printStackTrace();
+ }
+ }
+
+ private static void saveAll() {
+ if (driver != null) {
+ CookieManager.saveCookies(driver);
+ StorageManager.saveStorage(driver);
+ }
+ }
+}
diff --git a/src/main/java/com/ghost/temple/driver/DriverManager.java b/src/main/java/com/ghost/temple/driver/DriverManager.java
index 04e14dc..562c358 100644
--- a/src/main/java/com/ghost/temple/driver/DriverManager.java
+++ b/src/main/java/com/ghost/temple/driver/DriverManager.java
@@ -4,6 +4,7 @@ import io.github.bonigarcia.wdm.WebDriverManager;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxOptions;
+import org.openqa.selenium.firefox.FirefoxProfile;
import java.io.File;
public class DriverManager {
@@ -13,17 +14,16 @@ public class DriverManager {
if (driver == null) {
WebDriverManager.firefoxdriver().setup();
- // π Point to your existing Firefox profile
- String userProfile = System.getProperty("user.home") + "/.mozilla/firefox/";
- File profilesDir = new File(userProfile);
- File[] profiles = profilesDir.listFiles((dir, name) -> name.endsWith(".default-release"));
+ // Path to Firefox binary
+ String firefoxBinaryPath = "/home/arul/solo-level-app-automation/firefox/firefox";
- if (profiles == null || profiles.length == 0) {
- throw new RuntimeException("No Firefox profile found π");
- }
+ // Path to specific profile
+ String profilePath = "/home/arul/solo-level-app-automation/.mozilla/firefox/b4xl9fej.default-release";
+ FirefoxProfile profile = new FirefoxProfile(new File(profilePath));
FirefoxOptions options = new FirefoxOptions();
- options.setProfile(new org.openqa.selenium.firefox.FirefoxProfile(profiles[0]));
+ options.setBinary(firefoxBinaryPath);
+ options.setProfile(profile);
driver = new FirefoxDriver(options);
driver.manage().window().maximize();
diff --git a/storage.json b/storage.json
index 2d2563d..d63975a 100644
--- a/storage.json
+++ b/storage.json
@@ -1 +1 @@
-{"localStorage":{"soloLevelUpUserStats":"{\"name\":\"Arul\",\"level\":1,\"exp\":30,\"expToNextLevel\":100,\"job\":null,\"title\":null,\"hp\":100,\"maxHp\":100,\"mp\":10,\"maxMp\":10,\"fatigue\":0,\"gold\":0,\"stats\":{\"str\":10,\"agi\":10,\"per\":10,\"int\":10,\"vit\":10},\"statPoints\":1,\"equipment\":[],\"quests\":[{\"title\":\"Offgrid Hermit - Disconnect from Internet\",\"description\":\"ghostTemple system forces user by disabling internet by default in the computer to go offgrid. Equiped with self designed /etc/host based porn blocker. It still provides user option to enable the internet at boot. asking user to enter password. to make user realize that their decision is conscious.\",\"reward\":\"Experience only\",\"difficulty\":\"S\",\"priority\":\"High\",\"expiry\":\"Daily\",\"expReward\":30,\"statPointsReward\":1,\"goldReward\":0,\"statRewards\":{\"str\":0,\"agi\":0,\"per\":0,\"int\":0,\"vit\":0},\"itemRewards\":[],\"id\":\"2c9d2590-5d0d-47bd-adcd-fcf1cc55f712\",\"active\":false,\"completed\":true,\"progress\":100,\"isCustom\":true,\"createdAt\":1754679761906,\"completedAt\":1754680173874},{\"title\":\"Offgrid Hermit - Disconnect from Internet\",\"description\":\"ghostTemple system forces user by disabling internet by default in the computer to go offgrid. Equiped with self designed /etc/host based porn blocker. It still provides user option to enable the internet at boot. asking user to enter password. to make user realize that their decision is conscious.\",\"reward\":\"Experience only\",\"difficulty\":\"S\",\"priority\":\"High\",\"expiry\":\"Daily\",\"expReward\":30,\"statPointsReward\":1,\"goldReward\":0,\"statRewards\":{\"str\":0,\"agi\":0,\"per\":0,\"int\":0,\"vit\":0},\"itemRewards\":[],\"id\":\"e41fbba2-6fc5-4a89-87ef-68c00b3b3be2\",\"active\":true,\"completed\":false,\"progress\":0,\"isCustom\":true,\"createdAt\":1754682145517},{\"title\":\"The Refiner - Appearance Leveling\",\"description\":\"Focusing on Skin health, Hair health, preventing Hair loss, Preventing Fat gain. Focused on Weight Loss and over all Hygiene the way we look. To Attract people and be charismatic.\",\"reward\":\"Experience only\",\"difficulty\":\"S\",\"priority\":\"High\",\"expiry\":\"Daily\",\"expReward\":30,\"statPointsReward\":1,\"goldReward\":0,\"statRewards\":{\"str\":0,\"agi\":0,\"per\":0,\"int\":0,\"vit\":0},\"itemRewards\":[],\"id\":\"8f2e8569-e24f-444f-952a-041b760c0294\",\"active\":true,\"completed\":false,\"progress\":0,\"isCustom\":true,\"createdAt\":1754682154296},{\"title\":\"King of Deception - Leveling up Art of Attraction\",\"description\":\"Focused on building a solid character. that is strong.. Talented, Attract people and seductive at same time. Manipulative in good way. Positive Manipulation by doing a good job on something we do and gaining trust among other people.\",\"reward\":\"Experience only\",\"difficulty\":\"S\",\"priority\":\"High\",\"expiry\":\"Daily\",\"expReward\":30,\"statPointsReward\":1,\"goldReward\":0,\"statRewards\":{\"str\":0,\"agi\":0,\"per\":0,\"int\":0,\"vit\":0},\"itemRewards\":[],\"id\":\"d99e97aa-2f8e-49fd-b95a-48151b968e2f\",\"active\":true,\"completed\":false,\"progress\":0,\"isCustom\":true,\"createdAt\":1754682163973},{\"title\":\"The Architect of Himself - Leveling up strength both physically and mentally\",\"description\":\"1. Exercise everyday Morning 1 hr (Cardio + strength) 2. Gain Knowledge on New concept or Technology, Read books. 3. Train Martial arts - Armed or Unarmed combat styles. Focus on Leveling up your Intellect, your Strength, Your Martial arts skill and your Aesthetics eventually.\",\"reward\":\"Experience only\",\"difficulty\":\"S\",\"priority\":\"High\",\"expiry\":\"Daily\",\"expReward\":30,\"statPointsReward\":1,\"goldReward\":0,\"statRewards\":{\"str\":0,\"agi\":0,\"per\":0,\"int\":0,\"vit\":0},\"itemRewards\":[],\"id\":\"af7940da-92d7-4ae8-8c79-54287f94dc6a\",\"active\":true,\"completed\":false,\"progress\":0,\"isCustom\":true,\"createdAt\":1754682175060},{\"title\":\"The Phoenix - Rise from Ashes\",\"description\":\"Keep Moving Forward, No matter what. No matter how much pain you face. you can do take breaks to learn from failures. But never quit . Never Settle. Accept your Pain. see it as a part of life. both physical and Mental Pain. If you can cure it you can cure them. but if you can't never use them as an excuse to be Lower. Always improve from pain and be strong if possible. the Key idea is not to stop at any cost and keep moving forward. Not to embrace pain or romanticize it.\",\"reward\":\"Experience only\",\"difficulty\":\"S\",\"priority\":\"High\",\"expiry\":\"Daily\",\"expReward\":30,\"statPointsReward\":1,\"goldReward\":0,\"statRewards\":{\"str\":0,\"agi\":0,\"per\":0,\"int\":0,\"vit\":0},\"itemRewards\":[],\"id\":\"d029572f-2731-4f4c-b02b-e132ca165d74\",\"active\":true,\"completed\":false,\"progress\":0,\"isCustom\":true,\"createdAt\":1754682188512}],\"completedQuests\":[\"2c9d2590-5d0d-47bd-adcd-fcf1cc55f712\"],\"inventory\":[{\"id\":\"item-health-potion\",\"name\":\"Health Potion\",\"type\":\"Consumable\",\"rarity\":\"Common\",\"description\":\"Restores 100 HP when consumed.\",\"quantity\":3},{\"id\":\"item-mana-potion\",\"name\":\"Mana Potion\",\"type\":\"Consumable\",\"rarity\":\"Common\",\"description\":\"Restores 50 MP when consumed.\",\"quantity\":2}]}"},"sessionStorage":{}}
\ No newline at end of file
+{"localStorage":{"soloLevelUpUserStats":"{\"name\":\"Arul\",\"level\":1,\"exp\":30,\"expToNextLevel\":100,\"job\":null,\"title\":null,\"hp\":100,\"maxHp\":100,\"mp\":10,\"maxMp\":10,\"fatigue\":0,\"gold\":0,\"stats\":{\"str\":10,\"agi\":10,\"per\":10,\"int\":10,\"vit\":10},\"statPoints\":1,\"equipment\":[],\"quests\":[{\"title\":\"Offgrid Hermit - Disconnect from Internet\",\"description\":\"ghostTemple system forces user by disabling internet by default in the computer to go offgrid. Equiped with self designed /etc/host based porn blocker. It still provides user option to enable the internet at boot. asking user to enter password. to make user realize that their decision is conscious.\",\"reward\":\"Experience only\",\"difficulty\":\"S\",\"priority\":\"High\",\"expiry\":\"Daily\",\"expReward\":30,\"statPointsReward\":1,\"goldReward\":0,\"statRewards\":{\"str\":0,\"agi\":0,\"per\":0,\"int\":0,\"vit\":0},\"itemRewards\":[],\"id\":\"1eab5d73-3269-4775-b2a8-8af98d8add44\",\"active\":false,\"completed\":true,\"progress\":100,\"isCustom\":true,\"createdAt\":1754693126749,\"completedAt\":1754693246659},{\"title\":\"The Refiner - Appearance Leveling\",\"description\":\"Focusing on Skin health, Hair health, preventing Hair loss, Preventing Fat gain. Focused on Weight Loss and over all Hygiene the way we look. To Attract people and be charismatic.\",\"reward\":\"Experience only\",\"difficulty\":\"S\",\"priority\":\"High\",\"expiry\":\"Daily\",\"expReward\":30,\"statPointsReward\":1,\"goldReward\":0,\"statRewards\":{\"str\":0,\"agi\":0,\"per\":0,\"int\":0,\"vit\":0},\"itemRewards\":[],\"id\":\"72c6bfa2-419e-4b89-b52f-e28ecad313bb\",\"active\":true,\"completed\":false,\"progress\":0,\"isCustom\":true,\"createdAt\":1754693134029},{\"title\":\"King of Deception - Leveling up Art of Attraction\",\"description\":\"Focused on building a solid character. that is strong.. Talented, Attract people and seductive at same time. Manipulative in good way. Positive Manipulation by doing a good job on something we do and gaining trust among other people.\",\"reward\":\"Experience only\",\"difficulty\":\"S\",\"priority\":\"High\",\"expiry\":\"Daily\",\"expReward\":30,\"statPointsReward\":1,\"goldReward\":0,\"statRewards\":{\"str\":0,\"agi\":0,\"per\":0,\"int\":0,\"vit\":0},\"itemRewards\":[],\"id\":\"9255e741-318f-40aa-8545-f4d778b63aec\",\"active\":true,\"completed\":false,\"progress\":0,\"isCustom\":true,\"createdAt\":1754693142005},{\"title\":\"The Architect of Himself - Leveling up strength both physically and mentally\",\"description\":\"1. Exercise everyday Morning 1 hr (Cardio + strength) 2. Gain Knowledge on New concept or Technology, Read books. 3. Train Martial arts - Armed or Unarmed combat styles. Focus on Leveling up your Intellect, your Strength, Your Martial arts skill and your Aesthetics eventually.\",\"reward\":\"Experience only\",\"difficulty\":\"S\",\"priority\":\"High\",\"expiry\":\"Daily\",\"expReward\":30,\"statPointsReward\":1,\"goldReward\":0,\"statRewards\":{\"str\":0,\"agi\":0,\"per\":0,\"int\":0,\"vit\":0},\"itemRewards\":[],\"id\":\"022fec2c-06e9-4e50-afd6-8f8008989966\",\"active\":true,\"completed\":false,\"progress\":0,\"isCustom\":true,\"createdAt\":1754693150990},{\"title\":\"The Phoenix - Rise from Ashes\",\"description\":\"Keep Moving Forward, No matter what. No matter how much pain you face. you can do take breaks to learn from failures. But never quit . Never Settle. Accept your Pain. see it as a part of life. both physical and Mental Pain. If you can cure it you can cure them. but if you can't never use them as an excuse to be Lower. Always improve from pain and be strong if possible. the Key idea is not to stop at any cost and keep moving forward. Not to embrace pain or romanticize it.\",\"reward\":\"Experience only\",\"difficulty\":\"S\",\"priority\":\"High\",\"expiry\":\"Daily\",\"expReward\":30,\"statPointsReward\":1,\"goldReward\":0,\"statRewards\":{\"str\":0,\"agi\":0,\"per\":0,\"int\":0,\"vit\":0},\"itemRewards\":[],\"id\":\"5dc3636e-a00e-4015-89f5-18d22b4d85f6\",\"active\":true,\"completed\":false,\"progress\":0,\"isCustom\":true,\"createdAt\":1754693161795}],\"completedQuests\":[\"1eab5d73-3269-4775-b2a8-8af98d8add44\"],\"inventory\":[{\"id\":\"item-health-potion\",\"name\":\"Health Potion\",\"type\":\"Consumable\",\"rarity\":\"Common\",\"description\":\"Restores 100 HP when consumed.\",\"quantity\":3},{\"id\":\"item-mana-potion\",\"name\":\"Mana Potion\",\"type\":\"Consumable\",\"rarity\":\"Common\",\"description\":\"Restores 50 MP when consumed.\",\"quantity\":2}]}"},"sessionStorage":{}}
\ No newline at end of file
diff --git a/target/classes/com/ghost/temple/BrowserLauncher.class b/target/classes/com/ghost/temple/BrowserLauncher.class
new file mode 100644
index 0000000..5fc1b27
Binary files /dev/null and b/target/classes/com/ghost/temple/BrowserLauncher.class differ
diff --git a/target/classes/com/ghost/temple/CookieManager.class b/target/classes/com/ghost/temple/CookieManager.class
index 0afafdb..6e9711e 100644
Binary files a/target/classes/com/ghost/temple/CookieManager.class and b/target/classes/com/ghost/temple/CookieManager.class differ
diff --git a/target/classes/com/ghost/temple/ExcelUtils.class b/target/classes/com/ghost/temple/ExcelUtils.class
index be9eabb..e0042e1 100644
Binary files a/target/classes/com/ghost/temple/ExcelUtils.class and b/target/classes/com/ghost/temple/ExcelUtils.class differ
diff --git a/target/classes/com/ghost/temple/ReusableFunctions.class b/target/classes/com/ghost/temple/ReusableFunctions.class
index eab63fb..622be43 100644
Binary files a/target/classes/com/ghost/temple/ReusableFunctions.class and b/target/classes/com/ghost/temple/ReusableFunctions.class differ
diff --git a/target/classes/com/ghost/temple/StorageManager.class b/target/classes/com/ghost/temple/StorageManager.class
index 1cdcebc..0ade916 100644
Binary files a/target/classes/com/ghost/temple/StorageManager.class and b/target/classes/com/ghost/temple/StorageManager.class differ
diff --git a/target/classes/com/ghost/temple/driver/DriverManager.class b/target/classes/com/ghost/temple/driver/DriverManager.class
index f718f0e..0b090e0 100644
Binary files a/target/classes/com/ghost/temple/driver/DriverManager.class and b/target/classes/com/ghost/temple/driver/DriverManager.class differ
diff --git a/target/classes/com/ghost/temple/hooks/Hooks.class b/target/classes/com/ghost/temple/hooks/Hooks.class
index 1e44d60..4381f9c 100644
Binary files a/target/classes/com/ghost/temple/hooks/Hooks.class and b/target/classes/com/ghost/temple/hooks/Hooks.class differ
diff --git a/target/cucumber-report.html b/target/cucumber-report.html
index f642452..2f85351 100644
--- a/target/cucumber-report.html
+++ b/target/cucumber-report.html
@@ -40,7 +40,7 @@ body{padding:0;margin:0}.html-formatter{max-width:1600px;min-height:100vh;margin