WWebBuddyMarketplace
Reference

FAQ and troubleshooting

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

5 min readUpdated Oct 17, 2026Applies to LinkNest 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 creators pay you for a plan, you need the Extended License. See Envato's licence terms and Selling it as SaaS.

What are the server requirements?

Node.js 22, Postgres, and a domain with HTTPS. It runs as one Docker container on a VPS (Coolify works), as a Node process on a VM, or on Vercel. No Redis, queue or file storage. Full details: Requirements.

Can I install it on shared PHP hosting?

No. It needs a Node 22 process.

Can I host it on Vercel?

Yes. Vercel is the default build target, and on Vercel analytics also get the visitor's region and city. Set DATABASE_URL so it is available during the build, which runs the migrations. See Deploying on Vercel.

Are there default admin credentials?

No. You list admin email addresses in ADMIN_EMAILS, then sign up with them. Addresses are not verified, so register them yourself before you share the URL. See Admins.

Does it need an AI key?

No. The only AI feature, the page co-pilot, falls back to a built-in planner without XAI_API_KEY. With a key it uses xAI's grok-4-1-fast-non-reasoning.

Which payment gateways work?

Stripe, PayPal and Razorpay, for plan subscriptions and for creators' tips and products. Any one is enough. See Selling it as SaaS.

Do creators get paid directly?

No. Tips and product sales go to your gateway account; creators request payouts and you pay them by hand. See Earn and payouts.

Does it work without any payment gateway?

Yes. Every page stays on Free unless you change plans by hand under Admin → People, and creators can still publish. Tips can point at an external tip page.

Can I rebrand it?

Yes. Admin → Brand sets the product name, logo, favicon, SEO text and share image, and you have the full source for the rest. Some strings, such as linknest.app/<username>, are hard-coded in 1.0.0; see Known limitations.

Is there a demo?

Yes: linknest.link. Open Sign in and choose Explore the creator studio or Explore the admin panel for a one-click, read-only tour, or sign up to build your own page. /u/solandclay is the demo’s public page.

Troubleshooting

Sign-in says "Invalid origin"

The site's origin is not trusted. Set BETTER_AUTH_URL to your exact HTTPS origin (for example https://links.example.com) and VITE_PUBLIC_HOSTNAME to the host (links.example.com), then restart. Locally, use http://localhost:8080; another port is not trusted unless BETTER_AUTH_URL names it.

I sign in and am immediately signed out

Session cookies are Secure and need HTTPS on any host except localhost. Serve the site over HTTPS. If everyone is signed out after each restart, BETTER_AUTH_SECRET is not set.

Google or X sign-in fails

Those buttons use a hosted sign-in broker that does not accept self-hosted domains. Set VITE_SOCIAL_AUTH=false, rebuild, and use email and password.

"Can't open admin"

Your account is not in the admins table and its email is not in ADMIN_EMAILS. Add the exact address you signed up with, restart, and open /admin again. See Fixing the admin seat.

The live status, co-pilot or face schedules say they are on Pro or Premium

The page's plan does not include that feature key. The migrations give Pro live_status and copilot, and Premium also face_schedule; plans you created yourself get nothing automatically. Tick the keys under Admin → Plans, then reload the studio. See Feature keys.

My data disappeared after a restart

DATABASE_URL was empty, so the app ran on the in-memory database. Set it and restart; the container applies the migrations to the new database. Data written to the in-memory database cannot be recovered.

The container exits straight away

Read docker logs. A [migrate] failed: line means a migration could not be applied; the lines after it give the Postgres error. Common causes are a wrong DATABASE_URL, a database that is not reachable yet, or a user without permission to create tables.

I built it and node .output/server/index.mjs does not exist

The build used the default Vercel target. Rebuild with NITRO_PRESET=node-server.

Payments succeed but the plan does not change

  • Check that the webhook is registered with the provider and the secret or webhook ID is saved under Admin → Payment settings. A webhook without its secret answers 503.
  • For PayPal, check that Sandbox matches the keys you use.
  • Look in your provider's webhook log for the response code from /api/stripe/webhook, /api/paypal/webhook or /api/razorpay/webhook.

I changed STRIPE_SECRET_KEY in the environment and nothing changed

Payment keys from the environment are copied into the database on first use, and the database copy wins from then on. Change them under Admin → Payment settings, or choose Clear under the saved secret so the new environment value is used. See How payment settings are resolved.

Payments stopped after I changed a secret in the environment

If you changed or first set SETTINGS_ENCRYPTION_KEY after saving payment secrets, or changed BETTER_AUTH_SECRET while SETTINGS_ENCRYPTION_KEY was empty, the saved payment secrets can no longer be decrypted and count as not set. The log shows [settings] ... is encrypted but could not be decrypted. Enter the secrets again under Admin → Payment settings. See Encrypted payment secrets.

Razorpay charges in dollars

Razorpay charges USD unless the currency is INR and an INR per 1 USD rate is saved under Admin → Payment settings. See Razorpay.

Visitors see "Too many tries"

A public form or unlock hit its rate limit. If many unrelated visitors see it, your proxy is probably passing its own address instead of theirs; see Client IP for rate limits.

Checkout says "Untrusted checkout origin"

The request came from a host that is not VITE_PUBLIC_HOSTNAME, the host in BETTER_AUTH_URL or localhost. Set those to the domain visitors use.

A custom domain verifies but shows a certificate error

LinkNest only verifies DNS. Your proxy has to serve HTTPS for that domain. See HTTPS for custom domains.

Broadcasts are saved but nobody receives them

Set RESEND_API_KEY and a RESEND_FROM address on a domain verified in Resend. Without the key, broadcasts are saved as "ready" for the creator to send from their own mail.

Insights show no cities

City data comes from Vercel's headers only. See Analytics.