diff --git a/.dockerignore b/.dockerignore
deleted file mode 100644
index 7909635..0000000
--- a/.dockerignore
+++ /dev/null
@@ -1,10 +0,0 @@
-data/
-__pycache__/
-*.pyc
-*.pyo
-*.pyd
-.git
-.gitignore
-tests/
-venv/
-env/
\ No newline at end of file
diff --git a/Dockerfile b/Dockerfile
deleted file mode 100644
index 883e7bd..0000000
--- a/Dockerfile
+++ /dev/null
@@ -1,21 +0,0 @@
-# Use an official Python runtime as a parent image
-FROM python:3.10-slim
-
-# Set the working directory in the container
-WORKDIR /app
-
-# Install dependencies
-COPY requirements.txt .
-RUN pip install --no-cache-dir -r requirements.txt
-
-# Copy the current directory contents into the container at /app
-COPY . .
-
-# Create data directory structure
-RUN mkdir -p data/uploads
-
-# Make port 8000 available to the world outside this container
-EXPOSE 8000
-
-# Run the application
-CMD ["python", "buddai_v3.2.py", "--server", "--port", "8000"]
\ No newline at end of file
diff --git a/REMOTE_ACCESS_LOG.md b/REMOTE_ACCESS_LOG.md
new file mode 100644
index 0000000..fbc2c7b
--- /dev/null
+++ b/REMOTE_ACCESS_LOG.md
@@ -0,0 +1,69 @@
+# Remote Access Implementation Log
+
+This document records the troubleshooting steps, failures, and solutions implemented to enable remote access (Ngrok & Tailscale) for the BuddAI system.
+
+## 1. Ngrok Execution Failures
+
+### Fail: "The term '.\ngrok' is not recognized"
+
+**Cause:** The script assumed `ngrok.exe` was in the current folder, but it wasn't, or it wasn't in the system PATH.
+**Fix:** Updated `run_buddai.ps1` to check both the global PATH (`ngrok`) and the local folder (`.\ngrok.exe`).
+
+### Fail: "Start-Process : The system cannot find the file specified"
+
+**Cause:** PowerShell's `Start-Process` command failed when using a relative path like `.\ngrok.exe`.
+**Fix:** Implemented `Resolve-Path` to convert the relative path to an absolute path before execution.
+
+## 2. Tunnel Timing Issues
+
+### Fail: Empty URL returned
+
+**Cause:** The script attempted to fetch the public URL from the Ngrok API immediately after starting the process. The tunnel takes a few seconds to establish.
+**Fix:** Added a **retry loop** in PowerShell that polls `http://localhost:4040/api/tunnels` every second for up to 15 seconds.
+
+## 3. Dependency Issues
+
+### Fail: "ModuleNotFoundError: No module named 'PIL'"
+
+**Cause:** The `qrcode` library was added to generate QR codes, but it relies on `pillow` (PIL) for image generation, which was missing.
+**Fix:** Added `pillow` to `requirements.txt` and wrapped the import in `main.py` with a `try/except` block to prevent server crashes.
+
+### Fail: PowerShell Parsing Errors
+
+**Cause:** Complex one-liner Python commands inside PowerShell strings caused syntax errors (specifically with parentheses and quoting).
+**Fix:** Refactored the Python QR code generation call to be cleaner and safer within the script.
+
+## 4. Network & Firewall
+
+### Fail: "Run as Administrator to enable LAN/VPN access"
+
+**Cause:** Windows Firewall blocks incoming connections to port 8000 by default, preventing LAN and Tailscale access.
+**Fix:** Added automatic detection of the missing firewall rule. The script now prompts the user to press 'A' to restart as Administrator and applies the rule automatically using `New-NetFirewallRule`.
+
+### Fail: Tailscale IP Not Detected
+
+**Cause:** The script looked specifically for a network interface named "Tailscale", but on some systems, the adapter name differs.
+**Fix:** Added a fallback detection method that scans for any active IPv4 address in the `100.x.x.x` range (Carrier Grade NAT), which Tailscale uses.
+
+## 5. User Experience (UX) Friction
+
+### Fail: Annoying Ngrok Prompt
+
+**Cause:** Users with Tailscale (which is always on) were forced to wait 3 seconds or press a key to skip the Ngrok prompt every time.
+**Fix:** Added logic to **auto-detect Tailscale**. If a Tailscale IP is found, the script now automatically skips the Ngrok prompt and defaults to the private VPN URL.
+
+### Fail: "How do I view this on mobile?"
+
+**Cause:** Users had to manually type long IP addresses or URLs into their phone.
+**Fix:**
+
+1. Integrated a **QR Code Generator** directly into the Python backend (`/api/utils/qrcode`).
+2. Updated the root dashboard (`/`) to dynamically display the active IP (LAN, Tailscale, or Ngrok) and a scannable QR code.
+
+## Final Status
+
+The system now supports three robust access methods:
+
+1. **Local Network (LAN):** Auto-configured via Firewall rules.
+2. **Private VPN (Tailscale):** Auto-detected with priority handling.
+3. **Public Tunnel (Ngrok):** Optional fallback with secure/public modes.
diff --git a/docker-compose.yml b/docker-compose.yml
deleted file mode 100644
index aefe3de..0000000
--- a/docker-compose.yml
+++ /dev/null
@@ -1,14 +0,0 @@
-version: '3.8'
-
-services:
- buddai:
- build: .
- ports:
- - "8000:8000"
- volumes:
- - ./data:/app/data
- environment:
- - OLLAMA_HOST=host.docker.internal
- - OLLAMA_PORT=11434
- extra_hosts:
- - "host.docker.internal:host-gateway"
\ No newline at end of file
diff --git a/frontend/index.html b/frontend/index.html
index 06ab0fc..663c15b 100644
--- a/frontend/index.html
+++ b/frontend/index.html
@@ -112,6 +112,41 @@
}
.loading-flame { font-size: 24px; animation: flame-flicker 0.6s infinite; display: inline-block; }
.hljs { background: transparent !important; padding: 0 !important; }
+
+ /* Eyes */
+ .eyes-container { display: flex; gap: 4px; margin-right: 12px; }
+ .eye { width: 14px; height: 14px; background: #d4d4d4; border-radius: 50%; position: relative; display: flex; align-items: center; justify-content: center; overflow: hidden; border: 1px solid #1e1e1e; }
+ .pupil { width: 6px; height: 6px; background: var(--btn-bg); border-radius: 50%; }
+
+ /* Sleep Zzz */
+ .zzz-container { position: absolute; top: -15px; right: -8px; pointer-events: none; }
+ .zzz { position: absolute; font-family: 'Comic Sans MS', cursive, sans-serif; font-weight: bold; color: #aaa; opacity: 0; animation: float-z 2.5s infinite; }
+ .zzz:nth-child(1) { animation-delay: 0s; font-size: 10px; right: 5px; }
+ .zzz:nth-child(2) { animation-delay: 0.8s; font-size: 14px; right: 0px; }
+ .zzz:nth-child(3) { animation-delay: 1.6s; font-size: 18px; right: -5px; }
+
+ @keyframes float-z {
+ 0% { transform: translate(0, 0) rotate(-10deg); opacity: 0; }
+ 25% { opacity: 0.8; }
+ 100% { transform: translate(10px, -20px) rotate(10deg); opacity: 0; }
+ }
+
+ @keyframes shake {
+ 0% { transform: translate(0, 0) rotate(0deg); }
+ 25% { transform: translate(-2px, 1px) rotate(-5deg); }
+ 50% { transform: translate(2px, -1px) rotate(5deg); }
+ 75% { transform: translate(-1px, 2px) rotate(-2deg); }
+ 100% { transform: translate(0, 0) rotate(0deg); }
+ }
+ .shake { animation: shake 0.5s ease-in-out; }
+
+ @keyframes confused {
+ 0% { transform: translate(0, 0); }
+ 25% { transform: translate(-3px, 1px); }
+ 50% { transform: translate(1px, -3px); }
+ 75% { transform: translate(3px, 2px); }
+ 100% { transform: translate(0, 0); }
+ }