Flag each event as Singles or Team Event

Investigated BCP's API for a team-size field (5-man vs 8-man, etc.) —
there isn't one. The only candidate, totalPlayers / totalTeamPlayers,
tracks live registration progress rather than the event's configured
format, so it's unreliable for upcoming events with thin early signups
(verified: "TEO-8 - All in.", an event explicitly branded as an 8-man
format, currently shows 21/8 ≈ 2.6 via that ratio — would round to a
wrong "3-Man Teams"). Sticking to the one field BCP does report
reliably (teamEvent) rather than shipping a specific size that's
sometimes confidently wrong.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SBzcNkW7JcYipnAX6HfgmK
This commit is contained in:
2026-09-04 16:04:42 -05:00
co-authored by Claude Sonnet 5
parent efa3b7f6da
commit 40c41fad08
+12 -1
View File
@@ -131,6 +131,16 @@ function locationOf(ev) {
return parts.length ? parts.join(", ") : (ev.formatted_address || "Location TBD"); return parts.length ? parts.join(", ") : (ev.formatted_address || "Location TBD");
} }
// BCP's only reliable format signal is the teamEvent flag. There's no
// dedicated "team size" field — the closest candidate (totalPlayers /
// totalTeamPlayers) reflects live registration progress, not the event's
// configured format, so it's noisy/wrong for events with thin early
// signups (which is most upcoming events). Deliberately not guessing a
// specific team size here.
function formatOf(ev) {
return ev.teamEvent ? "Team Event" : "Singles";
}
function eventCard(ev) { function eventCard(ev) {
const capacity = ev.numTickets const capacity = ev.numTickets
? `<span class="badge badge-ghost badge-sm">${ev.checkedInPlayers ?? 0}/${ev.numTickets} checked in</span>` ? `<span class="badge badge-ghost badge-sm">${ev.checkedInPlayers ?? 0}/${ev.numTickets} checked in</span>`
@@ -138,6 +148,7 @@ function eventCard(ev) {
const system = ev.gameSystemName const system = ev.gameSystemName
? `<span class="badge badge-outline badge-sm">${esc(ev.gameSystemName)}</span>` ? `<span class="badge badge-outline badge-sm">${esc(ev.gameSystemName)}</span>`
: ""; : "";
const format = `<span class="badge badge-warning badge-sm">${formatOf(ev)}</span>`;
return ` return `
<a href="${BCP_ORIGIN}/event/${esc(ev.id)}" target="_blank" rel="noopener" <a href="${BCP_ORIGIN}/event/${esc(ev.id)}" target="_blank" rel="noopener"
class="card card-border bg-base-200 hover:border-warning transition-colors"> class="card card-border bg-base-200 hover:border-warning transition-colors">
@@ -145,7 +156,7 @@ function eventCard(ev) {
<div class="min-w-0"> <div class="min-w-0">
<div class="font-semibold truncate">${esc(ev.name)}</div> <div class="font-semibold truncate">${esc(ev.name)}</div>
<div class="text-sm opacity-60 mt-1">${esc(locationOf(ev))}</div> <div class="text-sm opacity-60 mt-1">${esc(locationOf(ev))}</div>
<div class="flex gap-2 mt-2">${system}${capacity}</div> <div class="flex gap-2 mt-2">${format}${system}${capacity}</div>
</div> </div>
<div class="text-right shrink-0"> <div class="text-right shrink-0">
<div class="font-mono text-sm text-warning">${fmtDateRange(ev.eventDate, ev.eventEndDate)}</div> <div class="font-mono text-sm text-warning">${fmtDateRange(ev.eventDate, ev.eventEndDate)}</div>