Five projects that show how I lead releases, modernize legacy codebases, and ship cross-system features in the Dokan multivendor WordPress ecosystem — powering 60,000+ marketplaces.
Dokan V4.0 — Major Version Release
Release lead · 18+ modules
QA matrix · 14 modulesBackward-compatible commission
Problem. A major version bump required coordinating breaking changes, a new brand color, redesigned onboarding, refactored emails, a React-based admin/vendor panel, and full backward-compatible commission calculation — without breaking sites already live in production.
What I did.
- Defined the release tracker, version-bump strategy, and changelog.
- Drove the V4 manual-testing program covering Withdraw, Coupon, RMA, Staff, Store SEO, Shipping, Vendor & Product Subscription, Announcement, Admin/Vendor Analytics, Admin Onboarding, Manual Order Creation, Commission backward-compatibility, Dokan Intelligence AI, and the new brand color.
- Maintained the V4 bug tracker and resolved release-blockers across documentation, modals, dummy-data imports, and help-center URLs.
- Removed deprecated code paths ahead of the cut.
Impact. Shipped V4.0 to production with a coordinated test matrix across 18+ modules. The release-engineering pattern I established (sub-issues per module, "Awaiting QA" labels, parent tracker) is now reused for every minor release — including Dokan 4.2.0.
Release engineeringPHPReact/TSQA process
React Migration of a Legacy WordPress Plugin Frontend
Architect & implementer
5 vendor modules migratedDokan Data Store
Problem. Dokan's vendor and admin panels were a tangle of jQuery, Vue, and templated PHP — global mutation, inconsistent state management, slow module rollout, hard to test.
What I did.
- Built the Dokan Data Store and a React HOC library — the foundation every subsequent module reused.
- Established API development guidelines and frontend slot-fill / filter standards so other engineers could ship consistently.
- Migrated five vendor-panel modules end-to-end — Announcement, Store SEO, Product Subscription, Shipping, Staff — plus Vendor Dashboard Withdraw.
- Shipped the React-based Admin Panel Header and unified admin dashboard structure.
- Removed global mutation by routing everything through Dokan Modal.
Impact. The vendor panel went from "every module its own jQuery snowflake" to a consistent React app with a shared data layer. Module rollout time dropped meaningfully and the patterns set here are still being followed.
ReactTypeScriptSlot-fillREST APIs
Marketplace Analytics & Admin Dashboard
Backend architect
Query optimizationAnalytics RFC
Problem. The admin dashboard was slow and the analytics reports were wrong. WooCommerce's analytics tables (wc_order_stats, wc_order_product_lookup) double-counted Dokan suborders and their refunds, inflating GMV. Marketplace operators couldn't trust the numbers.
What I did.
- Shipped optimized queries & APIs for the new admin dashboard: Monthly Overview, TODO Section, Customer Metrics, All-Time Marketplace Stats, Top Performing Vendor, Most Reviewed Product.
- Built the implementation plan, component layer, and WC Admin Analytics ↔ Dokan compatibility.
- Authored a seller-analytics RFC proposing a new
dokan_order_stats table that mirrors WC's schema but adds seller_id and is_suborder — cleanly separating seller earning, gateway fees, discounts, admin commission, and admin subsidy (when an admin-funded discount exceeds the commission, e.g. a $20 discount on a $100 product at 10% commission means the marketplace eats $10).
Impact. Admin dashboard load improved; the operator-facing "all-time marketplace stats" widget exists today because of this work. The seller-analytics RFC sets up the next phase of fixing analytics correctness at the data-warehouse layer.
MySQLQuery optimizationRFC / designWooCommerce
Payment Gateway Integrations — Paystack & Stripe Express
Full-stack owner
Paystack: shippedStripe ExpressVendor Subscription RFC
Problem. Marketplace payment gateways aren't just "process the card." You're splitting funds between admin and vendors, handling per-vendor onboarding, supporting refunds (which redistribute commission backward), and surviving webhook retries that must be idempotent.
What I did — Paystack (shipped end-to-end).
- Vendor onboarding via Paystack sub-accounts.
- Make-payment with multi-party split.
- Refund logic that correctly reverses commission.
- Webhook handler for async settlement events.
Stripe Express. Integration with WC Stripe; refactored emails for Stripe / Stripe Express; resolved guest-checkout PHP warnings.
Vendor Subscription module RFC (open). Designed the next-gen module covering switching (upgrade/downgrade with returnable amounts), renewal with grace periods, cancellation with trial-period handling, and extension offers — including a worked example of grace-period overlap when one subscription fails and the vendor subscribes to a different plan.
Impact. Paystack is in production powering African-market vendors. The subscription RFC codifies edge cases nobody had written down — switching, grace periods, cancellation timing — into a single design that handles credit cards as a first-class payment method.
PHPPaymentsWebhooksRFC / design
Multilingual Push Notification System
System designer · WP → Flutter via OneSignal
100K+ devices< 10s e2e latency target
Problem. The Dokan mobile app needs push notifications driven by WordPress events (new order, low stock, refund, announcement) — delivered in the user's preferred language across 100K+ devices, with reliable delivery and no synchronous coupling to the WP request lifecycle.
What I did. Authored a full feature spec broken into 6 implementation sub-issues so the team could parallelize:
- WordPress Plugin Core — hook integration & OneSignal API client.
- Multilingual content handling via WPML — translations resolved server-side.
- User segmentation & targeting — role, location, content-type filters.
- Flutter app integration — OneSignal SDK, lifecycle, deep linking.
- Notification management & admin UI.
- Non-functional requirements.
Notable design decisions.
- End-to-end latency target < 10s (WP hook → device), with < 500ms WP-side budget.
- No synchronous OneSignal calls from WP hooks — everything goes through Action Scheduler, so request threads stay fast and notifications retry independently.
- Retry policy: exponential backoff at 1s / 4s / 16s (3 retries), then dead-letter logging.
- Scale strategy: at 100K+ users, fan-out happens inside OneSignal segments — never iterate users in PHP.
- Security: REST API key in a
wp-config.php constant (not wp_options), HTTPS only, XSS-sanitized payloads, manage_options capability checks, rate-limited manual sends.
Impact. This is the design document the implementation team is now building from. The decomposition (6 parallelizable sub-issues with explicit interfaces) is the same pattern I use for every multi-engineer feature.
PHPFlutterOneSignalWPMLAction Scheduler