<?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: tienbuilds</title>
    <description>The latest articles on DEV Community by tienbuilds (@tienbuilds).</description>
    <link>https://dev.to/tienbuilds</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%2F4009727%2Fd1b6dc36-f3b4-418a-a53f-3d4f5fbcc2fe.png</url>
      <title>DEV Community: tienbuilds</title>
      <link>https://dev.to/tienbuilds</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/tienbuilds"/>
    <language>en</language>
    <item>
      <title>10 Side Projects for $13/month: A Tour of PocketBase Cloud</title>
      <dc:creator>tienbuilds</dc:creator>
      <pubDate>Thu, 16 Jul 2026 05:43:20 +0000</pubDate>
      <link>https://dev.to/tienbuilds/10-side-projects-for-13month-a-tour-of-pocketbase-cloud-42</link>
      <guid>https://dev.to/tienbuilds/10-side-projects-for-13month-a-tour-of-pocketbase-cloud-42</guid>
      <description>&lt;p&gt;Every indie developer I know has the same problem. It's not ideas. It's not code. It's the &lt;strong&gt;$10/month × 12 half-finished projects&lt;/strong&gt; problem.&lt;/p&gt;

&lt;p&gt;Most backend platforms charge &lt;strong&gt;per project&lt;/strong&gt;. Each one needs its own compute instance, its own bill. So your dead side project from last March is still quietly charging you rent. At some point you stop starting new things — not because you ran out of ideas, but because you ran out of budget for ideas.&lt;/p&gt;

&lt;p&gt;I built &lt;strong&gt;&lt;a href="https://pocketbasecloud.com" rel="noopener noreferrer"&gt;PocketBase Cloud&lt;/a&gt;&lt;/strong&gt; to break that math. Here's a tour of what it does and the reasoning behind each piece.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. You pay for a server, not per project
&lt;/h2&gt;

&lt;p&gt;This is the whole thesis, so let's start here.&lt;/p&gt;

&lt;p&gt;On the &lt;strong&gt;Pro plan&lt;/strong&gt;, you rent a dedicated server (from ~$13/month for 2 cores / 4 GB) and run &lt;strong&gt;as many PocketBase instances on it as you want&lt;/strong&gt;. Each one is fully isolated — own database, own credentials, own URL. Since PocketBase is a ~15 MB binary, a 2-core box comfortably hosts around &lt;strong&gt;10 instances&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Run the numbers against a per-project platform:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Projects&lt;/th&gt;
&lt;th&gt;PocketBase Cloud&lt;/th&gt;
&lt;th&gt;Per-project pricing (e.g. Supabase)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;$5/mo (Starter)&lt;/td&gt;
&lt;td&gt;$25/mo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;$11/mo (Starter + add-ons)&lt;/td&gt;
&lt;td&gt;~$45/mo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;~$13/mo&lt;/strong&gt; (one Pro server)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~$115/mo&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Ten projects for roughly the price of one. Your costs stay flat while your project count multiplies — which, if you're an agency doing per-client deployments or an indie hacker with a graveyard of experiments, is the only line on this page that matters.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Deploy in 30 seconds, zero server config
&lt;/h2&gt;

&lt;p&gt;Click deploy, pick a region, and ~30 seconds later you have a live PocketBase instance with a URL and a working admin dashboard. No VPS provisioning, no nginx, no certbot, no systemd unit files.&lt;/p&gt;

&lt;p&gt;The pitch is boring on purpose: the backend should be the part you &lt;em&gt;don't&lt;/em&gt; think about.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Real-time works out of the box
&lt;/h2&gt;

&lt;p&gt;PocketBase streams record changes over &lt;strong&gt;Server-Sent Events&lt;/strong&gt;, and subscriptions respect your API rules automatically. No extra infrastructure, no separate realtime service to wire up:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;pb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;collection&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;messages&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;subscribe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;*&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;action&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;create&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nf"&gt;addMessage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;record&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's the entire realtime setup. SSE also passes cleanly through ordinary HTTPS proxies — no special WebSocket infrastructure required. And it scales further than the lightweight design suggests: a single instance on 2 cores / 4 GB handles &lt;strong&gt;1,000+ concurrent realtime connections&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Security you don't configure
&lt;/h2&gt;

&lt;p&gt;Every instance gets &lt;strong&gt;automatic SSL certificates, localized firewall rules, DDoS protection, and automated backups&lt;/strong&gt; — set up for you, not documented for you to set up.&lt;/p&gt;

&lt;p&gt;I'm specifically proud of the backups. Self-hosting PocketBase is famously easy right up until the day you realize you never actually tested your restore path.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Frontend hosting is included
&lt;/h2&gt;

&lt;p&gt;Static site hosting ships on &lt;strong&gt;every plan&lt;/strong&gt; — 5 frontends on Free and Starter, unlimited on Pro.&lt;/p&gt;

&lt;p&gt;Most backend platforms don't host frontends at all, which means pairing them with Vercel or Netlify: another dashboard, another bill, another free tier with its own limits, and CORS config between them. Here your frontend, database, and backend live in one project, on one bill.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Full backends, not just functions (Pro)
&lt;/h2&gt;

&lt;p&gt;JavaScript &lt;strong&gt;hooks are included on every plan&lt;/strong&gt; — custom API routes, record event handlers, cron jobs, outbound HTTP calls — running inside your instance right next to your data. Critically: &lt;strong&gt;no invocation billing&lt;/strong&gt;. A hook that fires a million times costs exactly the same as one that fires once. Compare that to per-invocation edge function pricing, where your costs scale with your traffic.&lt;/p&gt;

&lt;p&gt;And when a workload outgrows hooks — long-running jobs, websockets, heavy dependencies, a full Next.js app — Pro runs &lt;strong&gt;full backend containers (Node.js, Deno, Bun, Next.js)&lt;/strong&gt; on your dedicated server at the server's flat price. No per-request billing. This is the piece that surprises people most, because most backend-as-a-service platforms have no equivalent at all: anything beyond their function model means renting a separate service with its own bill.&lt;/p&gt;

&lt;p&gt;I use this myself — my World Cup live-score app runs its Socket.io backend, its React PWA, and its PocketBase instance all on the same platform.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Six global regions
&lt;/h2&gt;

&lt;p&gt;Deploy close to your users:&lt;/p&gt;

&lt;p&gt;🇩🇪 Falkenstein · 🇩🇪 Nuremberg · 🇫🇮 Helsinki · 🇺🇸 Ashburn, VA · 🇺🇸 Hillsboro, OR · 🇸🇬 Singapore&lt;/p&gt;

&lt;p&gt;Europe, North America, and Asia-Pacific covered.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. Live monitoring (Pro)
&lt;/h2&gt;

&lt;p&gt;CPU, memory, and bandwidth for &lt;strong&gt;every&lt;/strong&gt; instance, in real time, from one unified dashboard. When you're running ten projects on one server, knowing which one is eating the box isn't a nice-to-have.&lt;/p&gt;

&lt;h2&gt;
  
  
  9. AI-agent friendly
&lt;/h2&gt;

&lt;p&gt;This one's newer and I like it a lot: the docs ship with &lt;strong&gt;prompts ready for your AI agent/LLM&lt;/strong&gt; to build against. If you're using Claude Code, Cursor, or similar to scaffold an app, you can point it at the docs and let it wire up the backend directly instead of hallucinating an API surface.&lt;/p&gt;

&lt;h2&gt;
  
  
  10. No egress meter
&lt;/h2&gt;

&lt;p&gt;Bandwidth is included with your server. There's no per-GB egress billing, so a traffic spike or a popular file download doesn't turn into a surprise invoice. Storage scales with your plan (50 MB Free / 3 GB Starter / your server's disk on Pro), and PocketBase also supports &lt;strong&gt;S3-compatible storage&lt;/strong&gt; if you want to plug in a bucket at commodity prices.&lt;/p&gt;

&lt;p&gt;Predictable beats cheap-until-it-isn't.&lt;/p&gt;

&lt;h2&gt;
  
  
  The honest part
&lt;/h2&gt;

&lt;p&gt;I'm not going to pretend this fits everyone. PocketBase is SQLite under the hood: writes are serialized, and you scale vertically by getting a bigger server. &lt;strong&gt;If your workload is genuinely write-heavy at high concurrency, or you depend on Postgres extensions like PostGIS or pgvector, use Postgres&lt;/strong&gt; — Supabase is excellent and I'd tell you to go use it.&lt;/p&gt;

&lt;p&gt;But most apps are read-heavy CRUD. SaaS dashboards, mobile backends, content sites. For those, SQLite's write serialization is never the bottleneck, and you get to have one simple system you fully understand instead of a multi-container stack.&lt;/p&gt;

&lt;p&gt;I wrote up the full comparison — architecture, auth, permissions, realtime, extensibility — here: &lt;strong&gt;&lt;a href="https://pocketbasecloud.com/docs/platform/pocketbase-vs-supabase" rel="noopener noreferrer"&gt;PocketBase vs Supabase&lt;/a&gt;&lt;/strong&gt;. It's deliberately honest about where PocketBase loses.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;The Free plan gets you 1 instance + 5 frontends, and instances stay running — no hibernation, no cold starts.&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://pocketbasecloud.com" rel="noopener noreferrer"&gt;pocketbasecloud.com&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you're sitting on a pile of side projects you've been rationing your budget across, I'd love to hear what you'd deploy first. And if something's rough, tell me — it's an indie product and comments genuinely shape the roadmap. 🚀&lt;/p&gt;

</description>
      <category>pocketbase</category>
      <category>webdev</category>
      <category>indiehackers</category>
      <category>backend</category>
    </item>
    <item>
      <title>I Deployed My Entire Realtime App — Frontend, Node Backend, and Database — on PocketBase Cloud</title>
      <dc:creator>tienbuilds</dc:creator>
      <pubDate>Sat, 11 Jul 2026 03:25:49 +0000</pubDate>
      <link>https://dev.to/tienbuilds/i-deployed-my-entire-realtime-app-frontend-node-backend-and-database-on-pocketbase-cloud-462m</link>
      <guid>https://dev.to/tienbuilds/i-deployed-my-entire-realtime-app-frontend-node-backend-and-database-on-pocketbase-cloud-462m</guid>
      <description>&lt;p&gt;Most "deploy your side project" tutorials end with you juggling three dashboards: one for the frontend, one for the backend, one for the database. Three hosts, three sets of env vars, three billing pages, three things that can silently break.&lt;/p&gt;

&lt;p&gt;I built a full realtime app — a mobile-first &lt;strong&gt;World Cup live-score + fan chat&lt;/strong&gt; platform — and deployed the &lt;em&gt;whole thing&lt;/em&gt; (React PWA, Node.js/Socket.io backend, and database) on a single platform: &lt;strong&gt;&lt;a href="https://pocketbasecloud.com" rel="noopener noreferrer"&gt;PocketBase Cloud&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This post is about that setup: what the app is, how it's built, and why running the entire stack on one platform turned deployment from the worst part of the project into a non-event.&lt;/p&gt;

&lt;p&gt;Code is open source 👉 &lt;strong&gt;&lt;a href="https://github.com/HoangTien0204/apprealtime" rel="noopener noreferrer"&gt;github.com/HoangTien0204/apprealtime&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What the app does
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;📺 Follow matches with &lt;strong&gt;live score updates&lt;/strong&gt; as they happen&lt;/li&gt;
&lt;li&gt;💬 &lt;strong&gt;Realtime fan chat&lt;/strong&gt; per match, with presence and typing indicators&lt;/li&gt;
&lt;li&gt;🏆 Fill out &lt;strong&gt;brackets&lt;/strong&gt; and make &lt;strong&gt;predictions&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;📱 Installable &lt;strong&gt;PWA&lt;/strong&gt; — feels native on mobile, works offline&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frontend&lt;/strong&gt; — React 19 + Vite + TailwindCSS + Framer Motion, built as a PWA&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend&lt;/strong&gt; — Express 5 + Socket.io 4 (Node.js), with a live-match simulator&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Database&lt;/strong&gt; — PocketBase, for persisting chat messages and predictions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Three services, cleanly separated. And all three deployed on &lt;strong&gt;&lt;a href="https://pocketbasecloud.com" rel="noopener noreferrer"&gt;PocketBase Cloud&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why PocketBase Cloud for the &lt;em&gt;whole&lt;/em&gt; stack
&lt;/h2&gt;

&lt;p&gt;Here's the thing people don't realize about PocketBase Cloud: despite the name, it isn't just a place to park a PocketBase instance. On the Pro plan it hosts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🗄️ &lt;strong&gt;The PocketBase database&lt;/strong&gt; — managed, with SSL and backups handled&lt;/li&gt;
&lt;li&gt;🌐 &lt;strong&gt;The frontend&lt;/strong&gt; — static hosting for the React PWA build&lt;/li&gt;
&lt;li&gt;⚙️ &lt;strong&gt;A Node.js / Deno / Bun backend&lt;/strong&gt; — so my Express + Socket.io server runs right there too&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That covers every layer of my app. So instead of wiring my frontend on Vercel to a backend on Railway to a database on some VPS — and debugging CORS and env vars across all three — everything sits behind &lt;strong&gt;one dashboard, on one dedicated server&lt;/strong&gt;.&lt;/p&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;Where it runs&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;React PWA (frontend)&lt;/td&gt;
&lt;td&gt;PocketBase Cloud — frontend hosting&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Express + Socket.io (backend)&lt;/td&gt;
&lt;td&gt;PocketBase Cloud — Node.js backend hosting&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PocketBase (database)&lt;/td&gt;
&lt;td&gt;PocketBase Cloud — managed instance&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Full disclosure: PocketBase Cloud is a product I also build. I run this real project on it precisely &lt;em&gt;because&lt;/em&gt; I built it to solve this exact pain — and dogfooding it on something with a live Socket.io backend and a real database is the best way to keep it honest. If a deploy step is annoying, I feel it before my users do.&lt;/p&gt;

&lt;h2&gt;
  
  
  How the realtime part works (and where each tool fits)
&lt;/h2&gt;

&lt;p&gt;The one design decision I want to highlight: &lt;strong&gt;realtime transport and realtime persistence are two different jobs.&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌─────────────┐   Socket.io    ┌──────────────┐   writes    ┌─────────────┐
│  React PWA  │◄──────────────►│   Express +  │────────────►│ PocketBase  │
│  (browser)  │   REST /api    │   Socket.io  │             │ (database)  │
└─────────────┘                └──────────────┘             └─────────────┘
     live scores · chat · presence         chat history · predictions
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Socket.io&lt;/strong&gt; does the &lt;em&gt;live&lt;/em&gt; layer — pushing score changes, match events, chat messages, presence, and typing indicators to every connected client at once.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PocketBase&lt;/strong&gt; does &lt;em&gt;persistence&lt;/em&gt; — every chat message and prediction gets written so history survives a reload or a restart. Single binary, admin UI, SQLite underneath, JS migrations. Zero database setup.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And all of it — the Socket.io process and the PocketBase database — lives on PocketBase Cloud. The Node backend talks to the database over a local &lt;code&gt;POCKETBASE_URL&lt;/code&gt; on the same platform, which keeps latency low and config simple.&lt;/p&gt;

&lt;h2&gt;
  
  
  The live-match simulator
&lt;/h2&gt;

&lt;p&gt;So the app isn't dead outside match days (and so I don't burn API quota while building), the backend ships with a &lt;strong&gt;match simulator&lt;/strong&gt;: 8 seconds = 1 in-game minute, generating goals and events and pushing them over Socket.io exactly like real data. For production you swap it for a real feed via an &lt;code&gt;API_FOOTBALL_KEY&lt;/code&gt; env var — and since it's all on one platform, that's a single env var change in one dashboard.&lt;/p&gt;

&lt;h2&gt;
  
  
  Running it locally
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm run &lt;span class="nb"&gt;install&lt;/span&gt;:all   &lt;span class="c"&gt;# install deps in each subproject&lt;/span&gt;
npm run dev           &lt;span class="c"&gt;# frontend :5173, backend :4000, pocketbase :8090&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The PocketBase binary auto-downloads on first launch — no manual database install. Migrations create the &lt;code&gt;chat_messages&lt;/code&gt;, &lt;code&gt;predictions&lt;/code&gt;, and &lt;code&gt;favorites&lt;/code&gt; collections for you. Then deploying to PocketBase Cloud is just pointing each service at the platform instead of localhost.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I learned
&lt;/h2&gt;

&lt;p&gt;Two takeaways:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;"Realtime" isn't one problem, it's two&lt;/strong&gt; — transport (Socket.io shines) and persistence (PocketBase is a joy). Keep them separate and every piece stays simple.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deploying a multi-service app doesn't have to mean multi-platform&lt;/strong&gt; — putting the frontend, the Node backend, and the database on &lt;a href="https://pocketbasecloud.com" rel="noopener noreferrer"&gt;PocketBase Cloud&lt;/a&gt; collapsed my deploy story from three dashboards to one. That's the part that surprised me most.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;🧑‍💻 Read / clone the code: &lt;strong&gt;&lt;a href="https://github.com/HoangTien0204/apprealtime" rel="noopener noreferrer"&gt;github.com/HoangTien0204/apprealtime&lt;/a&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;🚀 Deploy your own full stack in ~30 seconds: &lt;strong&gt;&lt;a href="https://pocketbasecloud.com" rel="noopener noreferrer"&gt;pocketbasecloud.com&lt;/a&gt;&lt;/strong&gt; (Free plan works to try it)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you build on it or spot something I could do better, I'd love to hear it in the comments — and a ⭐ on the repo never hurts. ⚽&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Curious how a Node/Socket.io backend runs on PocketBase Cloud, or how to migrate a scattered stack onto one platform? Ask below — happy to go deeper.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>pocketbase</category>
      <category>webdev</category>
      <category>indiehackers</category>
    </item>
    <item>
      <title>I Got Tired of Babysitting My PocketBase Servers, So I Built PocketBase Cloud</title>
      <dc:creator>tienbuilds</dc:creator>
      <pubDate>Wed, 08 Jul 2026 10:20:04 +0000</pubDate>
      <link>https://dev.to/tienbuilds/i-got-tired-of-babysitting-my-pocketbase-servers-so-i-built-pocketbase-cloud-1e6l</link>
      <guid>https://dev.to/tienbuilds/i-got-tired-of-babysitting-my-pocketbase-servers-so-i-built-pocketbase-cloud-1e6l</guid>
      <description>&lt;p&gt;If you've ever shipped a side project with &lt;a href="https://pocketbase.io" rel="noopener noreferrer"&gt;PocketBase&lt;/a&gt;, you know the feeling: the backend itself takes 5 minutes to set up... and then you spend the next 5 hours on the VPS, SSL certs, firewall rules, systemd services, backups, and monitoring.&lt;/p&gt;

&lt;p&gt;I love PocketBase. Single binary, embedded SQLite, real-time subscriptions, built-in auth, admin dashboard — it's the perfect backend for small and medium projects. What I didn't love was doing the same DevOps dance for every new idea.&lt;/p&gt;

&lt;p&gt;So I built &lt;strong&gt;&lt;a href="https://pocketbasecloud.com" rel="noopener noreferrer"&gt;PocketBase Cloud&lt;/a&gt;&lt;/strong&gt; — fully managed PocketBase hosting that gets you a live, secured, monitored instance in about 30 seconds.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it does
&lt;/h2&gt;

&lt;p&gt;You click deploy, and you get:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;⚡ &lt;strong&gt;A running PocketBase instance in ~30 seconds&lt;/strong&gt; — zero server config&lt;/li&gt;
&lt;li&gt;🔒 &lt;strong&gt;Automatic SSL + DDoS protection&lt;/strong&gt; — no certbot, no Cloudflare tutorials&lt;/li&gt;
&lt;li&gt;🌍 &lt;strong&gt;6 global regions&lt;/strong&gt; — Germany, Finland, US East/West, and Singapore&lt;/li&gt;
&lt;li&gt;📦 &lt;strong&gt;Frontend hosting included&lt;/strong&gt; — deploy your SPA next to your backend&lt;/li&gt;
&lt;li&gt;💾 &lt;strong&gt;Automated backups&lt;/strong&gt; and live monitoring (CPU, memory, bandwidth)&lt;/li&gt;
&lt;li&gt;🤖 &lt;strong&gt;AI-agent friendly&lt;/strong&gt; — docs and prompts ready so your LLM/coding agent can build against it directly&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Real-time subscriptions work out of the box, exactly like self-hosted PocketBase — because it &lt;em&gt;is&lt;/em&gt; PocketBase, just without the babysitting.&lt;/p&gt;

&lt;h2&gt;
  
  
  The part I'm most proud of: multi-instance hosting
&lt;/h2&gt;

&lt;p&gt;Here's the thing about indie developers: we don't have one project. We have &lt;em&gt;twelve&lt;/em&gt;, and eleven of them get 40 visitors a month.&lt;/p&gt;

&lt;p&gt;Paying $5–10/month &lt;em&gt;per project&lt;/em&gt; on typical BaaS platforms kills side projects fast. So PocketBase Cloud's &lt;strong&gt;Pro plan&lt;/strong&gt; works differently: you pay for a &lt;strong&gt;dedicated server&lt;/strong&gt; (from $13/month), and you can run as many PocketBase instances on it as the resources allow. Each instance is fully isolated — its own database, credentials, and URL.&lt;/p&gt;

&lt;p&gt;Lightweight apps are efficient enough that many users comfortably run &lt;strong&gt;10–20 instances on the base plan&lt;/strong&gt;. That's roughly $1/project/month. The Pro plan also supports Node.js/Deno/Bun backend hosting if you need custom server code alongside PocketBase.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pricing
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Plan&lt;/th&gt;
&lt;th&gt;Price&lt;/th&gt;
&lt;th&gt;Best for&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Free&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$0/mo&lt;/td&gt;
&lt;td&gt;1 instance, 50 MB storage, frontend hosting — try it out&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Starter&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$5/mo&lt;/td&gt;
&lt;td&gt;1 instance, 3 GB storage, custom domain, 6 regions, SSL + DDoS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Pro&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;From $13/mo&lt;/td&gt;
&lt;td&gt;Unlimited instances on a dedicated server, pay as you go&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;All plans come with a 99.9% uptime SLA. The Free plan asks for a Stripe subscription (no charge) just to prevent abuse, and free instances are removed after 30 days of inactivity — fair warning.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why not just self-host?
&lt;/h2&gt;

&lt;p&gt;You absolutely can! PocketBase is famously easy to self-host, and if you enjoy managing servers, go for it.&lt;/p&gt;

&lt;p&gt;But "easy to start" and "easy to run in production" are different things. Self-hosting means &lt;em&gt;you&lt;/em&gt; own updates, SSL renewals, backups, uptime monitoring, and the 2 AM "why is my server down" investigation. For me, the math was simple: my time debugging nginx configs is worth more than $5/month.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;The Free plan takes about 30 seconds to set up — genuinely, that's the whole pitch:&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://pocketbasecloud.com" rel="noopener noreferrer"&gt;pocketbasecloud.com&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you deploy something on it, I'd love to hear what you're building. And if you hit any rough edges, tell me — it's an indie product and feedback directly shapes the roadmap.&lt;/p&gt;

&lt;p&gt;Happy shipping! 🚀&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Questions about PocketBase itself, migrating from Firebase/Supabase, or running multiple projects on one server? Drop them in the comments — I've spent way too much time in this ecosystem and I'm happy to nerd out.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>pocketbase</category>
      <category>backend</category>
      <category>saas</category>
      <category>indiehackers</category>
    </item>
    <item>
      <title>Build a Realtime Chat App in 5 Minutes with PocketBase Cloud + React</title>
      <dc:creator>tienbuilds</dc:creator>
      <pubDate>Fri, 03 Jul 2026 07:42:28 +0000</pubDate>
      <link>https://dev.to/tienbuilds/build-a-realtime-chat-app-in-5-minutes-with-pocketbase-cloud-react-172e</link>
      <guid>https://dev.to/tienbuilds/build-a-realtime-chat-app-in-5-minutes-with-pocketbase-cloud-react-172e</guid>
      <description>&lt;p&gt;Realtime features usually mean one of two things: paying for Firebase, or wrestling with WebSocket servers at 2 AM. Today we're doing neither.&lt;/p&gt;

&lt;p&gt;We're going to build a &lt;strong&gt;live chat app&lt;/strong&gt; where messages appear instantly across all connected browsers — using &lt;a href="https://pocketbasecloud.com" rel="noopener noreferrer"&gt;PocketBase Cloud&lt;/a&gt; for the backend and React for the frontend. No servers to configure, no WebSocket code to write. PocketBase handles realtime over &lt;strong&gt;Server-Sent Events (SSE)&lt;/strong&gt;, and the JS SDK wraps it in one function call.&lt;/p&gt;

&lt;p&gt;Total time: about 5 minutes. Let's go. ⏱️&lt;/p&gt;

&lt;h2&gt;
  
  
  What we're building
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;A public chat room (no auth, to keep this short)&lt;/li&gt;
&lt;li&gt;Messages stored in PocketBase (SQLite under the hood)&lt;/li&gt;
&lt;li&gt;Realtime updates via SSE — open two tabs and watch them sync&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 1 — Deploy PocketBase (30 seconds, literally)
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Go to &lt;strong&gt;&lt;a href="https://pocketbasecloud.com" rel="noopener noreferrer"&gt;pocketbasecloud.com&lt;/a&gt;&lt;/strong&gt; and sign up (Free plan works fine for this tutorial)&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Deploy&lt;/strong&gt;, pick a region close to you (there are 6 — Germany, Finland, US East/West, Singapore...)&lt;/li&gt;
&lt;li&gt;Wait ~30 seconds. You'll get a URL like:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://your-app.pocketbasecloud.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's a full PocketBase instance with SSL already configured. Open &lt;code&gt;/_/&lt;/code&gt; on that URL to access the admin dashboard and create your admin account:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://your-app.pocketbasecloud.com/_/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Self-hosting fans: everything below works identically on a self-hosted instance. The cloud just skips the VPS + nginx + certbot ritual.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Step 2 — Create the &lt;code&gt;messages&lt;/code&gt; collection
&lt;/h2&gt;

&lt;p&gt;In the admin dashboard:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Collections → New collection&lt;/strong&gt; → name it &lt;code&gt;messages&lt;/code&gt; (type: Base)&lt;/li&gt;
&lt;li&gt;Add two fields:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;username&lt;/code&gt; — Plain text, required&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;text&lt;/code&gt; — Plain text, required&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Open the &lt;strong&gt;API Rules&lt;/strong&gt; tab and set both &lt;strong&gt;List/Search rule&lt;/strong&gt; and &lt;strong&gt;View rule&lt;/strong&gt; and &lt;strong&gt;Create rule&lt;/strong&gt; to empty (unlock them) so anyone can read and post.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;⚠️ Empty rules = public access. Fine for a demo chat; for a real app you'd lock Create to authenticated users with a rule like &lt;code&gt;@request.auth.id != ""&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;That's the entire backend. No migrations, no ORM, no REST controllers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3 — Scaffold the React app
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm create vite@latest pb-chat &lt;span class="nt"&gt;--&lt;/span&gt; &lt;span class="nt"&gt;--template&lt;/span&gt; react
&lt;span class="nb"&gt;cd &lt;/span&gt;pb-chat
npm &lt;span class="nb"&gt;install &lt;/span&gt;pocketbase
npm run dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 4 — The realtime magic
&lt;/h2&gt;

&lt;p&gt;Replace &lt;code&gt;src/App.jsx&lt;/code&gt; with this (~60 lines, that's the whole app):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useEffect&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;useRef&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;PocketBase&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;pocketbase&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// 👇 your PocketBase Cloud URL&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;pb&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;PocketBase&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://your-app.pocketbasecloud.com&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;App&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setMessages&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;([]);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setText&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;username&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;guest-&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;random&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;36&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;slice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;bottomRef&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useRef&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="nf"&gt;useEffect&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// 1. Load the latest 50 messages&lt;/span&gt;
    &lt;span class="nx"&gt;pb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;collection&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;messages&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getList&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;sort&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;created&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
      &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;setMessages&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;items&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

    &lt;span class="c1"&gt;// 2. Subscribe to realtime changes (SSE under the hood)&lt;/span&gt;
    &lt;span class="nx"&gt;pb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;collection&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;messages&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;subscribe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;*&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;action&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;create&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nf"&gt;setMessages&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;prev&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[...&lt;/span&gt;&lt;span class="nx"&gt;prev&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;record&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;

    &lt;span class="c1"&gt;// 3. Clean up the subscription on unmount&lt;/span&gt;
    &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;pb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;collection&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;messages&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;unsubscribe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;*&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;[]);&lt;/span&gt;

  &lt;span class="nf"&gt;useEffect&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;bottomRef&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;current&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nf"&gt;scrollIntoView&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;behavior&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;smooth&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;

  &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;preventDefault&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;trim&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;pb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;collection&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;messages&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;username&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;text&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="nf"&gt;setText&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// no manual state update needed — SSE delivers it back&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;maxWidth&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;480&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;40px auto&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;fontFamily&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;sans-serif&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;h2&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;⚡ PB Cloud Chat — you are &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;username&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;h2&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;360&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;overflowY&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;auto&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;1px solid #ddd&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;borderRadius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;m&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
          &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt; &lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;m&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;b&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;m&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;username&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;:&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;b&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;m&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
          &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;ref&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;bottomRef&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;form&lt;/span&gt; &lt;span class="na"&gt;onSubmit&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;send&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;flex&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;gap&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;marginTop&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;12&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;input&lt;/span&gt;
          &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
          &lt;span class="na"&gt;onChange&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;setText&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
          &lt;span class="na"&gt;placeholder&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Type a message…"&lt;/span&gt;
          &lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;flex&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Send&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;form&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run it, open &lt;strong&gt;two browser tabs&lt;/strong&gt;, and send a message. Both tabs update instantly. 🎉&lt;/p&gt;

&lt;p&gt;Notice the neat trick in &lt;code&gt;send()&lt;/code&gt;: we don't append the message to local state ourselves. We just &lt;code&gt;create()&lt;/code&gt; the record, and the realtime subscription delivers it back to &lt;em&gt;every&lt;/em&gt; client — including the sender. One source of truth, zero sync bugs.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's actually happening under the hood?
&lt;/h2&gt;

&lt;p&gt;PocketBase's realtime API uses &lt;strong&gt;Server-Sent Events&lt;/strong&gt;, not WebSockets:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The SDK opens a long-lived HTTP connection to &lt;code&gt;/api/realtime&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;It submits which collections/records you want to watch&lt;/li&gt;
&lt;li&gt;The server pushes JSON events (&lt;code&gt;create&lt;/code&gt; / &lt;code&gt;update&lt;/code&gt; / &lt;code&gt;delete&lt;/code&gt;) down that stream&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;SSE is simpler than WebSockets (plain HTTP, auto-reconnect built into the browser) and passes through proxies and firewalls more reliably. For server→client pushes like chat, feeds, and dashboards, it's honestly all you need.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5 — Ship it
&lt;/h2&gt;

&lt;p&gt;Build the frontend:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm run build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;PocketBase Cloud includes &lt;strong&gt;frontend hosting&lt;/strong&gt; on every plan (even Free), so you can deploy the &lt;code&gt;dist/&lt;/code&gt; folder right next to your backend — one dashboard, one URL, no CORS headaches. Or push it to any static host you like; the backend URL is public either way.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where to go from here
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;🔐 Add auth: PocketBase ships with email/password + OAuth2 (Google, GitHub...) built in — then lock the Create rule to &lt;code&gt;@request.auth.id != ""&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;🗑️ Handle &lt;code&gt;update&lt;/code&gt;/&lt;code&gt;delete&lt;/code&gt; events in the subscription for message editing&lt;/li&gt;
&lt;li&gt;📄 Paginate history with &lt;code&gt;getList(page, perPage)&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;🚀 Running multiple side projects? The Pro plan (from $13/mo) lets you run &lt;strong&gt;unlimited PocketBase instances on one dedicated server&lt;/strong&gt; — many users fit 10–20 apps on it&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Try it here 👉 &lt;strong&gt;&lt;a href="https://pocketbasecloud.com" rel="noopener noreferrer"&gt;pocketbasecloud.com&lt;/a&gt;&lt;/strong&gt; — the Free plan is genuinely 30 seconds to a live backend.&lt;/p&gt;

&lt;p&gt;If you build something with this, drop a link in the comments. I'd love to see it! 💬&lt;/p&gt;

</description>
      <category>react</category>
      <category>pocketbase</category>
      <category>tutorial</category>
      <category>webdev</category>
    </item>
    <item>
      <title>The Time Spent on Infrastructure Can Easily Surpass the Time Spent Building Features</title>
      <dc:creator>tienbuilds</dc:creator>
      <pubDate>Tue, 30 Jun 2026 14:37:27 +0000</pubDate>
      <link>https://dev.to/tienbuilds/the-time-spent-on-infrastructure-can-easily-surpass-the-time-spent-building-features-1k17</link>
      <guid>https://dev.to/tienbuilds/the-time-spent-on-infrastructure-can-easily-surpass-the-time-spent-building-features-1k17</guid>
      <description>&lt;p&gt;One thing I've realized after building several products is this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Sometimes, I spend more time managing infrastructure than actually building features.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I've always enjoyed using &lt;strong&gt;PocketBase&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It's lightweight, fast, and an excellent choice for building MVPs.&lt;/p&gt;

&lt;p&gt;However, self-hosting PocketBase means every new project starts with the same checklist:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Setting up a VPS&lt;/li&gt;
&lt;li&gt;Configuring a reverse proxy&lt;/li&gt;
&lt;li&gt;Installing SSL certificates&lt;/li&gt;
&lt;li&gt;Planning backups&lt;/li&gt;
&lt;li&gt;Monitoring the server&lt;/li&gt;
&lt;li&gt;Deploying and updating PocketBase&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of these tasks are unnecessary.&lt;/p&gt;

&lt;p&gt;They're important.&lt;/p&gt;

&lt;p&gt;But they don't directly create value for users.&lt;/p&gt;

&lt;p&gt;So a few months ago, I decided to give &lt;strong&gt;PocketBaseCloud&lt;/strong&gt; a try.&lt;/p&gt;

&lt;p&gt;The first thing that impressed me was how quickly I could get started.&lt;/p&gt;

&lt;p&gt;Within minutes, I had a fully functional backend ready to use.&lt;/p&gt;

&lt;p&gt;No SSH.&lt;/p&gt;

&lt;p&gt;No Nginx configuration.&lt;/p&gt;

&lt;p&gt;No SSL setup.&lt;/p&gt;

&lt;p&gt;Just create a project and start building.&lt;/p&gt;

&lt;p&gt;What I appreciate most isn't just the convenience.&lt;/p&gt;

&lt;p&gt;It's the peace of mind.&lt;/p&gt;

&lt;p&gt;Instead of asking myself:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is the server still running?&lt;/li&gt;
&lt;li&gt;Is disk space running low?&lt;/li&gt;
&lt;li&gt;Is the SSL certificate about to expire?&lt;/li&gt;
&lt;li&gt;Is it time to update PocketBase?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I can focus on things that actually move the product forward:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Building new features.&lt;/li&gt;
&lt;li&gt;Improving the user experience.&lt;/li&gt;
&lt;li&gt;Talking to customers.&lt;/li&gt;
&lt;li&gt;Growing the business.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After using PocketBaseCloud for a while, I realized the biggest benefit isn't the list of features it offers.&lt;/p&gt;

&lt;p&gt;It's that the backend becomes almost invisible.&lt;/p&gt;

&lt;p&gt;When you no longer have to think about your infrastructure every day, you gain more time and energy to focus on building something people actually want.&lt;/p&gt;

&lt;p&gt;Sometimes, that's the most valuable feature of all.&lt;/p&gt;

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