<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Sunel TR</title><description>Engineering notes on architecture, internal platforms, product systems, AI tooling, and leadership.</description><link>https://suneltr.com/</link><item><title>Multi-agent systems in production: what CrewAI handles and what you have to build yourself</title><link>https://suneltr.com/blog/multi-agent-systems-production-crewai/</link><guid isPermaLink="true">https://suneltr.com/blog/multi-agent-systems-production-crewai/</guid><description>What CrewAI gave us in production, what it did not, and the real lessons from running a hierarchical multi-agent trip-planning system with real users.</description><pubDate>Thu, 11 Jun 2026 00:00:00 GMT</pubDate></item><item><title>13 years of building: what I&apos;d tell a junior developer today</title><link>https://suneltr.com/blog/13-years-what-id-tell-junior-developer/</link><guid isPermaLink="true">https://suneltr.com/blog/13-years-what-id-tell-junior-developer/</guid><description>What turned out to matter across 13 years of building systems, tools, products, and teams, and what I would focus on if I were starting again.</description><pubDate>Mon, 01 Jun 2026 00:00:00 GMT</pubDate></item><item><title>Building Bloat: a macOS developer runtime manager with Go and Tauri</title><link>https://suneltr.com/blog/macos-developer-runtime-manager-go-tauri/</link><guid isPermaLink="true">https://suneltr.com/blog/macos-developer-runtime-manager-go-tauri/</guid><description>Why we started building Bloat, why Docker stopped fitting our local workflow, and how the daemon, desktop app, DNS, TLS, and signed runtime manifests came together.</description><pubDate>Sun, 10 May 2026 00:00:00 GMT</pubDate></item><item><title>The Drift: How Engineering Leaders Lose Touch with Code (and How I Fight It While Managing 20 Engineers)</title><link>https://suneltr.com/blog/engineering-leadership-staying-close-to-code/</link><guid isPermaLink="true">https://suneltr.com/blog/engineering-leadership-staying-close-to-code/</guid><description>What staying technical actually looks like while managing a 20-person team, and the tradeoffs required to keep judgment grounded in real engineering work.</description><pubDate>Sat, 18 Apr 2026 00:00:00 GMT</pubDate></item><item><title>Fine-tuning a support model end to end: from SQL dump to LoRA adapter</title><link>https://suneltr.com/blog/fine-tuning-support-model-sql-dump-lora/</link><guid isPermaLink="true">https://suneltr.com/blog/fine-tuning-support-model-sql-dump-lora/</guid><description>A practical walkthrough of turning support chat SQL dumps into a fine-tuned LoRA adapter, including extraction, canonicalization, shard processing, and training decisions.</description><pubDate>Fri, 20 Mar 2026 00:00:00 GMT</pubDate></item><item><title>DSPy for production: solving LLM output consistency without prompt engineering</title><link>https://suneltr.com/blog/dspy-production-llm-output-consistency/</link><guid isPermaLink="true">https://suneltr.com/blog/dspy-production-llm-output-consistency/</guid><description>How DSPy helped fix score collapse in Sherpa when smaller self-hosted LLMs kept returning safe middle-range values instead of real differentiation.</description><pubDate>Sat, 14 Feb 2026 00:00:00 GMT</pubDate></item><item><title>Self-hosting first: why we replaced Pusher, Sentry, Algolia, and S3</title><link>https://suneltr.com/blog/self-hosting-first-philosophy/</link><guid isPermaLink="true">https://suneltr.com/blog/self-hosting-first-philosophy/</guid><description>Why I increasingly prefer self-hosting when the protocol is open, the service is understandable, and ownership buys real control without forcing client rewrites.</description><pubDate>Thu, 22 Jan 2026 00:00:00 GMT</pubDate></item><item><title>Building an MCP server into Vortex: what it means to make your app tool-accessible</title><link>https://suneltr.com/blog/building-mcp-server-app-vortex/</link><guid isPermaLink="true">https://suneltr.com/blog/building-mcp-server-app-vortex/</guid><description>What it meant to add MCP tools to Vortex, the Laravel MCP package, how tools are structured, what good tool design actually requires, and what changed when an AI could operate the release workflow directly.</description><pubDate>Thu, 18 Dec 2025 00:00:00 GMT</pubDate></item><item><title>CQRS in a Laravel + GraphQL stack: what we split and why</title><link>https://suneltr.com/blog/cqrs-laravel-graphql-what-we-split/</link><guid isPermaLink="true">https://suneltr.com/blog/cqrs-laravel-graphql-what-we-split/</guid><description>Why plato-next splits reads and writes across GraphQL Yoga + Laravel, what each side owns, how the Prisma schema bridges them, and where the complexity is actually worth it.</description><pubDate>Sat, 22 Nov 2025 00:00:00 GMT</pubDate></item><item><title>Prisma as the single source of truth: generating GraphQL types, Zod schemas, and Eloquent models from one schema</title><link>https://suneltr.com/blog/prisma-single-source-of-truth-codegen/</link><guid isPermaLink="true">https://suneltr.com/blog/prisma-single-source-of-truth-codegen/</guid><description>How we structured Prisma in plato-next to drive code generation across five outputs, TypeScript client, Pothos GraphQL types, Zod validation, Eloquent models, and test data, and what that buys a polyglot stack.</description><pubDate>Wed, 15 Oct 2025 00:00:00 GMT</pubDate></item><item><title>Designing @plato/rn-chat as a reusable React Native SDK</title><link>https://suneltr.com/blog/designing-react-native-sdk-reusable-library/</link><guid isPermaLink="true">https://suneltr.com/blog/designing-react-native-sdk-reusable-library/</guid><description>What changed when chat became a reusable React Native library instead of app-specific code, the API design decisions, the imperative ref pattern, Sockudo integration, and what self-hosting as an SDK forces you to think about.</description><pubDate>Wed, 12 Feb 2025 00:00:00 GMT</pubDate></item><item><title>Self-hosting Sockudo: dropping Pusher with zero per-message cost</title><link>https://suneltr.com/blog/self-hosting-sockudo-dropping-pusher/</link><guid isPermaLink="true">https://suneltr.com/blog/self-hosting-sockudo-dropping-pusher/</guid><description>The full story of replacing Pusher with Sockudo, why protocol compatibility made this migration a config change, and what a year of running your own WebSocket server actually looks like.</description><pubDate>Sat, 25 Jan 2025 00:00:00 GMT</pubDate></item><item><title>Why we moved from Stitches to Tailwind, and what we kept</title><link>https://suneltr.com/blog/stitches-to-tailwind-what-we-kept/</link><guid isPermaLink="true">https://suneltr.com/blog/stitches-to-tailwind-what-we-kept/</guid><description>What the migration from Stitches-based Atom to Tailwind taught me about where the stable layer in a design system actually lives, and why Radix UI survived the whole transition untouched.</description><pubDate>Thu, 28 Dec 2023 00:00:00 GMT</pubDate></item><item><title>Module-scoped Jotai atoms: how we manage state across 30+ pages in Plato</title><link>https://suneltr.com/blog/module-scoped-jotai-atoms-large-app/</link><guid isPermaLink="true">https://suneltr.com/blog/module-scoped-jotai-atoms-large-app/</guid><description>Why module-scoped Jotai atoms worked better for Plato than one large global store, and how the boundaries held up as the app grew to 30+ pages.</description><pubDate>Tue, 18 Apr 2023 00:00:00 GMT</pubDate></item><item><title>Staying technical as an engineering manager: what I&apos;m still figuring out</title><link>https://suneltr.com/blog/staying-technical-engineering-manager/</link><guid isPermaLink="true">https://suneltr.com/blog/staying-technical-engineering-manager/</guid><description>Three months into engineering management, writing this to understand what staying technical actually means when the calendar suddenly has eight hours of meetings in it.</description><pubDate>Fri, 10 Mar 2023 00:00:00 GMT</pubDate></item><item><title>Building a design system from scratch in 2022</title><link>https://suneltr.com/blog/building-design-system-from-scratch-2022/</link><guid isPermaLink="true">https://suneltr.com/blog/building-design-system-from-scratch-2022/</guid><description>Why we built Atom instead of adopting a large UI library, how the package layers worked, and what I learned from making that architectural bet.</description><pubDate>Mon, 14 Nov 2022 00:00:00 GMT</pubDate></item><item><title>What I set up first when bootstrapping a React Native app</title><link>https://suneltr.com/blog/react-native-bootstrap-setup-order/</link><guid isPermaLink="true">https://suneltr.com/blog/react-native-bootstrap-setup-order/</guid><description>The order I follow when bootstrapping a production React Native app, and why the sequence matters more than the exact library choices.</description><pubDate>Thu, 15 Sep 2022 00:00:00 GMT</pubDate></item><item><title>AOP in PHP: what aspect-me does and why I built it</title><link>https://suneltr.com/blog/aop-php-aspect-me/</link><guid isPermaLink="true">https://suneltr.com/blog/aop-php-aspect-me/</guid><description>What aspect-oriented programming means in plain terms, why method interception is useful in PHP, and how aspect-me fits into that problem.</description><pubDate>Tue, 05 Oct 2021 00:00:00 GMT</pubDate></item><item><title>PHP 8: the features I actually use</title><link>https://suneltr.com/blog/php-8-features-i-actually-use/</link><guid isPermaLink="true">https://suneltr.com/blog/php-8-features-i-actually-use/</guid><description>The PHP 8 features that changed my day-to-day code most, and the ones I still find less relevant in ordinary web applications.</description><pubDate>Fri, 12 Feb 2021 00:00:00 GMT</pubDate></item><item><title>Code review at scale: what I learned running it for three years</title><link>https://suneltr.com/blog/code-review-at-scale-three-years/</link><guid isPermaLink="true">https://suneltr.com/blog/code-review-at-scale-three-years/</guid><description>How my view of code review changed after years of leading reviews across a multi-brand platform and using review as a teaching tool instead of a gate.</description><pubDate>Wed, 19 Aug 2020 00:00:00 GMT</pubDate></item><item><title>From developer to lead: the first six months</title><link>https://suneltr.com/blog/developer-to-lead-first-six-months/</link><guid isPermaLink="true">https://suneltr.com/blog/developer-to-lead-first-six-months/</guid><description>What surprised me in my first six months as a lead, especially around communication, reviews, and the shift from shipping code to enabling a team.</description><pubDate>Mon, 23 Sep 2019 00:00:00 GMT</pubDate></item><item><title>EAV in Laravel: what I built and why</title><link>https://suneltr.com/blog/eav-laravel-package-what-i-built-why/</link><guid isPermaLink="true">https://suneltr.com/blog/eav-laravel-package-what-i-built-why/</guid><description>Why I built an EAV package for Laravel, what Magento taught me about the pattern, and how I wanted the API to feel cleaner in Eloquent.</description><pubDate>Mon, 08 Oct 2018 00:00:00 GMT</pubDate></item><item><title>Subtree splits: publishing parts of your monorepo as separate packages</title><link>https://suneltr.com/blog/subtree-splits-monorepo-separate-packages/</link><guid isPermaLink="true">https://suneltr.com/blog/subtree-splits-monorepo-separate-packages/</guid><description>Why I used subtree splits for mods-framework packages, how the workflow works, and when the extra maintenance is worth it.</description><pubDate>Thu, 14 Jun 2018 00:00:00 GMT</pubDate></item><item><title>Building a modular application framework on top of Laravel</title><link>https://suneltr.com/blog/building-modular-application-framework-laravel/</link><guid isPermaLink="true">https://suneltr.com/blog/building-modular-application-framework-laravel/</guid><description>A technical look at how I structured mods as a modular application framework on top of Laravel, including discovery, theming, and package splitting.</description><pubDate>Sun, 25 Feb 2018 00:00:00 GMT</pubDate></item><item><title>Upgrade-safe extension points in Laravel</title><link>https://suneltr.com/blog/upgrade-safe-extension-points-laravel/</link><guid isPermaLink="true">https://suneltr.com/blog/upgrade-safe-extension-points-laravel/</guid><description>Why framework extension points break so easily, and how I started thinking about safer ways to extend behavior with layout-core and aspect-me.</description><pubDate>Tue, 18 Jul 2017 00:00:00 GMT</pubDate></item><item><title>Why I started building my own PHP framework</title><link>https://suneltr.com/blog/why-i-started-building-my-own-php-framework/</link><guid isPermaLink="true">https://suneltr.com/blog/why-i-started-building-my-own-php-framework/</guid><description>Why I started the mods-framework experiment: not to replace Laravel, but to make modular application architecture a first-class idea.</description><pubDate>Sun, 12 Mar 2017 00:00:00 GMT</pubDate></item><item><title>Moving from agency work to enterprise consulting: what actually changes</title><link>https://suneltr.com/blog/agency-to-enterprise-consulting-what-changes/</link><guid isPermaLink="true">https://suneltr.com/blog/agency-to-enterprise-consulting-what-changes/</guid><description>What changed for me moving from agency delivery at BORN Group to long-term enterprise consulting work at Cognizant.</description><pubDate>Mon, 05 Dec 2016 00:00:00 GMT</pubDate></item><item><title>Building mapemall.com: Magento for a 500-brand Indonesian retailer</title><link>https://suneltr.com/blog/building-mapemall-magento-500-brand-retailer/</link><guid isPermaLink="true">https://suneltr.com/blog/building-mapemall-magento-500-brand-retailer/</guid><description>What changed when Magento had to support the catalog complexity of a 500-brand retailer like Mapemall.</description><pubDate>Wed, 20 Jan 2016 00:00:00 GMT</pubDate></item><item><title>Inheriting a Magento codebase vs building from scratch: an honest comparison</title><link>https://suneltr.com/blog/inheriting-magento-codebase-vs-building-from-scratch/</link><guid isPermaLink="true">https://suneltr.com/blog/inheriting-magento-codebase-vs-building-from-scratch/</guid><description>What I learned from working with both clean and tangled Magento codebases, and how I decide whether a system is worth saving.</description><pubDate>Mon, 14 Sep 2015 00:00:00 GMT</pubDate></item><item><title>Multi-currency, multi-region: building Magento for the Middle East</title><link>https://suneltr.com/blog/magento-multi-currency-multi-region-middle-east/</link><guid isPermaLink="true">https://suneltr.com/blog/magento-multi-currency-multi-region-middle-east/</guid><description>What I learned building Magento stores across UAE and Indonesia: multi-region commerce is much more than translation and exchange rates.</description><pubDate>Fri, 22 May 2015 00:00:00 GMT</pubDate></item><item><title>Magento performance in production: lessons from Xcite.com</title><link>https://suneltr.com/blog/magento-performance-production-xcite/</link><guid isPermaLink="true">https://suneltr.com/blog/magento-performance-production-xcite/</guid><description>What I learned about Magento performance once Xcite.com traffic made development-time assumptions stop working.</description><pubDate>Wed, 18 Feb 2015 00:00:00 GMT</pubDate></item><item><title>EAV in Magento: why it exists, when it hurts you, and what I built to fix it</title><link>https://suneltr.com/blog/eav-magento-why-it-exists-when-it-hurts/</link><guid isPermaLink="true">https://suneltr.com/blog/eav-magento-why-it-exists-when-it-hurts/</guid><description>After spending enough time inside Magento&apos;s catalog model, I finally started understanding why EAV exists, where it helps, and where the tradeoff starts getting expensive.</description><pubDate>Fri, 28 Nov 2014 00:00:00 GMT</pubDate></item><item><title>Database design for a social network: decisions I made on tripzar.com</title><link>https://suneltr.com/blog/database-design-social-network-tripzar/</link><guid isPermaLink="true">https://suneltr.com/blog/database-design-social-network-tripzar/</guid><description>The database decisions I made while building tripzar.com, especially around social relationships, feeds, and linking traveler content to places and trips.</description><pubDate>Wed, 10 Sep 2014 00:00:00 GMT</pubDate></item><item><title>Designing a hotel reservation API from scratch</title><link>https://suneltr.com/blog/designing-hotel-reservation-api/</link><guid isPermaLink="true">https://suneltr.com/blog/designing-hotel-reservation-api/</guid><description>What I learned while designing a hotel reservation API for ofertadeldia.com, especially around availability, reservation states, and the parts I got wrong the first time.</description><pubDate>Fri, 20 Jun 2014 00:00:00 GMT</pubDate></item><item><title>Building your first Magento module: what I wish I knew</title><link>https://suneltr.com/blog/building-your-first-magento-module/</link><guid isPermaLink="true">https://suneltr.com/blog/building-your-first-magento-module/</guid><description>The Magento 1 module concepts that confused me most when I started building extensions at Contus, and the mental model that finally made them click.</description><pubDate>Sat, 15 Feb 2014 00:00:00 GMT</pubDate></item></channel></rss>