diff --git a/backend/app/main.py b/backend/app/main.py
index a9ba3044e..d9bbf6230 100644
--- a/backend/app/main.py
+++ b/backend/app/main.py
@@ -1,6 +1,5 @@
import asyncio
import logging
-import sys
from contextlib import asynccontextmanager
from datetime import UTC, datetime, timedelta
from logging.handlers import RotatingFileHandler
@@ -9,6 +8,80 @@ from logging.handlers import RotatingFileHandler
# =============================================================================
# Dependency Check - runs before other imports to give helpful error messages
# =============================================================================
+def _start_error_server(missing_packages: list):
+ """Start a minimal HTTP server to display dependency errors in browser."""
+ import os
+ from http.server import BaseHTTPRequestHandler, HTTPServer
+
+ packages_html = "".join(f"
{p}" for p in missing_packages)
+
+ html = f"""
+
+
+ Bambuddy - Setup Required
+
+
+
+
+
Setup Required
+
Missing Python packages
+
+
To fix, run this command on your server:
+
pip install -r requirements.txt
+
Or if using a virtual environment:
+
./venv/bin/pip install -r requirements.txt
+
After installing, restart Bambuddy:
+ sudo systemctl restart bambuddy
+
+
+"""
+
+ class ErrorHandler(BaseHTTPRequestHandler):
+ def do_GET(self):
+ self.send_response(503)
+ self.send_header("Content-type", "text/html")
+ self.end_headers()
+ self.wfile.write(html.encode())
+
+ def log_message(self, format, *args):
+ print(f"[Error Server] {args[0]}")
+
+ port = int(os.environ.get("PORT", 8000))
+ print(f"\nStarting error server on http://0.0.0.0:{port}")
+ print("Visit this URL in your browser to see the error details.\n")
+
+ try:
+ server = HTTPServer(("0.0.0.0", port), ErrorHandler)
+ server.serve_forever()
+ except KeyboardInterrupt:
+ pass
+
+
def check_dependencies():
"""Check that all required packages are installed."""
missing = []
@@ -40,7 +113,7 @@ def check_dependencies():
print("\nOr if using a virtual environment:")
print(" ./venv/bin/pip install -r requirements.txt")
print("=" * 60 + "\n")
- sys.exit(1)
+ _start_error_server(missing)
check_dependencies()