000
Shahid Afrid
I am

Shahid Afrid

I build software that goes into production — and stays there.

Available for thoughtful work

Software developer in Bengaluru — full-stack, AI agents and automation. Currently building the systems an industrial distributor in Dubai runs on.

What's up

About
me.

Based in
Bengaluru, India
12.97° N · 77.59° E
Local time
--:--
Currently
Creative Industrial Automation
since Dec 2025

I'm Shahid — a developer who gets excited about building something real and then keeping it running.

Day to day that's a 200,000-product Shopify storefront whose front end I own, an MCP-based AI shopping agent on the Claude API that searches the whole catalogue and checks out inside the chat, Express services on Railway, and n8n pipelines that take manual work off people's plates. I like the whole path — interface, API, deployment, and the debugging that only starts once something is live.

On my own time I ship products: an AI study platform, a form builder, a handful of ML pipelines. BCA from Nitte Meenakshi Institute of Technology, 2022–2025.

  • 01Full-stack engineeringReact · Node · Python
  • 02AI agents & MCPClaude · tools · RAG
  • 03Commerce at scaleShopify · 200k SKUs
  • 04Workflow automationn8n · CRM · WhatsApp

Projects

Not demos. Things people in Dubai and Riyadh use every day — plus a few of my own.

NameRoleYearServices
OTO shipping estimator Live Live carrier prices in the cart from hundreds of providers, credentials held server-side 2026 Node.jsExpressRailwayOTO API
100sof carriers quoted live in the cart — one endpoint, credentials never leave the serverOpen case study
Shopify AI chat agent Live MCP architecture on Claude — search, cart and checkout inside the conversation 2026 Claude APIMCPStorefront API
200kproducts searchable in chatOpen case study
Creative Automation UAE Live Full front end of a 200,000-SKU industrial catalogue, built and maintained solo 2026 LiquidMetafieldsRapid SearchPostHog
270+collection pages from one hierarchyOpen case study
Creative Automation Saudi Live Second regional storefront launched from the UAE theme, May 2026 2026 LiquidMatrixify
43images · 15 sections · IFM pageVisit site
Brand landing pages Live Conversion pages for Siemens and other manufacturer lines 2026 LiquidGoogle Ads
Adslive Google Ads traffic lands hereVisit site
Hydroair Live Storefront for a second company brand 2026 Shopify
2ndcompany brand storefrontVisit site
Operations automation Internal Workflows and agents replacing manual routing, approvals, alerts and reporting 2026 n8nMCPZoho
n8nCRM · Shopify · WhatsApp · SheetsInternal system
Tutorly Personal Multimodal AI study platform, built end to end 2025 ReactPythonAWS S3AssemblyAI
AInotes · flashcards · quizzes · audioVisit site
Forms.io Personal Form builder with a brutalist interface and response collection 2025 ReactTypeScriptSupabase
Formsbrutalist builder · live validationVisit site
ML pipelines Archive Three trained and deployed models from my internship year 2025 Pythonscikit-learn
MLcredit · handwriting · diseaseVisit site
200k+
products on the storefront I own
270+
collection pages from one hierarchy
4,974
broken image URLs found & fixed
3
storefronts live · UAE & Saudi
16
features shipped since Dec 2025
0
secrets exposed to the browser
Process

The work
behind the work

Every system I've shipped followed the same four moves. The last one is the one most portfolios leave out.

01

Understand

What the buyer actually does. Procurement engineers search by part number, not by browsing — so the search has to meet them there.

02

Structure

Put the shape in data, not in templates. A category is a metafield; adding one shouldn't need a deployment.

03

Build

Small services with one honest job each. Secrets stay server-side. Everything gets a mock mode so it can be built without touching production.

04

Run

Production is where the real bugs live: token loops, security blocks, broken image URLs. I stay on the thing after it ships.

My toolbox

Tools I reach for

TypeScript JavaScript React Next.js Tailwind CSS HTML / CSS Node.js Express Python FastAPI REST design OAuth & tokens Webhooks SQL Claude API MCP Agent architecture Prompt design RAG OpenAI Gemini Shopify OS 2.0 Liquid Metafields Storefront API Admin REST API Matrixify n8n Railway Vercel AWS S3 Docker CI/CD Git PostgreSQL MongoDB Supabase PostHog Linux
Track record

What I shipped

Real changes on live systems, with the number attached. December 2025 to now.

UAE storefront
Metafield-driven collection hierarchy

Parent–child collections resolved from a custom.parent_collection chain — subcategory cards, breadcrumbs and filtering rendered automatically, no per-collection hardcoding.

270+ collection pages
120+ subcategories
UAE storefront
Large-catalogue import and image repair

~40,000 products imported file by file; broken imagery traced to unstable Google PageSpeed URLs in the CSV, 4,974 corrected and re-imported via Matrixify.

4,974 URLs fixed
AI chat agent
Storefront API token handling rebuilt

A production-only 401 loop with cart failures and domain leakage behind it. Legacy OAuth logic replaced with the official Admin REST flow, with proper refresh and validation.

401 loop cleared
AI chat agent
Production deployment and Shopify security resolution

Shopify blocked the app as a security threat in production. Proxy reconfigured, every error cleared, deployment stabilised across devices.

live 21 Feb 2026
AI chat agent
Product search overhaul

Broad full-catalogue query first, retries on simplified queries, multi-level fallback, SKU exact-match ranking, vendor inference. Redundant layers removed.

fewer zero-result queries
UAE storefront
Advanced metafield filters

Filters across collection pages with Rapid Search; resolved filter-definition conflicts with both vendors' support and secured a custom plan sized for 200k products.

200+ collection pages
UAE storefront · SEO
Dynamic breadcrumb system

Breadcrumbs auto-generate the deepest category path from chained metafields across every product and collection page. Shipped 30 May 2026.

zero per-product setup
UAE storefront
AODD pump catalogue structure

Full range mapped across size (¼″–3″), material and diaphragm variant with mappings, breadcrumbs, mega-menu entries and filters.

60+ collection pages
AI chat agent
Canonical product-URL handling

The agent can only surface canonical Shopify URLs — hallucinated and broken product links removed entirely.

no fabricated links
AI chat agent
In-chat add to cart and checkout

Reliable cart and checkout inside the conversation with token refresh and validation; session state covers new/end chat, history hydration and email capture.

cart + checkout in chat
AI chat agent
Model upgrade and prompt refinement

Upgraded the Claude model and rewrote system prompts — fewer empty or wrong results on multilingual and ambiguous queries.

multilingual queries
Saudi storefront
IFM distributor landing page

Built and optimised by hand to match a required design and content structure.

43 images · 15 sections
UAE storefront
PostHog analytics integration

Page views, session duration, paid traffic and behaviour across a site that previously had no analytics.

site-wide analytics
UAE storefront · SEO
SEO structure work

Single H1 per template, ALT text on every collection image, SEO content on ten IFM collection pages, related products from the deepest collection.

ALT text on 270+ pages
UAE storefront
Pre-order system

Dedicated cart page, pre-order buttons, stock badges and counts, and a warning that fires only on mixed carts.

mixed-cart logic
UAE storefront
Product page rebuild

Bigger specifications panel, SKU + brand line linking to the vendor collection, tariffs & fees tab, larger imagery.

~30% larger imagery
Career

Experience

Dec 2025 — present · Remote, UAE team

Software Developer — AI & Automation

Creative Industrial Automation
  • Own the front end of a 200,000-product Shopify storefront end to end: theme, category architecture, navigation, filters, search, pre-orders, SEO.
  • Designed, built and deployed an MCP-based AI shopping agent on Claude — three services on Railway — and keep it running in production.
  • Built the OTO shipping-estimate service so buyers see carrier prices in the cart, credentials held server-side.
  • Launched a second regional storefront for Saudi Arabia and the distributor landing pages that receive the company's paid traffic.
  • Build n8n automations across CRM, Shopify, WhatsApp, email and Sheets.
  • Deployment, production debugging, PostHog instrumentation, Google Ads audits.
2024 — 2025 · Internships

Earlier experience

Machine Learning Engineer · CodeAlphaMar — May 2025
Frontend Developer · CodeAlphaSep — Oct 2024
Full-Stack Developer · SmartED InnovationsMar — Jul 2024
2022 — 2025 · Bengaluru

Bachelor of Computer Applications

Nitte Meenakshi Institute of Technology
All projects
Case study · 01

Shipping prices in the cart, without shipping the credentials

Buyers on creativeautomation.ae couldn't see delivery cost until they were inside checkout. Fixing that meant calling a carrier aggregator from a Shopify theme — exactly the thing you cannot safely do.

Role
Sole developer
Stack
Node.js, Express, Railway, OTO API, Liquid
Status
In production
Links
Live cart · Source

The problem

OTO aggregates hundreds of delivery providers across the Gulf. Its delivery-fee endpoint authenticates with a long-lived refresh token exchanged for a short-lived access token. A Shopify theme is public JavaScript — anything the cart page can read, a customer can read — so calling OTO from the storefront would have published the account's credentials.

The alternative was what the store was already doing: leave shipping until checkout, and lose the carts that were price-sensitive about it.

The theme should be able to ask one honest question and get one honest answer, without ever holding a secret.

What I built

A small Express service on Railway between the storefront and OTO, exposing one public endpoint: POST /api/shipping-estimate, taking a destination city, a chargeable weight and an optional order total. It returns a flat list of carrier options with price, ETA and logo.

Everything sensitive stays server-side. The refresh token lives only in Railway's environment — never in the repo, a commit, or a log line. The service exchanges it for a one-hour access token, caches it in memory, refreshes proactively around the 55-minute mark, and retries once if OTO returns a 401 or 403 mid-request.

The parts that matter in production

  • CORS allow-list so only the store's own domains can call the endpoint.
  • Two layers of rate limiting — 30 estimate requests a minute, plus a 120/min baseline across all routes, health check exempt.
  • Short response cache, because ten shoppers in Riyadh with a two-kilo cart should not be ten calls to OTO.
  • Timeouts and bounded retries upstream, so a slow carrier API degrades into a missing estimate rather than a hanging cart.
  • Weight ceiling validated before the upstream call.
  • Mock mode returning canned carrier data with no token, so the widget can be built locally without touching production credentials.

The cart side

The widget renders from the cart footer section. It reads /cart.js, converts line-item grams into a chargeable weight in kilograms, and posts that with the selected city. Carrier rows render with price, estimated window and — deliberately — the cash-on-delivery surcharge as a separate note rather than folded into the headline number.

Screenshot — cart estimate panel with carrier list

Where it stops

The estimate is display-only and labelled that way. Shopify still calculates and charges its own rate at checkout; this shows an indicative cost early, at the moment it decides whether the cart survives.

Next case study
Shopify AI chat agent
All projects
Case study · 02

An AI agent that can actually find one part in 200,000

A shopping agent is easy to demo and hard to keep alive. This one has been answering, searching and checking out on a live industrial catalogue since February 2026.

Role
Sole developer — design, build, deploy, maintain
Stack
Claude API, MCP, Railway, Shopify Storefront & Admin REST
Live since
21 February 2026
Links
Live site · Source

Architecture

Three services on Railway: a Claude-driven agent server holding the conversation, an MCP tool server exposing catalogue and cart operations as tools, and a storefront service talking to Shopify. Splitting the tool layer out of the agent is why search could be rewritten several times without touching conversation handling.

Search on a catalogue this size

The first version asked the model to guess — which fails the moment a buyer types a partial SKU shared by four hundred other parts. I rebuilt search to query the Storefront API directly with a strategy: broad full-catalogue query first, an intelligent retry on a simplified query, then a multi-level fallback. SKU-shaped input is detected and ranked by exact match; a brand name in the query infers a vendor filter. The same pass deleted a redundant search layer and unnecessary API calls that were adding latency to every message.

The agent can no longer invent a product link. It only returns canonical Shopify handles — so a wrong answer became a missing answer instead of a broken page.

The production-only failures

  • A Storefront token 401 loop. Token logic had been written against a legacy OAuth flow. Rebuilt on the official Admin REST flow with proper refresh and validation, which also cleared the cart failures and domain leakage behind it.
  • Shopify blocking the app as a security threat. Reconfiguring the proxy and correcting the request path cleared every security error.
  • Cart operations failing silently. Add to cart and checkout now run inside the chat with token refresh and validation on each call.

Conversation and interface

Session handling covers new chat, end chat, history hydration without duplicate threads, and email capture so a conversation that doesn't convert still becomes a lead. Product results render as a carousel with a modal detail view; the input auto-expands; a multi-phase indicator shows what the agent is doing rather than spinning at the user.

Later I upgraded the Claude model and rewrote the system prompts for cleaner tool queries and better instruction-following, which noticeably reduced empty and incorrect results on multilingual and ambiguous questions — a real requirement for a Gulf storefront.

Screenshot — chat with product carousel and in-chat checkout
Next case study
Creative Automation UAE storefront
All projects
Case study · 03

Making 200,000 industrial parts findable

Procurement engineers don't browse. They arrive with a part number or a spec and leave if the site can't meet them there. This is the front end I built and maintain for a catalogue at that scale.

Role
Primary theme and front-end developer
Stack
Shopify Liquid, metafields, Rapid Search, Matrixify, PostHog
Since
February 2026, in production
Link
creativeautomation.ae

The structural decision

Two hundred thousand products can't be organised by hand, and a catalogue that grows every month can't be organised by template. So the category structure lives in data: every collection carries a custom.parent_collection metafield, and the theme walks that chain to render subcategory cards, breadcrumbs and filters.

That one decision is why 270 collection pages and 120 new subcategories could be added from a forty-thousand-product file without a new template, and why breadcrumbs across the store auto-generate the deepest correct path with zero per-product setup.

Adding a category should be a metafield, not a deployment.

Finding things

Metafield-based filters run across 200+ collection pages with Rapid Search. Getting there meant diagnosing filter-definition conflicts with both Shopify and Rapid Search support, and securing a custom plan sized for a 200k-product limit. The AODD pump range shows what the structure buys: sixty-plus collection pages across size, material and diaphragm variant, all with working filters, breadcrumbs and mega-menu entries.

The unglamorous half

  • Import. ~40,000 products loaded file by file to avoid duplicates. Broken imagery traced to CSV links pointing at unstable Google PageSpeed URLs — 4,974 corrected and re-imported via Matrixify.
  • Pre-orders. Cart drawer replaced with a dedicated cart page: pre-order buttons, stock badges and counts, and a warning that fires only on mixed carts.
  • Product pages. Larger specifications panel, SKU + brand line linking to the vendor collection, tariffs & fees tab, bigger imagery, direct route to a specialist.
  • SEO. One H1 per template, ALT text across 270+ collection pages, content on ten IFM collection pages, related products from the deepest assigned collection.
  • Measurement. PostHog across the site where previously there was nothing to look at.
Screenshot — collection page with filters and subcategory tiles

What came out of it

A second storefront for Saudi Arabia launched from the same theme in May 2026 with regional details, a dual-office footer, redirects disabled so Saudi clicks stay on the Saudi site, and its own distributor landing page. A structure built to be reused turned out to be reusable.

Next case study
OTO shipping estimator