1. Project Overview
Jason Kinas operates an online auction platform using Ultimate WooCommerce Auction Pro and requires a new Send Winner Emails screen built into the WordPress admin. After an auction finishes, the admin reviews the winners, selects who to email, and sends each winning bidder a single combined email that lists every lot they won and includes one payment link that opens checkout with all those lots pre-loaded in the cart.
The feature addresses a core workflow gap: currently, winner emails are sent automatically per lot, which means a bidder who won ten lots receives ten separate emails and has to pay ten times. This development replaces that with a single admin-controlled send — one email per bidder, one checkout for all their lots, sent only when the admin is ready.
2. Customer Requirements
2.1 Admin Screen
- Screen accessible from the WordPress admin under Auctions — lists all auctions by product category
- Per auction row: auction name, category slug, lots closed of total, winner count, unpaid lot count, status badge, last sent (date, time, number of emails)
- Status badges: Ready to Send (all lots closed, not yet sent), Sent (emails dispatched), Lots Still Running (auction in progress — send locked)
- Send button disabled while any lot in that auction is still running, with a note showing how many lots remain open
- Resend uses the same screen and same button — previous send state is shown alongside
2.2 Winner Selection
- Clicking Send Winner Emails opens the winner selection panel for that auction
- One row per winning bidder: name, email address, lot numbers won (shown as tags), total including buyer’s premium
- Per-row tickbox; select-all tickbox in the column header
- All bidders ticked by default on first send
- Bidders already emailed start unticked with the last-sent date shown in the Last Sent column
- A single checkbox — Tick bidders who already received this email — selects all previously-emailed bidders for a deliberate resend
- Live count on the send button: Send to 12 bidders — updates as tickboxes change
- Send button disabled when no bidders are selected
- Unticking a bidder greys out their row to make exclusions visually clear
2.3 Which Lots Are Included
- A lot is included in the email and payment link when it is: closed, has a winner, and is not already paid for
- Lots already paid for are excluded from both the email list and the payment link — nobody can be charged twice
- A note below the winner table confirms: Lots already paid for are left out of both the list and the email
2.4 The Winner Email
- Subject and heading naming the auction and the number of lots won — e.g. You won 3 lots
- Personalised greeting using the bidder’s first name
- One line per lot: lot number tag, lot title, winning bid amount
- Summary rows: Subtotal, Buyer’s Premium (currently 15%), Total
- One Pay for all X lots button linking to the multi-lot checkout
- Plain payment link printed beneath the button for email clients that block images
2.5 The Payment Link
- Uses the plugin’s existing multi-lot checkout endpoint: /checkout/?pay-uwa-auction=931,948,952
- On landing, the endpoint verifies per lot that the logged-in user really won it — lots they did not win are silently ignored
- Verified lots are added to the cart and the user is taken directly to checkout
3. Technical Approach
3.1 Admin Screen — Auction List
- New admin page registered under the Auctions menu in WordPress: Auctions → Send Winner Emails
- Auction list is built by querying all product categories used by auction products — each category represents one auction
- Per row: lot counts derived from WooCommerce product queries filtered by category and auction status; winner count and unpaid lot count derived from existing plugin bid and order data
- Status badge logic: all lots closed + not yet sent → Ready to Send; all lots closed + previously sent → Sent; any lot still running → Lots Still Running with count
- Send button state: disabled (with lot count note) if any lot is still running; enabled and labelled Send Winner Emails if all lots closed and not yet sent; ghost-styled Resend if previously sent
3.2 Winner Selection Panel
- Panel rendered inline below the auction row on button click — no page reload
- Winner list built by querying the plugin’s existing bid data for the selected auction: one row per unique winning bidder, aggregating their won lots, winning bids, and totals
- Buyer’s premium calculated using the existing plugin Buyer’s Premium addon data
- Per-row tickboxes with live count update via JavaScript — no server round-trip needed for tick/untick
- Select-all and Tick bidders who already received this email checkboxes wired to update all relevant rows and refresh the live count
3.3 Combined Winner Email
- On Send: a server-side PHP function loops the selected bidders, builds the email content for each, and dispatches via wp_mail() using WooCommerce’s email system
- Email content built per bidder: personalised greeting, lot list (closed + won + unpaid), subtotal, buyer’s premium at 15%, total, payment button, plain link
4. Effort — Design & Development
4.1 Admin Screen — Auction List & Status
- Register new admin page under Auctions menu
- Build auction list query: categories, lot counts, winner counts, unpaid lot counts
- Implement status badge logic: Ready to Send, Sent, Lots Still Running
- Implement send button state: disabled with lot count note, enabled, Resend
- Populate Last Sent column from send log
- Test: all status states display correctly; button disabled/enabled correctly; last sent date accurate
Estimated effort: 3 hours
4.2 Winner Selection Panel
- Build winner list query: unique winning bidders, aggregated won lots, totals, buyer’s premium
- Render inline panel with per-row tickboxes, lot tags, totals, last sent column
- Implement live count update on tick/untick via JavaScript
- Implement select-all and Tick bidders who already received this email controls
- Unticked rows grey out visually
- Send button disabled when no bidders selected
- Test: winner list accurate; tick controls work; live count correct; already-emailed bidders start unticked
Estimated effort: 1 hours
4.3 Combined Winner Email
- Build email content generator: greeting, lot list, subtotal, buyer’s premium, total, payment button, plain link
- Construct multi-lot payment link using existing checkout endpoint with unpaid won lot IDs
- Dispatch via wp_mail() wrapped in WooCommerce email template
- Return send result to admin screen: sent, failed, not selected counts
- Confirm email styling with Jason; apply agreed wording, colours, and branding
- Test: email received with correct lot list, correct totals, working payment link; WooCommerce wrapper applied
Estimated effort: 1 hours
4.4 End-to-End Testing
- Full flow test: auction closes, admin opens screen, selects bidders, sends, bidder receives email, clicks pay link, completes checkout
- Lots still running: send button locked correctly
- Resend: already-emailed bidders start unticked; deliberate resend via checkbox works
- Paid lots: excluded from email list and payment link correctly
- Multi-bidder auction: each bidder receives only their own lots
- Edge cases: bidder with all lots paid (excluded entirely), zero unpaid lots auction, send failure handling
Estimated effort: 1 hours
5. Deliverables
The following deliverables will be provided as part of this engagement:
- Admin screen — Auctions → Send Winner Emails page listing all auctions with lot counts, winner counts, unpaid lots, status badges, and last-sent details; send button locked while any lot is still running
- Winner selection panel — per-bidder rows with lot tags, totals, and tickboxes; select-all and resend controls; live send count on the button; previously-emailed bidders start unticked
- Combined winner email — one email per selected bidder listing all their unpaid won lots, subtotal, buyer’s premium, total, and a single pay-all button; styled and worded per Jason’s approval
- Multi-lot payment link — uses the existing checkout endpoint to pre-fill the cart with all unpaid won lots for that bidder; safe to email — only lots the logged-in user actually won are loaded
- End-to-end testing — full flow tested including send, email receipt, pay link, checkout, paid-lot exclusion, resend, and edge cases
- Delivery — plugin ZIP for self-installation or deployment on a staging environment for testing before go-live
6. Effort Snapshot
| Deliverable |
Hours |
| Admin Screen — Auction List & Status |
3 |
| Winner Selection Panel |
1 |
| Combined Winner Email |
1 |
| End-to-End Testing |
1 |
| TOTAL ESTIMATED HOURS |
6 |
7. Commercials & Payment
Total Estimated Effort: 06 hours
Hourly Rate: USD 45 / hour
Total Cost: USD 270