Skip to content

01Journey

Journey

Six stages, and each one is the reason the next was possible. Learning alone taught me to read source; freelancing taught me to scope; the agency taught me volume and standards; the volume produced the problems the plugins answer; the plugins ran into the limits of what a CMS will do for you, which is where the applications start.

This is the long version. The short one is on the About page.

  1. 2012 — 201601 — Where the curiosity started
  2. 2016 — 201802 — Teaching myself to build
  3. 2018 — 202103 — First paid work, then a specialism
  4. 2021 — Present04 — White-label development partner
  5. 2024 — Present05 — Building the tools the work asked for
  6. Now06 — Laravel and Vue applications
  1. 2012 — 2016

    Chapter 01

    Where the curiosity started

    No computer of my ownRural Bangladesh

    A village where the electricity could not be relied on, and a kid who volunteered to charge other people's phones so he could spend an hour inside them.

    A small dark slab resting on warm paper in a shaft of low sunlight, a thin orange glow along one edge
    Borrowed light

    Phones were charged off a solar panel. Neighbours would hand us one, I would plug it in and then spend the next hour opening every menu and changing every setting, and hours later we would find it almost exactly as flat as when it arrived. It is a funny story now. At the time it was the only access I had to a computer of any kind.

    I got in front of a real one in 2012 and bought my own in 2016 — a low-powered dual-core desktop, paid for slowly. The reason it became a career rather than a hobby is unromantic: it was the one thing I owned that could plausibly change the next ten years.

    • Borrowed phones and a solar panel, in place of a computer
    • First real computer in 2012, first of my own in 2016
  2. 2016 — 2018

    Chapter 02

    Teaching myself to build

    Self-taught, with one mentorAt home, on a dual-core desktop

    Two years of front-end fundamentals learned with almost nothing available in my own language — which turned out to be the most useful constraint I have had.

    A small clay vessel alone in a large empty room, catching the first light
    First light

    An older brother pointed me at web development and told me where to start; that was most of the guidance available. Material in Bangla barely existed, my English was not strong enough to read the good English material quickly, and the community you can ask a question of today was a fraction of its current size. A problem a beginner would now solve in ten minutes could take me two or three days.

    That is where the habit came from. When there is nobody to ask, you read the source, change one thing and watch what breaks — and I have used that on every unfamiliar codebase since, including every framework I have picked up as an adult.

    By the end of it I could build and style a page properly, and I had enough PHP to stop treating the server as somebody else's problem. Which is what made the next step possible.

    • Front end first, then PHP — no framework in between
    • Learned to read source because there was nothing else to read
    • Two years of building for practice before charging anyone
    HTML/CSSJavaScriptjQueryBootstrapPHP
  3. 2018 — 2021

    Chapter 03

    First paid work, then a specialism

    Freelance, remoteClients across five continents

    First paid work in June 2018, and two years of turning design files into markup before WordPress arrived at the end of 2020.

    Many identical clay tokens laid out in loose rows, one of them glazed orange
    Volume, one at a time

    The first paid job came in June 2018, two years after I started learning. For the next two years the work was almost entirely design-to-code conversion — a PSD or a Figma file in, hand-written HTML and CSS out. Narrow work, and a good place to get fast at the part everything else sits on.

    The value was volume — a compressed run of briefs, deadlines and handovers that would have taken years to accumulate through referrals. Fixed prices meant every bad estimate came out of my own evenings, which is an expensive and very fast way to learn what to ask before quoting. That discipline is still the reason I can put a date on a piece of work and hold it.

    WordPress arrived at the end of 2020. With HTML, CSS, JavaScript and PHP already in place it was not a new subject, it was a new arrangement of ones I knew — and it was where the work was. Within a few months it was most of what I sold, and a few months after that it was what an agency wanted a partner for.

    orders delivered
    223
    on-time
    100%
    • Design-to-code conversion for the first two years, WordPress from late 2020
    • Clients across the US, Canada, Europe, Australia and New Zealand
    WordPressPHPJavaScriptHTML/CSSMySQL
  4. 2021 — Present

    Chapter 04

    White-label development partner

    A US digital agencyRemote, US hours

    Around 45 production sites across five sectors, built under someone else's name. The volume that turned preferences into a method — and produced the problems everything since is an answer to.

    Three overlapping matte planes of unequal size interlocking cleanly, one orange
    Made to interlock

    White-label means the work ships under the agency's name: their designer's file, their project manager, their client. Feedback arrives specific and immediate, measured against a file rather than an opinion, which is uncomfortable for about a month and then extremely useful.

    The range is wider than a portfolio usually admits — marketing sites, custom themes with modelled content, page builders where the client's own team had to keep editing, LMS and education sites, WooCommerce stores, and a great deal of ordinary CMS work, often on hosting nobody involved chose.

    Forty-five of anything is enough to stop guessing. The decision that mattered on each one turned out not to be technical: it was who would be maintaining this in a year. The other thing it produced was a list — the same handover questions, the same requests, the same awkward edit, repeating across unrelated clients. Written down, that stops being anecdotes and becomes a specification.

    sites built
    45
    years with one partner
    5
    • Around 45 sites across construction, industrial, hospitality, education and e-commerce
    • Custom themes, page builders, WooCommerce and LMS — chosen by who maintains the site
    • Five years working US hours from Bangladesh, under an agency's review process
    WordPressPHP 8ACF ProElementorWooCommerceMySQL
  5. 2024 — Present

    Chapter 05

    Building the tools the work asked for

    IndependentDhaka, working remotely

    Taking that list seriously. Plugins built as real applications inside wp-admin — React over a PHP core, talking through REST — rather than settings pages with a form on them.

    Three finished clay vessels standing on a shelf in warm side light, one glazed orange
    Three, shipped

    Defer Forms for Contact Form 7 came straight off the list: a visual builder for Contact Form 7, around 12,400 lines of PHP behind a React canvas, built so that no form already living on a site has to change. The others followed the same rule — take a job clients kept asking me to repeat, and make it something they can do themselves.

    Building them is where the modern front-end work actually started. A drag-and-drop canvas with selection, undo and a properties panel is not a jQuery problem; it is a React application that happens to be mounted inside somebody else's admin. The PHP side stopped knowing anything about the interface and started answering REST requests instead, which is the same seam I would later build an entire API across.

    The discipline that came with them was the WordPress.org review process — coding standards, escaping, internationalisation, nothing bundled that should not be. Useful to have applied to your own code rather than only to a client's.

    lines of PHP in Defer Forms for Contact Form 7
    ~12k
    test suites
    112
    • React interfaces over a PHP core, joined by REST rather than by templates
    • Extension points documented as a hooks API before any settings page
    • Storage designed as tables where the data is relational, not as post meta
    PHP 8.2Reactdnd-kit@wordpress/componentsWordPress REST APIVite
  6. Now

    Chapter 06

    Laravel and Vue applications

    IndependentDhaka, working remotely

    Where the work is now. Full-stack applications, built where none of the answers a CMS hands you arrive for free.

    Two clay forms standing apart, joined by a single taut orange thread
    Two ends, one thread

    WordPress answers most of the hard application questions before you start — users, roles, storage, routing — and it answers them one particular way. The plugins kept running into the edge of that. A permission rule about a record rather than a type of thing is not a capability; a table you actually want to query is not post meta. At some point the honest move is to build where those decisions are yours.

    So the current work is Laravel and Vue: REST APIs authenticated with Sanctum, authorisation models designed rather than inherited, migrations, and single-page front ends that have to deal with loading, failure and reconciliation honestly. Decoupled on purpose — an API I could put a second client in front of, rather than one framework quietly doing both jobs.

    The patterns that keep proving themselves are the ones the earlier stages taught me. Model the data before the interface. Keep the dependency count low, because every one is something somebody inherits. And decide by who maintains it, which turns out to be as true of an API contract as it ever was of a client's homepage.

    Client work continues alongside, and funds the rest.

    • Laravel APIs with Sanctum and capability-based authorisation
    • Vue 3 single-page front ends with one Pinia store per domain
    • Applications built at a size where the decisions are real ones
    Laravel 12SanctumVue 3PiniaViteTailwindMySQL

Next

The plugins and the application are where this is going. Each project page explains what the constraint was and what it cost.