<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Anton Tofanidze — Writing</title>
        <link>https://tofanidze.com/blog</link>
        <description>Full-stack engineer with 6 years of experience building B2B marketing and enterprise platforms: portals, dashboards, and Salesforce / Marketo / HubSpot integrations. PHP (Laravel, Yii), Node.js (NestJS), Vue and React.</description>
        <language>en</language>
        <atom:link href="https://tofanidze.com/feed.xml" rel="self" type="application/rss+xml"/>
                    <item>
                <title>Marketo: access_token Query Param Is Out, Authorization Header Is In</title>
                <link>https://tofanidze.com/blog/marketo-access-token-query-param-is-out-authorization-header-is-in</link>
                <guid isPermaLink="true">https://tofanidze.com/blog/marketo-access-token-query-param-is-out-authorization-header-is-in</guid>
                <pubDate>Tue, 01 Sep 2026 09:00:00 +0000</pubDate>
                <description>Marketo is retiring token-in-the-URL authentication for its REST API. If your integration still appends ?access_token=… to every request, here is exactly what changes and the one-line fix.</description>
                                    <category>Marketo</category>
                                    <category>Integrations</category>
                                    <category>API</category>
                            </item>
                    <item>
                <title>Idempotent CRM Sync: Why Your Integration Keeps Creating Duplicates</title>
                <link>https://tofanidze.com/blog/idempotent-crm-sync-why-your-integration-keeps-creating-duplicates</link>
                <guid isPermaLink="true">https://tofanidze.com/blog/idempotent-crm-sync-why-your-integration-keeps-creating-duplicates</guid>
                <pubDate>Thu, 18 Jun 2026 09:00:00 +0000</pubDate>
                <description>Every retry in a CRM integration is a chance to create a second copy of the same lead. Here is the key design that makes retries safe — and the three places teams usually get it wrong.</description>
                                    <category>Integrations</category>
                                    <category>Salesforce</category>
                                    <category>RabbitMQ</category>
                                    <category>Architecture</category>
                            </item>
                    <item>
                <title>Dashboards That Stay Fast: Rollup Tables Over Raw Events</title>
                <link>https://tofanidze.com/blog/dashboards-that-stay-fast-rollup-tables-over-raw-events</link>
                <guid isPermaLink="true">https://tofanidze.com/blog/dashboards-that-stay-fast-rollup-tables-over-raw-events</guid>
                <pubDate>Thu, 02 Apr 2026 09:00:00 +0000</pubDate>
                <description>A marketing dashboard querying raw event tables is fine at 100k rows and unusable at 40 million. Pre-aggregation is the boring fix that works — here is how to structure it.</description>
                                    <category>Performance</category>
                                    <category>MySQL</category>
                                    <category>Laravel</category>
                                    <category>Dashboards</category>
                            </item>
                    <item>
                <title>Strangler-Fig in Practice: Migrating a Yii 1 Portal Without a Freeze</title>
                <link>https://tofanidze.com/blog/strangler-fig-in-practice-migrating-a-yii-1-portal-without-a-freeze</link>
                <guid isPermaLink="true">https://tofanidze.com/blog/strangler-fig-in-practice-migrating-a-yii-1-portal-without-a-freeze</guid>
                <pubDate>Thu, 22 Jan 2026 09:00:00 +0000</pubDate>
                <description>Rewrites fail because they demand that the business stop moving. Incremental migration lets both applications run at once — the hard part is the session, not the routing.</description>
                                    <category>Legacy</category>
                                    <category>Yii</category>
                                    <category>Laravel</category>
                                    <category>Migration</category>
                            </item>
            </channel>
</rss>
