Studio composer with live reveal
Prompt, negative prompt, FLUX schnell/dev/pro, size preset and a 1-4 image count, all on one /studio screen. The generating card polls every second and reveals each image the moment fal finishes — no refresh.
A complete fal.ai image generator — a gorgeous studio and gallery that open free in the sidebar app, then meter each render by credit balance.
A credit-metered FLUX pipeline with a live render reveal — the prompt types itself, the canvas resolves out of noise, and one credit clicks off the meter. Every result is re-fetched into storage you own.
Type a prompt, pick a FLUX model and size, spend a credit per image. Every render lands in your own private R2 bucket behind a gallery you own — keys, billing and credit metering all included.
Prompt, negative prompt, FLUX schnell/dev/pro, size preset and a 1-4 image count, all on one /studio screen. The generating card polls every second and reveals each image the moment fal finishes — no refresh.
A /gallery masonry grid with likes, folders you create and rename, and a lightbox that does prev/next, copy-prompt and download. Filter by liked or collection; move images between folders.
/studio and /gallery live in the member sidebar app and open for any signed-in user — no hard paywall. Each generation spends 1 credit up front; hit zero and you're routed to top-up. If fal fails or the submit throws, the credits are refunded automatically.
Hit Remix on a gallery image and its prompt, model, seed and size load straight back into the studio. Lock the seed or randomise it.
Every image is downloaded from fal and uploaded into your private Cloudflare R2 bucket. No SDK — a plain cURL S3 Sig V4 signer in bootstrap.php.
The whole pipeline is dormant until FAL_KEY and your R2 keys are set, so the rest of the stack runs clean without it. A built-in dev mock paints gradient PNGs so you can click through the full studio and gallery before you spend a penny on fal.
Type a prompt, pick a FLUX model, spend a credit per image — and every result is re-fetched server-side and self-hosted in your private R2 before it hits the grid.
fal → your private R2 (S3 Sig V4 PUT) → presigned GET, expires in hours
Every figure here is how the pipeline actually behaves — not a sales number.
You're in one now. Hop straight to any other site type — same tab, still a demo: no card needed, no payment is real, and nothing you do is saved.
Each site-type demo is one of the seven ready-to-run profiles in the download — copy the folder, add your keys, ship.
Keep the infrastructure small. Make the product yours.
| web_build_step | none |
| source_code | included |
| hosting | your own server |
| database_mode | SQLite WAL |
Every install ships with this. Search users, replay webhooks, inspect billing and revoke keys — server-rendered, access-gated, no second app.
| User | Plan | Status | Joined |
|---|---|---|---|
| ada@example.com | Pro | active | 2d ago |
| grace@example.com | Scale | active | 5d ago |
| linus@example.com | Starter | past due | 3w ago |
| margaret@example.com | Pro | active | 1mo ago |
| blocked@example.com | Free | blocked | 1mo ago |
invoice.paidevt_1Q8x…a3customer.subscription.updatedevt_1Q8w…f1checkout.session.completedevt_1Q8w…7cinvoice.payment_failedevt_1Q8v…02charge.refundedevt_1Q8u…9dcurl -H "Authorization: Bearer ss_live_••••" \ https://app.yoursaas.com/api.php?resource=notes { "ok": true, "data": [ "note_18f2", "note_18f9" ], "rate_limit": "58/60", "credits_left": 1840 }
copy a template folder
composer install · Stripe + SES
rebrand · plans · run doctor
NGINX + PHP-FPM · take cards
Try the local app before configuring billing or email. Provider approval and deployment take additional time.
Define plans in app/subscriptions.php, attach Stripe price IDs, and the checkout flow stays generic across every project.
Default access for new users and trial accounts.
For a small paid SaaS tier.
For heavier usage and premium features.
For power users and high-credit products.
Whatever you decide — a generation, an API call, an export, a render minute. Plans grant credits; each action spends them through one ledger via consume_credits_for_action().
Your call per plan. Period credits top up to a fresh allowance each period by default, and you can switch to rollover in the plan config.
Yes — combine recurring plans that grant credits with one-time purchases for top-up packs.
The starter includes prepared queries, signed Stripe webhooks, CSRF checks, rate limiting, session hardening, setup diagnostics and regression tests. Configure the enabled providers, verify backups and test your own product before launch.
You pay your hosting and service providers directly. Budget for a PHP server, domain, transactional email and payment processing. Image generation/storage and native app store accounts add costs if you enable them. Check provider pricing for your region and expected usage; the template itself is a one-time purchase.
This is a live, fully interactive demo — explore every screen. Nothing you do is saved and no payments are real.