From 4e68b2f226e15162f608ddc67b56c5ffa4184f2b Mon Sep 17 00:00:00 2001 From: Dierk Date: Tue, 19 May 2026 11:40:42 +0200 Subject: [PATCH] Serve frontends via FastAPI static files to fix Brave browser file access block Each backend now mounts its frontend directory at /ui/ so the UIs are accessible via http://localhost:800x/ui/ instead of file:// URLs. Co-Authored-By: Claude Sonnet 4.6 --- oravector-demo/backend/main_oracle.py | 4 ++++ oravector-demo/backend/main_oracle_indb.py | 4 ++++ pgvector-demo/backend/main.py | 4 ++++ 3 files changed, 12 insertions(+) diff --git a/oravector-demo/backend/main_oracle.py b/oravector-demo/backend/main_oracle.py index da7bb64..d761e04 100644 --- a/oravector-demo/backend/main_oracle.py +++ b/oravector-demo/backend/main_oracle.py @@ -3,6 +3,7 @@ import array from fastapi import FastAPI, Query from fastapi.middleware.cors import CORSMiddleware from fastapi.responses import FileResponse +from fastapi.staticfiles import StaticFiles from dotenv import load_dotenv from db_oracle import get_connection from embedder import embed_text @@ -11,8 +12,11 @@ load_dotenv() PHOTOS_DIR = os.getenv("PHOTOS_DIR") +FRONTEND_DIR = os.path.join(os.path.dirname(__file__), "../../oravector-demo/frontend") + app = FastAPI() app.add_middleware(CORSMiddleware, allow_origins=["*"], allow_methods=["*"], allow_headers=["*"]) +app.mount("/ui", StaticFiles(directory=os.path.abspath(FRONTEND_DIR), html=True), name="ui") @app.get("/search") def search(q: str = Query(...), limit: int = Query(12)): diff --git a/oravector-demo/backend/main_oracle_indb.py b/oravector-demo/backend/main_oracle_indb.py index 6fb8af6..09541df 100644 --- a/oravector-demo/backend/main_oracle_indb.py +++ b/oravector-demo/backend/main_oracle_indb.py @@ -2,6 +2,7 @@ import os from fastapi import FastAPI, Query from fastapi.middleware.cors import CORSMiddleware from fastapi.responses import FileResponse +from fastapi.staticfiles import StaticFiles from dotenv import load_dotenv from db_oracle import get_connection_indb @@ -9,8 +10,11 @@ load_dotenv() PHOTOS_DIR = os.getenv("PHOTOS_DIR") +FRONTEND_DIR = os.path.join(os.path.dirname(__file__), "../../oravector-demo/frontend") + app = FastAPI() app.add_middleware(CORSMiddleware, allow_origins=["*"], allow_methods=["*"], allow_headers=["*"]) +app.mount("/ui", StaticFiles(directory=os.path.abspath(FRONTEND_DIR), html=True), name="ui") @app.get("/search") def search(q: str = Query(...), limit: int = Query(12)): diff --git a/pgvector-demo/backend/main.py b/pgvector-demo/backend/main.py index bf268a1..f30df08 100644 --- a/pgvector-demo/backend/main.py +++ b/pgvector-demo/backend/main.py @@ -2,6 +2,7 @@ import os from fastapi import FastAPI, Query from fastapi.middleware.cors import CORSMiddleware from fastapi.responses import FileResponse +from fastapi.staticfiles import StaticFiles from dotenv import load_dotenv from db import get_connection from embedder import embed_text @@ -10,8 +11,11 @@ load_dotenv() PHOTOS_DIR = os.getenv("PHOTOS_DIR") +FRONTEND_DIR = os.path.join(os.path.dirname(__file__), "../../pgvector-demo/frontend") + app = FastAPI() app.add_middleware(CORSMiddleware, allow_origins=["*"], allow_methods=["*"], allow_headers=["*"]) +app.mount("/ui", StaticFiles(directory=os.path.abspath(FRONTEND_DIR), html=True), name="ui") @app.get("/search") def search(q: str = Query(...), limit: int = Query(12)):