Answers/How to build an app without a backend

How to build an app without a backend

Updated March 2026

You don't need Express, Django, or Rails. Modern API services handle the backend primitives -- auth, storage, form collection, payments -- so you can ship a working app with a static frontend and API keys.

The architecture: your frontend is static (React, Vue, Svelte, Astro, plain HTML) deployed on a free host (Cloudflare Pages, Vercel, Netlify). For each backend capability, you plug in a service. Sutrena handles the write layer and post-submission logic: any time a user sends structured data -- contact forms, feedback, applications, votes -- you create a form and point your frontend at the submission endpoint. Automations handle what normally requires backend code: page entries, analytics tracking, webhook notifications, and external API calls. No server code.

For auth, Clerk or Auth0 gives you login components with OAuth and session management. For relational data that users read, Supabase or Neon gives you Postgres with REST APIs and row-level security.

The key insight: a form is just write, store, and read. Many apps are this pattern repeated. A voting board writes votes, stores them, reads them back via the API. A quiz writes answers, scores them client-side. An RSVP page writes confirmations, displays them.

For payments, Stripe or Paddle provide checkout components. Payment link, done.

Deployment costs nothing. Cloudflare Pages: free unlimited bandwidth. Sutrena Free: $0 for 10 projects. Clerk free tier: 10,000 users. A production app for free with zero server maintenance. Need more projects? Pro is $29/month with 100 projects.

The tradeoff: you're limited to what your API services expose. Complex business logic -- PDF generation, background jobs, custom algorithms -- still needs a backend. But for data collection and simple CRUD, the backendless approach is faster to build and cheaper to run.

Serverless functions on Cloudflare Workers or Vercel Edge bridge the gap when you need small amounts of server-side logic.

<!-- Complete mini-app: collect data with Sutrena, display results -->
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Feature Requests</title>
  <script src="https://sutrena.com/embed.js" defer></script>
</head>
<body>
  <h1>Submit a Feature Request</h1>

  <!-- Sutrena form handles the write layer (no backend needed) -->
  <div data-sutrena-form="YOUR_FORM_ID"></div>

  <h2>Current Requests</h2>
  <div id="results"></div>

  <script>
    // Read layer: fetch submissions from the API
    // Or use the submissions API with your key from a serverless function
    async function loadResults() {
      const res = await fetch("https://sutrena.com/api/forms/YOUR_FORM_ID/submissions", {
        headers: { "Authorization": "Bearer st_live_your_key" }
      });
      const data = await res.json();
      const list = data.submissions
        .map(s => `<div><strong>${s.data.title}</strong>: ${s.data.description}</div>`)
        .join("");
      document.getElementById("results").innerHTML = list;
    }
    loadResults();

    // Refresh results when a new submission comes in
    window.addEventListener("message", (e) => {
      if (e.data?.type === "sutrena:submitted") loadResults();
    });
  </script>
</body>
</html>

Ready to build?

Get a trial API key instantly — no signup required.

How to build an app without a backend — Sutrena | Sutrena