- React + MUI DataGrid app with faction filter, search, change filter - Biggest movers cards (drops/rises) scoped to current filter view - Historical points graph modal (5 MFM versions: 1.14 → current) - URL state sync (faction, dir, q params — shareable URLs) - Grimdark favicon + OG embed image (Google Imagen) - Multi-stage Dockerfile (node build → nginx serve) - docker-compose.yml with Traefik + Cloudflare TLS - Data pipeline: build_deduped_data.py merges PDF + live scrape - Ynnari merged into Aeldari (shared codex) - Mobile responsive: flex columns, no fixed pixel widths - Color semantics: green=cheaper, red=costlier (consistent everywhere) - 1,449 units across 31 factions
38 lines
1.1 KiB
YAML
38 lines
1.1 KiB
YAML
# WH40K Points Comparator — Docker Compose
|
|
# Multi-stage Dockerfile builds the React app and serves via nginx.
|
|
#
|
|
# Usage:
|
|
# 1. Edit HOST below to match your domain
|
|
# 2. Edit CERT_RESOLVER to match your Traefik cert resolver
|
|
# 3. docker compose up -d --build
|
|
#
|
|
# If you don't use Traefik, remove the labels and expose a port directly:
|
|
# ports:
|
|
# - "8080:80"
|
|
|
|
services:
|
|
wh40k-site:
|
|
build:
|
|
context: .
|
|
dockerfile: Dockerfile
|
|
image: wh40k-site:latest
|
|
container_name: wh40k-site
|
|
restart: unless-stopped
|
|
# Direct port access (uncomment if not using Traefik):
|
|
# ports:
|
|
# - "8080:80"
|
|
networks:
|
|
- hermes-net
|
|
labels:
|
|
- "traefik.enable=true"
|
|
- "traefik.docker.network=hermes-net"
|
|
- "traefik.http.routers.wh40k-site.entrypoints=websecure"
|
|
- "traefik.http.routers.wh40k-site.rule=Host(`wh40k.damascusfront.net`)"
|
|
- "traefik.http.routers.wh40k-site.tls=true"
|
|
- "traefik.http.routers.wh40k-site.tls.certresolver=cloudflare"
|
|
- "traefik.http.services.wh40k-site.loadbalancer.server.port=80"
|
|
|
|
networks:
|
|
hermes-net:
|
|
external: true
|
|
name: hermes-net |