Raufun.

Raufun Nasim Khan Chowdhury · Software engineer

Fast, findable web apps that actually get used.

Next.js, React and TypeScript on the front. Node, WordPress, Sanity and third-party APIs behind. Six years remote, for companies in the US and Malta.

Free check · what a search engine sees, in about ten seconds

Sample report

a live cleaning company

static HTML · 51 KB · 1,176 ms

Checked as Local business

61

Mixed. The red items are worth an afternoon. Start with profiles linked in your markup.

Out of 100 across 14 checks chosen for a local business. A pass counts in full, a warning half, a fail nothing.

3costing you5worth fixing6clear

Fix first

4 of 14

  1. 1

    Profiles linked in your markupCosting you

    Add a sameAs array to the LocalBusiness block: Google Business Profile, Facebook, Yelp, BBB, Instagram.

  2. 2

    Review ratingCosting you

    Put the same rating into an aggregateRating in the structured data, with ratingValue and reviewCount that match your Google profile.

  3. 3

    Real photographyCosting you

    Add real photos: the team, the vans, finished jobs. Eight or more on the homepage, none of them stock.

  4. 4

    Third-party review proofWorth fixing

    Link the Google reviews page directly under the rating, and add Yelp or BBB if you have a presence there.

Phase two · real phone speed

On a live check, Google loads the page on an emulated mid-range phone and reports what a visitor actually gets: performance score, largest paint, blocking time, layout shift.

Runs on request, takes up to a minute.

All 14 checks3 costing you · 5 worth fixing · 6 clear

Costing you · 3

  • Profiles linked in your markup

    Costing you

    No sameAs links found

    This is how Google ties the website to your Business Profile. Missing it costs you in the map results.

    Add a sameAs array to the LocalBusiness block: Google Business Profile, Facebook, Yelp, BBB, Instagram.

  • Review rating

    Costing you

    A rating is written on the page but is not in the markup, so it can never show in search results

    A rating typed into the page is a claim. A rating in the markup can appear as stars in Google.

    Put the same rating into an aggregateRating in the structured data, with ratingValue and reviewCount that match your Google profile.

  • Real photography

    Costing you

    3 image tags, 2 unique files

    People decide whether to let you into their home. Showing nobody is the most expensive thing on this list.

    Add real photos: the team, the vans, finished jobs. Eight or more on the homepage, none of them stock.

Worth fixing · 5

  • Third-party review proof

    Worth fixing

    Links to Facebook

    Visitors trust a number they can click and check far more than one you print yourself.

    Link the Google reviews page directly under the rating, and add Yelp or BBB if you have a presence there.

  • Image alt text

    Worth fixing

    1 of 3 have no alt attribute

    Alt text is an accessibility requirement and it is read by search engines. Decorative images get an empty alt, never none.

    Give every image an alt attribute: a short description for content images, alt="" for decorative ones.

  • Full postal address in markup

    Worth fixing

    City and region only, no street or postcode

    A local business with no findable address reads as less established than it is.

    Complete the PostalAddress in the structured data: streetAddress, addressLocality, addressRegion, postalCode. Service-area businesses can add areaServed instead of a street.

  • Title and description

    Worth fixing

    Title 80 characters, description 215

    This is your advert in the search results, and it is free.

    Shorten the title to 60 characters or fewer, service and place first, name last.

  • Link preview

    Worth fixing

    Open Graph title but no image

    What the link looks like when someone pastes it into WhatsApp, LinkedIn or a text.

    Add og:title, og:description and a 1200x630 og:image so shared links show a card instead of bare text.

Clear · 6

  • Local business structured data

    Clear

    Found LocalBusiness, WebSite

    Without it, search engines are guessing what you do and where you do it.

  • Tap-to-call

    Clear

    4 tel: links

    Most of this traffic is on a phone. If the number is not tappable, the call does not happen.

  • Page heading

    Clear

    One h1

    One clear h1 tells search engines what this page is about.

  • AI answer engines can read the site

    Clear

    ChatGPT, ChatGPT search, Claude, Perplexity, Gemini, Apple Intelligence all allowed

    People increasingly ask ChatGPT, Claude and Perplexity before they search. A crawler that is blocked cannot recommend you.

  • Mobile viewport

    Clear

    Declared

    Without it a phone shrinks the whole desktop layout to fit.

  • Markup weight

    Clear

    32 KB of markup, 51 KB total with inline scripts, fetched in 1,176 ms

    Markup only, with inline scripts set aside so the number is comparable across platforms.

What this means

There is real ground to gain, and none of it needs a rebuild.

3 things are costing you calls: profiles linked in your markup, review rating and real photography. This is how Google ties the website to your Business Profile. Missing it costs you in the map results. 5 more are worth an afternoon: third-party review proof, image alt text, full postal address in markup, title and description and link preview. None of them needs a redesign; each is a specific change to the page or its markup.

What this check cannot see: whether your listings agree with each other across the web, whether you rank in the towns that actually produce work rather than the ones that do not, and what a booked job currently costs you. That is the part a written teardown covers, and you keep it either way.

Show me what to fixWritten reply, usually within four hours. No call required.

A real site, checked live and anonymised. Yours gets the same treatment in about ten seconds, with the checks chosen for your kind of site: local business, company, or personal. No signup, nothing stored.

Next.jsReactTypeScriptNode.jsWordPressPHPSanityVercelDockerREST and webhooksStripeMeta Conversions APINext.jsReactTypeScriptNode.jsWordPressPHPSanityVercelDockerREST and webhooksStripeMeta Conversions API

Before and after

Same business. Same number. Drag to see the difference.

Where a customer actually meets the site: the Google result and the phone in their hand. Nothing here is a redesign. It is the checks above, fixed.

Before · in Google

S

Sparkle & Shine

sparkleshine.example

Sparkle & Shine Cleaning Services | Residential and Commercial Cleaning Company Serving the San Fernan...

No rating shown · Los Angeles, CA

Welcome to our website. We are a professional cleaning company offering a wide range of cleaning services for residential and commercial clients. We pride ourselves on...

After · in Google

S

Sparkle & Shine

sparkleshine.example

House cleaning in the San Fernando Valley | Sparkle & Shine

4.9(214)· Cleaning service · Van Nuys, CA

Insured, bonded, same cleaner every visit. Book online or call (818) 555-0100. Serving Van Nuys, Sherman Oaks and Burbank.

PricingBook a cleanReviewsService area

Title

80 characters, cut off

One line, place and service first

Rating

4.9 typed on the page

Stars from markup, 214 reviews

Number

Text in the footer

Tap-to-call bar on every screen

Proof

Nothing to check

Google profile, insured, sitelinks

About

Full-stack engineer. I care whether the thing ships, and whether anyone uses it.

A small home office at dusk: two monitors with code editors, a desk lamp, a window with city lights

Next.js, React and TypeScript on the front. Node services, WordPress and PHP, Sanity and third-party APIs behind. I have built campaign platforms with payments and transactional email, scrapers with admin dashboards, automation services in Docker, and a lot of websites for businesses that live on inbound calls.

What I bring past the code is the habit of checking. Structured data that is actually there, a webhook that actually fires, a page that is actually fast on a phone. The free check at the top of this page is that habit turned into a tool.

  • Full stack: Next.js and React front ends, Node and PHP behind them
  • Integrations that survive real data: webhooks, payments, tracking
  • Search and AI visibility treated as engineering, not marketing
  • Measured before and after, in writing, every time

Services

What you can hire me for.

Hire me for one of these or for the whole thing. Every item is work I do myself, not work I coordinate.

Web applications

Custom web apps on Next.js and React with TypeScript: dashboards, portals, internal tools and customer-facing products. Server components, a proper data layer, and tests around the parts that touch money or records.

Next.jsReactTypeScript

Design to code

A Figma, Adobe XD or Photoshop file, even a Canva board, built into a full working site. Spacing, type and states as designed, accurate at every width, with real components behind it rather than a page that only matches at one size.

FigmaAdobe XDPhotoshop

API integrations and automation

Connecting the tools a business already runs: webhooks, scheduled jobs, scrapers, CRM syncs and background services in Node and Docker. Built to survive bad data, and to tell you when something fails instead of failing quietly.

Node.jsWebhooksDocker

Headless WordPress and Sanity

Keep the CMS the team already knows and replace the slow front end with Next.js. Content modelling, live preview, revalidation on publish, and a migration that keeps every URL and ranking.

HeadlessSanityWP REST

WordPress and PHP

Custom plugins, post types, importers and admin tooling, written to WordPress standards so the next developer can read them. Fixing, hardening and speeding up existing plugins too.

PluginsPHPACF

Local search and structured data

LocalBusiness and Organization markup, review and profile links, service-area pages and a complete address, so Google and the AI answer engines can connect the site to the business behind it and name it.

SchemaAEOMap pack

Core Web Vitals

Diagnosing and fixing INP, LCP and blocking time on an existing site: images, scripts, fonts, server response. Measured before and after, in writing, against Google's own thresholds.

INPLCPLighthouse

Lead funnels and tracking

Quote and booking forms that convert, tap-to-call as the primary action, tracked numbers for paid traffic, and Meta Conversions API with deduplication so attribution survives ad blockers and iOS.

FormsCall trackingCAPI

Platform migrations

Moving a site between platforms, WordPress to Next.js or the reverse, with a one-to-one redirect map, structured data carried over, and the existing rankings protected rather than gambled.

301 mapMigrationSEO

Case studies

Anonymised examples from real work.

These are live under client and agency branding rather than mine, so they are described by sector and scope rather than named. The work is exact.

Local SEO + service areas

Metro plumbing company

Service area system across dozens of suburbs: a page per city rather than one list, an interactive coverage map that only loads its script when tapped, and local business structured data per location.

Every suburb they served became a page somebody could actually find.

Brand + performance

Tree service company

Front end with a hero running background video of the crew working. Layering and responsive behaviour resolved so the headline stays readable at every width, with poster frame and encoding tuned so first paint never waits on the video.

Proof the crew is real, without the load time that usually costs.

Video + performance

Advocacy campaign site

A homepage video that had to autoplay with sound, which every browser blocks. The player starts muted so autoplay is allowed, unmutes itself the moment the browser permits, and falls back to a single tap-to-unmute overlay when it does not. The player itself now loads on the visitor's first interaction instead of on page load, because loading it eagerly had pulled a megabyte of script and five third-party cookies into every visit and cost a 49 mobile performance score.

Sound where the browser allows it, one tap where it does not, and a page that no longer pays for the player before anyone scrolls.

WordPress + conversion

Residential plumbing company

Custom build with service pages split by search intent rather than bundled into one grid, the service area structure, complete local business markup, and tap-to-call handled as the conversion rather than decoration.

The phone number stopped being text and started being measured.

Server-side tracking

Financial services firm

Meta Conversions API with event deduplication against the browser pixel, so attribution survives ad blockers and iOS. Pixel scoped to the thank-you page only, with the form platform passing qualification data through to the conversion event.

Ad spend measurable again after the browser pixel stopped reporting reliably.

Lead funnels

Consumer review platform

Quiz funnels where the qualification logic lives in the form tool itself rather than downstream, so the automation only reads a verdict it was handed. Qualifier and thank-you templates, with routing on the end screen rather than a redirect.

Unqualified leads filtered before they reached the client's inbox.

Booking integration

Business funding company

Embedded scheduling across a WordPress site, including private direct-booking routes for individual staff separate from the public calendar, and the caching quirks that make embedded calendars silently show the wrong availability.

Bookings that route to the right person without a receptionist.

Plugin development

Legal directory platform

A WordPress plugin importing a spreadsheet of practitioners repeatedly. Per-field provenance means a value corrected by hand in the admin is never overwritten by a later import, and the run report states exactly which fields it left alone and why. Locations resolve hierarchically so two cities of the same name in different states stay separate.

A spreadsheet can be re-imported all day without destroying corrections.

3D and media delivery

Architectural visualisation studio

Interactive 3D model delivery on a platform that blocks the file type by default, worked around at the upload layer, with model preview pages built to load heavy assets without stalling the rest of the site.

Clients can turn the building around in the browser instead of viewing stills.

E-commerce

Firewood supplier

Storefront, product structure and checkout path for a seasonal delivery business, with the performance work to keep it quick on a phone during the short window when the orders actually arrive.

A seasonal business taking orders without answering the phone.

Email infrastructure

Marketing agency

SPF, DKIM and DMARC configured across fifty domains and a hundred and fifty mailboxes, with the sending platform wired in and authentication verified per domain rather than assumed.

Mail that lands in the inbox instead of the spam folder.

Engineering

Work that took real engineering, not a plugin.

Specific work from real projects: the situation, what I built, and what changed. Names removed, everything else exact.

An engineer's desk from above: laptop with a code editor, a notebook with a hand-drawn wireframe, a vermilion pen and a coffee
Agency fleet of client WordPress sitesA control center for a fleet of client sites, rebuilt off WordPress.

The situation

The agency's own site moved to Next.js, which killed the WordPress endpoint every client site phoned home to. Every site in the fleet started failing its heartbeat and showing admins a warning.

What I built

A Cloudflare Worker with a SQLite Durable Object and a capability-URL dashboard. Sites enrol and receive commands over HMAC-SHA256-signed requests verified on raw bytes; each site owns its token and the hub pins it on first contact, so a fresh, empty hub re-pairs the whole fleet by itself.

Result

Fleet back online without touching a single client site. No data migration, ever, by design.

Agency plugin suite, GitHub ActionsPush to main, and every client site updates itself.

The situation

A dozen custom plugins across many client sites, each updated by hand, each drifting.

What I built

A monorepo with a release Action: bump the version header, build the zip, publish a GitHub Release to a public mirror, regenerate the update manifest. Sites read that manifest through the plugin's Update URI and pull the new version within about twelve hours, or on demand from the control center.

Result

One push is a fleet-wide deploy, with the release history and the rollback path GitHub gives for free.

Plumbing company, Next.js and Sanity on VercelContent that never went live and a bill that kept climbing, one root cause.

The situation

Editors published and the site kept serving old pages. Separately, hosting usage rose month on month on flat traffic. The revalidation webhook had returned 401 on every delivery since April: the secret contained a plus sign that the query-string parser turned into a space.

What I built

Secret moved to a header and compared byte for byte; cron-driven scheduled publishing with 24-hour ISR windows so pages regenerate when content changes, not every few minutes.

Result

Publishes land in seconds. Diagnosed from the usage page, not the code: the money was in ISR writes and build minutes, and the next invoice showed it.

Window and door company, paid adsAds that were learning from a fraction of the real leads.

The situation

The pixel had only ever been placed on the thank-you page, so it never saw the click ID on the landing page and every lead reached the ad platform unattributable. Ad blockers and iOS took the rest.

What I built

Pixel and click-ID capture on the landing page, a small server-side plugin relaying each lead through the Conversions API with a shared event ID for deduplication, and the discovery that a server-side redirect was stripping the click ID before the page ever saw it.

Result

Browser and server events matched in Events Manager instead of a pixel counting alone; the spec became the agency's reusable CAPI playbook.

Architectural visualisation studio, WordPressInteractive 3D product models on a site that refused the files.

The situation

The studio's product is 3D work, and WordPress blocks GLB and glTF uploads at the media layer regardless of role.

What I built

Uploads routed straight to disk through a file manager, source glTF converted to binary GLB at about a quarter smaller, and a preview page with an interactive viewer (rotate, auto-rotate, flat lighting) for two product variants.

Result

Models the studio could not even upload are now something a visitor can turn in their hand.

Commercial lender, Elementor and ACFA deals showcase the client updates themselves.

The situation

Funded deals lived as static cards hand-edited in the page builder; every new deal meant a developer.

What I built

A custom post type with three structured fields, a loop-item template with dynamic tags, and a loop carousel wired through the REST API: four slides on desktop, two on tablet, one on a phone, newest first.

Result

The client adds a deal by filling in a title, an image and three fields. Nobody opens the page builder.

Real-estate lender, lead qualificationA ten-screen quiz funnel that only forwards the leads worth calling.

The situation

An eleven-page spec, an ad budget, and a client who only wanted to hear about qualified prospects.

What I built

The quiz as a form with hidden tracking fields and readable field references, a WordPress ad-destination page, a thank-you page with the conversion pixel, and a routing automation whose only filter reads a qualification variable computed inside the form itself.

Result

The agency sees every submission; the client sees the qualified ones. The logic lives in one place, so nobody can quietly break it downstream.

Business funding company, WordPress and a CRMBooking and funnel pages that were quietly dead.

The situation

Blank calendars on four pages, four marketing funnels whose second step returned 404, and a business-card link that pointed at a page that did not exist.

What I built

Traced each to its cause: an inactive calendar in the CRM, funnel domains pointed at the WordPress host instead of the CRM subdomain, and a slug mismatch fixed with a host-level rewrite rule. Later, a departing staffer's six calendars deactivated and verified dead, with the shared round-robin left intact.

Result

Every entry point returns 200 and lands where the client expects.

Tree service, WordPress and ElementorA video hero that loads, and a mobile menu that finally opens.

The situation

A 73 MB highlight reel as a hero background, a header cluttered against the designer's file, and a phone menu that never opened on a live site.

What I built

Video re-encoded two-pass to 8.5 MB with the intro trimmed, a layered z-index scheme for video, scrim and content across breakpoints, the header rebuilt to the design, and the menu bug traced to a stuck max-height transition that overrode the author styles.

Result

Verified with zero overflow and a one-line headline at six widths, and a mobile menu that opens.

Real output

What the work actually looks like.

Not screenshots of finished pages. The output itself, taken from real jobs with the client details removed.

A site audit, as it comes out

Findings from a live cleaning company homepage. Every line is checkable in a couple of minutes.

FAIL Review rating 4.9 written on the page, absent from the markup

FAIL Profiles in markup no sameAs links to Google, Yelp or Facebook

FAIL Real photography 3 image tags, 2 of them the same logo file

WARN Postal address missing streetAddress and postalCode

PASS Tap-to-call 4 tel: links

PASS Markup weight 32 KB, fetched in 1,176 ms

An importer that will not overwrite a human

A directory plugin where a spreadsheet is re-imported repeatedly. The report says what it changed and what it deliberately left alone.

run 2   added 1   updated 8   unchanged 0   skipped 0

row 2  HW-1001: updated | fields name, bio, phone, website

| left alone because edited here: firm

row 10  HW-1011: added | fields name, firm, bio, phone, website

Portland OR and Portland ME resolved as separate cities

Recommendations

What people who worked with me say.

Devin Dias

Software Engineer, Eureka Software

LinkedIn recommendation

I had the pleasure of working with Rauf in a remote capacity, where he reported directly to me on a daily basis and helped support several projects across WordPress, React, Next.js, and Sanity. Before working with Rauf, I'll be honest, I had not always had the best experiences with offshore contractors. Rauf completely changed that perspective for me. He is reliable, thoughtful, easy to communicate with, and genuinely cares about the quality of his work.

Heather Carr

Project Manager, Client Success

LinkedIn recommendation

As one of our web developers, he consistently built high-quality websites while keeping communication clear and consistent throughout each project. One of the things I appreciated most was his ability to troubleshoot challenges, identify solutions, and keep projects moving forward. He was proactive, dependable, and always approached problems with a solutions-focused mindset.

Justin Lucas

Software engineering colleague

LinkedIn recommendation

Rauf combines strong technical expertise with something equally valuable: the ability to understand the real business objective behind a project. He doesn't simply complete assigned tasks, he looks for better solutions, anticipates potential problems, and consistently works to improve the quality of the final product.

Vineeth N.

Client

Upwork review

Raufun is an expert in WordPress and Web Development, he helped us with fixing quite few issues with our website and actively suggested options to improve the performance, I highly recommend Raufun.

Process

Measured, not asserted.

The number that matters is the one a customer produces on a phone: a tap on the call button. Everything below exists to move it, and to prove it moved.

A hand holding a phone at a kitchen counter, thumb over a large call button
01

Baseline

Before anything changes: rankings, impressions, load time, calls and completed quote requests. Without it nobody can tell afterwards whether the rebuild helped, which is where most rebuilds end up.

02

Findings in priority order

What is costing you, ranked, with what each one is worth. You see this before I write a line of code, and you can hand it to somebody else if you would rather.

03

Build on staging

Indexing off, redirects mapped one to one, structured data verified there. Nothing touches the live site until it has been checked somewhere that cannot hurt you.

04

Launch and watch

Sitemap submitted, indexing requested on the pages that matter, Coverage and Performance watched daily for two weeks and weekly for a month after.

05

Measure again

The same numbers from step one, side by side. If something did not move, I say so rather than pointing at traffic.

Hire me

Available now for new projects

Hire a software engineer for your remote team.

Next.js, React and TypeScript on the front. Node, WordPress, Sanity and third-party APIs behind. Web applications, integrations, headless CMS builds, design to code, and the search and speed work around them. Direct, or through Upwork if you would rather have the platform in the middle.

01

Remote, worldwide

My working evening is a US or UK morning, so replies land inside your day. Typical response under four hours.

02

One person, start to finish

Nothing subcontracted, no agency behind me. The person who scopes the work builds it, tests it and answers for it.

03

Everything in writing

No discovery call required. Send the address, get the findings in priority order with what each is worth, then decide.

04

Availability and terms

10 to 15 hours a week, evenings and weekends included. Fixed price or hourly, milestone based. Identity and phone verified on Upwork, 100% job success.

05

Tooling

Claude Code and Codex in the loop for tests, refactors and review. Every change is still read, run and measured by me.

Questions

The things people ask before hiring me.

WordPress or Next.js?

Whichever suits the job. WordPress when you want to edit everything yourself with no learning curve. Next.js when speed and search are the priority, paired with a CMS so editing still feels ordinary. I will tell you which one your project actually needs rather than the one I prefer.

Can I edit it myself afterwards?

Yes, and that is a build requirement rather than an afterthought. Prices, service areas, photos and copy are all yours to change without calling anyone.

Will a rebuild lose my Google rankings?

Not if the URLs are handled properly. Every existing address is crawled and mapped one to one before anything is built, and nothing goes live until the redirects are verified on staging. Blanket redirects to the homepage are what actually destroys rankings.

Do I need to be on a call?

No. Everything can be done in writing, which also means you have a record of what was agreed. If you would rather talk, that is fine too.

What does it cost?

It depends on how many pages and how much of the local search work is already in place. Send me your address and you will get the fixes in priority order with what each one is worth, before any quote.

Do you handle hosting and the domain?

I can set both up and hand over the logins, or work inside whatever you already have. You own everything either way.

How long does it take?

A focused fix is days. A full rebuild with service area pages is usually a few weeks, and I would rather give you a real date than an optimistic one.

What if I only need one thing fixed?

That is fine and often the better place to start. Page speed, structured data, or the booking flow on its own are all normal first jobs.