WWebBuddyMarketplace
Reference

FAQ and troubleshooting

Answers to the questions buyers ask before purchase, and fixes for the most common installation, sign-in, generation and billing problems.

6 min readUpdated Oct 17, 2026Applies to Adcraft 1.0.0

On this page

Before you buy

Can I run it as a SaaS with the Regular License?

Only if your end users are not charged. The Envato Regular License covers one end product whose users do not pay. If customers pay you to use it (subscriptions, credit packs, setup fees, any paid plan), you need the Extended License. See Envato's licence terms and Selling it as SaaS.

What are the server requirements?

Node.js 22 as a long-lived process (a VPS or container host, not serverless), PostgreSQL, durable storage for media (a volume or Cloudflare R2), a domain with HTTPS, and Resend or Google for sign-in. As guidance, 1 GB of RAM runs the app and 2 GB or more is needed to render video on the same machine. Full details: Requirements.

Can I host it on Vercel, Netlify or shared hosting?

Not as a whole. Video rendering, website screenshots and inline background jobs need a persistent process with a headless browser. Shared PHP hosting and cPanel cannot run it at all. Use a VPS, a Docker host, Railway, Render or Fly.io, with auto-stop turned off.

Are there default admin credentials?

No. There are no default accounts, no passwords and no setup wizard. Put your address in ADMIN_EMAILS, sign in with a magic link or Google, and you are a platform admin. See First admin.

Which AI keys do I need?

None to try it. For real work:

You want Key
Ad concepts and copy ANTHROPIC_API_KEY (or an OpenAI-compatible model)
Static ads, background removal, product video FAL_KEY
Presenter videos, avatars, looks, voice cloning HEYGEN_API_KEY
Voice-over with ElevenLabs voices ELEVENLABS_API_KEY

OpenAI, xAI, Replicate and Runway are optional extras. See AI models and providers.

Does it come with AI credits or a HeyGen account?

No. You use your own provider accounts and they bill you directly. Adcraft's own credits are what you sell to your customers; they are not provider credit. The HeyGen presenter library, voices and look packs are only available through a connected HeyGen account.

Is there a demo?

Yes: www.adcrafts.co.

Does it really publish to Meta, TikTok and Google Ads?

Yes, through your own developer apps once each platform approves them. Until then, built-in sandbox accounts simulate campaigns and metrics. Google Ads publishing is limited to Demand Gen image ads in 1.0.0. See Publishing and performance.

Can I sell monthly and yearly plans?

Monthly plans, a credit top-up and the Stripe customer portal work. Yearly plans are not offered in the app in 1.0.0. See Selling it as SaaS.

Which payment gateways are supported?

Stripe only.

Can I rebrand it?

Yes. Colours and type live in one tokens file, the logo in one component, and the marketing site is plain HTML and JavaScript. See Rebranding. You also have the full source.

Are there licences besides the Envato one?

Yes. Remotion (product-video rendering) needs a paid company licence for organisations of more than three people, and FFmpeg is GPL-licensed. Read THIRD-PARTY-NOTICES.md in the package.

Troubleshooting

"No sign-in method is configured"

You are running in production without a sign-in provider. Set RESEND_API_KEY (and EMAIL_FROM on a domain verified in Resend), or AUTH_GOOGLE_ID and AUTH_GOOGLE_SECRET, and restart. The development sign-in box is never available in production.

Sign-in fails or loops after deploying

Set AUTH_URL to your exact public HTTPS address, with no trailing slash. In production, sign-in does not trust the request host without it. Make sure your proxy forwards the Host and X-Forwarded-Proto headers.

EMAIL_FROM must use a domain verified in your Resend account. When it is unset, the code falls back to Resend's test sender, onboarding@resend.dev, which is only for testing. Check Resend's logs. Sending is also rate-limited to 5 a minute per IP address and 3 a minute per email address.

I am not becoming an admin

The address must be in ADMIN_EMAILS exactly (comma-separated), the app restarted after the change, and you must sign in with that address. Then open /admin.

An admin lost access after I edited ADMIN_EMAILS

Removing an address demotes that user on their next request, unless their admin flag was granted under Admin → Users. Add the address back, or grant it again from Admin → Users. See First admin.

"Payments are not set up on this site yet"

The install runs in production without STRIPE_SECRET_KEY, so purchases are refused. Configure Stripe, or set ALLOW_SIMULATED_BILLING=true only if the site should hand out free credits. See Running without Stripe.

Everyone is signed out after a restart, or ad accounts stop working

AUTH_SECRET changed. Keep it fixed. If TOKEN_ENCRYPTION_KEY is not set, ad-platform tokens are encrypted with a key derived from AUTH_SECRET, so connected ad accounts must be reconnected after it changes.

The container fails to start without a database

Set DATABASE_URL. The embedded database is for evaluation; in Docker it needs PGLITE_DATA_DIR pointing at a writable mounted volume such as /data/pglite.

Errors such as relation "…" does not exist

The migrations have not run. The Docker container runs them on start when DATABASE_URL is set; check the start-up log for [start] running migrations. By hand: pnpm --filter @adcraft/db db:migrate.

Generated files disappear after a redeploy

The container wrote them to its own filesystem. Mount a volume at /data (the image stores files in /data/files), or configure Cloudflare R2.

Concepts all start with "[Sample]"

No text model is connected. Add ANTHROPIC_API_KEY, or make a connected model the default under Admin → Models. Admin → Providers shows what is missing.

"Generate" is disabled on the static ad form

The chosen image model's provider is not connected. The form names the key to add; for the default model that is FAL_KEY.

Videos show placeholder scenes or a "presenter card"

FAL_KEY (scenes and clips) or HEYGEN_API_KEY (presenters) is missing. A silent video means ELEVENLABS_API_KEY is missing and an ElevenLabs voice was chosen.

"This workspace has reached its monthly generation budget"

The workspace hit the monthly provider cost cap ($200 by default). Raise or clear it under Admin → Settings → Guardrail defaults. It resets on the 1st of the month (UTC).

"That's a lot of generations in a minute"

The generation rate limit (30 a minute per workspace and kind by default). Wait a moment, or raise Actions per minute under Admin → Settings.

Video renders fail or the server runs out of memory

Rendering needs a headless browser, about 2 GB of memory and a writable temporary directory. Give the container more memory. If the bundled browser cannot start on your system, set REMOTION_BROWSER_EXECUTABLE to an installed Chrome or Chromium.

Uploads of large footage fail

Your reverse proxy is limiting request size. Digital-twin footage can be up to 600 MB; with nginx, set client_max_body_size (see the nginx example).

Stripe checkout works but no credits arrive

Check that the webhook endpoint https://<your-domain>/api/stripe/webhook exists with the five events listed on Stripe setup and that STRIPE_WEBHOOK_SECRET is its signing secret. Plan credits arrive with invoice.paid, not when checkout finishes. Stripe's webhook log shows each delivery's response.

Customers get credits without paying

STRIPE_SECRET_KEY is not set and either the app is not running in production or ALLOW_SIMULATED_BILLING=true is set, so purchases are simulated. See Running without Stripe.

Published campaigns do not appear on the platform

That platform is in sandbox mode: its keys are missing, or the ad account was connected as a sandbox. Add the keys, then connect the real ad account.

Performance numbers never update by themselves

Without Inngest there is no hourly sync. Press Sync now, or configure Inngest.

Some sites block automated readers or render everything with JavaScript. Set the brand kit by hand; nothing else depends on the import.

Where do I find the logs?

docker logs <container>, or your platform's log viewer. Request errors are also listed at Admin → Errors for 14 days.