<?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: Amaan Shaikh</title>
    <description>The latest articles on DEV Community by Amaan Shaikh (@amn_shk___).</description>
    <link>https://dev.to/amn_shk___</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%2F2682182%2F73173e00-9e93-41c8-8985-1e60e72fbc72.jpg</url>
      <title>DEV Community: Amaan Shaikh</title>
      <link>https://dev.to/amn_shk___</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/amn_shk___"/>
    <language>en</language>
    <item>
      <title>Why I Moved Us Off Vercel, Railway, and Appwrite Cloud — Onto Our Own Infrastructure</title>
      <dc:creator>Amaan Shaikh</dc:creator>
      <pubDate>Mon, 31 Aug 2026 16:25:52 +0000</pubDate>
      <link>https://dev.to/amn_shk___/why-i-moved-us-off-vercel-railway-and-appwrite-cloud-onto-our-own-infrastructure-1k72</link>
      <guid>https://dev.to/amn_shk___/why-i-moved-us-off-vercel-railway-and-appwrite-cloud-onto-our-own-infrastructure-1k72</guid>
      <description>&lt;h1&gt;
  
  
  Why I Moved Us Off Vercel, Railway, and Appwrite Cloud — Onto Our Own Infrastructure
&lt;/h1&gt;

&lt;p&gt;Nobody asked me to do this. I want that on the record before anyone assumes there was a memo. There wasn't. I looked at our stack, did some deeply ungentlemanly math on our monthly bill, and decided that if nobody else was going to fix it, I would — quietly, competently, and with slightly too much enthusiasm for firewall rules.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem
&lt;/h2&gt;

&lt;p&gt;Three platforms. Three dashboards. Three separate ways for the internet to remind me that convenience has a subscription fee.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cost.&lt;/strong&gt; Vercel at $20/mo, Railway at $15/mo, Appwrite Cloud at $25/mo — $60/mo, and it only goes one direction as usage grows.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Limits.&lt;/strong&gt; We were bumping into edge and bandwidth caps on Vercel. Real estate listings live or die on image quality, so Asasika's media is heavy by design, not by accident. I wasn't about to compress our listings into looking like they were shot on a flip phone just to fit inside a plan tier.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dependency.&lt;/strong&gt; Three billing relationships, three sets of rules I didn't write and couldn't negotiate.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The bandwidth pressure knocked on the door. The cost is what actually let itself in.&lt;/p&gt;

&lt;h2&gt;
  
  
  The decision
&lt;/h2&gt;

&lt;p&gt;Move it all onto infrastructure we own: a Hetzner VPS, orchestrated with Coolify, running self-hosted Appwrite, with Cloudflare handling the edge and standing guard on security. One server, one bill, zero platforms telling me what I'm allowed to build.&lt;/p&gt;

&lt;h2&gt;
  
  
  What moved
&lt;/h2&gt;

&lt;p&gt;Not a toy project. Real production, real stakes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Asasika's real estate database and frontend&lt;/li&gt;
&lt;li&gt;FatPanda Media's website&lt;/li&gt;
&lt;li&gt;Lead automation for Asasika, FatPanda, and our client Wujha&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If this had gone sideways, it wouldn't have been a GitHub issue — it would've been a very uncomfortable phone call. So it didn't go sideways.&lt;/p&gt;

&lt;h2&gt;
  
  
  The stack
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hetzner CX33 VPS&lt;/strong&gt; — 8.99 GBP/mo (about $12)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Coolify (LTS)&lt;/strong&gt; for orchestration and deployment&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Appwrite, self-hosted (LTS)&lt;/strong&gt; as the backend&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cloudflare&lt;/strong&gt;, doing double duty on edge and security:

&lt;ul&gt;
&lt;li&gt;SSH key auth — passwords need not apply&lt;/li&gt;
&lt;li&gt;Firewall locked down to Coolify's IP on its port, and nothing else gets a seat at the table&lt;/li&gt;
&lt;li&gt;Cloudflare Zero Trust guarding both the Coolify dashboard and server SSH&lt;/li&gt;
&lt;li&gt;DNS fully managed through Cloudflare&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Self-hosting without locking it down properly isn't independence, it's just a more expensive way to get hacked. The security layer mattered to me as much as the savings.&lt;/p&gt;

&lt;h2&gt;
  
  
  How it went
&lt;/h2&gt;

&lt;p&gt;Three to four days. Zero downtime — and I'd like a moment of recognition for that, because "zero downtime" is doing a lot of quiet, unglamorous work in that sentence.&lt;/p&gt;

&lt;p&gt;The method: get each service fully running on the new VPS &lt;em&gt;first&lt;/em&gt;, in parallel with the live version, then cut over — never migrate in place and pray. Order mattered too: Asasika's Appwrite backend first, since it was the most urgent and had the most to lose, then its frontend, then FatPanda, then lead automation last, once the pattern had proven itself trustworthy.&lt;/p&gt;

&lt;p&gt;It wasn't friction-free — a round of Docker failures, some firewall trial-and-error, the usual small tax you pay for standing up new infrastructure. The one genuine puzzle: legacy code on the Asasika side referenced storage objects by ID instead of URL, which meant the tidy, textbook migration path politely refused to work. Sorted it — but that's the kind of landmine you only find by actually doing the migration, not by reading the docs and nodding along.&lt;/p&gt;

&lt;h2&gt;
  
  
  The plot twist
&lt;/h2&gt;

&lt;p&gt;The technical side, if I'm honest, went easier than I expected. The actual bottleneck wasn't Docker, or DNS, or my own questionable life choices. It was &lt;em&gt;demand&lt;/em&gt;. The Hetzner VPS model I wanted was popular enough that I had to set up an availability alert just to get one — apparently I wasn't the only builder with this exact idea this week.&lt;/p&gt;

&lt;h2&gt;
  
  
  The result
&lt;/h2&gt;

&lt;p&gt;Roughly an 80% cut in infrastructure cost — from $60/mo to about $12/mo — plus full control over limits, security, and architecture that used to belong to somebody else's platform.&lt;/p&gt;

&lt;p&gt;But the number isn't really the headline. The headline is that nobody put this on my to-do list. Good builders don't wait for a budget review to notice the bleeding — they go find it, and they stop it, ideally before anyone else even opens the invoice.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;I'm writing up the full walkthrough of this setup — Coolify and self-hosted Appwrite on Hetzner, every step, including the parts that broke. If you're considering the same move, that guide is next.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>devops</category>
    </item>
  </channel>
</rss>
