E-commerce · Mobile repair, digital products and training

RoyaFix: a digital-products shop on WordPress with a bespoke theme and six custom plugins

A specialist mobile-repair and training shop on WordPress and WooCommerce: a bespoke theme with no page builder, six custom plugins for SMS, SEO and two payment gateways, digital product and course sales, and every asset served from the site's own server.

Client
Royafix
Industry
Mobile repair, digital products and training
Year
2025
Status
Live
Visit the site
  • Discovery and analysis
  • UX and UI design
  • Software architecture
  • Front-end development
  • Back-end and API development
  • Database design
  • Third-party integrations
  • Technical SEO
  • QA and testing
  • Support and ongoing development

The result, in numbers

6 + 1
custom plugins and a hand-written theme

no page builder, no off-the-shelf theme

2
custom payment gateways

ZarinPal and Behpardakht Mellat

0
foreign CDN dependencies

every font, stylesheet and script served locally

The challenge

RoyaFix sells digital products and training packages rather than physical goods — and that changes several things.

Buying has to be frictionless. Someone buying a training package has no patience for a long registration form; they want to sign in with a mobile number, buy, and download immediately. If they ordered as a guest, that order has to attach to their account once the number is verified.

Speed, and independence from a CDN. A site that pulls its fonts and scripts from a foreign CDN is unpredictable in Iran: sometimes fast, sometimes stalled for seconds on one file. For a shop that acquires customers from Google, that is lost custom.

And more importantly: capabilities must not die with the theme. A shop whose payment gateway, SMS and SEO are written inside its theme can, in practice, never change that theme.

The solution

WordPress and WooCommerce were kept as the platform, and everything above them was written from scratch: a hand-written shop theme and six independent plugins.

The central decision was that capabilities live in plugins, not in the theme — so they survive a WordPress or WooCommerce update, or a change of theme. Six custom plugins: SMS and OTP login, SEO, WooCommerce tooling, WordPress tooling, and two payment gateways (ZarinPal and Behpardakht Mellat), each with its own verification, inquiry and reversal handling.

Frictionless buying runs on OTP login and registration through SMS.ir, and an order placed as a guest is securely attached to that account once the number is verified. The account area is complete: orders, downloads, addresses and profile.

The theme was written without a page builder — home, shop, product, cart, checkout, login and account are all hand-built, and content is read directly from WooCommerce. A theme settings panel controls the logo, menus, slider, colours and text, product categories and home-page sections from the dashboard.

Speed was solved with one plain decision: every font, stylesheet and script served from the site's own server, with no foreign CDN dependency — plus page caching, browser caching and conservative optimisation that never touches cart or checkout.

Key features

  • Buy with a mobile number

    OTP login and registration via SMS.ir, with guest orders securely attached to the account after verification.

  • Digital products and downloads

    Training packages and digital goods, with a downloads area in the account and access to previous purchases.

  • Two custom payment gateways

    ZarinPal and Behpardakht Mellat, each with verification, inquiry, settlement and automatic reversal.

  • Capabilities in plugins, not the theme

    SMS, SEO, gateways and tooling are independent of the theme, so a theme change or a WooCommerce update does not destroy them.

  • No CDN dependency

    Every font, stylesheet and script on the site's own server — on Iranian networks, the difference between fast and sometimes fast.

  • Mega menu and fast search

    A multi-column category menu, fast product search, a sticky header, and a mobile panel with accordion submenus.

  • A theme settings panel

    Logo, menus, slider, colours and text, categories and home sections — all from the dashboard, without code.

  • Jalali calendar and reports

    WooCommerce localisation, the Jalali calendar and Jalali reports — dates the way the team reads them.

Architecture and stack

Style
CMS-based

WordPress here is the platform: users, products, orders and payment come from WooCommerce, and nothing WordPress already does was rebuilt.

Above it, two separate layers: a hand-written theme with no framework and no page builder, responsible only for presentation, and six independent plugins that hold all the behaviour — SMS, SEO, two gateways, and WooCommerce and WordPress tooling.

That separation is the project's central decision. A shop whose gateway, SMS and SEO live inside its theme is locked to that theme: changing the look means losing payment. With this structure the theme can change tomorrow and the shop stays where it is.

Performance comes from page caching, browser caching and conservative optimisation — conservative meaning cart, checkout and account pages are never cached. Every static asset is local, with no foreign CDN.

WooCommerce HPOS compatibility was respected from the start, so future WooCommerce updates will not break the gateways or the orders.

Back end and API
WordPressWooCommercePHPREST API

A bespoke theme and six plugins, HPOS and WooCommerce CRUD compatible

Database
MySQL
Front end
HTML5CSS3JavaScript (ES6+)Responsive Design

No page builder, RTL, the IRANSansX typeface served locally

Infrastructure and deployment
Docker
Other
Performance OptimizationUI/UX Design

Page and browser caching, fully local assets

Integrations

  • ZarinPal and Behpardakht Mellat — two gateways, each a custom plugin
  • SMS.ir for OTP login and order-status notifications
  • Aparat for product video

Full write-up

The bespoke theme

  • A dynamic home page — a configurable slider, an Apple ID introduction, separate rows for Android and iPhone packages, and a manageable image gallery.
  • Header and mega menu — fast product search, a multi-column category menu, a sticky header, and a mobile panel with accordion submenus.
  • The buying experience — product page, cart and checkout with a deliberate layout, readable forms, and details prefilled from the customer's account.
  • A complete account area — login by password or mobile, orders, downloads, addresses, profile completion and access to previous purchases.
  • A theme settings panel — logo, menus, slider, colours and text, product categories, item counts, gallery and which home-page sections appear.
  • Fully responsive — a bespoke mobile layout, touch carousels, and a glass bottom menu.

Six custom plugins

Capabilities were written as modules independent of the theme, so they survive a WordPress or WooCommerce update, or a change of theme.

Idepoo SMS — OTP login and registration via SMS.ir, order-status notifications, dynamic SMS template parameters, and secure attachment of guest orders after mobile verification

Idepoo SEO — Dynamic meta tags, Open Graph, share images, a standard sitemap, and Schema and JSON-LD for WooCommerce products

Idepoo Woo Toolkit — Aparat video, product gallery and slider, a modern variable-product display, Persian localisation, the Jalali calendar and Jalali reports

Idepoo WordPress Toolkit — A custom login page, fully local assets, page and browser caching, and conservative HTML, CSS and JavaScript optimisation

Idepoo Zarinpal — A light, secure ZarinPal gateway for WooCommerce, bank-return handling and transaction records

Idepoo Mellat — A dedicated Behpardakht Mellat integration with verification, inquiry, settlement and automatic reversal

Technical foundations

WordPress and WooCommerce, PHP and MySQL, HTML5, CSS3 and JavaScript, the REST API and WooCommerce CRUD, HPOS compatibility, full right-to-left with the locally hosted IRANSansX typeface, a responsive interface, and Docker deployment.

Every font, stylesheet and script is served from the site's own server — no foreign CDN dependency, which under Iranian network conditions is the difference between "fast" and "sometimes fast".

Have a similar project in mind?

Fifteen minutes is enough to say what it needs, how long it takes and where to start.