You can go from an empty server to a running subscription business — accounts, plans, checkout, invoices, an admin backoffice — in a single weekend, on a VPS that costs about €12 a month. This is a walkthrough of exactly that, using VBWD, a self-hosted subscription platform. No hosted dashboard, no per-transaction cut, no vendor holding your customer list. You own the server, the database, and every byte of user data.
VBWD ships the parts of a SaaS that are the same for everyone and boring to rebuild: registration and login with JWT auth, tiered subscription plans with billing periods, a checkout that talks to Stripe/PayPal/YooKassa, an invoice lifecycle with tax handling, a token/credit system for metered usage, a CMS for your public pages, and two separate frontends — one for users (port 8080) and one for admins (port 8081). The backend is Python 3.11 / Flask 3.0 on PostgreSQL 16 and Redis 7. The frontends are Vue 3 + TypeScript. Everything runs in Docker.
The point of starting here is leverage: the plumbing that usually eats your first month is already tested and wired together. Your weekend goes into the one thing that makes your product yours — a plan structure, a landing page, and one feature.
Any small VPS works. A 2 vCPU / 4 GB box from Hetzner, Contabo, or a comparable EU provider runs the full stack — API, Postgres, Redis, and both frontends — comfortably for early traffic, and lands around €12–16/month. Pick an EU region if you care about data residency (more on that below).
Provision Ubuntu, install Docker and the Docker Compose plugin, point a domain at the box, and open ports 80/443. That is the whole infrastructure story. There is no managed database to configure, no serverless cold-start to reason about, no third-party auth provider to integrate. If the machine is up and Docker is installed, you are ready.
VBWD ships an installer that clones the repositories in the correct order, initialises the frontend component library, and brings the stack up:
git clone --recurse-submodules <vbwd-sdk>
cd vbwd-sdk
./recipes/dev-install-ce.shThe build order matters and the script handles it: the shared Vue component library (vbwd-fe-core) must build first because both the user and admin apps consume it. Once the installer finishes, the backend comes up with:
cd vbwd-backend
make up # API + PostgreSQL + Redis
make logs # watch it bootDatabase schema is managed with Alembic migrations, applied on startup. When the containers are healthy you have a live API on the internal port, the user app on 8080, and the admin app on 8081, with nginx proxying /api/ to the backend. Log in to the admin app with the seeded admin account and you are looking at a working control panel: users, plans, subscriptions, invoices, webhooks, analytics.
A note that saves you an hour: a green health check is not the same as "plugins loaded." If a feature you expected is missing, check that its plugin is enabled — plugin state lives in one directory on the host (var/plugins/) and is shared by all three apps.
Everything commercial starts with a plan. In the admin app, create your tariff plans — name, price, currency, billing period, and whatever limits define your tiers. VBWD models plans, billing periods, upgrades, downgrades, cancellations, and the invoice that results from each, including per-rate tax breakdown. You are not writing billing logic; you are configuring it.
Payments are plugins behind a common adapter. Stripe, PayPal, and YooKassa ship working; more rails are on the roadmap behind the same interface. To take real money you enable the payment plugin, drop in your provider keys, and point it at your account. Checkout then runs against that provider and the invoice lifecycle updates from the provider's webhooks. If you later want a different or regional provider, you swap the plugin — the rest of your app does not change, because it only ever talked to the adapter.
If your product meters usage — API calls, AI generations, exports — use the token system instead of, or alongside, flat plans. Customers buy credit bundles; you decrement them as they consume. That is how you bill an AI feature without inventing your own metering.
You need a landing page and a pricing page that a stranger can act on. The built-in CMS gives you pages, a rich-text editor, images, layouts, and slug-based routing. Build your landing content there. For pricing, VBWD exposes plans through a public API and an embeddable pricing widget — a JavaScript snippet you can drop onto the CMS page, or onto any external site, so the "choose a plan" call-to-action routes visitors straight into checkout. You do not have to hand-code a pricing table or keep it in sync with your plans; it reads them live.
This is where a weekend project becomes a product. VBWD is a plugin platform: the core is deliberately generic, and every vertical — a shop, bookings, datasets, a tarot service, a GitHub-gated software store — is a plugin. You add your feature the same way, without editing core. Backend plugins are auto-discovered from a plugins directory; a plugin declares its metadata, registers its routes and services, and hooks lifecycle events. You do not touch the application entry point, and you do not fork the platform to extend it.
For a first weekend, keep the custom feature small and real: one new page, one new endpoint, one thing your competitors' generic tools do not do for your niche. The platform carries the accounts, billing, and admin around it.
Here is why self-hosting changes the unit economics. Hosted creator and agency platforms take a cut or a fat monthly fee: Substack and Gumroad take around 10% of revenue, OnlyFans 20%, GoHighLevel charges from about $497/month. On VBWD your platform cost is the VPS — a fixed ~€12–16/month — plus your payment processor's standard fees, which you would pay anywhere. At €1,000/month in sales, a 10% platform lives on €100 of your money every month, forever; your VPS bill does not move. The gap widens with every customer you add. You are trading a small amount of ops work for keeping the percentage.
The other half of the math is ownership. On a hosted platform your customer list, your content, and your billing relationship live on someone else's system under their terms of service. Self-hosted, they live on your server. That matters for margin, for data protection obligations, and for the day a platform changes its rules.
Be honest with yourself about the trade. Self-hosting means you own uptime, backups, and updates. A €12 VPS with no backup strategy is a single point of failure; budget an hour to set up automated Postgres backups before you take real customers. You are also responsible for TLS, for keeping the OS patched, and for scaling the box when traffic grows. None of this is hard, but it is yours. If you would rather pay a percentage to never think about a server, a hosted platform is the honest choice. If you would rather pay a fixed bill and own the stack, this is the trade you are making on purpose.
VBWD is source-available under the Business Source License 1.1. In plain terms: it is free to use — including commercially, including for a real SaaS you charge for — as long as your annual VBWD-attributable sales stay below the value of 6.7 BTC, measured as the year's average BTC/USD. Above that threshold you buy a commercial licence. Non-production use is always free, and the licence converts to Apache-2.0 on its change date. For a weekend project and a young SaaS, you are comfortably inside the free grant.
dev-install-ce.sh; bring the backend up with make up.By Sunday night you have a live, self-hosted subscription product with real checkout on a €12 server, and a codebase you own outright. The next weekend is for the second feature — and because it is a plugin, you will not have to touch anything you built this one.
Start from the installer and read the plugin and billing docs as you go; everything above maps to a documented command or endpoint.
