<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Arjun Nambiar</title>
    <description>The latest articles on DEV Community by Arjun Nambiar (@shadowslayer03).</description>
    <link>https://dev.to/shadowslayer03</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3942883%2Fb4d1e490-0b9a-4bed-9419-ccb04ec670ce.jpg</url>
      <title>DEV Community: Arjun Nambiar</title>
      <link>https://dev.to/shadowslayer03</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/shadowslayer03"/>
    <language>en</language>
    <item>
      <title>I Built a Globally Distributed Blog Platform for ~$1/Month</title>
      <dc:creator>Arjun Nambiar</dc:creator>
      <pubDate>Thu, 21 May 2026 03:17:35 +0000</pubDate>
      <link>https://dev.to/shadowslayer03/i-built-a-globally-distributed-blog-platform-for-1month-5394</link>
      <guid>https://dev.to/shadowslayer03/i-built-a-globally-distributed-blog-platform-for-1month-5394</guid>
      <description>&lt;p&gt;I wanted a developer blog that felt more like an engineered platform than a traditional personal site.&lt;/p&gt;

&lt;p&gt;Not just a static template with articles slapped onto it, but something:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;globally fast&lt;/li&gt;
&lt;li&gt;content-first&lt;/li&gt;
&lt;li&gt;interactive without becoming bloated&lt;/li&gt;
&lt;li&gt;cheap to operate&lt;/li&gt;
&lt;li&gt;fully owned end-to-end&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So over the last few weeks, I built my personal blog platform from scratch using Astro, Cloudflare Workers, Turso, React islands, Pagefind, Giscus, and a lot of frontend experimentation.&lt;/p&gt;

&lt;p&gt;This post breaks down the architecture, engineering decisions, runtime issues, performance optimizations, and lessons learned while building it.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Goal
&lt;/h2&gt;

&lt;p&gt;The goal was to create a platform that could serve as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a space for writing and sharing technical ideas&lt;/li&gt;
&lt;li&gt;a playground for frontend engineering and UI experimentation&lt;/li&gt;
&lt;li&gt;a place to document architectural decisions and tradeoffs&lt;/li&gt;
&lt;li&gt;something polished enough to genuinely feel proud of&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Performance mattered a lot from the beginning.&lt;/p&gt;

&lt;p&gt;I wanted:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;static HTML by default&lt;/li&gt;
&lt;li&gt;minimal JavaScript&lt;/li&gt;
&lt;li&gt;edge delivery&lt;/li&gt;
&lt;li&gt;selective hydration&lt;/li&gt;
&lt;li&gt;excellent Lighthouse scores&lt;/li&gt;
&lt;li&gt;smooth interactions without turning the site into a client-side app&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  The Stack
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;Technology&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Framework&lt;/td&gt;
&lt;td&gt;Astro 6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Interactive Islands&lt;/td&gt;
&lt;td&gt;React 19&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Styling&lt;/td&gt;
&lt;td&gt;Tailwind CSS v4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Deployment&lt;/td&gt;
&lt;td&gt;Cloudflare Pages&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;APIs&lt;/td&gt;
&lt;td&gt;Cloudflare Workers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Database&lt;/td&gt;
&lt;td&gt;Turso&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ORM&lt;/td&gt;
&lt;td&gt;Drizzle ORM&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CMS&lt;/td&gt;
&lt;td&gt;Keystatic&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Search&lt;/td&gt;
&lt;td&gt;Pagefind&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Comments&lt;/td&gt;
&lt;td&gt;Giscus&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Runtime&lt;/td&gt;
&lt;td&gt;Bun&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Some factors that influenced these choices:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;performance&lt;/li&gt;
&lt;li&gt;edge compatibility&lt;/li&gt;
&lt;li&gt;developer experience&lt;/li&gt;
&lt;li&gt;long-term maintainability&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa8enlhz8pt69r7w16mjh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa8enlhz8pt69r7w16mjh.png" alt="Arjun Nambiar's Blog - Architecture Diagram" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Astro?
&lt;/h2&gt;

&lt;p&gt;One obvious question here is: why Astro instead of something like Next.js?&lt;/p&gt;

&lt;p&gt;Astro felt like the perfect fit for this project.&lt;/p&gt;

&lt;p&gt;Most pages on a blog don’t need JavaScript at all, and Astro’s Islands Architecture made it possible to ship static HTML by default while hydrating only the interactive parts like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;comments&lt;/li&gt;
&lt;li&gt;likes&lt;/li&gt;
&lt;li&gt;search&lt;/li&gt;
&lt;li&gt;theme toggles&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This kept the site lightweight while still allowing rich UI interactions, resulting in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;tiny JS payloads&lt;/li&gt;
&lt;li&gt;fast initial loads&lt;/li&gt;
&lt;li&gt;strong Lighthouse scores&lt;/li&gt;
&lt;li&gt;better SEO&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Another reason I chose Astro was timing.&lt;/p&gt;

&lt;p&gt;The framework has been gaining a lot of traction recently, especially after the Cloudflare acquisition, and I wanted to experiment with something that aligned closely with the edge-first ecosystem I was already building around.&lt;/p&gt;




&lt;h2&gt;
  
  
  Where I Over-Engineered Things
&lt;/h2&gt;

&lt;p&gt;One of the biggest lessons while building this project was learning when &lt;em&gt;not&lt;/em&gt; to use React.&lt;/p&gt;

&lt;p&gt;Initially, I over-engineered parts of the app with too many React islands and unnecessary react-query state management, to the point where the project started feeling more like a React app running inside Astro than an Astro site itself.&lt;/p&gt;

&lt;p&gt;Early on, I was throwing React islands everywhere for convenience.&lt;/p&gt;

&lt;p&gt;Over time, I started stripping hydration back aggressively and only keeping interactivity where it genuinely improved the experience.&lt;/p&gt;

&lt;p&gt;Ironically, some of the biggest performance improvements came from removing things instead of adding more optimizations.&lt;/p&gt;




&lt;h2&gt;
  
  
  Edge-First Deployment with Cloudflare
&lt;/h2&gt;

&lt;p&gt;After deciding on Astro, the next question was where to deploy it.&lt;/p&gt;

&lt;p&gt;Since Astro had recently been acquired by Cloudflare, I started exploring Cloudflare’s ecosystem more deeply, and it ended up fitting this project extremely well.&lt;/p&gt;

&lt;p&gt;The platform is deployed on Cloudflare’s edge network using:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cloudflare Pages for deployment&lt;/li&gt;
&lt;li&gt;Cloudflare Workers for APIs&lt;/li&gt;
&lt;li&gt;Cloudflare CDN for caching and global delivery&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I also ended up appreciating Cloudflare Workers more than I expected.&lt;/p&gt;

&lt;p&gt;Their live logs made debugging edge runtime issues and Turso integration problems significantly easier during development.&lt;/p&gt;

&lt;p&gt;The combination of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;global edge delivery&lt;/li&gt;
&lt;li&gt;automatic deployments&lt;/li&gt;
&lt;li&gt;built-in caching&lt;/li&gt;
&lt;li&gt;SSL&lt;/li&gt;
&lt;li&gt;DDoS protection&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;made Cloudflare an easy choice for this project.&lt;/p&gt;




&lt;h2&gt;
  
  
  Cloudflare Workers Behave Very Differently From Node
&lt;/h2&gt;

&lt;p&gt;One thing I underestimated initially was how differently Cloudflare Workers behave compared to a traditional Node.js environment.&lt;/p&gt;

&lt;p&gt;At some point, I had optimized the project so heavily around the Cloudflare runtime that parts of the app simply stopped working properly in local Node development.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Runtime Bug That Broke Production
&lt;/h2&gt;

&lt;p&gt;One of the weirdest bugs I ran into was that everything worked perfectly locally, but database calls silently failed in production once deployed to Cloudflare Workers.&lt;/p&gt;

&lt;p&gt;It eventually turned out to be runtime differences between Node and the Workers environment, which forced me to rethink parts of the local development setup entirely.&lt;/p&gt;

&lt;p&gt;I ended up splitting adapters between development and production environments and introducing local Workers shims just to keep the developer experience sane again.&lt;/p&gt;

&lt;p&gt;That experience alone taught me more about edge runtimes than most tutorials I had read before starting the project.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Turso?
&lt;/h2&gt;

&lt;p&gt;For a content platform like this, a distributed SQLite database felt surprisingly appropriate.&lt;/p&gt;

&lt;p&gt;I’m using Turso for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;page views&lt;/li&gt;
&lt;li&gt;analytics&lt;/li&gt;
&lt;li&gt;interaction systems&lt;/li&gt;
&lt;li&gt;likes&lt;/li&gt;
&lt;li&gt;lightweight dynamic functionality&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of maintaining a centralized Postgres instance, Turso keeps the infrastructure lightweight while still supporting globally distributed reads through edge replication.&lt;/p&gt;

&lt;p&gt;One of the biggest reasons I liked the Cloudflare Workers + Turso combination was cost efficiency.&lt;/p&gt;

&lt;p&gt;Cloudflare Workers already has a generous free tier, while Turso’s free tier includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;hundreds of millions of row reads&lt;/li&gt;
&lt;li&gt;multiple edge replicas&lt;/li&gt;
&lt;li&gt;enough capacity for personal projects without worrying about infra costs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Since both the compute and the database can live close to the user, the whole stack ends up feeling extremely lightweight and fast without needing traditional server infrastructure.&lt;/p&gt;

&lt;p&gt;It also integrates really nicely with Drizzle ORM and edge runtimes.&lt;/p&gt;




&lt;h2&gt;
  
  
  Keystatic Was the Perfect Choice
&lt;/h2&gt;

&lt;p&gt;Once I had settled on Astro, Cloudflare, and Turso, the next challenge was figuring out how I actually wanted to write and manage content.&lt;/p&gt;

&lt;p&gt;I knew I didn’t want a workflow where I had to manually edit Markdown files every time I wanted to publish something.&lt;/p&gt;

&lt;p&gt;I wanted a system that would let me:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;write blogs from anywhere&lt;/li&gt;
&lt;li&gt;publish quickly while travelling&lt;/li&gt;
&lt;li&gt;provide a responsive editing experience&lt;/li&gt;
&lt;li&gt;keep Git as the source of truth&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;While researching CMS options, I came across Keystatic, and it ended up solving almost everything I needed out of the box.&lt;/p&gt;

&lt;p&gt;What made it attractive was that it’s:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;open source&lt;/li&gt;
&lt;li&gt;actively improving&lt;/li&gt;
&lt;li&gt;trusted by a lot of developers&lt;/li&gt;
&lt;li&gt;built around a Git-based workflow&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That Git-first approach mattered a lot because all the blog content lives directly inside the repository as Astro content collections.&lt;/p&gt;

&lt;p&gt;Keystatic became the perfect bridge between:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a modern editing experience&lt;/li&gt;
&lt;li&gt;and a Git-backed content system&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Search Without External Infrastructure
&lt;/h2&gt;

&lt;p&gt;I wanted search functionality, but without introducing another external service or maintaining a dedicated backend just for indexing content.&lt;/p&gt;

&lt;p&gt;While researching options, I briefly considered Algolia, but it felt unnecessary for a mostly static content platform.&lt;/p&gt;

&lt;p&gt;Then I came across Pagefind.&lt;/p&gt;

&lt;p&gt;Pagefind generates a full-text search index during the build process itself and ships it alongside the static assets.&lt;/p&gt;

&lt;p&gt;That aligned perfectly with Astro’s static-first philosophy.&lt;/p&gt;

&lt;p&gt;I also liked how much control it gives over indexing through attributes like &lt;code&gt;data-pagefind-body&lt;/code&gt;, allowing only relevant content to become searchable.&lt;/p&gt;

&lt;p&gt;The integration itself was pretty straightforward using &lt;code&gt;@pagefind/default-ui&lt;/code&gt;, although I did slightly modify the build pipeline so indexing runs after Astro finishes building:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;astro build &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; npx pagefind &lt;span class="nt"&gt;--site&lt;/span&gt; dist/client
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The end result feels surprisingly fast without adding additional infrastructure complexity.&lt;/p&gt;




&lt;h2&gt;
  
  
  Comments with Giscus
&lt;/h2&gt;

&lt;p&gt;I knew pretty early on that I didn’t want to build a custom comment system.&lt;/p&gt;

&lt;p&gt;Doing that properly would’ve meant:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;moderation logic&lt;/li&gt;
&lt;li&gt;authentication systems&lt;/li&gt;
&lt;li&gt;spam prevention&lt;/li&gt;
&lt;li&gt;abuse protection&lt;/li&gt;
&lt;li&gt;extra database complexity&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For a blog, that felt unnecessary.&lt;/p&gt;

&lt;p&gt;While researching alternatives, I came across Giscus, which uses GitHub Discussions as the backend for comments.&lt;/p&gt;

&lt;p&gt;That approach made a lot of sense for this project because the audience is mostly developers anyway.&lt;/p&gt;

&lt;p&gt;What I liked most was that it completely removed the need to implement my own auth system.&lt;/p&gt;

&lt;p&gt;With Giscus:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;readers can browse without friction&lt;/li&gt;
&lt;li&gt;developers can comment using GitHub&lt;/li&gt;
&lt;li&gt;moderation becomes much easier&lt;/li&gt;
&lt;li&gt;GitHub handles abuse prevention and rate limiting&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Honestly, it ended up being one of the highest value-to-effort integrations in the project.&lt;/p&gt;




&lt;h2&gt;
  
  
  Dynamic OG Image Generation
&lt;/h2&gt;

&lt;p&gt;I also wanted every blog post to have its own custom social preview card instead of relying on generic screenshots or manually designed thumbnails.&lt;/p&gt;

&lt;p&gt;The OG images are generated dynamically using:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Satori&lt;/li&gt;
&lt;li&gt;Resvg WASM&lt;/li&gt;
&lt;li&gt;custom layouts/components&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Initially, I planned to use Sharp for image generation since that’s what most examples online were using.&lt;/p&gt;

&lt;p&gt;But after experimenting for a while, I eventually switched to &lt;code&gt;@resvg/resvg-wasm&lt;/code&gt; instead.&lt;/p&gt;

&lt;p&gt;The WASM-based approach fit the Cloudflare environment much better and avoided a lot of deployment friction native image-processing libraries can introduce.&lt;/p&gt;

&lt;p&gt;Each post now automatically gets a consistent branded preview image for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;X&lt;/li&gt;
&lt;li&gt;LinkedIn&lt;/li&gt;
&lt;li&gt;Discord&lt;/li&gt;
&lt;li&gt;Reddit&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;without manually designing thumbnails every time.&lt;/p&gt;




&lt;h2&gt;
  
  
  Frontend &amp;amp; UI Systems
&lt;/h2&gt;

&lt;p&gt;A huge part of this project was experimenting with frontend interactions and UI systems without letting the site become unnecessarily heavy.&lt;/p&gt;

&lt;p&gt;The frontend is built using Tailwind CSS v4.&lt;/p&gt;

&lt;p&gt;I also knew from the beginning that the blog needed both light and dark themes because developers tend to care a lot about reading experiences.&lt;/p&gt;

&lt;p&gt;That eventually led to building:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;animated theme toggles&lt;/li&gt;
&lt;li&gt;motion-heavy blog cards&lt;/li&gt;
&lt;li&gt;spotlight hover effects&lt;/li&gt;
&lt;li&gt;glow systems&lt;/li&gt;
&lt;li&gt;animated gradients&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Initially, I definitely over-engineered parts of the frontend.&lt;/p&gt;

&lt;p&gt;Over time, I started simplifying aggressively:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;porting many React islands back to Astro components&lt;/li&gt;
&lt;li&gt;replacing client-heavy interactions with CSS&lt;/li&gt;
&lt;li&gt;reducing unnecessary animations&lt;/li&gt;
&lt;li&gt;simplifying DOM structure&lt;/li&gt;
&lt;li&gt;reducing runtime JavaScript&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal slowly shifted from:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“make everything animated”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;to:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“make interactions feel intentional without hurting performance.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A lot of the Lighthouse and SEO improvements actually came from these frontend decisions.&lt;/p&gt;




&lt;h2&gt;
  
  
  Security, Middleware &amp;amp; Edge Concerns
&lt;/h2&gt;

&lt;p&gt;Something else this project pushed me into thinking about more seriously was security and infrastructure hardening.&lt;/p&gt;

&lt;p&gt;Once you fully own the entire platform end-to-end, you naturally start thinking about things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;bot protection&lt;/li&gt;
&lt;li&gt;DDoS mitigation&lt;/li&gt;
&lt;li&gt;rate limiting&lt;/li&gt;
&lt;li&gt;WAF rules&lt;/li&gt;
&lt;li&gt;middleware behavior&lt;/li&gt;
&lt;li&gt;caching strategies&lt;/li&gt;
&lt;li&gt;API protection&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I ended up spending more time than expected thinking through how requests move through the system at the edge and how to keep things lightweight without exposing unnecessary attack surfaces.&lt;/p&gt;




&lt;h2&gt;
  
  
  Cost Breakdown
&lt;/h2&gt;

&lt;p&gt;One of the funniest parts of this project is how cheap the infrastructure actually is.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Service&lt;/th&gt;
&lt;th&gt;Cost&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Cloudflare Pages&lt;/td&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cloudflare Workers&lt;/td&gt;
&lt;td&gt;Mostly Free&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Turso&lt;/td&gt;
&lt;td&gt;Free / Extremely Low&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pagefind&lt;/td&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Keystatic&lt;/td&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Giscus&lt;/td&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;For the kind of architecture this project uses, the overall cost still feels kind of absurdly low.&lt;/p&gt;

&lt;p&gt;The whole platform currently runs globally for basically the cost of the domain.&lt;/p&gt;




&lt;h2&gt;
  
  
  Things I’d Do Differently
&lt;/h2&gt;

&lt;p&gt;A few things I’d probably change if I rebuilt this today:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;introduce fewer React islands initially&lt;/li&gt;
&lt;li&gt;simplify some animation systems earlier&lt;/li&gt;
&lt;li&gt;structure shared styles more cleanly from the start&lt;/li&gt;
&lt;li&gt;think about runtime differences earlier in development&lt;/li&gt;
&lt;li&gt;avoid over-engineering state management in static-heavy pages&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;This project ended up teaching me way more than I expected.&lt;/p&gt;

&lt;p&gt;Not just about Astro, frontend performance, or Cloudflare Workers, but about how differently you start thinking once you fully own the entire system end-to-end.&lt;/p&gt;

&lt;p&gt;This was also my first time seriously using Cloudflare as a hosting platform, and it pushed me into thinking much more from an edge-first perspective instead of a traditional “deploy and forget” mindset.&lt;/p&gt;

&lt;p&gt;One thing I became almost obsessed with during development was load time.&lt;/p&gt;

&lt;p&gt;For a mostly static content platform, even a few hundred milliseconds starts feeling noticeable.&lt;/p&gt;

&lt;p&gt;I realized how satisfying it is to fully control:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the architecture&lt;/li&gt;
&lt;li&gt;the deployment&lt;/li&gt;
&lt;li&gt;the content system&lt;/li&gt;
&lt;li&gt;the interactions&lt;/li&gt;
&lt;li&gt;and the performance characteristics yourself&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And honestly, this still feels like the beginning.&lt;/p&gt;

&lt;p&gt;The entire platform is also open source if anyone wants to explore the implementation details, use parts of it as reference, or build on top of it:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/ShadowSlayer03/Blog-With-Astro?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;Blog With Astro Repository&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Original article:&lt;br&gt;
&lt;a href="https://arjunnambiar.dev/blog/i-built-a-distributed-blog-platform-on-cf/?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;I Built a Distributed Blog Platform on Cloudflare&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Would genuinely love feedback from other developers about how they planned and created their blog, what were the pains and gains etc.&lt;/p&gt;

&lt;p&gt;Thanks for reading.&lt;/p&gt;

</description>
      <category>astro</category>
      <category>react</category>
      <category>webdev</category>
      <category>typescript</category>
    </item>
  </channel>
</rss>
