- Project Overview
Leftover Treasures operates an online auction platform at fresnoestatesaleauctionthriftstore.com using Ultimate WooCommerce Auction Pro — Unlimited. This proposal covers two independent custom development features requested by the client.
Feature 1 : extends the existing Take Fees for Bidding addon. Currently the addon supports two fee modes: a one-time fee to bid on any product, or a per-product fee each time a user bids on a new product. The client requires a new third option to be added alongside these existing modes: a monthly recurring subscription at $2.99 every 30 days via Stripe, which grants unrestricted bidding access across all auction products. The existing one-time and per-product fee options remain fully intact and unchanged.
Feature 2 : adds a Copy URL button directly on WordPress Media Library thumbnails in the grid view. This button copies the image URL to the clipboard in one click — saving the extra step of opening each image’s attachment page to access the Copy URL to Clipboard link that is currently only available there.
The two core development areas are:
- Feature 1: Monthly Bidding Subscription via Stripe — new third fee mode added alongside the existing one-time and per-product options; $2.99/30-day recurring subscription via Stripe; user-controlled auto-renew; bidding access gated on active subscription status
- Feature 2: Copy URL Button on Media Library Thumbnails — one-click clipboard copy of image URL directly from the Media Library grid view, eliminating the extra step of opening the attachment page
Assumptions
Feature 1 — Monthly Bidding Subscription
- The existing Take Fees for Bidding addon is active and currently configured on the site
- Stripe is already configured and active as a payment gateway on the WooCommerce store
- The Stripe account has recurring/subscription billing enabled — Stripe Billing or Stripe’s subscription API will be used for recurring charges
- The existing one-time and per-product bidding fee options remain fully intact and unchanged — the monthly subscription is added as a new third option; switching between modes is controlled by the admin via the existing settings panel
- The $2.99 monthly fee and 30-day billing cycle are fixed as specified — any changes to pricing or billing period after development are out of scope
- Stripe processing fees (typically ~2.9% + $0.30 per transaction) are borne by Leftover Treasures through their own Stripe account
Feature 2 — Copy URL Button
- The WordPress Media Library is used in standard grid view (list view is out of scope unless separately agreed)
- The Copy URL button applies to image file types — other file types (PDF, video, audio) are out of scope unless separately agreed
- Modern browser clipboard API is used — clipboard copy requires the site to be served over HTTPS, which is assumed to be the case
General
-
- Ultimate WooCommerce Auction Pro — Unlimited is installed, active, and on a supported version at the time development begins
- WordPress and WooCommerce are on supported and up-to-date versions at the time development begins
- A staging environment will be provided by Leftover Treasures for development and testing before go-live
- Any incompatibilities arising from future updates to WordPress, WooCommerce, or the auction plugin after delivery are outside scope; remediation work will be billed separately
- Go-live deployment to the production site is Leftover Treasures’ responsibility unless separately agreed
- Customer Requirements(Scope of work)
- Feature 1: Monthly Bidding Subscription1.1 Subscription Model — New Third Fee Mode
- A new Monthly Subscription option must be added to the existing Place Bid Fee settings as a third fee mode alongside the existing two options
- The three fee modes available to admin must be: (1) One-time fee to bid on any product — existing, unchanged; (2) Per-product fee each time a user bids on a new product — existing, unchanged; (3) Monthly Subscription — new option added by this development
- Monthly Subscription fee: $2.99 per 30-day billing cycle, auto-billed to the credit card on file via Stripe
- When Monthly Subscription mode is selected by admin, an active subscription grants the user unrestricted bidding access across all auction products and categories on the site
- When Monthly Subscription mode is active, no per-bid or per-product fee is charged to subscribed users
1.2 Auto-Renew
- Subscription auto-renews every 30 days automatically — no user action required
- User can enable or disable auto-renew from their account/profile area
- When auto-renew is enabled: subscription renews automatically every 30 days; user retains bidding access without interruption
- When auto-renew is disabled: subscription remains active until the current 30-day period ends, then expires; user is blocked from placing bids after expiry
1.3 Bidding Access Gating & Subscription Popup
- Clicking Subscribe Now redirects the user to a dedicated subscription checkout page where they enter their card details and confirm payment via Stripe
- On successful payment via the checkout page: user is marked as an active subscriber and automatically redirected back to the auction page; the user then places their bid as normal — they now have full bidding access and the bid form is immediately available
- If checkout is abandoned or payment fails, user is returned to the auction page without a subscription or bid placed; they can attempt to subscribe again at any time
- Users with an active subscription can place bids on any auction product without restrictionUsers with an active subscription can place bids on any auction product without restriction
- Users without an active subscription (never subscribed, cancelled, or lapsed) are blocked from placing bids
- When a non-subscribed user clicks the Place Bid button, a popup modal is displayed immediately — the bid is not placed; the popup shows the subscription details and a Subscribe Now button that redirects to the checkout page
- The subscription popup must clearly display: the subscription plan name, the monthly fee ($2.99), the billing frequency (every 30 days, auto-renews), what the user gets (unlimited bidding access on all auction products), and a Subscribe Now button
Feature 2: Copy URL Button on Media Library Thumbnails
2.1 Copy URL Button in Grid View
- A Copy URL button must be added to each image thumbnail in the WordPress Media Library grid view (wp-admin → Media → Library)
- The button must be visible on each thumbnail — positioned below the image thumbnail, matching the reference design provided by the client
- When the button is clicked, the full image URL is copied to the clipboard instantly
- A brief visual confirmation must be shown after the copy action (e.g. button text changes to “Copied!” for 1–2 seconds)
- This eliminates the current extra step of opening the image attachment page to access the Copy URL to Clipboard link
- The existing Copy URL to Clipboard link on the individual attachment page must remain unchanged
- Technical Approach
4.1 Feature 1 — Monthly Bidding Subscription via Stripe
-
-
- A new subscription management module is built as an addon within the existing plugin architecture — consistent with how all existing addons (Buyer’s Premium, Bidding Fees, etc.) are structured
- On bid attempt by a non-subscribed user: the Place Bid action is intercepted; a popup modal is displayed immediately on the auction page showing full subscription details (plan name, $2.99/month fee, 30-day auto-renew, unlimited bidding access) and a Subscribe Now button
- Subscribe Now redirects the user to a dedicated WooCommerce-based subscription checkout page; user enters card details; on payment confirmation Stripe creates a Customer, attaches the card, and creates a recurring Subscription at $2.99/30 days
- On successful payment: user is marked as an active subscriber; they are redirected back to the auction page they came from; the user then places their bid themselves — the bid form is now active and available as they have an active subscription
- Stripe webhooks are used to handle subscription lifecycle events: renewal success (access continues), renewal failure (access suspended), cancellation (access removed at end of current period)
- Auto-renew toggle is added to the user’s account area: toggling off cancels the Stripe subscription at period end (access continues until expiry); toggling on reactivates subscription
- Bidding access check is added to the existing bid placement hook — if user is not an active subscriber, bid is blocked and subscription prompt is shown
- Admin settings: enable/disable the subscription feature, view all active/inactive subscribers, and manually override subscription status per user if needed
4.2 Feature 2 — Copy URL Button on Media Library Thumbnails
-
-
- A small JavaScript file is enqueued on the WordPress Media Library admin page (wp-admin/upload.php) only — no impact on any other admin or frontend page
- The script uses a MutationObserver to detect when thumbnail elements are rendered in the grid (the Media Library loads items dynamically via AJAX)
- For each image thumbnail, a Copy URL button is injected below the thumbnail image element — matching the reference layout provided by the client
- On button click: the attachment’s URL is read from the thumbnail’s existing data attributes and copied to the clipboard using the browser’s navigator.clipboard.writeText() API
- Visual confirmation: button text switches to “Copied!” for 1.5 seconds then reverts to “Copy URL”
- The existing Copy URL to Clipboard link on the individual attachment detail page is completely untouched
- Effort — Design & Development
5.1 Stripe Subscription — Setup & Checkout Flow
-
-
- Intercept Place Bid click for non-subscribed users and display subscription popup modal on the auction page
- Popup displays: plan name, $2.99/month fee, 30-day auto-renew, unlimited bidding access, and Subscribe Now button
- Store Stripe Customer ID and subscription status against WordPress user
- Subscribe Now redirects to dedicated subscription checkout page; Stripe Customer and Subscription created on payment confirmation
- On successful payment: user redirected back to originating auction page; user places bid themselves using now-active bid formTest: non-subscribed user sees popup; popup content correct; Subscribe Now redirects to checkout; payment creates subscription; user returned to auction page with bid placed automatically
Estimated effort: 8 hours
5.2 Stripe Webhooks — Subscription Lifecycle
-
-
- Register WordPress webhook endpoint to receive Stripe subscription events
- Handle: invoice.paid (renewal success — extend access), invoice.payment_failed (suspend access), customer.subscription.deleted (remove access at period end)
- Update user subscription status in WordPress on each webhook event
- Test: renewal success extends access; payment failure suspends; cancellation removes access at period end
Estimated effort: 5 hours
5.3 Bidding Access Gate
-
-
- Hook into the existing bid placement logic to check subscription status before allowing a bid
- Non-subscribed users are blocked and shown the subscription prompt
- Active subscribers pass through without any change to existing bid flow
- Test: subscribed user bids without interruption; non-subscribed user is blocked and shown prompt
Estimated effort: 3 hours
5.4 Auto-Renew Toggle — User Account Area
-
-
- Add subscription management section to the user’s WooCommerce My Account area
- Display: current subscription status, next billing date, auto-renew toggle
- Auto-renew off: cancels Stripe subscription at period end — access continues until expiry date
- Auto-renew on: reactivates subscription via Stripe API
- Test: toggle off cancels at period end; toggle on reactivates; status and dates display correctly
Estimated effort: 4 hours
5.5 Admin Settings & User Management
-
-
- Add subscription settings to existing plugin admin panel: enable/disable subscription feature, subscription fee display
- Add subscriber list view in admin: shows all users with subscription status, start date, next billing date
- Manual override: admin can mark any user as active or inactive subscriber
- Test: settings save correctly; subscriber list accurate; manual override works immediately
Estimated effort: 3 hours
5.6 Feature 2 — Copy URL Button on Media Library Thumbnails
-
-
- Enqueue JavaScript on WordPress Media Library admin page only
- Use MutationObserver to detect dynamically loaded thumbnails and inject Copy URL button below each image
- On click: read image URL from thumbnail data attributes and copy to clipboard via navigator.clipboard API
- Visual confirmation: button text changes to “Copied!” for 1.5 seconds then reverts
- Test: button appears on all image thumbnails in grid view; click copies correct URL; confirmation shown; attachment page unchanged
Estimated effort: 3 hours
5.7 End-to-End Testing
-
-
- Feature 1: full subscription journey — new user subscribes, bids, auto-renew fires, user cancels, access expires
- Feature 1: Stripe webhook handling — simulate renewal, failure, and cancellation events
- Feature 1: auto-renew toggle — disable and re-enable, confirm correct Stripe behaviour
- Feature 1: admin controls — subscriber list accuracy, manual override
- Feature 2: Copy URL button on all image thumbnails; correct URL copied; confirmation shown; no impact on other admin pages or attachment page
Estimated effort: 4 hours
- Effort Snapshot
| Deliverable |
Hours |
| Feature 1 — Stripe Subscription: Setup & Checkout Flow |
8 |
| Feature 1 — Stripe Webhooks: Subscription Lifecycle |
5 |
| Feature 1 — Bidding Access Gate |
3 |
| Feature 1 — Auto-Renew Toggle: User Account Area |
4 |
| Feature 1 — Admin Settings & Subscriber Management |
3 |
| Feature 2 — Copy URL Button on Media Library Thumbnails |
3 |
| End-to-End Testing (Both Features) |
4 |
| TOTAL ESTIMATED HOURS |
30 |
Note: Feature 1 (Monthly Subscription) and Feature 2 (Copy URL Button) are independent of each other and can be delivered and tested separately. Feature 1 uses Stripe Billing API and webhooks — Stripe processing fees (~2.9% + $0.30 per transaction) are charged directly by Stripe and are not included in this proposal.
Deliverables
The following deliverables will be provided as part of this engagement:
-
-
- Monthly bidding subscription — new third fee mode added to the existing Place Bid Fee settings; $2.99/30-day Stripe subscription grants unrestricted bidding access; existing one-time and per-product fee modes remain fully intact and unchanged
- Subscription popup — displayed when non-subscribed user clicks Place Bid; shows plan name, $2.99/month, 30-day auto-renew, unlimited access, and Subscribe Now button; Subscribe Now redirects to checkout; on successful payment user is redirected back to the auction page where they can immediately place their bid
- Stripe webhook handling — renewal success, payment failure, and cancellation events handled automatically; user subscription status updated in real time
- Bidding access gate — bid placement blocked for non-subscribed, cancelled, or lapsed users; active subscribers bid without interruption
- Auto-renew toggle — user can enable or disable auto-renew from their WooCommerce My Account area; disabling cancels at period end with access continuing until expiry
- Admin subscription management — admin settings panel with enable/disable toggle; subscriber list showing all users with status, dates, and manual override capability
- Copy URL button on Media Library thumbnails — Copy URL button added below each image thumbnail in WordPress Media Library grid view; one-click clipboard copy with visual confirmation; attachment page unchanged
- End-to-end testing — full subscription lifecycle tested (subscribe, renew, cancel, lapse); webhook simulation; Copy URL button tested across all image thumbnails
- Delivery — plugin ZIP for self-installation or deployment on a staging clone of fresnoestatesaleauctionthriftstore.com for testing before go-live
- Commercials & Payment
Project Cost
Total Estimated Effort: 30 hours
Hourly Rate: USD 45 / hour
Total Cost : USD 1,350