<?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: Sean Tang</title>
    <description>The latest articles on DEV Community by Sean Tang (@imseantang).</description>
    <link>https://dev.to/imseantang</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4234822%2F34a78f12-c4ba-441e-960b-9415df69494a.jpg</url>
      <title>DEV Community: Sean Tang</title>
      <link>https://dev.to/imseantang</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/imseantang"/>
    <language>en</language>
    <item>
      <title>Why I Now Deploy My Web Projects on Cloudflare Instead of Managing Servers</title>
      <dc:creator>Sean Tang</dc:creator>
      <pubDate>Mon, 09 Nov 2026 10:06:36 +0000</pubDate>
      <link>https://dev.to/imseantang/why-i-now-deploy-my-web-projects-on-cloudflare-instead-of-managing-servers-313</link>
      <guid>https://dev.to/imseantang/why-i-now-deploy-my-web-projects-on-cloudflare-instead-of-managing-servers-313</guid>
      <description>&lt;p&gt;&lt;strong&gt;Why I Now Deploy My Web Projects on Cloudflare Instead of Managing Servers&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Hi DEV, I’m Sean. I’m a full-stack engineer working mainly with TypeScript, Node.js, and React.&lt;/p&gt;

&lt;p&gt;Over the past two years, I’ve started using AI to write more of my code. That has gradually changed how I work. I spend more time planning products, designing the architecture, and reviewing implementations. AI agents handle more of the implementation work, while I remain responsible for deciding what should be built and whether it actually works.&lt;/p&gt;

&lt;p&gt;For me, writing every line by hand has become a less useful measure of progress. I’d rather use that time to understand a problem, make a better design decision, or get a product into someone’s hands.&lt;/p&gt;

&lt;p&gt;Technical knowledge still matters. Reviewing generated code requires understanding what it does, especially around authentication, payments, and data access. But I want to apply that knowledge where my judgment contributes most.&lt;/p&gt;

&lt;p&gt;That shift encouraged me to start building more products of my own.&lt;/p&gt;

&lt;p&gt;I experimented with iOS apps, Chrome extensions, and websites. Eventually, I decided to make web products my main focus. They fit my existing skills, and sharing a working product can be as simple as sending someone a URL.&lt;/p&gt;

&lt;p&gt;Then I had to decide how I wanted to deploy them.&lt;/p&gt;

&lt;p&gt;I tried traditional server deployments and platforms such as Vercel and Railway. After exploring several approaches, I settled on Cloudflare for my current web projects.&lt;/p&gt;

&lt;p&gt;The biggest reason is how much less infrastructure I need to manage myself.&lt;/p&gt;

&lt;p&gt;With a traditional server, deploying the application is only part of the job. There’s also the operating system, runtime installation, process management, reverse proxy configuration, and ongoing maintenance. Each part is manageable, but the work adds up when you’re maintaining several small products.&lt;/p&gt;

&lt;p&gt;Cloudflare Workers gives me a managed runtime for application code. I can spend more of my attention on the application and its behavior, with fewer machine-level responsibilities. Cloudflare also handles deploying Workers across its global network. That doesn’t automatically make every database query fast, but it removes another piece of infrastructure I would otherwise need to arrange. &lt;a href="https://developers.cloudflare.com/workers/" rel="noopener noreferrer"&gt;Workers documentation&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Another reason is that the services I need fit together reasonably well.&lt;/p&gt;

&lt;p&gt;My core Cloudflare stack is straightforward:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Workers&lt;/strong&gt; for server-side application logic and APIs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;D1&lt;/strong&gt; for relational data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;R2&lt;/strong&gt; for uploaded files and other stored assets.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;D1 provides a managed database with SQLite SQL semantics. For the kinds of products I’m currently building, having a relational database available alongside the application is convenient. I still need to design schemas, write migrations, and pay attention to queries, but I don’t need to operate a separate database server. &lt;a href="https://developers.cloudflare.com/d1/" rel="noopener noreferrer"&gt;D1 documentation&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Workers bindings are another detail I appreciate. They let the application access resources such as D1 and R2 through configured bindings. That reduces some of the connection and credential plumbing involved in combining separate services. &lt;a href="https://developers.cloudflare.com/workers/runtime-apis/bindings/" rel="noopener noreferrer"&gt;Bindings documentation&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cost structure also influences my choice, especially while experimenting with products that haven’t established predictable traffic.&lt;/p&gt;

&lt;p&gt;R2 is particularly appealing for projects involving images and downloadable files because it doesn’t charge egress bandwidth fees. Storage and operations still have costs, so I wouldn’t describe it as free hosting. But removing egress charges makes one part of the cost calculation simpler. &lt;a href="https://developers.cloudflare.com/r2/pricing/" rel="noopener noreferrer"&gt;R2 pricing&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The development workflow matters just as much as the hosting.&lt;/p&gt;

&lt;p&gt;Cloudflare’s tooling supports local development with the Workers runtime and local versions of services such as D1 and R2. That gives me a useful way to test application changes before deploying them. &lt;a href="https://developers.cloudflare.com/workers/local-development/" rel="noopener noreferrer"&gt;Local development documentation&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This also fits how I work with AI agents. A consistent stack gives the agent a clearer set of constraints: the runtime, database, storage interfaces, and deployment configuration are already decided. I can focus the task on a feature instead of reopening infrastructure decisions for every project.&lt;/p&gt;

&lt;p&gt;There’s still a review process. An agent can generate code that looks reasonable while assuming it’s running in a conventional Node.js server. Workers has its own runtime, and Node.js compatibility has boundaries. Dependencies and runtime behavior need checking. &lt;a href="https://developers.cloudflare.com/workers/runtime-apis/nodejs/" rel="noopener noreferrer"&gt;Node.js compatibility documentation&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Choosing Cloudflare also means accepting some dependence on its APIs and services. A different workload might justify a different platform. For my current projects, I’m comfortable with that tradeoff because having a familiar deployment setup helps me keep moving.&lt;/p&gt;

&lt;p&gt;Two products I’m building with this approach are &lt;strong&gt;Bikto&lt;/strong&gt; and &lt;strong&gt;AIGifsMaker&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://bikto.app/" rel="noopener noreferrer"&gt;Bikto&lt;/a&gt; manages short links, dynamic QR codes, and link-in-bio pages. You can update destinations after sharing a link or printing a QR code, then view click analytics. One product decision I care about is that cancelling a subscription shouldn’t disable the links people have already distributed.&lt;/p&gt;

&lt;p&gt;Bikto uses React and TanStack Start, with Cloudflare Workers, D1, and R2 underneath. It’s a practical example of the kind of full-stack web application I want to keep building.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://aigifsmaker.com/" rel="noopener noreferrer"&gt;AIGifsMaker&lt;/a&gt; creates GIFs from text prompts and photos, and also provides tools for converting videos and image sequences into GIFs. The video converter runs in the browser, which is a useful reminder that some work can happen on the user’s device without a server round trip.&lt;/p&gt;

&lt;p&gt;Both products use Cloudflare as their core application infrastructure, and I’m developing them with AI agents. Having a consistent foundation makes it easier to reuse what I’ve learned and spend more time on the parts specific to each product.&lt;/p&gt;

&lt;p&gt;You’re welcome to try either one. I’d particularly appreciate feedback on the actual workflows: creating and maintaining a link in Bikto, or making and downloading a GIF in AIGifsMaker.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>productivity</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
