Built for Storybook Farm

A charity auction night that never goes dark.

Storybid is a self-hosted live + silent auction platform purpose-built for Storybook Farm. Bidders bid from their phones, the auctioneer drives the room, and the whole event keeps running on local Wi-Fi if the internet drops.

1 system
Live + silent + fund-a-need
0 app store
Mobile web, install as PWA
100%
Self-hosted & offline-ready
2 of 6
Build phases shipped
9:41● ● ● ●

Welcome back

Sarah Whitman

#142 Your paddle
🌿
Storybook Farm Gala
Auction is live
🎙
Live
Bid in real time
🏷️
Silent
Browse & bid
📋
My Bids
3 active
💳
Checkout
Pay & collect
The problem

Off-the-shelf auction tools weren't built for Storybook Farm.

Existing platforms charge per-event SaaS fees, hold donor data on someone else's cloud, and quietly assume the venue has reliable Wi-Fi. None of those are safe bets for a rural fundraiser where a flaky uplink could end the night early — and where each lost bid is real money that didn't reach the kids.

⚠️

Bid loss when Wi-Fi blinks

SaaS auction tools hard-fail when their server is unreachable. A 60-second outage during a $5,000 lot is a $5,000 problem.

💸

Per-event fees add up

Most platforms take 1–3% of every transaction plus monthly minimums. Over a few galas, that pays for an entire system you'd own.

🔒

Donor data lives elsewhere

Bidder lists, contact info, and giving history sit in a vendor's database. Storybid keeps every record on a server you control.

What it does today

Everything you need to run gala night, in one place.

One platform covers the live auctioneer call, the silent auction catalog, paddle-raise / fund-a-need, check-in, payment, and end-of-night reporting. Guests use their phones — no app store, no downloads.

Shipped
🎙

Live auction console

Auctioneer-controlled increments, single-tap bid button on every phone, going-once / going-twice / sold workflow with winner confirmation.

In progress
🏷️

Silent auction catalog

Real-time current high bid, countdown timers, configurable section closing, soft-close to stop sniping, and instant outbid alerts.

Shipped
📺

Display board

Big-screen view for the projector or TV with current lot, current bid, paddle number, branding, and an optional fundraising thermometer.

Planned
💖

Fund-a-need / paddle raise

Donation tiers with live totals on screen, suggested amounts, and one-tap commitment from any guest's phone.

Planned
🪪

QR check-in & digital paddles

Guests scan in at the door, get a digital paddle on their phone, and connect their card for fast checkout when the night ends.

Planned
💳

Stripe checkout & receipts

End-of-night payment, saved cards, donor receipts, and a clean audit trail for accounting and donor acknowledgment.

Shipped
🛠️

Spotter mode

Volunteers can enter floor bids by paddle number from their own phone — table captains and roving spotters stay synced with the auctioneer.

Shipped
🔐

Email + SMS sign-in

Magic-link email login for staff and donors who prefer it; Twilio Verify SMS OTP for guests who'd rather use their phone number.

Planned
📊

Reporting & donor history

Revenue, sell-through, bidder activity, donor giving history, and one-click exports for the accountant after the event.

The differentiator

If the internet drops mid-auction, the auction doesn't drop.

Storybid runs on a small server on-site. Phones automatically fall back from the public address to a local hostname on the venue Wi-Fi, and any bid that can't reach the server right away is queued on the device and synced the moment connectivity returns — with an audit-trail tag so the bid history is never in doubt.

1
Public URL
storybid.storybookfarm.org
2
Local DNS
bid.gala.lan over Wi-Fi
3
Offline queue
Phone holds & syncs later
Who uses it

A focused screen for every person in the room.

Storybid ships separate, optimized views for each role on event night, so the auctioneer, spotters, check-in volunteers, and the bidders all see only what they need — no admin clutter, no accidental clicks during the call.

👤

Bidder

Mobile-first home, live screen, silent catalog, my bids, watchlist, and checkout — all in one PWA.

🎙

Auctioneer

Lock-screen console with current lot, current bid, called amount, sold workflow, and bidder paddle.

👋

Spotter

Tap-paddle interface for floor volunteers to log bids by paddle number on behalf of in-room guests.

🪪

Check-in staff

QR scan, search, paddle assignment, payment-on-file confirmation — keeps the door line moving.

📺

Display board

Read-only big-screen view for the projector or TV with branding, current lot, and fund-a-need totals.

💼

Event manager

Admin console for events, items, bidders, donors, sponsors, increment rules, and reporting exports.

🛡️

Org admin

Branding, Stripe keys, SMS provider config, DNS / failover settings, role assignments, and audit log.

💳

Cashier

Staff-assisted checkout, partial settlements, receipt printing, and end-of-night reconciliation.

Screen previews

A peek at the surfaces that matter most.

These are the views guests, auctioneers, and the room will actually see. Final visuals will use Storybook Farm branding, photography, and tone of voice.

Bidder · Live auction
Shipped
Lot 14
Weekend at the Lake House
Donated by The Henderson Family
● Bidding open
Current bid
$3,200
Bidder · Silent auction
In progress
🎨
Custom Family Portrait
$425 · top bid
Closes in 22:14
🍷
Sonoma Wine Trio
$280 · top bid
Closes in 31:08
🛶
Guided Kayak Day
$190 · you're top
Closes in 12:45
📚
Storytime Library Set
$140 · top bid
Closes in 41:33
Staff · Auctioneer console
Shipped
Lot 14 · Active
⏱ 02:18 on lot
Weekend at the Lake House
Current bid
$3,200
Next call
$3,400
High bidder
Paddle #142
Bidders in
7
+ Increment
Going once
Going twice
SOLD
Room · Display board
Shipped
Storybook Farm Charity Gala
Weekend at the Lake House
Current bid
$3,200
High bidder · Paddle #142
Fund-a-Need · $34,200 of $50,000
Door · Check-in flow
Planned
Scan QR or look up by name
Sarah Whitman · Table 7
Done
Assign paddle
Paddle #142 issued
Done
3
Card on file (Stripe)
Tap to capture for fast checkout
Now
4
Send digital paddle to phone
SMS link, magic email, or QR
Next
Admin · Live reporting
Planned
Raised tonight
$84,250
▲ on goal
Sell-through
87%
42 of 48 lots
Active bidders
128
+9 since 7pm
Avg bid
$310
▲ vs last yr
Hourly bid volume · 6pm–10pm
Bidder · Outbid & alerts
Planned
⚠️
You've been outbid on Sonoma Wine Trio
New top bid is $300. Tap to bid $320.
Just now · push
🏆
You won Storytime Library Set
Final bid $140. We'll charge your card on file.
2 min ago · email + SMS
Silent auction closes in 5 min
3 lots in your watchlist still open.
8 min ago · in-app
Bidder · Fund-a-Need
Planned
Paddle Raise
Send a child to summer camp
68% of $50,000 goal · 142 donors so far
What's coming

Planned features that aren't shipped yet.

The four remaining build phases turn what's already running into a complete event-night system. Here's the work the organization is being asked to greenlight.

🏷️

Silent auction engine

Catalog with item pages, current high bid, minimum next bid, configurable closing windows by section/table/category, and bidder watchlists.

Phase 3 · in flight

Soft-close / auto-extend

If a valid bid lands in the last 60 seconds, the lot extends automatically — preventing last-second sniping and matching common silent-auction practice.

Phase 3
🔔

Outbid alerts

Channel-aware notifications: in-app banner, web push where supported, email confirmations, and SMS for time-sensitive outbid and checkout-ready alerts.

Phase 3
📲

PWA install & offline shell

Service worker caches the app shell so guests can keep browsing even with no signal; a Dexie/IndexedDB outbox queues bids and syncs them on reconnect.

Phase 4
📡

FQDN → LAN failover

Connection manager attempts the public URL first, then falls back to the UniFi local DNS hostname on the venue Wi-Fi. Origin of every bid is tagged for the audit trail.

Phase 4
📜

Audit log with origin tagging

Every bid records device id, client timestamp, server-received timestamp, sequence number, and origin (public, local DNS, local IP, offline queue) for full traceability.

Phase 4
📥

CSV bidder import

Bulk-load donor lists from previous events; assign paddle numbers, table seating, and preferred contact channels in one upload.

Phase 5
🪪

QR check-in & digital paddles

Guests pre-register, get a QR code by email, and scan in at the door. Digital paddle appears on their phone — no laminated cards to print or lose.

Phase 5
💖

Fund-a-Need / paddle raise

Donation tier setup, live total updates on the display board, and one-tap commitment from any guest's phone. Optional matching-gift tracking.

Phase 5
💳

Stripe checkout

Payment Element + saved cards, end-of-night batch charge, staff-assisted cashier station, immediate pay-now for buy-it-now items, and partial settlement.

Phase 5
🧾

Donor receipts & acknowledgments

Auto-generated tax-deductible receipts with the fair-market-value split, plus a personalized donor thank-you email after the event.

Phase 5
📊

Reporting & exports

Revenue, sell-through, top donors, fund-a-need totals, and bidder activity. CSV exports for accounting and the donor-relationship system.

Phase 5
🎁

Buy-it-now & sponsorships

Fixed-price offers (raffle tickets, dinner add-ons, sponsorship packages) sold straight from the catalog without going through the auction flow.

Phase 5
🖼️

Rich item media

Multiple images, video walkthroughs, donor-provided documents, and external embeds for unique lots like vacation packages or experience auctions.

Phase 5

Accessibility hardening

High-contrast mode for low-light ballrooms, larger touch targets, screen-reader audit, and noise-aware notifications for hearing-impaired guests.

Phase 6
🏋️

Load testing & backups

Realistic bidder-count load tests, automated nightly backups, point-in-time restore, and a tested disaster-recovery procedure for event night.

Phase 6
📘

Operator manual

Printable preflight checklist, per-role staff runbooks, and a one-page "what to do if X happens" sheet for event-night volunteers.

Phase 6
🌐

UniFi event-network guide

Documented SSID setup, local DNS records, device prioritization, and on-site UPS recommendations so the venue Wi-Fi is bulletproof.

Phase 6
Build plan

Where the build stands today.

Storybid is built in six clear phases. The foundation and live auction core are already complete. The remaining four phases finish silent auction, offline resilience, event-night ops, and hardening.

Phase 1Done

Foundation

Monorepo, Docker deploy, organization & event models, admin shell, authentication.

  • React + Vite client scaffolded
  • Express + Prisma server
  • Magic-link & SMS OTP login
  • Admin shell & routing
Phase 2Done

Live auction core

Auctioneer console, bidder live screen, increment engine, spotter mode, display board.

  • Socket.io live bid stream
  • Going-once/twice/sold workflow
  • Spotter paddle-entry view
  • Big-screen display board
Phase 3In flight

Silent auction

Catalog, countdowns, soft-close, outbid notifications, watchlists.

  • Item pages with current high bid
  • Per-section closing windows
  • Soft-close auto-extend
  • Push / email / SMS outbid alerts
Phase 4Next

Offline resilience

PWA shell, IndexedDB outbox, FQDN-to-LAN failover, sync engine, audit tagging.

  • Workbox service worker
  • Dexie outbox queue
  • Local DNS failover
  • Origin-tagged audit log
Phase 5Next

Event ops & checkout

QR check-in, digital paddles, fund-a-need module, Stripe checkout, receipts.

  • QR registration + door scan
  • Fund-a-Need / paddle raise
  • Stripe Payment Element
  • Tax-receipt email automation
Phase 6Next

Hardening & polish

Load test, accessibility, backups, runbooks, operator manual, event-day checklist.

  • Realistic load testing
  • Backups + restore drill
  • Accessibility audit
  • Printed staff runbook

Technical stack

Layer
Choice
Client
React 18 + TypeScript + Vite + Tailwind, installable as a PWA
Real-time
Socket.io for live bid streams and silent auction outbid alerts
Server
Node.js + Express + TypeScript, Prisma ORM, PostgreSQL
Offline
Workbox service worker + Dexie/IndexedDB outbox, LAN failover
Auth
Email magic links + Twilio Verify SMS OTP for guest bidders
Payments
Stripe Payment Element — no card data ever touches our server
Hosting
Docker Compose on a self-hosted server with on-site failover
Network
UniFi local DNS records + dedicated event SSID with battery backup
Data & security

Donor data stays with Storybook Farm.

Because Storybid is self-hosted, every bidder record, donation, and audit-log entry lives on a server the organization controls. The only third parties in the loop are Stripe (payments) and the SMS provider for OTP — both narrowly scoped.

🔐

PCI-light by design

Stripe Payment Element handles card entry in an iframe Stripe owns. Card numbers never reach our database, our server, or our logs.

📜

Append-only audit log

Every bid, status change, and admin action is logged with timestamp, actor, device id, and origin tag. Disputes get a clean, defensible record.

👥

Role-based access

Admin, event manager, auctioneer, spotter, check-in, cashier, and bidder each see only their own surface — accidental misclicks during the call are nearly impossible.

🛡️

Server-side bid validation

The server is the source of truth for accepted bids. Rate-limiting, increment validation, and signed tokens protect against spoofed clients and double-submits.

💾

Backups you actually own

Nightly database snapshots to a location of the organization's choosing, plus a tested restore procedure documented in the operator manual.

🏠

Self-hosted on Docker

One docker compose up on Unraid or a small Linux VM. No vendor lock-in, no monthly minimums, no surprise renewals.

Indicative timeline

From approval to gala-ready in four working blocks.

Below is a rough cadence assuming approval is granted now. Exact dates depend on event date and Storybook Farm's preferred review checkpoints; this is a planning frame, not a contract.

Block AWeeks 1–3

Finish silent auction

Phase 3 wraps: catalog, soft-close, outbid alerts, watchlists. First end-to-end staff demo at week 3.

Block BWeeks 4–6

Offline & LAN failover

Phase 4: PWA shell, outbox queue, FQDN→LAN failover, simulated internet-drop drill recorded for review.

Block CWeeks 7–10

Check-in & checkout

Phase 5: QR check-in, fund-a-need, Stripe end-to-end, donor receipts, reporting exports.

Block DWeeks 11–12

Dress rehearsal & hardening

Phase 6: load test, accessibility pass, backup/restore drill, printed runbook, full mock-event night.

Questions the board usually asks

FAQ

What does it cost the organization to run?

The software itself has no per-event fee. Running costs are the small server (a Linux VM or Unraid host the org already owns), Stripe's standard 2.9% + 30¢ on each charge, and a few dollars per event in Twilio SMS for guest sign-in. There are no SaaS subscriptions, seat licenses, or transaction surcharges from us.

What happens if the venue Wi-Fi has no internet at all?

The on-site server keeps running, the local Wi-Fi keeps working, and phones automatically fall back from the public URL to the local DNS hostname. The auction continues normally — guests can still bid, the auctioneer can still call, and the display board still updates. When the WAN comes back, the server pushes the night's data to its public state and any device-side queued bids sync up.

Do guests need to download an app?

No. Storybid is a PWA — a website the phone treats like an app. Guests scan a QR code or follow an SMS link, the browser opens, and that's it. They can optionally tap "Add to Home Screen" to get an icon, but it's not required.

How do guests log in?

Two options: an email magic link (we send a one-tap login link to the email on file), or an SMS one-time code via Twilio Verify. Donors and staff who use Storybid often will tend toward email; walk-up guests usually prefer SMS. No passwords to manage either way.

Can we run more than one event a year?

Yes. The platform is built around one organization with many events over time — gala night, summer auction, online-only catalogs, sponsorship campaigns. Donor and item history follow the organization, so year-over-year reporting is built in.

What about disputes — "I bid first, the system didn't take it"?

Every bid attempt is logged with the device id, the client timestamp, the server-received timestamp, a client sequence number, and an origin tag (public URL, local DNS, local IP, or offline queue). If a guest disputes a result, the audit log shows exactly when their device sent the bid, when the server saw it, and how it was processed.

Where does donor data live, and who can see it?

Everything lives on Storybook Farm's own server. Stripe sees only the data needed to charge a card (name, email, amount). Twilio sees only the phone number for OTP. Storybid itself isn't a service — there's no central vendor with a copy of your donor list.

Is this ready for the next gala?

Phases 1 and 2 are live and demo-able now. The remaining four phases (silent auction, offline resilience, check-in & checkout, hardening) are scoped and sequenced. Approval today puts the system on track for the next major gala with a full dress rehearsal beforehand.

For board & staff review

Ready to greenlight Storybid?

We're asking the organization to approve the direction shown here so the remaining phases — silent auction, offline resilience, check-in & checkout, and hardening — can be scheduled and finished in time for gala night.

  • Brand fit
    Storybook Farm green & gold, clean and donor-appropriate.
  • Both auction modes
    Live + silent + fund-a-need in one event, one app.
  • Resilient to bad Wi-Fi
    Local server, LAN failover, offline bid queue with audit trail.
  • Self-hosted & owned
    No per-event SaaS fees; data stays with the organization.
  • PCI-light payments
    Stripe handles cards; we never store card data.
  • Year-over-year history
    Donor records and item history follow the organization across events.