WWebBuddyMarketplace
Install and run

Admins and the admin panel

How platform admins are chosen with ADMIN_EMAILS (there are no default credentials), how to add or remove admins, and what each admin screen does.

4 min readUpdated Oct 17, 2026Applies to LinkNest 1.0.0

On this page

LinkNest ships with no default credentials and no setup wizard. Admins are the accounts listed in the admins table, and that table starts empty. The ADMIN_EMAILS environment variable decides who may be added to it.

How admins are seated

ADMIN_EMAILS is a comma-separated list of email addresses, for example you@example.com,ops@example.com. Matching ignores case and surrounding spaces, and entries without an @ are ignored.

When a signed-in account opens the studio (/dashboard) or the admin panel (/admin), LinkNest checks it:

  1. If the account is already in the admins table, it is an admin.
  2. Otherwise, if its email is in ADMIN_EMAILS, it is written into admins and becomes an admin.
  3. Otherwise it is not an admin. Nobody becomes admin for being the first to sign up.

With ADMIN_EMAILS empty or unset, no new admin is ever seated; accounts already in admins stay admins. The variable is read at runtime, so a change needs a restart, not a rebuild.

On a fresh install:

  1. Set ADMIN_EMAILS to your own address and start the app.
  2. Open your site and sign up with exactly that address, before you share the URL.
  3. Claim a username, which takes you into the studio, and open /admin.

Warning

LinkNest does not verify email addresses. Whoever registers an address listed in ADMIN_EMAILS first becomes an admin, with access to every page, plan and payment key, even if they do not own that mailbox. Register every listed address yourself before the site is public, or block public access at the proxy until you have. Do not list addresses you have not registered.

On the embedded in-memory database, the seat disappears with everything else when the process restarts; sign up again with a listed address.

Upgrading from a build without ADMIN_EMAILS

Earlier builds seated the first account that opened the studio. Those admins are kept: the upgrade does not remove anyone from admins. Set ADMIN_EMAILS anyway if you want to be able to seat admins without SQL later.

Adding and removing admins

There is no screen for this. Admin → People changes plans and publishing, not admin rights.

To add an admin, add their address to ADMIN_EMAILS, restart, and have them sign in (they must register that address first if they have no account). Or use SQL against your database (the account must already exist):

SQL
insert into admins (user_id)
select id from "user" where email = 'partner@example.com'
on conflict do nothing;

To remove one, take their address out of ADMIN_EMAILS and delete their row. Removing the address alone does not revoke anything, because the account is already seated:

SQL
delete from admins
where user_id = (select id from "user" where email = 'partner@example.com');

List the current admins:

SQL
select u.email from admins a join "user" u on u.id = a.user_id;

All admins have the same rights; there are no roles.

Fixing the admin seat

If you cannot open /admin, check that ADMIN_EMAILS contains the exact address of the account you are signed in with, and that the server was restarted after you changed it. If someone else holds a seat they should not, delete their row as above and remove their address from ADMIN_EMAILS.

The admin panel

Open /admin while signed in as an admin. Non-admins see a "Can't open admin" message. The studio sidebar shows an admin link only to admins.

Screen What it does
Overview Counts of pages, published pages, page views, inbox messages and collected emails across the platform, with shortcuts to the other screens.
Plans Create, edit and delete plans: name, monthly price in USD, blurb, button label, "featured" flag, whether it is shown on the pricing page, the feature keys it includes and an optional gateway price ID. See Selling it as SaaS.
People Every page with its owner's email, plan, billing provider and link count. Change a page's plan by hand, or unpublish it.
Finance Paid pages, estimated monthly recurring revenue, the last 30 days' total, creator payout requests (mark paid or reject) and the plan payment ledger. See Earn and payouts.
Payment settings Stripe, PayPal and Razorpay keys, webhook URLs, test-mode switches and Test connection buttons. See Configuration.
Brand Product name, tagline, logo, favicon, SEO title and description, share image, X handle and the "hide from search engines" switch. See Configuration.
Export Downloads linknest-data-<date>.json: pages (username, name, plan, published), plans and settings, with keys and secrets masked. It is a summary, not a backup.

Changing a plan by hand

Setting a plan under Admin → People takes effect immediately and writes a row to the payment ledger with the provider "admin". It does not touch Stripe, PayPal or Razorpay: if the page has a subscription there, a later webhook from the gateway will overwrite your change. Use it for free or custom arrangements.

The sample pages

Migration 0002 creates four sample public pages (kaysun, rileylemon, emilio and averyclothing) owned by placeholder user IDs that have no account behind them. They appear under Admin → People and in the Overview counts. Unpublish them there before you launch, or delete them with SQL:

SQL
delete from profiles where user_id in ('demo-kay', 'demo-riley', 'demo-emilio', 'demo-avery');

Deleting a profile removes its links and socials with it.