Store owners had no way to sell personalized trading cards.
Freelancer Senior WordPress Developer
A self-contained WooCommerce plugin with a full template builder, dynamic pricing, and structured order delivery for production.
Eliminated manual design handling for store owners, increasing sales.
The brief
The customer needed a custom functionality for WooCommerce stores to sell personalized sports trading cards without bolting on a third-party design tool. Store owners wanted customers to upload a photo, type in a name and number, and get a produced card, with every detail landing in the order ready to send to print. Before this plugin, that meant manual back-and-forth over email for every single order.
I built Sport Trading Cards as a freelance WooCommerce plugin, owning it end to end: the admin template builder, both customer-facing design modes, the pricing engine, and the order flow that packages a customer's design for production. No hosted service, no external design API. Everything runs inside the store's own WordPress and WooCommerce installation.
The Advanced Designer: each step in the left panel drives the live card preview and price breakdown on the right.
The template builder: store owners design front and back layouts layer by layer, from background art to the user's photo mask.
Building it
The plugin ships two customization modes that feed the same WooCommerce cart: Quick Design, a mobile-friendly form with photo upload, name, and team fields plus an optional background-removal prompt, and Advanced Designer, a full desktop editor built step by step across text, image, signature, QR code, effects, and a six-field grading slab layout, each step priced independently and rendered as a live front-and-back preview. Templates are built in their own visual drag-and-drop admin editor and saved as a single JSON blob at the standard 63x88mm card size, and every image upload passes MIME, extension, and raw-byte PHP-injection checks before it's trusted.
Pricing runs through WooCommerce's own set_price() so taxes and coupons stay correct, with every step priced separately for front and back. The hard part was the image lifecycle: a customer can upload a photo, abandon the cart, remove an item, or reuse the same image across multiple designs, and none of that should ever orphan a file or delete an image another cart item still needs. Cart removal checks for shared usage before deleting anything, and a daily WP-Cron job sweeps temporary uploads older than 24 hours that never reached checkout, so every order arrives with a fully structured, downloadable design ready for production.
Want the long version, or something similar built?