LHR PKTOpen to roles + contract

Client site
Fig. 01 · Name, variable width Full-stack web engineer · Laravel / Next.js / WordPress Sheet 01 / 07

Ten production sites. All still live.

Full-stack web engineer in Lahore. Laravel and PHP at the core, Next.js and TypeScript on the front, WordPress when the client needs to edit it themselves. Backend lead on a multi-tenant SaaS; performance work measured in Lighthouse points.

status · hamza/devlive
availability
open · full-time remote, contract
based
Lahore, PK · GMT+5
local time
overlap
UK morning · Gulf all day · US East early
shipped
10 sites in production
core
Laravel · Next.js · WordPress
01 / TL;DRFor hiring managers

The 30-second version.

Everything a screening call would cover, in one table. The rest of the page is the evidence.

Role
Full-stack web engineer. Backend-leaning on Laravel; front ends that match the design file.
Shipped
10 production sites across SaaS, healthcare, biotech, an NGO, real estate and e-commerce. All live, all linked below.
Strongest at
Billing and entitlement logic, page-speed work you can measure, routing forms to the right people, and Arabic layouts from one codebase.
Stack
PHP 8 · Laravel · WordPress (custom themes, ACF) · Next.js · TypeScript · Stripe · GSAP
Location
Lahore, Pakistan. GMT+5, remote. Works UK and Gulf hours comfortably.
Open to
Full-time remote roles and contract work.
Contact
hamzasultan1702@gmail.com
Code
github.com/hamzasultan
02 / SystemsFive, with working

What was hard, and how it got done.

Each one in the same order: problem, why it mattered, method, outcome, and the reason for the approach. Code here is a sketch I wrote for this page so the idea is readable. It isn't copied from a client's repository.

SYS-01

Carder

AI mini-site builder · Backend & infrastructure lead

carder.app ↗
Problem
Turn one sentence into a live site with menu, hours and booking, for many businesses at once, on paid plans with AI limits.
Why it mattered
Billing errors cost money both ways: a lapsed plan keeping a site live, or a paying customer blocked. Heavy uploads couldn't slow everyone else down.
Method
  1. 01Split the loadLaravel stays the core; media and billing run on their own paths.
  2. 02Ask StripeEvery publish checks the plan against Stripe, not a cached flag.
  3. 03Meter AIGeneration is counted per plan, so limits match what each customer pays for.
Outcome
1~30s
Sentence to live site

A sentence becomes a live site, with billing and AI limits enforced on every publish. One admin back office covers every tenant.

  • Laravel
  • Next.js
  • Stripe
Architecture sketch: a Next.js front end calls a Laravel core, which uses separate billing, media and AI paths and serves tenant sites and an admin back office. NEXT.JS FRONT ENDbuilder · editor LARAVEL COREAPI · tenancy · jobs BILLING PATHStripe · entitlement MEDIA PATHuploads · processing AI GENERATIONmetered per plan TENANT SITESpublished mini-sites ADMINback office publish → asks Stripe
Fig. S1 · Architecture sketch, simplified
// Every publish asks Stripe, never a cached flag.
public function publish(Site $site)
{
    $plan = $this->billing->activePlan($site->tenant);
    abort_unless($plan?->allows('publish'), 402, 'Plan inactive');

    PublishSite::dispatch($site);
}
SYS-02

Printed Soap Boxes

Packaging manufacturer, US · Performance

printedsoapboxes.com ↗
Problem
Mobile Lighthouse score of 41. Every page loaded scripts and styles it never used, and the hero image waited behind them.
Why it mattered
Google ranks mobile results partly on mobile speed. A slow page meant fewer visitors from search, and the ones who came saw a half-loaded screen.
Method
  1. 01MeasureRan Lighthouse on mobile and listed every request blocking the first paint.
  2. 02CutDequeued scripts and styles on templates that don't use them; cleared render-blocking CSS and JS.
  3. 03PrioritiseMade the hero image the first thing the browser fetches, so the main content paints early.
Outcome
4197
Mobile Lighthouse score

Same page, same test, before and after. Organic enquiries rose after the change shipped.

  • WordPress
  • Elementor
RequestBeforeAfter
document
theme.css
slider.jsdequeued
builder.js
hero.webp
Fig. S2 · Waterfall sketch, not a recording
// Load the slider only where a slider exists.
add_action('wp_enqueue_scripts', function () {
    if (!is_page_template('templates/gallery.php')) {
        wp_dequeue_script('slider');
        wp_dequeue_style('slider');
    }
}, 100);
SYS-03

RCH Care Homes

UK care group · UX and development

rchcarehomes.co.uk ↗
Problem
Nine homes in four counties and one way to get in touch. Every enquiry had to be read and forwarded to the right home by hand.
Why it mattered
Families choosing care are stressed and comparing options. A slow reply, or one from the wrong home, sends them to the next group on their list.
Method
  1. 01Model the homesEach home became a record with its location and the types of care it offers.
  2. 02Make them findableA directory searchable by town, postcode and type of care.
  3. 03Route at the formThe enquiry form uses the same choices to send each message to that home's admissions team.
Outcome
91
Homes → one routed form

Each enquiry reaches the admissions team that can answer it, with no sorting step in between.

  • WordPress
  • ACF
form.home→ inbox
home-aadmissions, home A
home-badmissions, home B
…one row per home, 9 total
anything elsecentral inbox
// Home chosen in the form → that home's admissions inbox.
function route_enquiry(array $form): string
{
    $home    = sanitize_key($form['home'] ?? '');
    $inboxes = get_field('admissions_inboxes', 'option') ?: [];

    return is_email($inboxes[$home] ?? '')
        ? $inboxes[$home]
        : get_option('admin_email');
}
SYS-04

Flare Business

Workspace provider, Qatar · Lead developer

flare.qa/ar ↗
Problem
A premium workspace in Lusail selling into a market that reads Arabic first, with a site that only spoke English.
Why it mattered
An Arabic-first visitor who gets English, or a translation with a broken mirrored layout, leaves before booking a tour.
Method
  1. 01TranslateA full Arabic version through TranslatePress, so the team edits wording in one place.
  2. 02MirrorNavigation, type and spacing flip right to left from the same templates.
  3. 03Read it in ArabicWent through each template right to left to catch anything that didn't mirror cleanly.
Outcome
ENAR
One site, both directions

Arabic-first visitors get a layout built for them. Drag the slider on the screenshot to compare.

  • WordPress
  • TranslatePress
Flare Business homepage in English The same page in Arabic, laid out right to left
/* One stylesheet, both directions. */
.card  { padding-inline-start: 2rem; border-inline-start: 2px solid; }
.nav   { margin-inline-start: auto; }
.price { text-align: end; }

/* Flip arrows, not logos. */
[dir="rtl"] .icon-arrow { transform: scaleX(-1); }
SYS-05

CardiaCures

Clinical-stage biotech · Front-end engineer

cardiacures.com ↗
Problem
A detailed clinical Figma file: a radial drug-pipeline diagram and a stage-by-stage trial grid that had to be built exactly.
Why it mattered
Investors and regulators read the site to judge the science. A template look, or blurry exported charts, would undercut it.
Method
  1. 01Split the fileBroke the design into BEM blocks so diagram styles can't leak into the rest of the site.
  2. 02Diagrams in codeBuilt the radial pipeline and the chevron-connected trial grid in CSS Grid, not images.
  3. 03Light motionScroll reveals with AOS, kept subtle so they never compete with the data.
Outcome
Fig1:1
Figma to production

The design shipped as designed, with the diagrams as real, editable markup.

  • HTML
  • CSS Grid
  • BEM
DiscoveryPreclinicalPhase IPhase IIPhase III
.pipeline {
  display: grid;
  grid-template-columns: repeat(5, 1fr);
}
/* Each stage is a chevron; no images. */
.pipeline__stage {
  clip-path: polygon(0 0, 88% 0, 100% 50%, 88% 100%, 0 100%, 12% 50%);
}
03 / CodeConventions I default to

How I lay out a WordPress theme.

Pick a file. Each one does one job, so the next developer finds things without asking me.

theme/ inc/
// functions.php stays a table of contents.
foreach (['enqueue', 'routing', 'acf'] as $part) {
    require_once get_theme_file_path("inc/{$part}.php");
}
04 / StackSorted honestly

What I use, sorted by how often.

Three piles. The first is muscle memory, the second has shipped to production at least once, the third I've built real things with but wouldn't call deep experience yet.

A · Daily
  • PHP 8
  • WordPress
  • ACF
  • JavaScript
  • CSS Grid & logical properties
  • Git
  • Core Web Vitals tooling
  • Elementor
B · Shipped in production
  • Laravel
  • Next.js
  • TypeScript
  • Stripe billing
  • TranslatePress
  • GSAP
  • Multi-tenant architecture
C · Explored
  • Framer Motion
  • CSS 3D transforms
  • Variable fonts (this page)
05 / IndexAll 10 · case files inside

Everything, with the hard part.

06 / This siteColophon

This page, built by hand.

  • Build

    No framework, no build step. Static HTML, one stylesheet, one script.

  • Motion

    GSAP with ScrollTrigger, SplitText and Flip; Lenis for scrolling. All self-hosted, nothing from a CDN at runtime.

  • Type

    Two variable fonts. The name at the top is one axis, wdth 62–125, tied to your cursor, with its width measured live.

  • Colour

    Every colour is an OKLCH token checked for WCAG AA contrast before it was used.

  • Access

    With reduced motion on, smooth scroll and reveals switch off. Every interaction works from the keyboard.