<?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: Alex Davies</title>
    <description>The latest articles on DEV Community by Alex Davies (@alexdavies74).</description>
    <link>https://dev.to/alexdavies74</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3854089%2F43397353-5c5d-48ea-94af-fa2365aab35d.jpg</url>
      <title>DEV Community: Alex Davies</title>
      <link>https://dev.to/alexdavies74</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/alexdavies74"/>
    <language>en</language>
    <item>
      <title>I vibe-coded the same app on Supabase, Convex, Vennbase, and InstantDB. The results look the same, but they're not.</title>
      <dc:creator>Alex Davies</dc:creator>
      <pubDate>Tue, 14 Apr 2026 22:15:03 +0000</pubDate>
      <link>https://dev.to/alexdavies74/i-vibe-coded-the-same-app-on-supabase-convex-vennbase-and-instantdb-the-results-look-the-same-1nhg</link>
      <guid>https://dev.to/alexdavies74/i-vibe-coded-the-same-app-on-supabase-convex-vennbase-and-instantdb-the-results-look-the-same-1nhg</guid>
      <description>&lt;p&gt;AI coding agents have opened app development to a lot of new people. Vibe coders, without a skilled software engineer to lean on, wish their agent could get further, more accurately and securely, with less human involvement.&lt;/p&gt;

&lt;p&gt;Does a deliberate choice of backend help an AI coding agent succeed? I ran an experiment to find out.&lt;/p&gt;

&lt;p&gt;I'll say upfront: I built &lt;a href="https://vennbase.dev/" rel="noopener noreferrer"&gt;Vennbase&lt;/a&gt;. It has a simpler security model, because coders and coding agents are taxed and limited by solving the same hard parts - backend, data sharing and security - over and over. These are the problems I've solved, and systems I've maintained in production, at work for many years.&lt;/p&gt;

&lt;p&gt;In Vennbase's model, there are no access rules. Instead, you explicitly grant access to a tree of data. The server is standardized, so you don't need to register apps with it. I hoped this simplicity would help an AI get further, conscious that AIs perform better with technology that appears in their training data, and Vennbase is brand new.&lt;/p&gt;

&lt;h3&gt;
  
  
  Methodology
&lt;/h3&gt;

&lt;p&gt;I gave a mid-range model a task of medium difficulty.&lt;/p&gt;

&lt;p&gt;This quick test, with less variance in results, can't tell us everything about complex situations with a more capable model. But it fits my time and token budget, and helps others replicate.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Model&lt;/strong&gt; Claude Code Sonnet 4.6, medium effort, thinking enabled&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Task&lt;/strong&gt; Build a fitness studio booking app&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fka1y08htxzt3dv7omlcv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fka1y08htxzt3dv7omlcv.png" alt="The Supabase app's customer screen" width="800" height="267"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The booking app has real multi-user data, security requirements, and needs real-time updates. It's the kind of software real people, without engineering backends, are building right now for their small businesses, with mixed success.&lt;/p&gt;

&lt;p&gt;This isn't meant to be a conclusive benchmark, just a data point, what happened in practice?&lt;/p&gt;

&lt;h2&gt;
  
  
  The Backends
&lt;/h2&gt;

&lt;p&gt;I only tested backends that might win. As far as I know, each is the most successful example representing one class of solution to this problem.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Vennbase&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;A client-side database with explicit access grants, and a standardized backend. Brand new&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Supabase&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Access a postgres database from a client. Regularly recommended for vibe coders&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Convex&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Bundles a database, server functions, and client SDK to make complex realtime easy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;InstantDB&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;A client-side database with hosting and modern features. Newer, not as well-known&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Summary Results
&lt;/h2&gt;

&lt;p&gt;Look for the 🥇 gold medals for better outcomes.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Vennbase&lt;/th&gt;
&lt;th&gt;Supabase&lt;/th&gt;
&lt;th&gt;Convex&lt;/th&gt;
&lt;th&gt;InstantDB&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Work to set up&lt;/td&gt;
&lt;td&gt;🥇 none&lt;/td&gt;
&lt;td&gt;🥉 med&lt;/td&gt;
&lt;td&gt;high&lt;/td&gt;
&lt;td&gt;🥈 little&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bugs requiring fixes&lt;/td&gt;
&lt;td&gt;=🥇 0&lt;/td&gt;
&lt;td&gt;=🥇 0&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tokens to complete&lt;/td&gt;
&lt;td&gt;🥈 78k&lt;/td&gt;
&lt;td&gt;🥇 55k&lt;/td&gt;
&lt;td&gt;🥉 87k&lt;/td&gt;
&lt;td&gt;117k&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Security weaknesses&lt;/td&gt;
&lt;td&gt;=🥇 low&lt;/td&gt;
&lt;td&gt;🥈 mid&lt;/td&gt;
&lt;td&gt;=🥇 low&lt;/td&gt;
&lt;td&gt;high&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Creating class is instantaneous&lt;/td&gt;
&lt;td&gt;🥇&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;🥇&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Realtime updates&lt;/td&gt;
&lt;td&gt;🥇&lt;/td&gt;
&lt;td&gt;🥇&lt;/td&gt;
&lt;td&gt;🥇&lt;/td&gt;
&lt;td&gt;🥇&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Experiment Details
&lt;/h2&gt;

&lt;p&gt;For each backend, I:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Created an empty folder&lt;/li&gt;
&lt;li&gt;Pasted the prompt into the VSCode Claude Code plugin&lt;/li&gt;
&lt;li&gt;Let it run until it was done pre-installing packages, then switched to plan mode&lt;/li&gt;
&lt;li&gt;Accepted the generated plan, without questioning it&lt;/li&gt;
&lt;li&gt;Ran &lt;code&gt;npm run dev&lt;/code&gt; and tested the app&lt;/li&gt;
&lt;li&gt;Ran &lt;code&gt;\context&lt;/code&gt; to find the number of tokens consumed to get it working, including all planning and prep&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The prompt
&lt;/h3&gt;

&lt;p&gt;The start of the prompt is different for each backend:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Vennbase&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Use @vennbase/react and @vennbase/core for data, and puter.js for other backend needs.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Supabase&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;We are going to use Supabase. Here is an empty one: Project URL: [...] Publishable key: [...]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Convex&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;We are going to use Convex. Let me know when you want me to run &lt;code&gt;npx convex dev&lt;/code&gt; interactively&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;InstantDB&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;We're going to use instant. The public app ID is [...]&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Then, I used the same main prompt in all cases:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Start by installing the packages, then start from the core README and enter planning mode.&lt;/p&gt;

&lt;p&gt;I'd like you to plan, and then build, a complete, usable, fitness studio booking web app.&lt;/p&gt;

&lt;p&gt;The first user will create and manage a Studio, which has a class schedule. Keep it simple, offer inputs for start and end time for each class, participant limit, with a button to make a new class. No weekly repetition. They should be able to copy a link to provide to their customers.&lt;/p&gt;

&lt;p&gt;When others scan and follow the link, after logging in, they enter the booking experience. This is a very simple text-based experience, listing the available classes. Each class has a book button, which immediately reserves a slot in that class for the logged-in user. Other customers should (within a few seconds) see the slots are taken. This should work even if the original owner's client is not online.&lt;/p&gt;

&lt;p&gt;Security model: Only the original owner should be able to see everything. Each customer should be able to create/cancel their own bookings, and see the presence of other customers' bookings, but NOT see the identity of the booker, or any other private details of the booking. This security should be robust to customers who can modify their own client code. You are responsible for this security, and if you need my help, you must ask for it.&lt;/p&gt;

&lt;p&gt;Interaction model: All create/write actions in the UI should feel instant, using optimistic updates. If the owner is looking at a class when someone books, they should be able to see that the class got a new signup, within several seconds.&lt;/p&gt;

&lt;p&gt;You may ask me about problems with your tooling. Avoid other questions, we are practicing to one-shot this task.&lt;/p&gt;

&lt;p&gt;Do not explore my file system outside the current directory.&lt;/p&gt;

&lt;p&gt;Don't write a custom backend!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl2y9xrgwft8kxsb8vctg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl2y9xrgwft8kxsb8vctg.png" alt="The Cenvex app's studio management screen" width="800" height="608"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Extra human work required to set up
&lt;/h3&gt;

&lt;p&gt;Measured in keystrokes + clicks. They are opportunities for the human to get it wrong, and for the AI to get stuck.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Vennbase&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Supabase&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;- Create project: 25&lt;br&gt;- Apply the database schema: 11&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Convex&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;- Create project: 12&lt;br&gt;- Run &lt;code&gt;convex dev&lt;/code&gt; manually: 18&lt;br&gt;- Copy auth keys manually into Convex env vars page 20&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;InstantDB&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;- Create project: 15&lt;br&gt;- Manually run &lt;code&gt;instant push schema&lt;/code&gt; and &lt;code&gt;instant push perms&lt;/code&gt;: 12&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Iterations to get it working
&lt;/h3&gt;

&lt;p&gt;How many error messages did I paste to Claude?&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Vennbase&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Supabase&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Convex&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;- &lt;code&gt;convex dev&lt;/code&gt; import problem&lt;br&gt;- Escaped newlines in auth key&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;InstantDB&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;- &lt;code&gt;instant push schema&lt;/code&gt; missing --app arg&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Security weaknesses
&lt;/h3&gt;

&lt;p&gt;This is where many AI-built apps fail.&lt;/p&gt;

&lt;p&gt;After getting each app working, I used a consistent Codex prompt to find security flaws. Of course, the agent is responsible, but the backend can make the job easy or hard.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Vennbase&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;low&lt;/td&gt;
&lt;td&gt;Booking capacity limits can be bypassed, because they are only enforced client-side&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Supabase&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;med&lt;/td&gt;
&lt;td&gt;Studios are public in RLS, so can be listed, and anyone can book a member-only class&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Convex&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;low&lt;/td&gt;
&lt;td&gt;Studios are public, anyone can book if they guess the studio ID&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;InstantDB&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;high&lt;/td&gt;
&lt;td&gt;Any logged-in customer can tamper with other customers’ bookings. Studios are public. Booking capacity limits can be bypassed, are client-side&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Does Claude want to use each backend again?
&lt;/h3&gt;

&lt;p&gt;I asked the agent its opinion after finishing the task. AIs are sycophants, so unsurprisingly, Claude loved all of them. But I think it's particularly fond of Vennbase and InstantDB.&lt;/p&gt;

&lt;p&gt;Full transcripts and the resulting code are linked.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;Vennbase&lt;/strong&gt;&lt;br&gt;&lt;a href="https://dev.to/agent_sessions/vennbase-booking-app-db4dqb"&gt;transcript&lt;/a&gt;&lt;br&gt;&lt;a href="https://github.com/alexdavies74/experiment-vennbase-1" rel="noopener noreferrer"&gt;code&lt;/a&gt;
&lt;/td&gt;
&lt;td&gt;Yes — the access control model is the best I've seen for this class of app, and "no backend" is a genuine promise rather than a marketing hedge. The TypeScript ergonomics need polish (generic error messages, inference loss on extracted options), but none of the friction was a blocker and the core abstractions held up under a non-trivial security requirement.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;Supabase&lt;/strong&gt;&lt;br&gt;&lt;a href="https://dev.to/agent_sessions/supabase-fitness-app-xiy66v"&gt;transcript&lt;/a&gt;&lt;br&gt;&lt;a href="https://github.com/alexdavies74/experiment-supabase-1" rel="noopener noreferrer"&gt;code&lt;/a&gt;
&lt;/td&gt;
&lt;td&gt;Yes — for a project like this (auth + Postgres + realtime, no custom backend), Supabase genuinely delivers on its promise and the trigger/RLS model is powerful once you accept the verbosity. The TypeScript experience is rough enough that I'd budget time for fighting the type system, and I'd reach for it more confidently in a dynamically-typed project or one where generated types from the CLI are part of the workflow.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;Convex&lt;/strong&gt;&lt;br&gt;&lt;a href="https://dev.to/agent_sessions/convex-fitness-app-u5vq7i"&gt;transcript&lt;/a&gt;&lt;br&gt;&lt;a href="https://github.com/alexdavies74/experiment-convex-1" rel="noopener noreferrer"&gt;code&lt;/a&gt;
&lt;/td&gt;
&lt;td&gt;Yes — the real-time data model and server-function security make it genuinely better than REST+WebSocket for this class of app. The auth setup friction is real but a one-time cost, and everything after that moved fast.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;InstantDB&lt;/strong&gt;&lt;br&gt;&lt;a href="https://dev.to/agent_sessions/instant-fitness-app-w4mzzq"&gt;transcript&lt;/a&gt;&lt;br&gt;&lt;a href="https://github.com/alexdavies74/experiment-instant-1" rel="noopener noreferrer"&gt;code&lt;/a&gt;
&lt;/td&gt;
&lt;td&gt;Yes — the real-time subscriptions, optimistic updates, and server-enforced permissions are all genuinely zero-boilerplate, which is rare and valuable. The TypeScript inference and CLI ergonomics need work, but the core model is sound enough that I'd reach for it again for a collaborative or multi-user app where the alternative is standing up a backend.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm8l8e0jpvwbigiz25ddd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm8l8e0jpvwbigiz25ddd.png" alt="The Vennbase app's customer screen" width="800" height="260"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;The different backend technologies have different strengths.&lt;/p&gt;

&lt;p&gt;Vennbase was the only one that let the agent finish cleanly, with minor security issues, and working optimistic updates.&lt;/p&gt;

&lt;p&gt;Supabase appears a lot in training data, and that advantage shows, in how few tokens Claude needed to finish.&lt;/p&gt;

&lt;p&gt;But Vennbase, which also has the zero-setup advantage, might one day have enough public examples to close that gap too.&lt;/p&gt;

&lt;p&gt;The access rule problem is structural: A backend that makes the safe path easy gives the AI less opportunity to make mistakes. Even as agents get more capable, they will be able to do comparatively more on a simple security model.&lt;/p&gt;

&lt;h3&gt;
  
  
  Close but not included
&lt;/h3&gt;

&lt;p&gt;I didn't have time to run the experiment for every possible backend. Let me know if you think one might reach the top two, and I'll run the test on them.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Firebase&lt;/strong&gt; The elder of this category isn't competitive because the permission rules are too difficult &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PocketBase&lt;/strong&gt; Would require the agent to set up too much infrastructure to be competitive&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Triplit&lt;/strong&gt; Similar to InstantDB, but was acquired by Supabase&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Any type of custom backend&lt;/strong&gt; Too difficult to be competitive&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Caveats
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;This experiment would benefit from more repetitions. Though, I did trial runs with slightly different prompts on all the backends, and found the outcomes consistent.&lt;/li&gt;
&lt;li&gt;I tried to choose a realistic test app spec (the fitness booking app) covering the basic interactions a lot of apps need. However, it comes from me, and so matches my biases about what apps need, which are also encoded in Vennbase.

&lt;ul&gt;
&lt;li&gt;It would be great for others to suggest another test app spec to try.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;I'm not an expert in the backends aside from Vennbase, so I don't know if there's a small tweak to the prompt or setup that would have helped them a lot.&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;So help me out:&lt;/strong&gt; What's the next test app I should experiment on? What other results should I measure? How can I improve the method to show each backend at its best?&lt;/p&gt;

</description>
      <category>ai</category>
      <category>architecture</category>
      <category>backend</category>
      <category>vibecoding</category>
    </item>
  </channel>
</rss>
