Standalone frontend: no-walk paths.py, own Dockerfile, own CI
paths.py drops the sibling-directory walk (frontend is now the repo
root: static/ and content/ are its own subdirectories, no more
sibling walk needed). New Dockerfile (much smaller deps -- fastapi,
uvicorn, httpx, jinja2, PyYAML -- no entrypoint script needed at all,
frontend has no migrations/pre-boot logic).
content/ is a committed starter copy for now, not yet real cross-repo
vendoring from thermograph-copy (that repo doesn't exist yet) -- noted
in paths.py's own docstring.
Real, known gap flagged rather than silently skipped: this process
cannot boot standalone (content.register() fetches the IndexNow key
from backend at import time with no retry, by design), so build.yml
only verifies the image builds, not a live boot+healthz check -- that
needs a genuine cross-repo contract-test job (booting a real backend
too), separate follow-up work. Same reason tests/ doesn't run here yet
(its conftest.py still imports backend's own test fixtures via a
sibling path that no longer exists) -- noted directly in the file.
2026-07-21 22:59:29 +00:00
|
|
|
"""Canonical filesystem locations for the SSR service, resolved once from the
|
|
|
|
|
repo root (repo-split Stage 7). content/ is committed here as a starter copy
|
|
|
|
|
extracted alongside frontend/frontend_ssr -- real cross-repo vendoring from
|
|
|
|
|
thermograph-copy (a build-time clone at a pinned ref) is deferred follow-up
|
|
|
|
|
work, not yet wired up.
|
2026-07-21 17:48:55 +00:00
|
|
|
"""
|
|
|
|
|
import os
|
|
|
|
|
|
Standalone frontend: no-walk paths.py, own Dockerfile, own CI
paths.py drops the sibling-directory walk (frontend is now the repo
root: static/ and content/ are its own subdirectories, no more
sibling walk needed). New Dockerfile (much smaller deps -- fastapi,
uvicorn, httpx, jinja2, PyYAML -- no entrypoint script needed at all,
frontend has no migrations/pre-boot logic).
content/ is a committed starter copy for now, not yet real cross-repo
vendoring from thermograph-copy (that repo doesn't exist yet) -- noted
in paths.py's own docstring.
Real, known gap flagged rather than silently skipped: this process
cannot boot standalone (content.register() fetches the IndexNow key
from backend at import time with no retry, by design), so build.yml
only verifies the image builds, not a live boot+healthz check -- that
needs a genuine cross-repo contract-test job (booting a real backend
too), separate follow-up work. Same reason tests/ doesn't run here yet
(its conftest.py still imports backend's own test fixtures via a
sibling path that no longer exists) -- noted directly in the file.
2026-07-21 22:59:29 +00:00
|
|
|
REPO_DIR = os.path.dirname(os.path.abspath(__file__))
|
|
|
|
|
STATIC_DIR = os.path.join(REPO_DIR, "static")
|
|
|
|
|
TEMPLATES_DIR = os.path.join(REPO_DIR, "templates")
|
2026-07-21 17:48:55 +00:00
|
|
|
CONTENT_DIR = os.path.join(REPO_DIR, "content")
|