Mvox / RS Milow Audio — Ops Guide
Everything needed to run this system: what each piece is, how to do the things you'll actually need to do, and the limits that tell you when a free tier stops being enough.
01How this all fits together
Mvox is a one-time-purchase (no subscription) audio plugin suite. The business has four moving parts that all talk to each other:
- A static website (no server of its own) that sells the plugins and hosts the account dashboard
- A backend (database + login + small serverless functions) that both the website and the plugin itself talk to — this is the single source of truth for who owns what
- Stripe for taking payment
- The plugin itself (C++/JUCE), which checks in with the backend on launch to confirm it's licensed, then works offline for up to 14 days if it can't reach the internet
Nothing here requires running or maintaining a server — the website is static files, the backend is fully managed, and installers are files sitting in a GitHub release.
02The pieces
mvox-hero-test.vercel.app is a disposable scratch project for previewing design changes before they go live. Not linked from anywhere real — safe to ignore or delete anytime.Source/DSP/ReverbModule.h/.cpp) hand-ported from the open-source Reverb Trickery project (a Dattorro plate reverb + saturation + band filter, collapsed behind one knob). Delay lengths/coefficients came directly from Faust's own reverbs.lib dattorro_rev, not guessed. Advanced mode is the original, completely untouched engine — existing sessions/presets default to it.03Doing things
The runbooks you'll actually reach for.
3.1 — Deploy the website
Every site file change (pricing, copy, layout, new pages) needs this to go live. Claude can edit every file but is blocked from running this specific command — it'll hand you the exact line to paste.
Set-Location "C:\Users\Rohit\Desktop\Mvox Website"
$token = (Get-Content .env | Where-Object { $_ -match '^VERCEL_TOKEN=' }) -replace '^VERCEL_TOKEN=', ''
npx.cmd vercel --prod --yes --token $token
<VERCEL_TOKEN> placeholderPowerShell treats </> as redirection operators, so a placeholder like that errors out (RedirectionNotSupported). The command above reads the real token straight out of .env instead, so there's nothing to substitute by hand.3.2 — Push a new plugin build live
Two ways, depending on scale:
- One file: sign in to your personal account, go to Account → Upload Installers, and drag the new build onto the matching slot. It replaces the file on GitHub instantly — no site redeploy, nothing else to do.
- A whole batch (e.g. after a source change that touches every plugin): rebuild everything, copy the fresh installers into
Mvox Website\downloads\, then run:
This uploads every file in that folder to the release, replacing whatever's already there under the same name.cd "C:\Users\Rohit\Desktop\Mvox Website" node scripts/seed-github-releases.js
downloads\ — it's uploaded straight to GitHub Releases on its own.3.3 — Change a price
Stripe prices can't be edited once created — changing one always means creating a new Price object and retiring the old one. This touches four places, every time:
- Stripe: create the new Price on the same Product, set it as the product's default, deactivate the old Price (don't delete it — old receipts still point to it)
supabase/functions/create-checkout-session/index.ts— the price ID map and the base-price map used for the launch-sale math and the suite-upgrade creditsupabase/functions/admin-api/index.ts— the price used for revenue reportingaccount/dashboard.htmlandindex.html— the displayed number in two homepage spots plus the dashboard's locked-product tag
Just tell Claude the new number — it knows this whole chain and updates all four in one pass.
3.4 — Change the database
supabase db push is broken for this project (its migration history got out of sync early on). Every schema change instead goes through Supabase's Management API directly: a new numbered file in supabase/migrations/, applied as a raw SQL call. Claude has this workflow memorized.
3.5 — Update backend logic (an Edge Function)
Unlike the site, Claude can run this one directly:
cd "C:\Users\Rohit\Desktop\Mvox Website"
npx supabase functions deploy <function-name>
Takes effect immediately, live, no further steps.
3.6 — Rebuild the plugin (Windows)
- Build: open a Developer Command Prompt (or run
vcvarsall.bat x64first),cdintoMvox\build, runcmake --build .— the project's generator is Ninja (single-config), so the build type comes from the cachedCMAKE_BUILD_TYPEvalue, not a--configflag on this command (that flag is a Visual-Studio-generator thing and is silently ignored here) - Only the main Mvox target auto-copies itself into
C:\Program Files\Common Files\VST3\after building. The 9 mini-plugins don't — copy each one's.vst3folder over manually every time - To cut new installers: stage the fresh
.vst3folders intoDesktop\mvox parts\, runBuildMiniInstallers.ps1(the 9 minis) and the twoISCC.exe MvoxSuite...Installer.isscommands (suite + trial)
Mvox\build\CMakeCache.txt must have CMAKE_BUILD_TYPE:STRING=Release. If it ever reads Debug again, every installer built from it will link the Debug CRT (MSVCP140D.dll, VCRUNTIME140D.dll, ucrtbased.dll) instead of the real redistributable's Release DLLs — those only exist on machines with Visual Studio installed, so the plugin fails to load with a bare "error" status for every real customer. This exact bug shipped to customers once already (discovered 2026-08-30 via a customer's FL Studio scan + the open-source Dependencies tool) and was almost certainly also inflating the CPU-usage complaints, since Debug builds skip compiler optimizations and add runtime checks. To fix a stale cache: cmake -DCMAKE_BUILD_TYPE=Release . from inside Mvox\build, then rebuild — this forces a full recompile since Debug and Release object files can't be reused.3.7 — Change which Discord role gets pinged
There's no bot, only a webhook, so this can't be changed from Discord's side — the role ID is hardcoded into two Postgres trigger functions. Get the new role's ID (Discord → enable Developer Mode → right-click the role → Copy Role ID) and hand it to Claude.
04Limits & when to upgrade
What's confirmed vs. a well-sourced estimate — free-tier numbers shift, treat this as "roughly here, verify in your own dashboard before it matters."
| Service | Current plan | Free-tier ceiling | What happens at the limit |
|---|---|---|---|
| Vercel | Hobby (confirmed) | 100GB bandwidth/mo · 100MB max per static file · no overage billing | Site pauses until next month — no way to pay through it. (100MB file limit is why installers live on GitHub instead.) |
| Supabase | Free (inferred) | 500MB database · 5GB egress/mo · 50k monthly active users · 500k function calls/mo · 1GB file storage | Pauses after 7 days idle — see above. Otherwise requests throttle/reject past the cap. |
| Stripe | Pay-per-transaction | No plan tier — scales with volume | Nothing to hit. Standard processing fees apply per charge. |
| GitHub | Free | 2GB per release asset · private repos free | Biggest file today is ~130MB — plenty of headroom. |
Vercel's plan confirmed directly via its API. Supabase's tier is inferred from an earlier 50MB Storage upload error matching the known free-tier cap, not read off a billing endpoint directly.
05Known quirks
- PowerShell uses
;, not&&— a command chain copied from anywhere bash-flavored will fail with a parser error. - Use
npx.cmd, notnpx— barenpxtries to run a PowerShell script, blocked by this machine's execution policy. - Claude can't run certain commands itself — deploying the live site, setting secrets, and calling raw GitHub/Stripe APIs directly are blocked by an internal safety check regardless of chat approval. Claude prepares the exact command; you run it. Deploying an Edge Function is not blocked.
supabase db pushdoesn't work for this project — see 3.4.- Only the main Mvox target auto-installs after a build. The 9 mini-plugins need manual copying every time.
- Stripe prices are immutable. No "edit price" — only create-new-and-retire-old.
06Where things live
| Path | What's there |
|---|---|
Desktop\Mvox Website\ | The site itself, plus supabase\functions\ and supabase\migrations\ |
Desktop\Mvox\ | Plugin C++ source (git repo, pushes to RSMilow/MVOX) |
Desktop\mvox parts\ | Installer staging — Inno Setup scripts, BuildMiniInstallers.ps1, staged .vst3 folders |
Mvox Website\downloads\ | Local staging before seed-github-releases.js uploads to GitHub |
Mvox Website\stripe_price_ids.txt | Plain-text mirror of current Stripe price IDs |
C:\Program Files\Common Files\VST3\ | Where installed plugins actually live for any DAW |
07Credentials
Everything below lives in Mvox Website\.env — never committed to git.
VERCEL_TOKEN— deploys the siteGITHUB_TOKEN— pushes installer files to the downloads repoSUPABASE_ACCESS_TOKEN— the Management API workaround for schema changesSTRIPE_SECRET_KEY— creating/retiring prices, live account
