f53f198f03
website/ holds Horizon's site: the horizon-theme tokens and bundled fonts, the launcher's sidebar, rows, buttons and segmented control, over Horizon's own frozen landscape. The parity table, harness count and roadmap are generated from the README at build time; releases, patch notes, the roadmap and links.json are refreshed in the browser from GitHub, with the build's copy as fallback. The download button picks the newest launcher-v* asset for the visitor's OS. Legal: the Minecraft disclaimer in the hero, footer and 404; no Minecraft logo or wordmark; no game files; the launcher's background (licence unconfirmed) and the screenshots showing it are left out; LEGAL.md lists every asset and its licence. No cookies, analytics or third-party assets. Railway: root directory website, Dockerfile (Node build, Caddy on $PORT with a strict CSP). Checked with Playwright at 360-1920 px and 1250x700 (docs/widths/); Lighthouse 96/100/96/92 on mobile, 100/100/96/92 on desktop. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
19 lines
721 B
Docker
19 lines
721 B
Docker
# Railway builds this with the service's root directory set to `website`.
|
|
# Stage 1 renders dist/ from src/ and the README on main (no npm dependencies needed).
|
|
FROM node:22-alpine AS build
|
|
WORKDIR /site
|
|
COPY build.mjs ./
|
|
COPY src ./src
|
|
COPY public ./public
|
|
COPY LEGAL.md ./
|
|
ARG GITHUB_TOKEN
|
|
RUN node build.mjs
|
|
|
|
# Stage 2 serves it with Caddy on $PORT.
|
|
FROM caddy:2-alpine
|
|
COPY Caddyfile /etc/caddy/Caddyfile
|
|
COPY --from=build /site/dist /srv
|
|
ENV PORT=8080
|
|
# The Content-Security-Policy allows the page's inline script and style by the hashes the build wrote.
|
|
CMD ["sh", "-c", "CSP_SCRIPT=\"$(cat /srv/.csp-script)\" CSP_STYLE=\"$(cat /srv/.csp-style)\" exec caddy run --config /etc/caddy/Caddyfile --adapter caddyfile"]
|