<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>anishfyi writings</title>
    <link>https://anishfyi.com/writings/</link>
    <atom:link href="https://anishfyi.com/writings/rss.xml" rel="self" type="application/rss+xml"/>
    <description>Essays on backend systems, applied AI, and the open source tools behind them.</description>
    <language>en</language>
    <managingEditor>anishfyi@gmail.com (Anish Kr Singh)</managingEditor>
    <lastBuildDate>Wed, 29 Jul 2026 09:00:00 +0530</lastBuildDate>
    <item>
      <title>Why I hand-wrote a JavaScript framework in 2026</title>
      <link>https://anishfyi.com/writings/why-i-hand-wrote-a-javascript-framework/</link>
      <guid isPermaLink="true">https://anishfyi.com/writings/why-i-hand-wrote-a-javascript-framework/</guid>
      <description>Alpine got the ergonomics right and stopped short on the engine. On fine-grained signals, a hand-written expression interpreter that survives a strict CSP, and what 16KB has to earn.</description>
      <pubDate>Wed, 29 Jul 2026 09:00:00 +0530</pubDate>
      <category>Open Source</category>
      <category>TypeScript</category>
      <category>Frontend</category>
      <category>summit.js</category>
    </item>
    <item>
      <title>Why your scraper gets a 403 and your browser does not</title>
      <link>https://anishfyi.com/writings/why-your-scraper-gets-a-403/</link>
      <guid isPermaLink="true">https://anishfyi.com/writings/why-your-scraper-gets-a-403/</guid>
      <description>The block usually happens in the TLS handshake, before a single HTTP header is read. On JA3 fingerprints, self-healing selectors, and why I hand-wrote a crawl engine instead of importing Scrapy.</description>
      <pubDate>Tue, 28 Jul 2026 09:00:00 +0530</pubDate>
      <category>Open Source</category>
      <category>Python</category>
      <category>Web Scraping</category>
      <category>curl_reap</category>
    </item>
    <item>
      <title>Parse first, escalate only what you must</title>
      <link>https://anishfyi.com/writings/parse-first-escalate-only-what-you-must/</link>
      <guid isPermaLink="true">https://anishfyi.com/writings/parse-first-escalate-only-what-you-must/</guid>
      <description>Most document pipelines throw the whole file at a model and bill you for the easy pages too. On rebuilding tables from word geometry, scoring yourself 0 to 1, and why the confidence score is the most important output.</description>
      <pubDate>Mon, 27 Jul 2026 09:00:00 +0530</pubDate>
      <category>Open Source</category>
      <category>Python</category>
      <category>Applied AI</category>
      <category>terbium</category>
    </item>
    <item>
      <title>Building Querion: a Read-Only, Natural-Language Data Analyst</title>
      <link>https://anishfyi.com/writings/querion-read-only-analyst/</link>
      <guid isPermaLink="true">https://anishfyi.com/writings/querion-read-only-analyst/</guid>
      <description>How I gave a language model production database access without ever letting it write: a read-only contract, a sandboxed directive loop, and a default-deny API allowlist.</description>
      <pubDate>Sun, 14 Jun 2026 09:00:00 +0530</pubDate>
      <category>Open Source</category>
      <category>LLM</category>
      <category>Claude Code</category>
      <category>Postgres</category>
    </item>
    <item>
      <title>Trove: Giving Claude Code a Persistent Memory</title>
      <link>https://anishfyi.com/writings/trove-persistent-memory-claude-code/</link>
      <guid isPermaLink="true">https://anishfyi.com/writings/trove-persistent-memory-claude-code/</guid>
      <description>A file-based memory index that reloads into context every session, so Claude Code stops starting from zero and each session begins further ahead than the last.</description>
      <pubDate>Wed, 10 Jun 2026 09:00:00 +0530</pubDate>
      <category>Open Source</category>
      <category>Claude Code</category>
      <category>Developer Tools</category>
    </item>
    <item>
      <title>Designing Clean REST APIs with Django REST Framework</title>
      <link>https://anishfyi.com/writings/django-rest-framework-apis/</link>
      <guid isPermaLink="true">https://anishfyi.com/writings/django-rest-framework-apis/</guid>
      <description>How I structure serializers, views, and routers in Django REST Framework so API code stays predictable as a project grows.</description>
      <pubDate>Tue, 12 May 2026 09:00:00 +0530</pubDate>
      <category>Django</category>
      <category>DRF</category>
      <category>API</category>
    </item>
    <item>
      <title>Modeling an Order Workflow as a State Machine</title>
      <link>https://anishfyi.com/writings/order-state-machine/</link>
      <guid isPermaLink="true">https://anishfyi.com/writings/order-state-machine/</guid>
      <description>Turning a tangle of status flags into an explicit, testable state machine that guards every order transition.</description>
      <pubDate>Tue, 28 Apr 2026 09:00:00 +0530</pubDate>
      <category>Django</category>
      <category>Architecture</category>
      <category>Patterns</category>
    </item>
    <item>
      <title>Verifying Inbound Webhooks with HMAC Signatures</title>
      <link>https://anishfyi.com/writings/hmac-webhook-verification/</link>
      <guid isPermaLink="true">https://anishfyi.com/writings/hmac-webhook-verification/</guid>
      <description>Why every inbound webhook needs a signature check, and how to verify HMAC payloads safely in Django.</description>
      <pubDate>Tue, 14 Apr 2026 09:00:00 +0530</pubDate>
      <category>Webhooks</category>
      <category>Security</category>
      <category>Django</category>
    </item>
    <item>
      <title>Killing N+1 Queries with select_related and prefetch_related</title>
      <link>https://anishfyi.com/writings/n-plus-one-queries/</link>
      <guid isPermaLink="true">https://anishfyi.com/writings/n-plus-one-queries/</guid>
      <description>Finding and fixing the silent N+1 queries that quietly add hundreds of milliseconds to an API response.</description>
      <pubDate>Mon, 30 Mar 2026 09:00:00 +0530</pubDate>
      <category>Django</category>
      <category>ORM</category>
      <category>Performance</category>
    </item>
    <item>
      <title>Caching High-Traffic Endpoints with Redis</title>
      <link>https://anishfyi.com/writings/redis-caching-django/</link>
      <guid isPermaLink="true">https://anishfyi.com/writings/redis-caching-django/</guid>
      <description>A practical caching layer for read-heavy endpoints, covering cache keys, invalidation, and stampede protection.</description>
      <pubDate>Mon, 16 Mar 2026 09:00:00 +0530</pubDate>
      <category>Redis</category>
      <category>Performance</category>
      <category>Django</category>
    </item>
    <item>
      <title>Background Jobs with Celery and RabbitMQ</title>
      <link>https://anishfyi.com/writings/celery-rabbitmq-jobs/</link>
      <guid isPermaLink="true">https://anishfyi.com/writings/celery-rabbitmq-jobs/</guid>
      <description>Moving slow work off the request path with Celery and RabbitMQ, with retries and idempotency that survive failure.</description>
      <pubDate>Mon, 02 Mar 2026 09:00:00 +0530</pubDate>
      <category>Celery</category>
      <category>RabbitMQ</category>
      <category>Async</category>
    </item>
    <item>
      <title>Token Authentication for a Django API</title>
      <link>https://anishfyi.com/writings/token-authentication-django/</link>
      <guid isPermaLink="true">https://anishfyi.com/writings/token-authentication-django/</guid>
      <description>Setting up token authentication for a Django API, from issuing tokens to rotating and revoking them.</description>
      <pubDate>Mon, 16 Feb 2026 09:00:00 +0530</pubDate>
      <category>Django</category>
      <category>Auth</category>
      <category>Security</category>
    </item>
    <item>
      <title>Bulk Update and Export Endpoints at Scale</title>
      <link>https://anishfyi.com/writings/bulk-update-export-endpoints/</link>
      <guid isPermaLink="true">https://anishfyi.com/writings/bulk-update-export-endpoints/</guid>
      <description>Designing endpoints that update and export thousands of rows without timing out or locking the database.</description>
      <pubDate>Mon, 02 Feb 2026 09:00:00 +0530</pubDate>
      <category>Django</category>
      <category>Performance</category>
      <category>API</category>
    </item>
    <item>
      <title>Decoupling Side Effects with Django Signals</title>
      <link>https://anishfyi.com/writings/django-signals/</link>
      <guid isPermaLink="true">https://anishfyi.com/writings/django-signals/</guid>
      <description>When Django signals keep code clean, when they hide bugs, and how to use them without regret.</description>
      <pubDate>Mon, 19 Jan 2026 09:00:00 +0530</pubDate>
      <category>Django</category>
      <category>Patterns</category>
    </item>
    <item>
      <title>Zero-Downtime Database Migrations in Django</title>
      <link>https://anishfyi.com/writings/zero-downtime-migrations/</link>
      <guid isPermaLink="true">https://anishfyi.com/writings/zero-downtime-migrations/</guid>
      <description>Shipping schema changes to a live Postgres database without dropped requests or downtime windows.</description>
      <pubDate>Mon, 05 Jan 2026 09:00:00 +0530</pubDate>
      <category>Django</category>
      <category>Postgres</category>
      <category>Migrations</category>
    </item>
    <item>
      <title>Full-Text Search with Elasticsearch and Django</title>
      <link>https://anishfyi.com/writings/elasticsearch-django-search/</link>
      <guid isPermaLink="true">https://anishfyi.com/writings/elasticsearch-django-search/</guid>
      <description>Adding fast full-text search to a Django app by syncing models into Elasticsearch and querying them well.</description>
      <pubDate>Mon, 15 Dec 2025 09:00:00 +0530</pubDate>
      <category>Elasticsearch</category>
      <category>Search</category>
      <category>Django</category>
    </item>
    <item>
      <title>Generating PDF Documents in Django with ReportLab</title>
      <link>https://anishfyi.com/writings/pdf-generation-reportlab/</link>
      <guid isPermaLink="true">https://anishfyi.com/writings/pdf-generation-reportlab/</guid>
      <description>Building clean, repeatable PDF documents like invoices and purchase orders directly from Django with ReportLab.</description>
      <pubDate>Mon, 01 Dec 2025 09:00:00 +0530</pubDate>
      <category>Django</category>
      <category>PDF</category>
      <category>Python</category>
    </item>
    <item>
      <title>Testing a Django API with pytest</title>
      <link>https://anishfyi.com/writings/testing-django-pytest/</link>
      <guid isPermaLink="true">https://anishfyi.com/writings/testing-django-pytest/</guid>
      <description>A pragmatic pytest setup for Django: fixtures, factories, database tests, and coverage that actually helps.</description>
      <pubDate>Mon, 17 Nov 2025 09:00:00 +0530</pubDate>
      <category>Testing</category>
      <category>pytest</category>
      <category>Django</category>
    </item>
    <item>
      <title>Production Observability with Sentry, Prometheus, and Grafana</title>
      <link>https://anishfyi.com/writings/production-observability/</link>
      <guid isPermaLink="true">https://anishfyi.com/writings/production-observability/</guid>
      <description>Wiring Sentry, Prometheus, and Grafana into a Django service so production tells you when it hurts.</description>
      <pubDate>Mon, 03 Nov 2025 09:00:00 +0530</pubDate>
      <category>Observability</category>
      <category>Monitoring</category>
      <category>DevOps</category>
    </item>
    <item>
      <title>Dockerizing a Django App for Dev and Production</title>
      <link>https://anishfyi.com/writings/dockerizing-django/</link>
      <guid isPermaLink="true">https://anishfyi.com/writings/dockerizing-django/</guid>
      <description>A Docker setup for Django that stays fast in local development and lean in production.</description>
      <pubDate>Mon, 20 Oct 2025 09:00:00 +0530</pubDate>
      <category>Docker</category>
      <category>DevOps</category>
      <category>Django</category>
    </item>
  </channel>
</rss>
