From 750ee99080dd9afdd7407a6b1b92c4cb6818c4d6 Mon Sep 17 00:00:00 2001
From: david raistrick <1108844+keen99@users.noreply.github.com>
Date: Wed, 1 Jul 2026 16:41:17 -0400
Subject: [PATCH] feat: display campaign createdAt in UI card
Campaign card now shows created date/time next to char/encounter counts.
Lets DM tell newest campaign apart (replay tool creates many).
createdAt already set at campaign create (line 2174). Display renders
formatted: 'Jul 1, 2026, 16:32'.
replay-combat.js: campaign + encounter names now include timestamp
(new Date().toLocaleString) for easy identification.
WS collection push verified live (injected test campaigns appeared
without reload).
---
scripts/replay-combat.js | 8 +++++---
src/App.js | 5 +++++
2 files changed, 10 insertions(+), 3 deletions(-)
diff --git a/scripts/replay-combat.js b/scripts/replay-combat.js
index c2c0e1a..09c6f28 100644
--- a/scripts/replay-combat.js
+++ b/scripts/replay-combat.js
@@ -91,7 +91,7 @@ async function main() {
const encounterId = crypto.randomUUID();
await storage.setDoc(getPath.campaign(campaignId), {
- name: 'Replay Campaign',
+ name: `Replay Campaign (${new Date().toLocaleString('en-US', { hour12: false })})`,
playerDisplayBackgroundUrl: '',
ownerId: 'replay',
createdAt: new Date().toISOString(),
@@ -121,7 +121,7 @@ async function main() {
];
await storage.setDoc(getPath.encounter(campaignId, encounterId), {
- name: 'Big Boss Replay',
+ name: `Big Boss Replay (${new Date().toLocaleString('en-US', { hour12: false })})`,
campaignId,
createdAt: new Date().toISOString(),
participants,
@@ -184,7 +184,9 @@ async function main() {
const p = enc.participants.find(x => x.id === id);
return p ? `${p.name}:${p.initiative}` : id;
}).join(',');
- console.log(` turn ${totalTurns} (round ${enc.round}): ${actorName} | order=[${ordStr}] cur=${enc.currentTurnParticipantId}`);
+ // Also dump participants[] order (display source). Diverge from order = sync bug.
+ const pStr = enc.participants.map(p => `${p.name}:${p.initiative}`).join(',');
+ console.log(` turn ${totalTurns} (round ${enc.round}): ${actorName} | order=[${ordStr}] parts=[${pStr}] cur=${enc.currentTurnParticipantId}`);
// 1. damage: actor hits a random living, active target.
if (actor) {
diff --git a/src/App.js b/src/App.js
index 64934f5..9b2e697 100644
--- a/src/App.js
+++ b/src/App.js
@@ -2284,6 +2284,11 @@ function AdminView({ userId }) {
{campaign.encounterCount === undefined ? '...' : campaign.encounterCount} Encounters
+ {campaign.createdAt && (
+
+ {new Date(campaign.createdAt).toLocaleDateString('en-US', { year: 'numeric', month: 'short', day: 'numeric', hour: '2-digit', minute: '2-digit', hour12: false })}
+
+ )}