# Robin Dhiman > Robin Dhiman has shipped production e-commerce systems for fifteen years, mostly Magento 2 and Hyvä, with extensions into Shopify, WordPress, and Next.js. He is currently building magento2-module-llms-txt — an open-source module that makes Magento catalogs discoverable by AI assistants like ChatGPT, Claude, and Perplexity — by emitting both an llms.txt index and an llms-full.txt content dump so AI agents can ingest a full catalog in one request instead of rate-limiting on per-product crawls. _Last updated: 2026-09-01_ ## About - [Home](https://devrob.in): portfolio, work, and writing by Robin Dhiman. - [Writing](https://devrob.in/blog): technical notes on e-commerce engineering. ## Current work - [magento2-module-llms-txt on GitHub](https://github.com/iamrobindhiman/magento2-module-llms-txt): solves the fact that most Magento stores are invisible to AI search — crawlers rate-limit long before reaching deep product pages. The module emits a spec-compliant llms.txt index and an llms-full.txt content dump so agents ingest the catalog in one request. Multi-store, multi-language, inventory-aware (out-of-stock filtered at SQL level), and niche-adaptive (admin picks which product attributes to expose for apparel vs. electronics vs. food). - [rkd/module-llms-txt on Packagist](https://packagist.org/packages/rkd/module-llms-txt): composer package for the module. ## Writing - [A model's output is a lead, not a fact](https://devrob.in/blog/a-models-output-is-a-lead-not-a-fact): Three times AI-assisted work went wrong on my own projects, and the one habit that caught each: verify every claim against ground truth before acting. - [What a minimal JS framework hands back to you](https://devrob.in/blog/what-a-minimal-js-framework-hands-back-to-you): Dropping React for a small hand-rolled layer is easy. The hard part is the work the framework was doing quietly: init timing, state across DOM swaps, and CSP. - [The shipping rate your cart quotes is not the one you get billed](https://devrob.in/blog/the-shipping-rate-your-cart-quotes-is-not-the-one-you-get-billed): Couriers bill the greater of dead weight and volumetric weight. Leave dimensions blank in a rate calculator and it returns a confident, wrong number. - [AI made writing code cheap. It did not make systems easier to reason about.](https://devrob.in/blog/ai-made-writing-code-cheap-it-did-not-make-systems-easier-to-reason-about): Code generation solved the typing. The expensive part of legacy e-commerce work was always reading the system — and that cost has not moved. - [The Magento N+1 fix that hides your out-of-stock products](https://devrob.in/blog/the-magento-n1-fix-that-hides-your-out-of-stock-products): Replacing ProductRepository::getById() with a product collection to kill an N+1 in Magento silently drops out-of-stock products in the frontend area. - [The Liquid you lint isn't the Liquid Shopify runs](https://devrob.in/blog/the-liquid-you-lint-isnt-the-liquid-shopify-runs): Shopify theme check runs LiquidJS, not the Ruby engine your storefront uses. They diverge on whitespace, and here's where that becomes a real bug. - [The docs were right — for a version I didn't have installed](https://devrob.in/blog/the-docs-were-right-for-a-version-i-didnt-have-installed): A third-party Magento module's docs said one thing; the installed 0.6.2 source said another. Why vendor/ is the only reference you can trust. - [You can't find a bug you never named](https://devrob.in/blog/you-cant-find-a-bug-you-never-named): A bug is a violated rule. If the rule was never written down, neither your tests nor your reviewer has anything to check against. - [The handshake tax: reuse your HTTP client in Magento integrations](https://devrob.in/blog/the-handshake-tax-reuse-your-http-client-in-magento-integrations): A new HTTP client per API call quietly slows Magento sync jobs. The cost is repeated TLS handshakes — here's how connection reuse fixes it. - [WooCommerce HPOS: when order sync floods Action Scheduler](https://devrob.in/blog/woocommerce-hpos-when-order-sync-floods-action-scheduler): WooCommerce HPOS compatibility mode can flood Action Scheduler and balloon your database. Here's the one query that finds the culprit. - [Enriching a large Magento catalog without melting the indexer](https://devrob.in/blog/enriching-a-large-magento-catalog-without-melting-the-indexer): Sourcing descriptions and attributes for thousands of SKUs is the easy part. Applying them to a Magento 2 catalog without reindex storms is the real work. - [Three reasons a Tailwind v4 utility silently does nothing in Hyvä](https://devrob.in/blog/three-reasons-a-tailwind-v4-utility-silently-does-nothing-in-hyva): A Tailwind v4 utility that looks overridden in a Hyvä v3 theme is usually one of three things: an ungenerated rule, cascade layers, or real specificity. - [A PHP login form that won't get you owned](https://devrob.in/blog/a-php-login-form-that-wont-get-you-owned): The five mistakes hand-rolled PHP login forms keep making: weak hashing, string-built SQL, session fixation, user enumeration, no rate limiting. - [Why Magento cart price rules get slow at checkout (and how to find the culprit)](https://devrob.in/blog/why-magento-cart-price-rules-get-slow-at-checkout-and-how-to-find-the-culprit): Magento 2 cart price rules run in PHP on every quote change. Here's why complex promotions slow checkout, and how to find the rule that's costing you. - [The EAV tax: why Magento product loads are slow](https://devrob.in/blog/the-eav-tax-why-magento-product-loads-are-slow): Magento 2 scatters every product attribute across typed EAV tables. Here's why loading them all wrecks category pages, and how to stop it. - [Migrating a Magento 2 store from utf8 to utf8mb4 without losing data](https://devrob.in/blog/migrating-a-magento-2-store-from-utf8-to-utf8mb4-without-losing-data): MySQL's utf8 stores only three bytes per character, so emoji and some international text get silently truncated. Here's the safe three-part migration to - [Which Magento extension is slowing you down? Stop guessing.](https://devrob.in/blog/which-magento-extension-is-slowing-you-down-stop-guessing): How to measure the real cost of each third-party extension in Magento 2 — interceptors, observers, layout, and queries — instead of disabling modules one by - [unserialize() is the Magento footgun nobody audits](https://devrob.in/blog/unserialize-is-the-magento-footgun-nobody-audits): Most Magento compromises come through a third-party extension, not core: PHP object injection via unserialize(). Here's how it becomes a remote shell. - [Is your Magento store legible to AI assistants?](https://devrob.in/blog/is-your-magento-store-legible-to-ai-assistants): AI assistants are becoming a product-discovery channel. Shopify ships native tooling for it; Magento ships nothing. Here are the four layers that decide - [Paginating Magento catalogs without OFFSET](https://devrob.in/blog/paginating-magento-catalogs-without-offset): Why setCurPage() and OFFSET die at depth in Magento 2, and how keyset pagination with PHP generators makes catalog iteration scale to 100k+ products. ## Services Robin Dhiman is available for hire. Magento 2 and Hyvä are the specialty; he also works across Shopify, WooCommerce/WordPress, Laravel, BigCommerce, and custom PHP. - Magento & Hyvä development — custom modules, full builds, Hyvä migrations. - Magento performance audits — find and fix slow stores (EAV loads, index bloat, N+1 queries, slow checkout), with before/after numbers. - AI discoverability — make a store's catalog readable and recommendable by AI assistants (ChatGPT, Claude, Perplexity) via the llms.txt standard. - Senior contract / fractional engineering — senior depth embedded with your team for a sprint or a season, without adding headcount. - PHP & e-commerce across frameworks — Shopify (themes + apps), WooCommerce/WordPress, Laravel, BigCommerce, and custom PHP builds, integrations, and audits. Remote-first (IST; comfortable with EU and US hours). To discuss an engagement, email hello@devrob.in with a short description of the problem — typical reply within one business day. Full details: https://devrob.in/services. ## FAQ ### What is llms.txt? A proposed standard (https://llmstxt.org/) for publishing a plain-text index of a website's important pages so AI assistants can discover structured content without crawling every URL. Think robots.txt, but for LLM ingestion. ### What does magento2-module-llms-txt do? It reads a Magento 2 catalog (products, categories, CMS pages) and writes two files: llms.txt (a short index) and llms-full.txt (the full content dump). Both regenerate on a cron schedule or manually via CLI, admin button, or REST API. ### How is this different from an XML sitemap? A sitemap lists URLs for search crawlers to fetch. llms.txt is the content itself, pre-formatted for LLM ingestion — so an AI agent does not need to render every product page to understand the catalog. ### Where can I install the module? Via Composer: `composer require rkd/module-llms-txt`. Full README: https://github.com/iamrobindhiman/magento2-module-llms-txt. ### Does Robin work beyond Magento? Yes. Magento 2 / Hyvä is the deep specialty, but he regularly works across Shopify (themes and apps), WooCommerce/WordPress, Laravel, BigCommerce, and custom PHP — backend-heavy builds, integrations, and audits. ## Full content for AI ingestion - [llms-full.txt](https://devrob.in/llms-full.txt): full plain-text content of every post on this site, assembled for AI ingestion. ## Contact - Email: hello@devrob.in - GitHub: https://github.com/iamrobindhiman - LinkedIn: https://www.linkedin.com/in/iamrobindhiman/ - X: https://x.com/IAmRobinDhiman