Architecture
BallinKit is built on a modular WordPress plugin architecture tightly integrated with WooCommerce. The frontend designer is powered by Fabric.js, and the server-side compositing uses ImageMagick/GD2.
Request Flow — Customer Design to Order
- Product Page: Customer clicks "Customize Design" — redirected to
/designer-studio/?product_id={id} - Designer Studio Load: PHP reads the
kit_productconfig, passes it aswindow.KIT_CONFIGJSON to the page - Canvas Init:
customizer.jsinitializes a Fabric.js canvas, loads base images, applies color fills, and renders any template - Customer Designs: Text/image layers added via Fabric.js. Each action is tracked in an undo/redo history stack
- Add to Cart: JS calls
exportDesign()to serialize canvas state to JSON, then callsPOST /kit-customizer/v1/save-previewto generate and save a composite preview image server-side - WooCommerce Cart: The design JSON and preview URL are added to cart item metadata via
KIT_Cart - Checkout:
KIT_Order_Handler::save_design_to_order()fires onwoocommerce_checkout_create_order_line_item— persists all design meta to the order item - Order Display:
KIT_Order_Handler::display_design_preview()fires onwoocommerce_before_order_itemmeta— renders the design card in WooCommerce admin - License Webhook:
KIT_Webhook_Dispatchersends order events to the BallingKit License Portal for license generation
REST API Namespace
All plugin REST routes use the namespace kit-customizer/v1 (accessible at /wp-json/kit-customizer/v1/):
POST /preview— Generate composite preview, returns base64 imagePOST /save-preview— Generate and save preview to disk, returns URLPOST /upload— Upload customer logo/image, returns URLGET /fonts— List available fonts from manifestGET /products/{slug}/config— Get product canvas configurationGET /templates— List all published templatesPOST /templates/save— Save new/edit template (admin only)DELETE /templates/{id}— Delete template (admin only)POST /designs/save— Save user design draftGET /designs— Get current user's saved designsPOST /designs/delete— Delete a saved designGET /order-items/{id}/design— Get design data for an order item (admin)
JavaScript Architecture (customizer.js)
The designer is a single JavaScript class instantiated on page load. Key properties and methods:
this.canvas— Fabric.js canvas instancethis.currentView— Active view key (e.g. "front")this.viewStates— Saved canvas state per viewthis.history/this.historyIndex— Undo/redo stackthis.referenceImage— Stored reference image metadata (not a canvas object)this.baseScale— Canvas scale factor for responsive displayexportDesign()— Serializes all view states to the design JSON payloadloadView(viewKey)— Switches the canvas to a different viewgetUserLayers()— Returns all user-created canvas objects (excludes base/color/pattern/overlay system layers)addProductReferenceImage(file, dataUrl)— Stores reference image as metadata, shows preview card