Scaffold and Phase 1

This commit is contained in:
2026-05-02 19:46:42 -05:00
parent ab74e7cad4
commit d909cb7c30
92 changed files with 4967 additions and 0 deletions
@@ -0,0 +1,20 @@
/**
* Auctioneer console optimised for tablet in landscape.
* Shows: current lot, current bid, next callable bid, recent bid stream,
* and controls: Activate / Call Next Bid / Going Once / Going Twice / Sold / Pass.
*
* TODO:
* - Subscribe to all live auction socket events
* - Emit auctioneer_* events on button press
* - Display large-format current bid and paddle number
*/
export default function AuctioneerPage() {
return (
<main className="min-h-screen bg-gray-900 text-white p-6 space-y-6">
<h1 className="text-2xl font-bold">Auctioneer Console</h1>
<div className="border border-dashed border-gray-600 rounded-xl p-8 text-center text-gray-500 text-sm">
Live auction controls not yet implemented
</div>
</main>
);
}
@@ -0,0 +1,19 @@
/**
* Check-in station search bidders, scan QR, assign paddle, confirm payment readiness.
*
* TODO:
* - Search /api/bidders?eventId=&q=
* - QR scanner via device camera
* - POST /api/check-in/:id on confirm
* - Show payment-on-file indicator
*/
export default function CheckInPage() {
return (
<main className="p-4 space-y-4">
<h1 className="text-2xl font-bold">Check-In</h1>
<div className="border border-dashed border-gray-300 rounded-xl p-8 text-center text-gray-400 text-sm">
QR scan & bidder search not yet implemented
</div>
</main>
);
}
@@ -0,0 +1,26 @@
/**
* Display board read-only fullscreen view for projector / TV.
* Shows: current item, current bid, bidder paddle, org branding,
* and optionally a fundraising thermometer.
*
* TODO:
* - Subscribe to live auction events (read-only socket connection)
* - Fullscreen CSS layout with large typography
* - Paddle raise thermometer via paddle_raise_update events
*/
export default function DisplayBoardPage() {
return (
<main className="min-h-screen bg-brand-900 text-white flex flex-col items-center justify-center p-8 space-y-8">
<h1 className="text-5xl font-black tracking-tight">Storybid</h1>
<div className="text-center space-y-2">
<p className="text-2xl text-brand-100 uppercase tracking-widest">Current Lot</p>
<p className="text-6xl font-bold"></p>
</div>
<div className="text-center">
<p className="text-xl text-brand-200">Current Bid</p>
<p className="text-8xl font-black">$</p>
<p className="text-2xl text-brand-300 mt-2">Paddle </p>
</div>
</main>
);
}
@@ -0,0 +1,19 @@
/**
* Spotter mode floor volunteer enters bids by paddle number.
* Simple: paddle number input + confirm button. Emits auctioneer_accept_bid.
*
* TODO:
* - Show current item and called amount (read-only)
* - Large paddle number input with numeric keyboard
* - Emit place_live_bid (spotter path) on confirm
*/
export default function SpotterPage() {
return (
<main className="min-h-screen p-6 space-y-6">
<h1 className="text-2xl font-bold">Spotter</h1>
<div className="border border-dashed border-gray-300 rounded-xl p-8 text-center text-gray-400 text-sm">
Paddle entry not yet implemented
</div>
</main>
);
}