chore: clean up verification artifacts for repo hygiene

Removes temporary verification screenshots, docker files and verify.html
introduced for PR #58 validation.

- Before/after images and real-app screenshots remain accessible in history
  at e51cabb for PR review but are not needed in main
- Keeps only the actual fix: internal/query/championship.go + test
- Maintains docs/ structure without binary clutter (PRODUCT_ROADMAP, assets, etc.)

Fixes #57 remains: Sprint points now included (ANT 158->179)
This commit is contained in:
Aman Tahiliani
2026-07-10 23:53:11 -04:00
parent e51cabba62
commit 71523641ad
13 changed files with 0 additions and 102 deletions

View File

@@ -1,25 +0,0 @@
# Multi-stage: build Go + frontend (with fallback if npm fails)
FROM golang:1.25.6 AS go-builder
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN go build -o /boxbox-server ./cmd/main.go
FROM node:20 AS frontend-builder
WORKDIR /app/frontend
COPY frontend/package.json frontend/package-lock.json* ./
RUN npm ci || npm install
COPY frontend/ ./
# Allow build to succeed even if tsc fails - we use vite directly
RUN npx vite build || echo "frontend build failed - will use embedded assets"
FROM debian:bookworm-slim
RUN apt-get update && apt-get install -y ca-certificates && rm -rf /var/lib/apt/lists/*
WORKDIR /app
COPY --from=go-builder /boxbox-server /app/boxbox-server
COPY --from=frontend-builder /app/frontend/dist /app/frontend/dist
# fallback Alpine assets are already embedded in binary via //go:embed
EXPOSE 8080
ENV PORT=8080
CMD ["/app/boxbox-server","--web","--port","8080"]

View File

@@ -1,44 +0,0 @@
# box-box local prod-parity stack
# Usage:
# docker compose up --build -> http://localhost:8080
# Verification with Sprint fix:
# go run ./scripts/seed-verify-actual.go # seeds /tmp/boxbox-verify.db on host
# # or use compose volume mount:
# docker compose -f docker-compose.yml -f docker-compose.verify.yml up --build
#
# Next time: use this for screenshots so API + React UI are real.
services:
app:
build:
context: .
dockerfile: Dockerfile
ports:
- "8080:8080"
environment:
BOXBOX_DISABLE_LIVE: "1"
# optional: point at OpenF1 mock for hermetic e2e
# BOXBOX_OPENF1_BASE_URL: http://mock:4010
volumes:
# Persist domain DB between runs
- boxbox-data:/root/.local/share/box-box
restart: unless-stopped
# Optional: seed-verify job that generates the Sprint-correct DB
# and drops it into the shared volume. Run with:
# docker compose --profile verify run --rm seed-verify
seed-verify:
build:
context: .
dockerfile: Dockerfile
profiles: ["verify"]
volumes:
- boxbox-data:/data
entrypoint: ["/bin/sh","-c"]
# This expects scripts/seed-verify-actual.go to be adapted to write to /data/boxbox.db
# For now placeholder: copy host-seeded DB if you mounted /tmp
command: |
"ls -lh /data && echo 'mount your /tmp/boxbox-verify.db into /data/boxbox.db manually for verification'"
volumes:
boxbox-data:

Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 256 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 256 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

View File

@@ -1,33 +0,0 @@
<!doctype html>
<html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>box-box verify - championship fix</title><style>
body{font-family:Inter,system-ui,sans-serif;background:#0a0a0f;color:#e6e6f0;margin:0;padding:24px}
.card{background:#15151f;border:1px solid #2a2a3a;border-radius:12px;padding:20px;max-width:900px;margin:0 auto}
h1{font-size:20px;margin:0 0 4px} .sub{color:#9aa0b2;font-size:13px;margin-bottom:16px}
table{width:100%;border-collapse:collapse} th{color:#8b8fa3;text-align:left;font-size:11px;text-transform:uppercase;letter-spacing:.08em;padding:8px;border-bottom:1px solid #2a2a3a}
td{padding:10px 8px;border-bottom:1px solid #1e1e2a;font-size:14px} .pts{font-weight:700;color:#fff}
.badge{display:inline-block;background:#1d2a1d;color:#7bed9f;border-radius:999px;padding:2px 8px;font-size:11px;margin-left:8px}
.pos{color:#6b7085;width:30px} .team{color:#9aa0b2;font-size:12px}
.ok{color:#7bed9f} .pre{font-family:monospace;background:#0f0f16;padding:12px;border-radius:8px;font-size:12px;overflow:auto;max-height:200px;margin-top:16px}
</style></head><body>
<div class="card">
<h1>box-box championship hub <span class="badge">local verified</span></h1>
<div class="sub">GET /api/v1/championship/hub?year=2026&source=local — Sprint points included — ANT 158→179, RUS 128→154, HAM 129→147</div>
<table id="tbl"><thead><tr><th>#</th><th>Driver</th><th>Team</th><th>Points</th><th>W</th><th>Form</th></tr></thead><tbody><tr><td colspan=6>Loading...</td></tr></tbody></table>
<pre class="pre" id="raw"></pre>
</div>
<script>
async function load(){
const res = await fetch('/api/v1/championship/hub?year=2026&source=local');
const data = await res.json();
document.getElementById('raw').textContent = JSON.stringify(data.drivers.slice(0,10).map(d=>[d.name_acronym,d.points]),null,2);
const tbody = document.querySelector('#tbl tbody');
tbody.innerHTML='';
data.drivers.sort((a,b)=>b.points-a.points).forEach((d,i)=>{
const tr=document.createElement('tr');
tr.innerHTML=`<td class="pos">${i+1}</td><td><b>${d.name_acronym}</b> <span class="team">${d.full_name}</span></td><td class="team">${d.team_name}</td><td class="pts">${d.points}${d.name_acronym==='ANT'&&d.points===179?' <span class=ok>✓ FIXED</span>':''}${d.name_acronym==='RUS'&&d.points===154?' <span class=ok>✓ FIXED</span>':''}${d.name_acronym==='HAM'&&d.points===147?' <span class=ok>✓ FIXED</span>':''}</td><td>${d.wins}</td><td>${(d.form||[]).join(', ')}</td>`;
tbody.appendChild(tr);
});
}
load();
</script>
</body></html>