Stacks

Proven stacks and how the tools connect

Webstudio for the front end, then pick a database, CMS, email and automation layer. Each stack lists the tools, a realistic monthly cost for a small project and where you can see it live.

Agency newsletter for many client brands

Run newsletters for several clients cheaply

Sendy's white-label brands give each client its own login and lists on one install; Webstudio forms post to Sendy's subscribe API. Alternative: one Listmonk per client via Coolify if you prefer open source.

Monthly cost$5-15/mo + $69 once

Sendy $69 one-time on existing PHP hosting (~$5/mo); SES $0.10 per 1k emails; client sites on one Webstudio Pro $15 plan.

Agency site with client-editable CMS

Agency site with client-editable CMS

Clients edit content in Baserow's spreadsheet UI; Webstudio reads it via REST Resources into Collections and dynamic pages. Form submissions go to Baserow and trigger an n8n flow that notifies the team via Postmark. Baserow webhooks can trigger republish when needed.

Monthly cost$15-60/mo

Webstudio Pro $15 (covers unlimited client sites); Baserow cloud Free (3k rows) or Premium $10/user, or self-hosted on a $5-10 VPS; n8n self-hosted free on the same VPS; Postmark $15 for 10k emails (or Resend free tier); Plausible $9 (or Umami Hobby free).

Cheapest newsletter stack

Cheap newsletter

A Webstudio Form posts straight to Listmonk's public subscription API (double opt-in handled by Listmonk), Listmonk sends via SES SMTP with SNS bounce processing. No automation tool needed. Requires SES production access and DNS setup (SPF/DKIM/DMARC).

Monthly cost$3-20/mo

Webstudio Free (if a wstd.io subdomain is OK) or Pro $15/mo billed yearly; Listmonk on PikaPods ~$2-4/mo (or $5 VPS); SES $0.10 per 1,000 emails, so 5,000 subscribers x 4 issues = 20k emails = $2.

Data-driven site or app with auth

Directory, member area or web app

Supabase holds relational data, auth and files; Webstudio renders listings and detail pages from PostgREST with RLS-protected public reads. Inserts go via Form Resources or n8n; Resend sends transactional mails. Add NocoDB on the same Postgres if editors need a spreadsheet view.

Monthly cost$15-60/mo

Webstudio Pro $15; Supabase Free for prototypes, Pro $25 for production (no pausing); n8n self-hosted ~$5 VPS or cloud EUR 20; Resend Free 3k emails or $20.

Fully self-hosted open stack on one VPS

Own everything, minimal SaaS

Build in Webstudio, export with the CLI and deploy via Coolify next to Baserow (CMS), n8n (automation), Listmonk (newsletter) and Umami (analytics). Maximum data ownership; you are responsible for backups, updates and security.

Monthly cost$10-25/mo

Hetzner/DigitalOcean VPS with 4-8 GB RAM ~$8-20; Coolify self-hosted free; all apps free self-hosted; SES pennies; Webstudio Free builder with CLI export (or Pro $15 if you want cloud hosting).

Headless CMS for complex content

Multilingual or complex content model with roles

Directus manages structured content, translations, files and fine-grained editor roles in your own Postgres; Webstudio queries REST or GraphQL. Directus Flows call webhooks for notifications. Note the MSCL licence (source-available) since v12.

Monthly cost$25-110/mo

Webstudio Pro $15; Directus self-hosted free under Innovation Grant on a $10-20 VPS via Coolify, or Directus Cloud Core $89/mo; Postmark $15.

Lead capture to CRM-lite and newsletter

Capture leads, store them and nurture by email

Webstudio Form → n8n webhook → Baserow (lead table, de-duplicated) + Listmonk subscriber (double opt-in) + Postmark notification to sales and confirmation to visitor. Listmonk newsletters go out via SES for low cost.

Monthly cost$20-45/mo

Webstudio Pro $15; n8n, Baserow, Listmonk self-hosted on one $10 VPS (or PikaPods ~$10 total); Postmark $15 for instant notifications; SES ~$1-3 for newsletters.

No-server starter stack

Launch fast without running any servers

Everything on free cloud tiers: content in Baserow, form actions straight to Baserow and Resend from the Webstudio Form, analytics with Umami Cloud, and Activepieces for occasional automations. Upgrade pieces individually as traffic grows.

Monthly cost$0-15/mo

Webstudio Free or Pro $15; Baserow cloud Free (3,000 rows); Resend Free (3,000 emails); Umami Cloud Hobby free (100k events); Activepieces Free (1,000 credits).

Privacy-first EU stack

GDPR-friendly site with EU-hosted tools

Cookie-free analytics, EU-based database and newsletter vendors, open-source surveys. Webstudio forms post to Baserow and Keila; Formbricks surveys embedded via HTML Embed.

Monthly cost$25-60/mo

Webstudio Pro $15; Baserow cloud (NL company) Free/Premium $10; Keila cloud EUR 8-16 (DE) or self-host; Plausible $9 (EU-hosted); Formbricks Community self-hosted free.

How the tools connect

Native connections, REST resources, webhooks and automation recipes between the tools we cover.

WebhookEasy

Baserow table webhook (rows.created/updated) posts to an n8n Webhook node, e.g. to trigger a Cloudflare/Webstudio rebuild, send a Slack message on new submissions, or push approved leads to Listmonk.

Guide ↗
NativeEasy

Coolify one-click service templates deploy Listmonk with Postgres (and similarly n8n, Baserow, Directus, NocoDB, Umami, Plausible) with automatic HTTPS via Traefik.

Guide ↗
WebhookMedium

Directus Flow with an Event Hook trigger (items.create/update) and a Webhook/Request URL operation to n8n; useful to sync newsletter opt-ins stored in Directus to Listmonk.

Guide ↗
SMTPMedium

Verify the domain in SES (DKIM, custom MAIL FROM), get production access, create SMTP credentials and add them in Listmonk Settings > SMTP (email-smtp.<region>.amazonaws.com:587, STARTTLS) with a sensible rate limit. For bounces: SNS topic for bounces/complaints with HTTPS subscription to /webhooks/service/ses and enable SES bounce processing in Listmonk.

Guide ↗
SMTPEasy

Create a Broadcast message stream in Postmark (marketing mail must not use the transactional stream), use its SMTP token in Listmonk SMTP settings with the X-PM-Message-Stream header, and point Postmark's bounce webhook to /webhooks/service/postmark.

Guide ↗
Via automation (n8n/Make)Medium

AWS SES node sends templated or plain emails (notifications, lead confirmations) with IAM credentials scoped to ses:SendEmail.

Guide ↗
Via automation (n8n/Make)Easy

Native Baserow node: Create Row with field mapping from the webhook payload; use Get Many for de-duplication by email before insert. Credentials: Baserow host + username/password or token.

Guide ↗
Via automation (n8n/Make)Medium

HTTP Request node POST to https://<listmonk>/api/subscribers with API user + token (Basic auth), body {email, name, lists:[id], status:'enabled', preconfirm_subscriptions:false} to trigger double opt-in. Handle 409 (already exists) by updating lists via PUT /api/subscribers/lists.

Guide ↗
Via automation (n8n/Make)Easy

After a Webstudio form webhook, use an HTTP Request node POST https://api.postmarkapp.com/email (n8n only ships a Postmark Trigger node, not a send node) with X-Postmark-Server-Token to send an internal notification and a confirmation to the visitor using a Postmark template.

Guide ↗
Via automation (n8n/Make)Easy

HTTP Request node POST (form-urlencoded) to https://<sendy>/subscribe with api_key, list, email, name and boolean=true; Sendy returns '1' on success. The same call can be made from a Webstudio Form Resource if you accept the API key sitting in a server-side Resource.

Guide ↗
NativeMedium

Connect NocoDB to the Supabase Postgres connection string as an external data source, giving editors a spreadsheet UI over Supabase tables while the site reads through Supabase REST.

Guide ↗
NativeMedium

Enter AWS IAM access keys in Sendy settings; Sendy verifies identities and sends via the SES API. Set up SNS bounce and complaint topics pointing to Sendy's endpoints (Sendy can create them automatically). v7 shows SES enforcement status in the sidebar.

Guide ↗
SMTPMedium

Sendy supports SMTP for non-SES providers per brand; enter Postmark broadcast-stream SMTP credentials. Bounce handling is less automatic than with SES, so check Postmark suppressions regularly.

NativeEasy

Copy elements in the Webflow Designer and paste into Webstudio; the converter maps Webflow elements and styles to Webstudio instances. CMS content must be moved separately (CSV export to Baserow etc.).

Guide ↗
REST API resourceEasy

Create a database token in Baserow. In Webstudio add a Resource variable (GET) to https://api.baserow.io/api/database/rows/table/<id>/?user_field_names=true with header Authorization: Token <token>; add filter/search params from URL system variables. Bind the result's .results to a Collection; use a dynamic page path (/blog/:slug) with a filter__field__equal param for detail pages. Resources run server-side, so the token is not exposed.

Guide ↗
NativeMedium

Export with the Webstudio CLI (webstudio link, sync, build --template cloudflare or static), then deploy with Wrangler or connect a Git repo to Pages. Static export loses server features (forms, dynamic resources at request time); the JS app keeps them on Workers.

Guide ↗
NativeMedium

Export the project with the CLI as a Docker-ready app, push to Git, and deploy as an application in Coolify on Hetzner or DigitalOcean; the same server can host Baserow, n8n and Listmonk.

Guide ↗
REST API resourceMedium

Create a static token for a read-only role in Directus. Use a Resource on REST (/items/<collection>?filter[status][_eq]=published&fields=*,image.*) or GraphQL (/graphql with a query built in the Directus GraphQL playground). Images via /assets/<id>?width=... transformations.

Guide ↗
EmbedEasy

Copy components/animations from the GitHub repo and paste into Webstudio (HTML Embed or the copy-paste data for Webstudio); animation scripts go into custom code. No licence file yet, so check with the author before commercial reuse.

Guide ↗
EmbedEasy

Embed a Formbricks link survey via iframe in an HTML Embed, or load the JS SDK in custom code for in-page surveys; responses go to Baserow/n8n via Formbricks webhooks.

Guide ↗
REST API resourceMedium

Generate an API token in NocoDB, then Resource GET to /api/v2/tables/<tableId>/records?where=(Status,eq,Published) with header xc-token. Response list is in .list. If NocoDB sits on a Supabase/Postgres DB, the same data can alternatively be read via Supabase REST.

Guide ↗
EmbedEasy

Paste the Plausible script tag into Project Settings > Custom code (head). Track form submits as custom events with the plausible() call or tagged CSS classes.

Guide ↗
REST API resourceEasy

Set the collection's List/View API rule to public (or pass a token), then Resource GET to https://<host>/api/collections/<name>/records?filter=(published=true). Bind .items to a Collection.

Guide ↗
REST API resourceMedium

Enable Row Level Security with a public select policy, then add a Resource GET to https://<ref>.supabase.co/rest/v1/<table>?select=*&published=eq.true with headers apikey and Authorization: Bearer <anon key>. Bind to Collections and dynamic pages; PostgREST filters (eq, order, limit) map to query params.

Guide ↗
EmbedEasy

Add the Umami tracker script to custom head code; add data-umami-event attributes to buttons in Webstudio's attribute panel for event tracking.

Guide ↗
REST API resourceMedium

Create a POST Resource on the Form to /api/database/rows/table/<id>/?user_field_names=true with the token header and a JSON body bound to formData fields (formData.name, formData.email). Add it as a Form action (up to 10 actions run in parallel). Use a token with create-only permission on that table.

Guide ↗
REST API resourceEasy

Without n8n: POST Resource to Listmonk's public endpoint /api/public/subscription with JSON {email, name, list_uuids:[...]} (no API key needed; enable public subscription and the lists must be public). Listmonk sends the double opt-in mail itself.

Guide ↗
WebhookEasy

Add an n8n Webhook node (POST), copy the production URL, and add it as a REST Resource action on the Webstudio Form (or as the action URL of a legacy Webhook Form). n8n receives formData and can branch to any number of tools. Return a JSON response for success messages.

Guide ↗
REST API resourceEasy

Email action without automation: POST Resource to https://api.resend.com/emails with Authorization: Bearer <key>, body {from, to, subject, html} with formData bound in. Webstudio Cloud also has built-in Email to owner/visitor actions, so Resend is mainly for self-hosted exports or custom domains/templates.

Guide ↗
REST API resourceMedium

POST Resource to /rest/v1/<table> with anon key headers and Prefer: return=minimal, body from formData. Requires an RLS insert-only policy; for validation or spam checks route via an Edge Function or n8n instead.

Guide ↗

Want a stack recommendation?

Tell us what you are building. We suggest a stack and, if you like, an expert to set it up.