Amirhossein Hosseinpouramirhp
CV
Service · Plugins and stores

WordPress and WooCommerce development

Plugins that survive the next update, and get extended instead of forked.

Custom plugins from a written specification to a release that survives platform updates. WooCommerce work where a store actually runs: invoicing, receipts, payment gateways, order flows and customer profiles. And publishing to WordPress.org where it makes sense, with the review, the readme and the release workflow handled.

Tell me what you are trying to build How a build goes

What it usually looks like

The work that shows up after a store goes live: the workflow no plugin covers, the plugin that breaks on every update, the code nobody wants to own.

A workflow no plugin covers

Invoices that follow local legal rules, receipts for bank transfers, a checkout that reads the field the profile writes. I build it as a plugin with its own settings, not as snippets in a theme.

A plugin that breaks on every update

Usually it reaches into WooCommerce's internals instead of going through its APIs. I move the data access onto the supported path, so the next release is not an event.

Order code written before HPOS

When WooCommerce moved orders out of the posts table, every order-meta call had to change. I have done that on a plugin with thousands of live installs, where breaking them was not an option.

A plugin someone else wrote

Send me the repository and I will tell you what shape it is in before you commit to anything.

A plugin other developers must extend

Readable hooks, templates a theme can override, and settings that export as a file. Other developers change the behaviour without forking the code.

Something that belongs on WordPress.org

The review process, the readme, the assets and the release workflow. I have done it repeatedly: nine plugins are live across three organisations.

Six years of one plugin

"Survives updates" is easy to write. This is what it has meant on the largest thing I maintain, release by release.

Ultimate Invoice on WordPress.org2020 to today
  1. 2020

    First public release

    Right to left, the Jalali calendar, Persian numerals, national and economic ID fields and thermal receipt printers were requirements from the first version, not later additions.

  2. Version 1.4

    Bulk operations

    ZIP archives of PDFs, batch printing, and export of every setting as JSON or PHP, after the support queue showed stores downloading invoices one order at a time.

  3. Late 2025

    HPOS, completed

    Every order-meta call rewritten for WooCommerce's new order storage, in the same cycle as an 80mm thermal template, per-document page sizes and mPDF 8.2.7.

  4. Late 2025

    CVE-2025-54869

    Reported privately through Patchstack's disclosure programme, fixed under its deadline, and shipped through the normal WordPress update.

  5. March 2026

    Bulk downloads hardened

    Archive filenames randomised, and the files deleted from disk after delivery.

  6. Today

    Still shipping

    Tested against WordPress 6.9.7, and the support forum still gets answered.

Ultimate Invoice is published by Pepro Dev; I lead its development and maintenance.

The full product page

What survives an update

The decisions that kept that plugin alive through six years of WordPress and WooCommerce releases. I bring them to every build, public or private.

Templates, not settings
Output lives in files a theme can override, so a client's changes outlive every release.
Hooks with readable names
Documented filters and actions, so other developers extend the plugin instead of forking it.
WooCommerce's own APIs
Order data read the way WooCommerce asks, with HPOS assumed rather than accommodated.
Settings that travel
Every setting exports as a file. An agency sets up one store, and the next one imports it.
Right to left from the first line
Translation and RTL are design constraints, not a later pass.
Disclosure, not surprises
Security reports arrive privately, through Patchstack where the plugin is public, and sites are patched before anything is published.
A changelog and upgrade notes
A release with no changelog, no hook reference and no upgrade note is unfinished.
Tested before the release lands
Checked against each coming WordPress and WooCommerce release before it lands, not after the support threads arrive.

How a build goes

The same five steps for a new plugin or for a rescue of an old one.

  1. A short call

    Thirty minutes. You describe the problem, I tell you honestly whether I am the right person.

  2. A written scope

    Before any code, you get a document that says what will be built, what will not, how long, and what it costs. You approve it or we adjust it.

  3. Milestones on a staging site

    You see progress. Nothing lands on production without your sign-off.

  4. Handover

    Documentation, a recorded walkthrough, and everything in your repository, not mine.

  5. Maintenance, if you want it

    Monthly or on demand. Optional, and separate.

For agencies

I work white-label, and often. Pigment is an agency, so I know how that arrangement works from both sides.

A good fit when

The problem is technical, the scope can be written down, and you want the person who builds it to still be reachable in a year.

Not a fit when

You need it next week, or the budget assumes a template.

I am not a designer, a theme customiser, or an agency. For design and full-service work, Pigment Agency is where I would send you, and I would probably end up doing the development anyway.

Questions

The ones that come up before a plugin is scoped.

Will you publish it on WordPress.org?

If that is what you want, yes, including the review process, the readme, the assets and the release workflow. I have done it repeatedly.

Can you take over a plugin someone else wrote?

Usually yes. Send me the repository and I will tell you what shape it is in before you commit to anything.

Do you sign NDAs?

Yes. Some of my past work is under one and does not appear on this site.

How is it priced?

I will quote after the first call, once I know what the work actually is. I do not quote from a form.

How does payment work internationally?

We agree that during scoping. It depends on where you are, and I would rather solve it before the work starts than after.

What time zone are you in?

UTC+3:30. That is a full working overlap with Europe and the Gulf, and it covers the first half of the North American day. I work asynchronously and write things down, so you should not need to be online at the same time as me.

branch main 6 active projects ↑ 113 releases services/wordpress-woocommerce.md Sari --:-- UTC+3:30 its@amirhp.com