From ac29b6e929576cb66323b609cc843adeafd51f64 Mon Sep 17 00:00:00 2001 From: James Pattinson Date: Fri, 19 Dec 2025 08:33:42 -0500 Subject: [PATCH] UI config --- .env.example | 5 ++++ backend/app/api/endpoints/public.py | 41 ++++++++++++++++++++++++++- backend/app/core/config.py | 5 ++++ docker-compose.prod.yml | 2 ++ docker-compose.yml | 3 ++ web/admin.html | 43 +++++++++++++++++++++++++---- web/reports.html | 43 ++++++++++++++++++++++++++++- 7 files changed, 134 insertions(+), 8 deletions(-) diff --git a/.env.example b/.env.example index b88bbda..f08d18d 100644 --- a/.env.example +++ b/.env.example @@ -24,6 +24,11 @@ MAIL_FROM_NAME=your_mail_from_name_here # Application settings BASE_URL=your_base_url_here +# UI Configuration +TAG= +TOP_BAR_BASE_COLOR=#2c3e50 +ENVIRONMENT=development + # Redis (optional) REDIS_URL= diff --git a/backend/app/api/endpoints/public.py b/backend/app/api/endpoints/public.py index 06661d1..2877eed 100644 --- a/backend/app/api/endpoints/public.py +++ b/backend/app/api/endpoints/public.py @@ -11,10 +11,35 @@ from app.models.local_flight import LocalFlightStatus from app.models.departure import DepartureStatus from app.models.arrival import ArrivalStatus from datetime import date, datetime, timedelta +import re router = APIRouter() +def lighten_color(hex_color, factor=0.3): + """Lighten a hex color by a factor (0-1)""" + hex_color = hex_color.lstrip('#') + if len(hex_color) != 6: + return hex_color # Invalid, return as is + r, g, b = int(hex_color[0:2], 16), int(hex_color[2:4], 16), int(hex_color[4:6], 16) + r = min(255, int(r + (255 - r) * factor)) + g = min(255, int(g + (255 - g) * factor)) + b = min(255, int(b + (255 - b) * factor)) + return f"#{r:02x}{g:02x}{b:02x}" + + +def darken_color(hex_color, factor=0.3): + """Darken a hex color by a factor (0-1)""" + hex_color = hex_color.lstrip('#') + if len(hex_color) != 6: + return hex_color # Invalid, return as is + r, g, b = int(hex_color[0:2], 16), int(hex_color[2:4], 16), int(hex_color[4:6], 16) + r = max(0, int(r * (1 - factor))) + g = max(0, int(g * (1 - factor))) + b = max(0, int(b * (1 - factor))) + return f"#{r:02x}{g:02x}{b:02x}" + + @router.get("/arrivals") async def get_public_arrivals(db: Session = Depends(get_db)): """Get today's arrivals for public display (PPR and local flights)""" @@ -200,4 +225,18 @@ async def get_public_departures(db: Session = Depends(get_db)): 'isDeparture': True }) - return departures_list \ No newline at end of file + return departures_list + + +@router.get("/config") +async def get_ui_config(): + """Get UI configuration for client-side rendering""" + from app.core.config import settings + base_color = settings.top_bar_base_color + return { + "tag": settings.tag, + "top_bar_gradient_start": base_color, + "top_bar_gradient_end": lighten_color(base_color, 0.4), # Lighten for gradient end + "footer_color": darken_color(base_color, 0.2), # Darken for footer + "environment": settings.environment + } \ No newline at end of file diff --git a/backend/app/core/config.py b/backend/app/core/config.py index 3c4741b..97dcca1 100644 --- a/backend/app/core/config.py +++ b/backend/app/core/config.py @@ -28,6 +28,11 @@ class Settings(BaseSettings): project_name: str = "Airfield PPR API" base_url: str + # UI Configuration + tag: str = "" + top_bar_base_color: str = "#2c3e50" + environment: str = "production" # production, development, staging, etc. + # Redis settings (for future use) redis_url: Optional[str] = None diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index 9d45d8d..b74c3f6 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -26,6 +26,8 @@ services: MAIL_FROM_NAME: ${MAIL_FROM_NAME} BASE_URL: ${BASE_URL} REDIS_URL: ${REDIS_URL} + TAG: ${TAG} + TOP_BAR_BASE_COLOR: ${TOP_BAR_BASE_COLOR} ENVIRONMENT: production WORKERS: "4" ports: diff --git a/docker-compose.yml b/docker-compose.yml index a48f6c1..73cb302 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -38,6 +38,9 @@ services: MAIL_FROM_NAME: ${MAIL_FROM_NAME} BASE_URL: ${BASE_URL} REDIS_URL: ${REDIS_URL} + TOWER_NAME: ${TOWER_NAME} + TOP_BAR_BASE_COLOR: ${TOP_BAR_BASE_COLOR} + ENVIRONMENT: ${ENVIRONMENT} ports: - "${API_PORT_EXTERNAL}:8000" # Use different port to avoid conflicts with existing system depends_on: diff --git a/web/admin.html b/web/admin.html index 5676aab..6f05fb1 100644 --- a/web/admin.html +++ b/web/admin.html @@ -10,7 +10,7 @@
-

✈️ Swansea Tower

+

✈️ Swansea Tower