⚡ VBWD
A sales platform for the digital world — SaaS subscriptions, CMS, shop, booking and a token economy on one self-hosted backend, two Vue front-ends and one plugin contract.
The same platform, now in your pocket
VBWD ships two fully native mobile clients — VBWD for iOS (SwiftUI) and VBWD for Android (Jetpack Compose). Neither is a web-view shell: they are real apps built on a shared SDK that speaks to the same backend and honours the same plugin contract as the two Vue front-ends. A plugin author who knows the web SDK maps to mobile 1:1.
From sign-in to LLM chat — the whole journey
Sign in, land on a dashboard of token balance, invoices and plugin widgets, read CMS posts in-app, chat in rooms, send tokens to another user with a tap, talk to an LLM bot that answers with tappable choice cards, and manage your profile — all from one app whose every screen is contributed by a plugin.










Screens captured from the live VBWD mobile app (Android build). The iOS app is a 1:1 SwiftUI port that renders the same screens and navigation.
A plugin is a plugin — on the web and on the phone
The mobile SDK mirrors the web SDK's seams exactly. A plugin's
entry point receives a PlatformSDK facade and registers
into the app through the same named extension points:
- Routes —
addRoute(path, view)registers a screen; auth + permission gating is declarative. - Menu items —
addMenuItem(...)drops an entry into the navigation drawer. - Components —
addComponent(name, view); names prefixedDashboard*surface as dashboard widgets,Profile*as profile sections. - Stores, translations, events — plugin-scoped state, i18n, and a decoupled event bus shared with core.
- Payments & cart —
addPaymentAction(...)and a shared cart power native checkout across token, Stripe and invoice methods.
The backend stays the single source of truth for plugin
enable/disable state; the apps read a bundled
plugins.json manifest at boot and install the
enabled plugins in dependency order — a disabled plugin simply
never appears.
What ships in the box
Both apps carry the same constellation of feature plugins — each a native port of its web counterpart:
meinchatMulti-room chat: SSE streaming, image attachments, peer-to-peer token transfers, LLM bot rooms with choice/menu/cart cards.
meinchat-plusEnd-to-end encryption layer on top of meinchat (declares a dependency on it).
cmsIn-app “Posts” browser over the host CMS — pages, posts, video and PDF.
subscriptionTarif-plan + add-on browsing, subscription management, a dashboard widget and a checkout source.
token-paymentPay from the token balance — an instant, redirect-free debit.
stripeStripe Checkout as a native payment method.
invoice“Pay by invoice” — bank-transfer instructions.
tarotA self-contained reading feature — the canonical “non-commerce” plugin.