Skip to content
Alex ALAVO.

Case study 07 · Automation · E-commerce

SMM Panel

Paid Shopify orders go straight to the supplier; statuses, refills and margins are tracked.

Role
End-to-end design and development
Category
Automation · E-commerce
Stack
Laravel 13 · Vue 3 · Webhooks
Quality
33 tests
Dashboard of orders, revenue and alerts
Shopify orders and their status

01 — Context

A Shopify store sells social media visibility services (followers, views, likes), fulfilled by an external supplier through its API. Every paid order had to be matched with the right service, sent by hand with the right link and quantity, then followed until delivery, with no overview of margins or stuck orders.

02 — Problem

Every order had to be matched with the right service, sent by hand, then followed until delivery.

03 — Solution

Shopify reports each paid order through a signed webhook. The app checks the signature, records the order exactly once, finds the supplier service linked to each product and submits the order in the background. Statuses are synced every five minutes; cancellations and refills are handled from the interface, and customers' refill requests are read straight from the mailbox. Anything outside the expected path is flagged "needs attention" and raises an alert.

04 — Features

  • Signed webhooks

    HMAC signature compared in constant time, duplicate webhooks ignored.

  • Product mappings

    Each product or variant linked to a service, with a quantity multiplier and the target link field.

  • Background submission

    Three spaced attempts (30 s, 2 min, 5 min); a supplier refusal is not retried.

  • Status tracking

    Batched sync per supplier every five minutes, with no overlapping runs.

  • Cancellations and refills

    From the order page, or from customer requests received by email.

  • Dashboard

    Revenue, supplier cost, margin, success rate and low-balance alert.

06 — Architecture

  1. Shopifyorder paid webhook · HMAC
  2. Laravel · Inertiamappings · Vue interface
  3. Job queuessubmit · sync · refill
  4. Supplier APIorder · status · cancel · refill
  5. Relational databaseorders · costs · history

The webhook only checks the signature and hands the order to a queue: Shopify gets its response at once, and processing can be replayed without creating duplicates.

Supplier calls go through a shared interface and typed objects; API keys are encrypted in the database and never sent back to the interface.

07 — Technical challenges

  • Challenge

    Never send the same order twice.

    Solution

    Idempotent webhooks, a single supplier order per item and a supplier ID check before any submission.

  • Challenge

    Tell a temporary outage from a supplier refusal.

    Solution

    Spaced retries for technical errors; a refusal (balance, invalid link) goes straight to "needs attention" with an email alert.

  • Challenge

    Handle refill requests sent through a form.

    Solution

    Mailbox reading, field extraction and tolerance of typos in the social network name (Levenshtein distance).

08 — My contribution

  • Architecture and data model
  • Shopify integration (webhooks, OAuth) and supplier API
  • Job queues, scheduler and alerts
  • Vue 3 / Inertia admin interface
  • Security (signatures, encrypted keys, rate limiting) and tests

09 — Stack

Backend
PHP 8.3, Laravel 13, Laravel Queues, Scheduler
Frontend
Vue 3, Inertia.js, Tailwind CSS 4
Integrations
Shopify (webhooks, OAuth), API fournisseur SMM, IMAP
Data
MySQL
Quality
PHPUnit

10 — Results

  • 33

    passing tests and 101 assertions

  • 5 min

    between two supplier status syncs

Next case studyMesSousA mobile money coach to track spending in CFA francs, plan a budget and decide before buying.