<?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: jy H uang</title>
    <description>The latest articles on DEV Community by jy H uang (@jy_huang).</description>
    <link>https://dev.to/jy_huang</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%2F4145426%2F78db515f-0aad-4607-967f-0fdfa670487e.png</url>
      <title>DEV Community: jy H uang</title>
      <link>https://dev.to/jy_huang</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jy_huang"/>
    <language>en</language>
    <item>
      <title>How to deploy a website at a low cost? How to choose between Vercel and Cloudflare?</title>
      <dc:creator>jy H uang</dc:creator>
      <pubDate>Mon, 19 Oct 2026 02:49:05 +0000</pubDate>
      <link>https://dev.to/jy_huang/how-to-deploy-a-website-at-a-low-cost-how-to-choose-between-vercel-and-cloudflare-ib7</link>
      <guid>https://dev.to/jy_huang/how-to-deploy-a-website-at-a-low-cost-how-to-choose-between-vercel-and-cloudflare-ib7</guid>
      <description>&lt;p&gt;Here is an idiomatic, developer-to-developer English translation that strips out the generic "AI tone" and keeps the practical, conversational style of an indie hacker:&lt;/p&gt;




&lt;p&gt;It’s been just over a month since I officially kicked off my micro-SaaS tool project aimed at the global market.&lt;/p&gt;

&lt;p&gt;Aside from building out features, I've spent a fair amount of time wrestling with infrastructure. For solo founders, keeping hosting costs as close to zero as possible, picking the right serverless provider, and avoiding surprise four-figure cloud bills are all things you want to think through before writing code.&lt;/p&gt;

&lt;p&gt;Drawing from my own tech stack and real-world observations, here is a practical look at VPS vs. Serverless, why I lean toward Cloudflare over Vercel, and the best free-tier infrastructure available to bootstrapped devs today.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. VPS vs. Serverless: Which One for Indie Projects?
&lt;/h2&gt;

&lt;p&gt;When thinking about hosting, the classic developer playbook usually involves spinning up a VPS, installing a control panel (like aaPanel), setting up Nginx, configuring PM2 or systemd, and babysitting processes.&lt;/p&gt;

&lt;p&gt;It’s a battle-tested and flexible approach. But for an early-stage side project, self-hosting eats into your most limited resource: time and mental bandwidth.&lt;/p&gt;

&lt;p&gt;If your product is still in validation mode—low traffic, minimal background workloads—managed serverless platforms like Vercel or Cloudflare Workers should be your default.&lt;/p&gt;

&lt;p&gt;Here is how the two approaches compare side by side:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dimension&lt;/th&gt;
&lt;th&gt;VPS&lt;/th&gt;
&lt;th&gt;Serverless&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Ops Burden&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Manual setup, Nginx configs, process management, security patches&lt;/td&gt;
&lt;td&gt;Fully managed; you focus almost entirely on application code&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Scaling&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Manual vertical scaling, adding boxes, setting up load balancers&lt;/td&gt;
&lt;td&gt;Auto-scales instantly based on incoming traffic&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Pricing Model&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Fixed monthly/annual cost; you pay even when idling&lt;/td&gt;
&lt;td&gt;Pay-per-use (requests/compute/bandwidth); virtually free at low volume&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cold Starts&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None (persistent running processes)&lt;/td&gt;
&lt;td&gt;Possible depending on the runtime (e.g., Node container vs. V8 isolates)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;State &amp;amp; Storage&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Local filesystem, co-located SQLite/Postgres, Redis&lt;/td&gt;
&lt;td&gt;Stateless compute; requires managed DBs, KV stores, or S3-compatible object storage&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Execution Time&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Uncapped; great for long-running jobs and heavy background tasks&lt;/td&gt;
&lt;td&gt;Strict CPU and execution timeouts per request&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Runtime &amp;amp; Libs&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Full root access; install whatever OS packages or binaries you want&lt;/td&gt;
&lt;td&gt;Bound to supported runtimes, sandboxes, and platform-specific APIs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Networking&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Static public IPs, direct SSH, unrestricted outbound connections&lt;/td&gt;
&lt;td&gt;Dynamic egress IPs; static IPs or custom VPC networking often cost extra&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cost Curve&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Predictable flat fees; cheaper at steady, high traffic&lt;/td&gt;
&lt;td&gt;Dirt-cheap early on, but can spike fast with unoptimized loops or bandwidth spikes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;For anyone starting out solo, I strongly recommend going &lt;strong&gt;Serverless first&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Developer time is your most expensive asset. Instead of spending your weekends configuring firewalls and updating OS packages, focus on shipping, talking to users, and finding product-market fit. Once you have sustainable traffic and clear infrastructure demands, you can always migrate.&lt;/p&gt;

&lt;p&gt;Of course, serverless has hard limits. If your app needs persistent worker daemons, heavy audio/video transcoding, CPU-intensive background jobs, or custom native binaries, a VPS, container host (like Railway or Fly.io), or a dedicated job queue will be a much better fit.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Serverless Footguns to Watch Out For
&lt;/h2&gt;

&lt;p&gt;Serverless makes deployment trivial, but the runtime environments vary significantly across platforms.&lt;/p&gt;

&lt;p&gt;Take Vercel and Cloudflare Workers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Vercel Functions&lt;/strong&gt; run in a standard Node.js environment, but still impose limits on execution time, memory, CPU, and payload sizes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cloudflare Workers&lt;/strong&gt; run on lightweight V8 isolates. They use their own Web Standards runtime APIs and rely on a compatibility layer to emulate a subset of Node.js.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In practice, code that runs fine locally in Node might crash immediately when pushed to Cloudflare Workers. Anything relying on native C++ bindings, child processes, direct filesystem access, or unsupported Node built-ins will bite you.&lt;/p&gt;

&lt;p&gt;If you plan on using Cloudflare Workers, skim these docs first:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://developers.cloudflare.com/workers/runtime-apis/nodejs" rel="noopener noreferrer"&gt;Node.js compatibility&lt;/a&gt;: Which Node APIs actually work.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://developers.cloudflare.com/workers/configuration/compatibility-flags/" rel="noopener noreferrer"&gt;Compatibility flags&lt;/a&gt;: How to toggle flags like &lt;code&gt;nodejs_compat&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://developers.cloudflare.com/workers/runtime-apis/" rel="noopener noreferrer"&gt;Workers Runtime APIs&lt;/a&gt;: Cloudflare's native primitives (Fetch, Web Crypto, Caching, etc.).&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://developers.cloudflare.com/durable-objects/" rel="noopener noreferrer"&gt;Durable Objects&lt;/a&gt;: For coordination and stateful edge compute.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You don't need to memorize every quirk. Instead, add these platform constraints directly into your project’s &lt;code&gt;AGENTS.md&lt;/code&gt; (or AI system prompts / rules). That way, coding assistants like Cursor won't generate code incompatible with your runtime.&lt;/p&gt;

&lt;p&gt;A few practical rules to bake in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Target deployment: Cloudflare Workers (V8 isolate runtime, not full Node.js).&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Stick to Web Standard APIs and verified isolate-compatible packages.&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Always verify compatibility before introducing Node built-ins, filesystem calls, or native modules.&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Check CPU execution limits and timeouts before writing asynchronous or background tasks.&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Run a build and dry-run smoke test immediately after changing deployment configs.&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Having these boundaries explicitly written down eliminates hours of debugging hallucinated, incompatible code generated by LLMs.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Dodging the "Surprise Serverless Bill"
&lt;/h2&gt;

&lt;p&gt;A viral post recently surfaced showing a developer getting hit with a massive cloud bill out of nowhere:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://x.com/shmily7/status/2107481028726251762" rel="noopener noreferrer"&gt;https://x.com/shmily7/status/2107481028726251762&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Other seasoned devs have shared similar horror stories and preventative tips:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://x.com/mcwangcn/status/2104926120457953565" rel="noopener noreferrer"&gt;https://x.com/mcwangcn/status/2104926120457953565&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With "Vibe Coding" becoming second nature, one overlooked risk is that &lt;strong&gt;AI often writes broken polling, retry, or recursive logic&lt;/strong&gt;. Left unchecked, this can hammer your endpoints endlessly and burn through your compute quotas and API credits before you notice.&lt;/p&gt;

&lt;p&gt;Common culprits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;setInterval&lt;/code&gt; polling an API indefinitely without an exit condition.&lt;/li&gt;
&lt;li&gt;Retrying failed requests instantly with no exponential backoff or retry caps.&lt;/li&gt;
&lt;li&gt;React components re-mounting repeatedly, spawning duplicate polling loops in the background.&lt;/li&gt;
&lt;li&gt;Webhook failures triggering infinite retry cascades.&lt;/li&gt;
&lt;li&gt;Background workers getting stuck processing the same payload in a loop.&lt;/li&gt;
&lt;li&gt;Aggressive client-side polling that stays active even after users switch tabs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Individually, these look minor. But when paired with pay-per-request pricing, a bit of traffic, or upstream AI API costs, your bill can spiral very fast.&lt;/p&gt;

&lt;p&gt;Here is my pre-launch checklist to keep bills under control:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Have AI Audit Your Loops and Workflows
&lt;/h3&gt;

&lt;p&gt;Don't just ask the AI to implement the feature—explicitly ask it to look for edge cases in retries, recursion, loops, and background tasks. Verify that every poll has a teardown, every retry has backoff and limits, and requests are properly debounced.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Set Up Hard Budget Alerts
&lt;/h3&gt;

&lt;p&gt;Configure spending alerts across your cloud hosts, managed databases, object stores, and third-party AI providers. Keep in mind that many platforms only &lt;em&gt;notify&lt;/em&gt; you when a budget is crossed rather than cutting off the service. Alerts alone won't save you if your logic goes into an infinite loop overnight.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Track Usage Metrics, Not Just Vanity Traffic
&lt;/h3&gt;

&lt;p&gt;Keep an eye on actual operational metrics: CPU execution time, function invocations, bandwidth egress, database row reads/writes, and storage operations. If you see a spike out of proportion with visitor growth, track down the offending endpoint immediately.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Have an Exit Plan Ready
&lt;/h3&gt;

&lt;p&gt;If your traffic takes off to the point where serverless unit economics stop making sense, or you outgrow runtime constraints, be ready to migrate to a VPS or container setup.&lt;/p&gt;

&lt;p&gt;With AI tools, refactoring deployment pipelines and writing migration scripts is faster than ever. But you still need to test thoroughly—especially around database connections, file uploads, cron jobs, environment variables, and webhook handlers.&lt;/p&gt;

&lt;p&gt;The goal of frugal infrastructure isn't just cutting costs today—it’s making sure your resource usage scales predictably with your actual business.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Vercel vs. Cloudflare: Why I Lean Toward Cloudflare
&lt;/h2&gt;

&lt;p&gt;Many developers spin up a Next.js template by default and deploy it straight to Vercel. It’s convenient, frictionless, and great for getting started.&lt;/p&gt;

&lt;p&gt;Personally, though, I've grown weary of both the Next.js developer experience and Vercel’s vendor lock-in.&lt;/p&gt;

&lt;p&gt;If you're curious about this perspective, this post breaks down the vendor dynamics well:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://elliothu.me/blog/zh/hypocritical-vercel" rel="noopener noreferrer"&gt;The Hypocrisy of Vercel&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;My preferred stack today is &lt;strong&gt;TanStack Start&lt;/strong&gt;, built on top of Vite. Now that TanStack Start has hit 1.0, the developer experience feels so much cleaner and lighter.&lt;/p&gt;

&lt;p&gt;Anyone who has worked on a non-trivial project with Next.js knows the pain of the dev server crawling and devouring all your RAM. No matter how powerful your laptop is, it somehow finds a way to peg your memory. The community has brought this up for years, and while recent releases mention improvements, I honestly have zero desire to go back.&lt;/p&gt;

&lt;p&gt;Here is a quick look at how the free tiers compare:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(Note: Quotas are based on current official documentation as a general point of reference. Platform limits change over time, so always verify on their official pricing pages before committing.)&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  4.1 Vercel Hobby (Free Tier)
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Resource&lt;/th&gt;
&lt;th&gt;Allowance Reference&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Fast Data Transfer (CDN Egress)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;100 GB/month&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Fast Origin Transfer&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;10 GB/month&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Function Invocations&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;1,000,000 requests/month&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Active CPU Time&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;4 hours/month&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Provisioned Memory&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;360 GB-hours/month&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Image Optimization&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;5,000 source images/month&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Edge Image Caching (Read/Write)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;300K / 100K ops/month&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Build Limits&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Max 45 mins/deployment; up to 100 deployments/day&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Function Specs&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Up to 2 GB memory / 1 vCPU; up to 300s timeout (depending on config)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Vercel shines with its Next.js ergonomics, preview environments, and seamless Git workflow.&lt;/p&gt;

&lt;p&gt;However, for solo builders, it’s not just the 1M invocation cap you need to monitor—active CPU time, origin egress, and image optimization overages can trigger charges unexpectedly even if you think you're well within the free tier.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Docs: &lt;a href="https://vercel.com/pricing" rel="noopener noreferrer"&gt;Vercel Pricing&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  4.2 Cloudflare (Free Tier)
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Resource&lt;/th&gt;
&lt;th&gt;Allowance Reference&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Workers Invocations&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;100,000 requests/day (~3M requests/month)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CPU Time&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;10 ms per invocation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Static Assets (Workers Assets)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Free and unmetered (per platform guidelines)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;KV Storage&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;100,000 reads/day; 1 GB storage&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;D1 Database&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Daily read/write row quotas apply; storage included per plan rules&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Durable Objects&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Free request/compute allowances available depending on storage setup&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;R2 Object Storage&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;10 GB storage; 1M Class A ops/mo; 10M Class B ops/mo; &lt;strong&gt;Zero egress fees&lt;/strong&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Hyperdrive&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Free query pooling tiers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Queues&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Free monthly message operation limits&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Cloudflare’s biggest advantage is the breadth of its ecosystem. Beyond compute (Workers), you get out-of-the-box object storage, databases, edge key-value stores, and message queues on a unified global edge.&lt;/p&gt;

&lt;p&gt;R2 in particular is a game-changer for media-heavy tool sites. Free egress means you aren't penalized simply because users are downloading audio, video, or image assets from your storage.&lt;/p&gt;

&lt;p&gt;One caveat: Cloudflare manages products under separate billing line items. A generous free tier on Workers doesn't automatically mean unlimited DB or KV usage. Track your CPU time, operations, and row limits independently.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Docs:&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://developers.cloudflare.com/workers/platform/pricing/" rel="noopener noreferrer"&gt;Cloudflare Workers Pricing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.cloudflare.com/r2/pricing/" rel="noopener noreferrer"&gt;Cloudflare R2 Pricing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.cloudflare.com/plans/" rel="noopener noreferrer"&gt;Cloudflare Plans&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  5. Beyond Hosting: Essential Free Tools
&lt;/h2&gt;

&lt;p&gt;Hosting is only half the battle. Several third-party services offer generous free tiers that allow indie hackers to build a solid operational foundation on day one:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Core Use Case&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://sentry.io/" rel="noopener noreferrer"&gt;Sentry&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Exception monitoring, error stack traces, and performance bottlenecks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://analytics.google.com/" rel="noopener noreferrer"&gt;Google Analytics 4&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Traffic sources, user acquisition, and conversion funnels&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://clarity.microsoft.com/" rel="noopener noreferrer"&gt;Microsoft Clarity&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Free session replay, heatmaps, and UX interaction tracking&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;For a newly launched tool site, here is the order I recommend integrating them:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Error Tracking&lt;/strong&gt;: Catch runtime crashes before users bother reporting them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Product Analytics&lt;/strong&gt;: Understand traffic sources, drop-offs, and which features actually get used.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Billing Alerts&lt;/strong&gt;: Watch third-party AI APIs and compute limits like a hawk.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CI/CD Automation&lt;/strong&gt;: Use GitHub Actions so deploying updates is a simple &lt;code&gt;git push&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You don’t need to set all of these up on day one. Hook up the pieces that directly safeguard stability and inform product decisions first, then layer on the rest as you grow.&lt;/p&gt;




&lt;h2&gt;
  
  
  6. Wrap-up: My Reusable SaaS Starter
&lt;/h2&gt;

&lt;p&gt;Every time you kick off a new project, setting up the same plumbing—auth, error tracking, analytics, styling, and deployments—gets tedious.&lt;/p&gt;

&lt;p&gt;To cut down on boilerplate fatigue, I packaged my go-to setup into an open-source starter repo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/LLmoskk/saas-starter" rel="noopener noreferrer"&gt;LLmoskk/saas-starter&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It reflects the stack I personally enjoy building with, and serves as a clean starting point for quick turnaround MVPs. You can easily clone it and have an AI agent adapt it to your preferred services.&lt;/p&gt;

&lt;p&gt;Every solo developer eventually benefits from having their own starter kit. Standardizing the repetitive grunt work early frees up your time to focus on the only thing that actually matters: &lt;strong&gt;building a product people want.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>serverless</category>
      <category>vercel</category>
      <category>vps</category>
      <category>fullstack</category>
    </item>
    <item>
      <title>Building My First Global SaaS Tool from Scratch</title>
      <dc:creator>jy H uang</dc:creator>
      <pubDate>Sun, 27 Sep 2026 11:41:50 +0000</pubDate>
      <link>https://dev.to/jy_huang/building-my-first-global-saas-tool-from-scratch-2lef</link>
      <guid>https://dev.to/jy_huang/building-my-first-global-saas-tool-from-scratch-2lef</guid>
      <description>&lt;p&gt;After some encouragement from my colleagues, I finally decided to build my own SaaS tool for the global market.&lt;/p&gt;

&lt;p&gt;On September 8, I got a Mastercard that supports international payments. Right after that, I bought a domain, initialized the project, and started building.&lt;/p&gt;

&lt;p&gt;The first version went live on day one.&lt;/p&gt;

&lt;p&gt;As soon as it was deployed, I submitted the site to &lt;code&gt;Google Search Console (GSC)&lt;/code&gt; and &lt;code&gt;Bing Webmaster Tools&lt;/code&gt;, hoping to get it crawled and indexed as early as possible.&lt;/p&gt;

&lt;p&gt;This post is a record of that process: choosing a domain, setting up the stack, deploying the product, working with AI coding tools, and figuring out a development workflow that works for a solo developer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Choosing a Domain
&lt;/h2&gt;

&lt;p&gt;I wanted to build a music-related utility site, so the first step was finding a suitable domain.&lt;/p&gt;

&lt;p&gt;After comparing registrars, I found that the same domain was cheaper on Spaceship than on Namecheap, so I went with Spaceship.&lt;/p&gt;

&lt;p&gt;I had read quite a few discussions about domain selection before starting. My main takeaways were:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;If your budget allows, &lt;code&gt;.com&lt;/code&gt; is usually the safest choice. &lt;code&gt;.ai&lt;/code&gt; and &lt;code&gt;.app&lt;/code&gt; are also worth considering.&lt;/li&gt;
&lt;li&gt;Keep the domain short and easy to remember. Ideally, include a keyword related to the product.&lt;/li&gt;
&lt;li&gt;Avoid hyphens, obscure English words, and random letter combinations whenever possible.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;One reason &lt;code&gt;.ai&lt;/code&gt; and &lt;code&gt;.app&lt;/code&gt; can work well is search behavior.&lt;/p&gt;

&lt;p&gt;People often search for phrases such as &lt;code&gt;xxx app&lt;/code&gt; or &lt;code&gt;xxx ai&lt;/code&gt;. If your domain naturally matches that intent, it can make the product easier to understand and remember.&lt;/p&gt;

&lt;p&gt;At this stage, though, I did not want to spend too much money on a domain.&lt;/p&gt;

&lt;p&gt;So I ended up buying:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;musictool.tools&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;It costs roughly €6 per year.&lt;/p&gt;

&lt;p&gt;Good enough for an early-stage experiment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Setting Up the Project
&lt;/h2&gt;

&lt;p&gt;For an SEO-driven product targeting international users, I prefer a stack that supports &lt;code&gt;Server-Side Rendering (SSR)&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The main reason is simple: search engines can receive relatively complete HTML directly, which reduces the amount of work required for crawling and indexing.&lt;/p&gt;

&lt;p&gt;Because of that, I did not want to build the site as a purely client-rendered SPA.&lt;/p&gt;

&lt;p&gt;This is also one of the reasons frameworks such as Next.js have become so popular among SEO-focused products.&lt;/p&gt;

&lt;p&gt;That said, I personally find the Next.js development experience a bit heavier than I would like, so I chose &lt;code&gt;TanStack Start (RC)&lt;/code&gt; instead.&lt;/p&gt;

&lt;p&gt;For project initialization, I used an open-source stack generator I had used before:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://better-t-stack.dev/" rel="noopener noreferrer"&gt;https://better-t-stack.dev/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once the initial scaffold was ready, I started adapting it to my own requirements with the help of AI.&lt;/p&gt;

&lt;p&gt;Here is the stack I ended up using.&lt;/p&gt;

&lt;h3&gt;
  
  
  Engineering and Tooling
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;th&gt;Technology&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Monorepo&lt;/td&gt;
&lt;td&gt;pnpm workspaces + Turborepo&lt;/td&gt;
&lt;td&gt;Multi-package management and parallel builds&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Language&lt;/td&gt;
&lt;td&gt;TypeScript&lt;/td&gt;
&lt;td&gt;End-to-end type safety&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Code Quality&lt;/td&gt;
&lt;td&gt;Oxlint + Oxfmt&lt;/td&gt;
&lt;td&gt;Linting and formatting&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Environment Variables&lt;/td&gt;
&lt;td&gt;@t3-oss/env-core + Zod&lt;/td&gt;
&lt;td&gt;Server and client env validation (&lt;code&gt;packages/env&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Frontend and Full-Stack Framework
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;th&gt;Technology&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Full-Stack Framework&lt;/td&gt;
&lt;td&gt;TanStack Start&lt;/td&gt;
&lt;td&gt;SSR, file-based routing, Server Functions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Routing&lt;/td&gt;
&lt;td&gt;TanStack Router&lt;/td&gt;
&lt;td&gt;Type-safe routing and SSR integration&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Build Tool&lt;/td&gt;
&lt;td&gt;Vite 8&lt;/td&gt;
&lt;td&gt;Development and production builds&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SSR Runtime&lt;/td&gt;
&lt;td&gt;Nitro&lt;/td&gt;
&lt;td&gt;Server-side rendering and Vercel deployment support&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;UI Library&lt;/td&gt;
&lt;td&gt;React&lt;/td&gt;
&lt;td&gt;Component-based UI&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;td&gt;Utility-first CSS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Component Library&lt;/td&gt;
&lt;td&gt;shadcn/ui (&lt;code&gt;packages/ui&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Shared UI primitives&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Icons&lt;/td&gt;
&lt;td&gt;lucide-react&lt;/td&gt;
&lt;td&gt;Consistent icon system&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Theme&lt;/td&gt;
&lt;td&gt;next-themes&lt;/td&gt;
&lt;td&gt;Dark mode&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Animation&lt;/td&gt;
&lt;td&gt;Motion&lt;/td&gt;
&lt;td&gt;Page and component animations&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Notifications&lt;/td&gt;
&lt;td&gt;Sonner&lt;/td&gt;
&lt;td&gt;Toast notifications&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Data and State Management
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;th&gt;Technology&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Server State&lt;/td&gt;
&lt;td&gt;TanStack Query&lt;/td&gt;
&lt;td&gt;Data fetching, caching, and SSR integration&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Client State&lt;/td&gt;
&lt;td&gt;Jotai&lt;/td&gt;
&lt;td&gt;Shared UI and session state&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Forms&lt;/td&gt;
&lt;td&gt;TanStack Form&lt;/td&gt;
&lt;td&gt;Form state and validation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;API Layer&lt;/td&gt;
&lt;td&gt;oRPC&lt;/td&gt;
&lt;td&gt;End-to-end type-safe RPC with OpenAPI integration&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ORM&lt;/td&gt;
&lt;td&gt;Drizzle&lt;/td&gt;
&lt;td&gt;TypeScript-first database access&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Database&lt;/td&gt;
&lt;td&gt;PostgreSQL&lt;/td&gt;
&lt;td&gt;Primary data storage&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Local Database&lt;/td&gt;
&lt;td&gt;Docker Compose&lt;/td&gt;
&lt;td&gt;Local PostgreSQL development environment&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Authentication and Internationalization
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;th&gt;Technology&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Authentication&lt;/td&gt;
&lt;td&gt;Better Auth&lt;/td&gt;
&lt;td&gt;Sessions, social login, and TanStack Start integration&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Login&lt;/td&gt;
&lt;td&gt;Google OAuth&lt;/td&gt;
&lt;td&gt;Third-party authentication&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Internationalization&lt;/td&gt;
&lt;td&gt;Paraglide JS + inlang&lt;/td&gt;
&lt;td&gt;Compile-time i18n and locale-based URLs for SEO&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  AI
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;th&gt;Technology&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;AI SDK&lt;/td&gt;
&lt;td&gt;Vercel AI SDK&lt;/td&gt;
&lt;td&gt;Streaming responses and Server Actions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Model Provider&lt;/td&gt;
&lt;td&gt;@ai-sdk/google&lt;/td&gt;
&lt;td&gt;Google model integration&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Infrastructure and Third-Party Services
&lt;/h3&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;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Vercel&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Hosting, CI/CD, and Serverless Functions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cloudflare&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Domain DNS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Google OAuth&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;User authentication&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Waffo Pancake&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Subscription payments and Webhooks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Resend&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Transactional email and user feedback&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cloudflare R2&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;S3-compatible object storage with presigned uploads&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Google Analytics 4&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Production traffic analytics&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Microsoft Clarity&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;User behavior analytics and session recordings&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Sentry&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Frontend and backend error monitoring&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Most of these services provide free tiers, which is more than enough for an early-stage solo project.&lt;/p&gt;

&lt;h3&gt;
  
  
  Payments
&lt;/h3&gt;

&lt;p&gt;For payments, I chose &lt;code&gt;Waffo&lt;/code&gt;, mainly because it is relatively friendly to independent developers.&lt;/p&gt;

&lt;p&gt;I discovered it somewhat randomly while browsing online.&lt;/p&gt;

&lt;p&gt;Stripe usually requires more preparation depending on where you are based, including considerations around business entities and banking.&lt;/p&gt;

&lt;p&gt;I have not opened a Hong Kong bank account yet, so Waffo was the more convenient option for me at this stage.&lt;/p&gt;

&lt;p&gt;The integration itself was straightforward.&lt;/p&gt;

&lt;p&gt;I followed the official documentation, gave the relevant docs, prompts, and Skills to the AI coding agent, and let it handle most of the implementation.&lt;/p&gt;

&lt;p&gt;If your setup allows it, Stripe is still worth evaluating based on your own business requirements.&lt;/p&gt;

&lt;h2&gt;
  
  
  Deploying the Product
&lt;/h2&gt;

&lt;p&gt;Launching a small SaaS product today is much easier than it used to be.&lt;/p&gt;

&lt;p&gt;Modern Serverless infrastructure is mature enough that lightweight SaaS tools often do not need a manually maintained server running 24/7.&lt;/p&gt;

&lt;p&gt;Platforms such as &lt;code&gt;Vercel&lt;/code&gt; and &lt;code&gt;Cloudflare&lt;/code&gt; can handle most of the infrastructure for you while scaling automatically when necessary.&lt;/p&gt;

&lt;p&gt;For this project, I connected the Git repository directly to Vercel.&lt;/p&gt;

&lt;p&gt;Every push automatically triggers a new build and deployment.&lt;/p&gt;

&lt;p&gt;There is almost nothing to manage manually.&lt;/p&gt;

&lt;p&gt;At the current stage, deployment costs are also close to zero.&lt;/p&gt;

&lt;p&gt;For object storage, I use &lt;code&gt;Cloudflare R2&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Its free tier is generous enough for the early stage of the project, so storage has not added any meaningful cost yet.&lt;/p&gt;

&lt;p&gt;The main expenses currently come from third-party APIs used by some features. Those require a small amount of prepaid credit, but the overall cost is still manageable.&lt;/p&gt;

&lt;p&gt;For solo developers, the infrastructure barrier to launching a project has become extremely low.&lt;/p&gt;

&lt;p&gt;You can build the first version almost entirely on free tiers.&lt;/p&gt;

&lt;p&gt;Once the product has real users and revenue, you can upgrade infrastructure based on actual usage instead of guessing in advance.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Development Process
&lt;/h2&gt;

&lt;p&gt;The initial infrastructure setup took roughly one day.&lt;/p&gt;

&lt;p&gt;After that, I moved on to actual feature development.&lt;/p&gt;

&lt;p&gt;If you are unfamiliar with the target market, I think it makes sense to start with an AI-assisted research phase.&lt;/p&gt;

&lt;p&gt;You can use AI Research tools to study competitors, identify common features, understand user expectations, and map out the basic product landscape.&lt;/p&gt;

&lt;p&gt;In my case, I already knew this domain fairly well and had a clear idea of what I wanted to build.&lt;/p&gt;

&lt;p&gt;So I went straight into &lt;code&gt;AI Coding&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;My development process has two main stages:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Design the feature.&lt;/li&gt;
&lt;li&gt;Break down the requirements and implement them.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Designing with AI
&lt;/h3&gt;

&lt;p&gt;For design work, I mainly use &lt;code&gt;Pen&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;After connecting it to DeepSeek and enabling x6, the overall design workflow became quite efficient.&lt;/p&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fm6jc6eqk37zyywm4fl2s.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fm6jc6eqk37zyywm4fl2s.png" alt="pen design" width="800" height="495"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  My AI Coding Workflow
&lt;/h3&gt;

&lt;p&gt;For implementation, I mainly use Matt's workflow.&lt;/p&gt;

&lt;p&gt;The process looks roughly like this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;/grill me&lt;/code&gt;&lt;br&gt;&lt;br&gt;
Discuss the requirements with AI in detail and clarify the implementation approach.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;/to-spec&lt;/code&gt;&lt;br&gt;&lt;br&gt;
Convert the discussion into a complete specification and high-level implementation plan.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;/to-tickets&lt;/code&gt;&lt;br&gt;&lt;br&gt;
Break the plan into smaller tasks that can be implemented independently.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;/implement-spec&lt;/code&gt;&lt;br&gt;&lt;br&gt;
Implement the feature step by step based on those tasks.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;/code-review&lt;/code&gt;&lt;br&gt;&lt;br&gt;
Ask AI to review the implementation, then do a final manual review myself.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I have found this workflow surprisingly comfortable.&lt;/p&gt;

&lt;p&gt;It reduces the amount of improvisation during implementation and gives the coding agent much clearer boundaries.&lt;/p&gt;

&lt;h2&gt;
  
  
  Letting &lt;code&gt;AGENTS.md&lt;/code&gt; Accumulate Project Knowledge
&lt;/h2&gt;

&lt;p&gt;One practice that has worked particularly well for me is asking AI to record mistakes, corrections, and project-specific rules in &lt;code&gt;AGENTS.md&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Whenever something goes wrong, I try to convert that mistake into a reusable rule.&lt;/p&gt;

&lt;p&gt;That gives future coding sessions access to the context accumulated from previous work.&lt;/p&gt;

&lt;p&gt;Over time, the project starts developing its own operating manual.&lt;/p&gt;

&lt;p&gt;This helps reduce repeated mistakes and makes future implementation more consistent.&lt;/p&gt;

&lt;p&gt;The process becomes a kind of feedback loop:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Build → Find problems → Update rules → Build again&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;As the project's &lt;code&gt;Harness&lt;/code&gt; becomes more complete, AI-assisted development also becomes much smoother.&lt;/p&gt;

&lt;p&gt;For features that resemble something already implemented, a clear requirement and good task decomposition are often enough for the AI agent to handle most of the work.&lt;/p&gt;

&lt;p&gt;I still review the result at the end.&lt;/p&gt;

&lt;p&gt;Fully autonomous coding without verification is not something I am comfortable with yet.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Token Problem
&lt;/h2&gt;

&lt;p&gt;The biggest frustration during development has actually been Token limits.&lt;/p&gt;

&lt;p&gt;I started with Cursor's $20 monthly plan.&lt;/p&gt;

&lt;p&gt;I burned through the quota in roughly four days, mostly while using Grok.&lt;/p&gt;

&lt;p&gt;After that, I switched to the $20 Codex plan.&lt;/p&gt;

&lt;p&gt;The overall experience was decent, but I frequently had to wait around five hours for the usage quota to reset.&lt;/p&gt;

&lt;p&gt;That interrupted the development flow more often than I expected.&lt;/p&gt;

&lt;p&gt;I also used Tibo after its quota reset, but that still was not enough.&lt;/p&gt;

&lt;p&gt;Later, Z Code gave users a huge Token allowance, on the order of hundreds of millions of Tokens.&lt;/p&gt;

&lt;p&gt;There has been some controversy around it recently, but by then I had already used it extensively.&lt;/p&gt;

&lt;p&gt;Eventually, I adjusted my workflow.&lt;/p&gt;

&lt;p&gt;The current version looks like this:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use GPT 5.6 or GPT 6 for requirement analysis, architecture, and task decomposition. Then hand clearly defined implementation tasks to lower-cost models such as GLM.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;At first, I was skeptical about this setup.&lt;/p&gt;

&lt;p&gt;I assumed that anything even moderately complex should be implemented by the strongest available model.&lt;/p&gt;

&lt;p&gt;After trying it in practice, my view changed.&lt;/p&gt;

&lt;p&gt;If the architecture has already been thought through and the tasks are broken into sufficiently small units, models such as GLM can handle a surprisingly large amount of real implementation work.&lt;/p&gt;

&lt;p&gt;They perform especially well when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The task boundaries are clear.&lt;/li&gt;
&lt;li&gt;The expected behavior is explicit.&lt;/li&gt;
&lt;li&gt;The implementation path is already defined.&lt;/li&gt;
&lt;li&gt;The relevant project context is available.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For this type of task, the output is often good enough for my needs.&lt;/p&gt;

&lt;p&gt;After eventually exhausting my Z Code quota as well, I subscribed to Command Code's $10 plan and started using &lt;code&gt;DeepSeek 4.1 Flash&lt;/code&gt; more often.&lt;/p&gt;

&lt;p&gt;Among Chinese models, the ones I currently find most practical for coding are GLM and DeepSeek.&lt;/p&gt;

&lt;p&gt;They occasionally enter what I jokingly call "thunderous deep-thinking mode" and spend far too long reasoning about a very simple problem.&lt;/p&gt;

&lt;p&gt;Still, their coding ability is already quite solid.&lt;/p&gt;

&lt;p&gt;One small lesson from my own usage:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Start with the reasoning level set to "High." Unless the task is genuinely difficult, there is usually little reason to leave it on "Extra High" all the time.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Expensive Models Do Not Need to Do Everything
&lt;/h2&gt;

&lt;p&gt;One of the biggest changes in my AI coding workflow has been realizing that the most expensive model does not need to handle every task.&lt;/p&gt;

&lt;p&gt;A stronger model can focus on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Requirement analysis&lt;/li&gt;
&lt;li&gt;Architecture&lt;/li&gt;
&lt;li&gt;Technical design&lt;/li&gt;
&lt;li&gt;Edge cases&lt;/li&gt;
&lt;li&gt;Task decomposition&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then a lower-cost model can handle:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CRUD implementation&lt;/li&gt;
&lt;li&gt;UI adjustments&lt;/li&gt;
&lt;li&gt;API wiring&lt;/li&gt;
&lt;li&gt;Repetitive refactoring&lt;/li&gt;
&lt;li&gt;Well-defined feature work&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This creates a fairly practical division of labor.&lt;/p&gt;

&lt;p&gt;You get the reasoning quality of stronger models where it matters most, while keeping Token costs under control during implementation.&lt;/p&gt;

&lt;p&gt;For a solo developer, that balance can make a significant difference.&lt;/p&gt;

&lt;h2&gt;
  
  
  Learning SEO Along the Way
&lt;/h2&gt;

&lt;p&gt;Recently, I have also been spending more time learning SEO.&lt;/p&gt;

&lt;p&gt;Before building this project, my understanding of SEO was fairly shallow.&lt;/p&gt;

&lt;p&gt;I assumed that semantic HTML, good page titles, and a clean page structure covered most of the important work.&lt;/p&gt;

&lt;p&gt;Once I actually started building a global tool site, I realized there is much more to it.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Keyword research with tools such as &lt;code&gt;SEMrush&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Search volume analysis&lt;/li&gt;
&lt;li&gt;Keyword difficulty analysis&lt;/li&gt;
&lt;li&gt;Site architecture planning&lt;/li&gt;
&lt;li&gt;Core keyword optimization&lt;/li&gt;
&lt;li&gt;Long-tail keyword targeting&lt;/li&gt;
&lt;li&gt;Content planning&lt;/li&gt;
&lt;li&gt;Continuous page optimization&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ultimately, all of this has the same goal:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Increase the site's visibility in search engines.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When someone searches for a problem related to your product, you want your site to appear as high as possible in the results.&lt;/p&gt;

&lt;p&gt;That gives you a chance to turn search traffic into:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Search → Click → Visit → Sign up → Use → Pay&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;I am still very early in this process, so I am learning as I go.&lt;/p&gt;

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

&lt;p&gt;That is where the project stands for now.&lt;/p&gt;

&lt;p&gt;My main goal with this post was to document what it looks like to start building a global SaaS tool from scratch as a solo developer.&lt;/p&gt;

&lt;p&gt;The infrastructure is cheap.&lt;/p&gt;

&lt;p&gt;Deployment is easy.&lt;/p&gt;

&lt;p&gt;AI can already take over a meaningful amount of implementation work.&lt;/p&gt;

&lt;p&gt;The harder part is gradually building a workflow that makes all of those tools work together reliably.&lt;/p&gt;

&lt;p&gt;For me, that currently means:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Research → Design → Spec → Tickets → Implement → Review → Update AGENTS.md → Repeat&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;I am still learning, especially when it comes to SEO, distribution, and turning the project into something that consistently attracts users.&lt;/p&gt;

&lt;p&gt;If I discover anything useful along the way, I will keep sharing what I learn.&lt;/p&gt;

&lt;p&gt;Try it&lt;br&gt;
Free account with starter credits, no card required: &lt;a href="https://musictool.tools" rel="noopener noreferrer"&gt;musictool.tools&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Welcome to give me feedback on any suggestions for improving the website.👏&lt;/p&gt;

</description>
      <category>buildinpublic</category>
      <category>saas</category>
      <category>startup</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
