{"id":538,"date":"2026-08-18T15:53:43","date_gmt":"2026-08-18T07:53:43","guid":{"rendered":"https:\/\/dangnh.cf\/work\/multi-tenant-ai-translation-platform\/"},"modified":"2026-08-18T15:53:43","modified_gmt":"2026-08-18T07:53:43","slug":"multi-tenant-ai-translation-platform","status":"publish","type":"page","link":"https:\/\/dangnh.cf\/vi\/work\/multi-tenant-ai-translation-platform\/","title":{"rendered":"Building a multi-tenant AI translation platform on Laravel"},"content":{"rendered":"<p class=\"wp-block-paragraph\"><em>Lead Backend Developer \u00b7 LinguFox \u00b7 May 2024 \u2013 present \u00b7 Enterprise e-commerce client<\/em><\/p>\n\n<h2 class=\"wp-block-heading\">The problem<\/h2>\n<p class=\"wp-block-paragraph\">An enterprise e-commerce tooling company needed translation management across many customer accounts at once. Raw machine translation on its own doesn&#8217;t survive contact with a real catalogue: it renders the same product term three different ways across three pages, it has no memory of decisions anyone made, and when it gets something wrong there is no way to roll back to the version that was right.<\/p>\n<p class=\"wp-block-paragraph\">So the actual requirement wasn&#8217;t &#8220;call a translation API.&#8221; It was a multi-tenant platform where translation happens to be the payload.<\/p>\n\n<h2 class=\"wp-block-heading\">What I built<\/h2>\n<ul class=\"wp-block-list\">\n<li><strong>Multi-tenant architecture.<\/strong> Strict data isolation per tenant, with shared infrastructure underneath \u2014 so onboarding a new client is configuration, not deployment.<\/li>\n<li><strong>DeepL integration behind an abstraction.<\/strong> The AI translation service sits behind our own interface rather than being called directly from business logic, so the provider is replaceable and testable.<\/li>\n<li><strong>Glossary management.<\/strong> Per-tenant terminology that the translation layer is forced to respect. This is the feature that makes the difference between &#8220;impressive demo&#8221; and &#8220;usable in production.&#8221;<\/li>\n<li><strong>Version control on translations.<\/strong> Every change is history; any version can be restored.<\/li>\n<li><strong>Queue-based processing.<\/strong> Large translation jobs run through Laravel queues rather than in the request cycle \u2014 so a 10,000-item catalogue import doesn&#8217;t time out or block anything else.<\/li>\n<li><strong>Auth and API surface.<\/strong> OAuth\/Passport authentication and authorization, RESTful APIs, PHPUnit coverage, CI\/CD, database design and performance monitoring.<\/li>\n<\/ul>\n\n<h2 class=\"wp-block-heading\">Stack<\/h2>\n<p class=\"wp-block-paragraph\">Laravel, MySQL\/PostgreSQL, DeepL API, Laravel Queues, Docker, event-driven architecture, REST APIs, OAuth\/Passport, PHPUnit, CI\/CD.<\/p>\n\n<h2 class=\"wp-block-heading\">The part people underestimate<\/h2>\n<p class=\"wp-block-paragraph\">Most &#8220;add AI to our product&#8221; projects fail on the boring parts, not the model. Calling the API is an afternoon. Multi-tenancy, queueing, cost control, retries and timeouts, terminology consistency, and version history are the actual engineering \u2014 and they&#8217;re the reason the feature still works six months later with real customers on it.<\/p>\n<p class=\"wp-block-paragraph\">If you&#8217;re adding LLM or AI capability to software that already has users, <a href=\"https:\/\/dangnh.cf\/vi\/hire-me\/\">that&#8217;s the work I do \u2192<\/a><\/p>","protected":false},"excerpt":{"rendered":"<p>Multi-tenancy, glossary management, version control and queue-based processing \u2014 why the model is the easy part of shipping an AI feature to enterprise customers.<\/p>","protected":false},"author":1,"featured_media":0,"parent":536,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-538","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Building a multi-tenant AI translation platform on Laravel - Mark Nguyen<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/dangnh.cf\/vi\/work\/multi-tenant-ai-translation-platform\/\" \/>\n<meta property=\"og:locale\" content=\"vi_VN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Building a multi-tenant AI translation platform on Laravel - Mark Nguyen\" \/>\n<meta property=\"og:description\" content=\"Multi-tenancy, glossary management, version control and queue-based processing \u2014 why the model is the easy part of shipping an AI feature to enterprise customers.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/dangnh.cf\/vi\/work\/multi-tenant-ai-translation-platform\/\" \/>\n<meta property=\"og:site_name\" content=\"Mark Nguyen\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/dangtute\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u01af\u1edbc t\u00ednh th\u1eddi gian \u0111\u1ecdc\" \/>\n\t<meta name=\"twitter:data1\" content=\"2 ph\u00fat\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/dangnh.cf\\\/work\\\/multi-tenant-ai-translation-platform\\\/\",\"url\":\"https:\\\/\\\/dangnh.cf\\\/work\\\/multi-tenant-ai-translation-platform\\\/\",\"name\":\"Building a multi-tenant AI translation platform on Laravel - Mark Nguyen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/dangnh.cf\\\/vi\\\/#website\"},\"datePublished\":\"2026-08-18T07:53:43+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/dangnh.cf\\\/work\\\/multi-tenant-ai-translation-platform\\\/#breadcrumb\"},\"inLanguage\":\"vi\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/dangnh.cf\\\/work\\\/multi-tenant-ai-translation-platform\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/dangnh.cf\\\/work\\\/multi-tenant-ai-translation-platform\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/dangnh.cf\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Work\",\"item\":\"https:\\\/\\\/dangnh.cf\\\/work\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Building a multi-tenant AI translation platform on Laravel\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/dangnh.cf\\\/vi\\\/#website\",\"url\":\"https:\\\/\\\/dangnh.cf\\\/vi\\\/\",\"name\":\"Mark Nguyen\",\"description\":\"I build the e-commerce backends customers never see \u2014 payments, integrations, and AI features that actually ship.\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/dangnh.cf\\\/vi\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"vi\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Building a multi-tenant AI translation platform on Laravel - Mark Nguyen","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/dangnh.cf\/vi\/work\/multi-tenant-ai-translation-platform\/","og_locale":"vi_VN","og_type":"article","og_title":"Building a multi-tenant AI translation platform on Laravel - Mark Nguyen","og_description":"Multi-tenancy, glossary management, version control and queue-based processing \u2014 why the model is the easy part of shipping an AI feature to enterprise customers.","og_url":"https:\/\/dangnh.cf\/vi\/work\/multi-tenant-ai-translation-platform\/","og_site_name":"Mark Nguyen","article_publisher":"https:\/\/www.facebook.com\/dangtute","twitter_card":"summary_large_image","twitter_misc":{"\u01af\u1edbc t\u00ednh th\u1eddi gian \u0111\u1ecdc":"2 ph\u00fat"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/dangnh.cf\/work\/multi-tenant-ai-translation-platform\/","url":"https:\/\/dangnh.cf\/work\/multi-tenant-ai-translation-platform\/","name":"Building a multi-tenant AI translation platform on Laravel - Mark Nguyen","isPartOf":{"@id":"https:\/\/dangnh.cf\/vi\/#website"},"datePublished":"2026-08-18T07:53:43+00:00","breadcrumb":{"@id":"https:\/\/dangnh.cf\/work\/multi-tenant-ai-translation-platform\/#breadcrumb"},"inLanguage":"vi","potentialAction":[{"@type":"ReadAction","target":["https:\/\/dangnh.cf\/work\/multi-tenant-ai-translation-platform\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/dangnh.cf\/work\/multi-tenant-ai-translation-platform\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/dangnh.cf\/"},{"@type":"ListItem","position":2,"name":"Work","item":"https:\/\/dangnh.cf\/work\/"},{"@type":"ListItem","position":3,"name":"Building a multi-tenant AI translation platform on Laravel"}]},{"@type":"WebSite","@id":"https:\/\/dangnh.cf\/vi\/#website","url":"https:\/\/dangnh.cf\/vi\/","name":"Mark Nguyen","description":"I build the e-commerce backends customers never see \u2014 payments, integrations, and AI features that actually ship.","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/dangnh.cf\/vi\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"vi"}]}},"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/P9w3NP-8G","jetpack_likes_enabled":true,"jetpack-related-posts":[{"id":536,"url":"https:\/\/dangnh.cf\/vi\/work\/","url_meta":{"origin":538,"position":0},"title":"Work","author":"admin","date":"Th\u00e1ng 8 18, 2026","format":false,"excerpt":"Three projects in detail: a clinical lab results platform, a multi-tenant AI translation backend, and a multi-marketplace e-commerce suite.","rel":"","context":"B\u00e0i t\u01b0\u01a1ng t\u1ef1","block_context":{"text":"B\u00e0i t\u01b0\u01a1ng t\u1ef1","link":""},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":531,"url":"https:\/\/dangnh.cf\/vi\/hire-me\/","url_meta":{"origin":538,"position":1},"title":"Hire Me","author":"admin","date":"Th\u00e1ng 8 18, 2026","format":false,"excerpt":"I build e-commerce backends, payment and marketplace integrations, and AI features for apps that already have users. 13+ years, Shopware and Laravel.","rel":"","context":"B\u00e0i t\u01b0\u01a1ng t\u1ef1","block_context":{"text":"B\u00e0i t\u01b0\u01a1ng t\u1ef1","link":""},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":10,"url":"https:\/\/dangnh.cf\/vi\/about-2\/","url_meta":{"origin":538,"position":2},"title":"About","author":"admin","date":"Th\u00e1ng 4 5, 2016","format":false,"excerpt":"Senior fullstack engineer in Ho Chi Minh City. 13+ years on e-commerce backends, payments, and AI integration \u2014 currently forward-deployed with Shopware.","rel":"","context":"B\u00e0i t\u01b0\u01a1ng t\u1ef1","block_context":{"text":"B\u00e0i t\u01b0\u01a1ng t\u1ef1","link":""},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":539,"url":"https:\/\/dangnh.cf\/vi\/work\/multi-marketplace-ecommerce-suite\/","url_meta":{"origin":538,"position":3},"title":"One dashboard for products and conversations across every marketplace","author":"admin","date":"Th\u00e1ng 8 18, 2026","format":false,"excerpt":"Mass product decoration across e-commerce platforms plus a unified Instagram, Facebook and Zalo inbox \u2014 built on microservices, crawlers and RabbitMQ.","rel":"","context":"B\u00e0i t\u01b0\u01a1ng t\u1ef1","block_context":{"text":"B\u00e0i t\u01b0\u01a1ng t\u1ef1","link":""},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":9,"url":"https:\/\/dangnh.cf\/vi\/","url_meta":{"origin":538,"position":4},"title":"E-commerce Backend Engineer \u2014 Shopware, Laravel &#038; AI","author":"admin","date":"Th\u00e1ng 4 5, 2016","format":false,"excerpt":"I'm Mark \u2014 a senior fullstack engineer in Ho Chi Minh City. I've spent 13+ years building e-commerce backends, payment systems, and the AI features that increasingly sit on top of them. Right now I'm forward-deployed with a German enterprise client (Shopware). This is where I write about that work\u2026","rel":"","context":"B\u00e0i t\u01b0\u01a1ng t\u1ef1","block_context":{"text":"B\u00e0i t\u01b0\u01a1ng t\u1ef1","link":""},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"_links":{"self":[{"href":"https:\/\/dangnh.cf\/vi\/wp-json\/wp\/v2\/pages\/538","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dangnh.cf\/vi\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/dangnh.cf\/vi\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/dangnh.cf\/vi\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dangnh.cf\/vi\/wp-json\/wp\/v2\/comments?post=538"}],"version-history":[{"count":0,"href":"https:\/\/dangnh.cf\/vi\/wp-json\/wp\/v2\/pages\/538\/revisions"}],"up":[{"embeddable":true,"href":"https:\/\/dangnh.cf\/vi\/wp-json\/wp\/v2\/pages\/536"}],"wp:attachment":[{"href":"https:\/\/dangnh.cf\/vi\/wp-json\/wp\/v2\/media?parent=538"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}