Season poster bg:render_season_poster() now pulls https://files-api.novox.be/dilbert/sports/formula1/cars/{year}.jpg, cover-fits into 1000×1500, and overlays a vertical dark gradient so the wordmark/year/footer stay legible over any underlying photo. Falls back to the previous all-black layout if the file isn't there.
Image:
python:3.12-slim → python:3.12-alpine. Debian was the lazy default; Alpine is the appropriate weight for this service.
fonts-dejavu-core → ttf-liberation. Same Liberation Sans Bold that Arch installs on the dev host (/usr/share/fonts/liberation/LiberationSans-Bold.ttf), so posters render byte-identical in dev and prod.
Drop fastf1 from the pip install — not imported anywhere in the served code paths. Removes pandas/matplotlib/scipy tail.
Add numpy explicitly (was pulled in transitively by fastf1; models/geo_json/geometry.py imports it at module load for vector ops).
Verified locally:
docker build succeeds.
Container start renders both /posters/race/Monaco Grand Prix/2025.png and /posters/season/2025.png cleanly.
Image size: 194 MB.
**Season poster bg:** `render_season_poster()` now pulls `https://files-api.novox.be/dilbert/sports/formula1/cars/{year}.jpg`, cover-fits into 1000×1500, and overlays a vertical dark gradient so the wordmark/year/footer stay legible over any underlying photo. Falls back to the previous all-black layout if the file isn't there.
**Image:**
- `python:3.12-slim` → `python:3.12-alpine`. Debian was the lazy default; Alpine is the appropriate weight for this service.
- `fonts-dejavu-core` → `ttf-liberation`. Same Liberation Sans Bold that Arch installs on the dev host (`/usr/share/fonts/liberation/LiberationSans-Bold.ttf`), so posters render byte-identical in dev and prod.
- Drop `fastf1` from the pip install — not imported anywhere in the served code paths. Removes pandas/matplotlib/scipy tail.
- Add `numpy` explicitly (was pulled in transitively by fastf1; `models/geo_json/geometry.py` imports it at module load for vector ops).
**Verified locally:**
- `docker build` succeeds.
- Container start renders both `/posters/race/Monaco Grand Prix/2025.png` and `/posters/season/2025.png` cleanly.
- Image size: 194 MB.
Season poster bg:
render_season_poster()now pullshttps://files-api.novox.be/dilbert/sports/formula1/cars/{year}.jpg, cover-fits into 1000×1500, and overlays a vertical dark gradient so the wordmark/year/footer stay legible over any underlying photo. Falls back to the previous all-black layout if the file isn't there.Image:
python:3.12-slim→python:3.12-alpine. Debian was the lazy default; Alpine is the appropriate weight for this service.fonts-dejavu-core→ttf-liberation. Same Liberation Sans Bold that Arch installs on the dev host (/usr/share/fonts/liberation/LiberationSans-Bold.ttf), so posters render byte-identical in dev and prod.fastf1from the pip install — not imported anywhere in the served code paths. Removes pandas/matplotlib/scipy tail.numpyexplicitly (was pulled in transitively by fastf1;models/geo_json/geometry.pyimports it at module load for vector ops).Verified locally:
docker buildsucceeds./posters/race/Monaco Grand Prix/2025.pngand/posters/season/2025.pngcleanly.4a2e9f5d63被合并。