diff --git a/module/webroot/assets/RobotoMono-Regular.ttf b/module/webroot/assets/RobotoMono-Regular.ttf
new file mode 100644
index 0000000..6df2b25
Binary files /dev/null and b/module/webroot/assets/RobotoMono-Regular.ttf differ
diff --git a/module/webroot/index.html b/module/webroot/index.html
new file mode 100644
index 0000000..6a8f144
--- /dev/null
+++ b/module/webroot/index.html
@@ -0,0 +1,14 @@
+
+
+
+
+
+ Play Integrity Fix
+
+
+
+
+
+ [+] Fetching pif.json, please wait...
+
+
\ No newline at end of file
diff --git a/module/webroot/scripts.js b/module/webroot/scripts.js
new file mode 100644
index 0000000..8ce7185
--- /dev/null
+++ b/module/webroot/scripts.js
@@ -0,0 +1,37 @@
+// Execute shell commands with ksu.exec
+async function execCommand(command) {
+ const callbackName = `exec_callback_${Date.now()}`;
+ return new Promise((resolve, reject) => {
+ window[callbackName] = (errno, stdout, stderr) => {
+ delete window[callbackName];
+ errno === 0 ? resolve(stdout) : reject(stderr);
+ };
+ ksu.exec(command, "{}", callbackName);
+ });
+}
+
+// Function to run the script and display its output
+async function runAction() {
+ const output = document.querySelector('.output');
+ try {
+ const scriptOutput = await execCommand("sh /data/adb/modules/playintegrityfix/action.sh");
+ output.innerHTML = '';
+ const lines = scriptOutput.split('\n');
+ lines.forEach(line => {
+ const lineElement = document.createElement('div');
+ lineElement.style.whiteSpace = 'pre-wrap';
+ lineElement.textContent = line;
+ if (line === '') {
+ lineElement.innerHTML = ' ';
+ }
+ output.appendChild(lineElement);
+ });
+ } catch (error) {
+ output.innerHTML = '[!] Error: Fail to execute action.sh';
+ console.error('Script execution failed:', error);
+ }
+}
+
+document.addEventListener('DOMContentLoaded', async () => {
+ setTimeout(runAction, 200);
+});
\ No newline at end of file
diff --git a/module/webroot/styles.css b/module/webroot/styles.css
new file mode 100644
index 0000000..0d15647
--- /dev/null
+++ b/module/webroot/styles.css
@@ -0,0 +1,27 @@
+@font-face {
+ font-family: 'Mono';
+ src: url('assets/RobotoMono-Regular.ttf') format('truetype');
+ font-weight: normal;
+ font-style: normal;
+}
+
+body {
+ font-family: 'Mono';
+ padding-top: var(--window-inset-top);
+ padding-bottom: var(--window-inset-bottom);
+}
+
+.output {
+ font-size: 14px;
+ left: 10px;
+ width: calc(100vw - 20px);
+ white-space: nowrap;
+ word-break: break-all;
+}
+
+@media (prefers-color-scheme: dark) {
+ body {
+ background-color: #121212;
+ color: #fff;
+ }
+}
\ No newline at end of file