diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile
index 938f8f5596c44c52db4638b8f8a7991fe43a38c9..363ffa89cc8cbaab95cef83bf2dda3940130f5ec 100644
--- a/.devcontainer/Dockerfile
+++ b/.devcontainer/Dockerfile
@@ -1,17 +1,17 @@
-FROM ghcr.io/astral-sh/uv:python3.12-bookworm
-
-# Install just and other system dependencies
-RUN apt-get update && apt-get install -y \
- sudo \
- curl \
- && curl --proto '=https' --tlsv1.2 -sSf https://just.systems/install.sh | bash -s -- --to /usr/local/bin \
- && apt-get clean \
- && rm -rf /var/lib/apt/lists/*
-
-# Create non-root user with UID/GID typically used by VS Code (1000:1000)
-RUN useradd -ms /bin/bash -u 1000 vscode \
- && apt-get update && apt-get install -y sudo \
- && echo "vscode ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
-
-USER vscode
+FROM ghcr.io/astral-sh/uv:python3.12-bookworm
+
+# Install just and other system dependencies
+RUN apt-get update && apt-get install -y \
+ sudo \
+ curl \
+ && curl --proto '=https' --tlsv1.2 -sSf https://just.systems/install.sh | bash -s -- --to /usr/local/bin \
+ && apt-get clean \
+ && rm -rf /var/lib/apt/lists/*
+
+# Create non-root user with UID/GID typically used by VS Code (1000:1000)
+RUN useradd -ms /bin/bash -u 1000 vscode \
+ && apt-get update && apt-get install -y sudo \
+ && echo "vscode ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
+
+USER vscode
WORKDIR /workspaces
\ No newline at end of file
diff --git a/.dockerignore b/.dockerignore
index 4dc6a61d4f3983f76275a971b8ec33248a7a0cb0..cfd71789eb104a00f79fa9cc54159d701bee166e 100644
--- a/.dockerignore
+++ b/.dockerignore
@@ -1,6 +1,12 @@
-.git
-__pycache__
-*.pyc
-.env
-.env.*
-tests
\ No newline at end of file
+.git
+__pycache__
+*.pyc
+.env
+.env.*
+tests
+
+# Frontend artifacts: copied via the node stage in the multi-stage build,
+# so the python stage never needs the host's node_modules / dist tree.
+src/frontend/node_modules
+src/frontend/dist
+src/frontend/.vite
\ No newline at end of file
diff --git a/.env.dist b/.env.dist
index 769b1a5db589a383cc537f94f1139403fb3f8afc..b284f47fb9648a66fe7891aa7b35f922ee714879 100644
--- a/.env.dist
+++ b/.env.dist
@@ -26,6 +26,12 @@ LOG_PROMPTS=0 # write selector prompt snapshots
# Path to config.yaml
CONFIG_PATH=path/to/custom/config.yaml
+# Shared password for the new FastAPI frontend (leave empty to disable auth).
+APP_PASSWORD=
+
+# Session TTL in seconds for the in-process session store (defaults to 6h).
+SESSION_TTL_SECONDS=21600
+
# GraphDB
GRAPHDB_GRAPH=
GRAPHDB_URL=
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000000000000000000000000000000000000..7ff3b29e7f55dfd29ae5594ced5316a0ace86a80
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,9 @@
+*.png filter=lfs diff=lfs merge=lfs -text
+*.tif filter=lfs diff=lfs merge=lfs -text
+*.tiff filter=lfs diff=lfs merge=lfs -text
+*.jpg filter=lfs diff=lfs merge=lfs -text
+*.jpeg filter=lfs diff=lfs merge=lfs -text
+*.gif filter=lfs diff=lfs merge=lfs -text
+*.ico filter=lfs diff=lfs merge=lfs -text
+*.webp filter=lfs diff=lfs merge=lfs -text
+*.bmp filter=lfs diff=lfs merge=lfs -text
diff --git a/.github/workflows/deploy-to-hf.yml b/.github/workflows/deploy-to-hf.yml
index 45037852038f76a9ef3ed8cb15411752290b1057..d0dfd1fddbc16bd8f45d7b69f46e89a2c363d157 100644
--- a/.github/workflows/deploy-to-hf.yml
+++ b/.github/workflows/deploy-to-hf.yml
@@ -1,54 +1,54 @@
-name: Deploy to Hugging Face Space
-
-on:
- push:
- branches:
- - main
- workflow_dispatch:
-
-jobs:
- deploy:
- runs-on: ubuntu-latest
-
- steps:
- - name: Checkout code
- uses: actions/checkout@v4
- with:
- fetch-depth: 1
- lfs: false
-
- - name: Prepare clean HF deploy branch without assets
- run: |
- git config user.email "ci@github.actions"
- git config user.name "github-actions[bot]"
-
- original_readme="$(cat README.md)"
-
- cat > README.md <
-
+
+