Skip to Content
Getting StartedFirst Login & Setup

First Login & Setup

The guided installer checks PostgreSQL, applies the Prisma schema, seeds the initial data, and creates the administrator account before it prints the browser URL. This page covers the first sign-in, what the recovery screen is telling you if seeding did not finish, and how to add the next users.

First sign-in

Open the installed URL

Use the Browser URL from the installer’s Install complete summary. The same summary prints a Local health URL (http://127.0.0.1:<port>) — that one is for curl and seqdesk doctor, not for the browser. Installed instances default to port 8000; http://localhost:3000 is used by a repository development server, not by a packaged installation.

If you land on /setup, read the step list

A healthy install goes straight to /login. If the final seed could not complete, the app redirects to /setup, which is a diagnostic screen rather than a wizard — it re-checks the database on load and reports where the chain broke:

StepWhat it is checkingWhat to do if it errors
PostgreSQL database (or Neon database)The configured connection is reachableFix the connection string or start the server
Migration connectionOnly shown for pooled connections: a non-pooled DIRECT_URL existsAdd DIRECT_URL — Prisma migrations cannot run through a pooler
Database schemaThe Prisma tables existRun npm run db:migrate:deploy
Initial dataUsers, site settings and default forms existRun npm run db:seed
Admin loginEverything above passedContinue to login

The page also shows a next action with the exact command to run. Fix the reported error rather than dropping and recreating the database.

Sign in as administrator

The installer ends with a Login block listing the accounts it created. What it shows depends on how the password was supplied:

How the password was setWhat the Login block shows
You typed one in the guided wizardAdmin <your-email> / configured profile password — the password is never echoed back
You left the wizard password prompt blankAdmin <your-email> plus Admin password <generated>, followed by “Save the generated passwords now — they are not stored anywhere else”
--reconfigure on an existing install”Existing user accounts are unchanged (reconfigure mode).”

A generated password is printed to the terminal only — it is deliberately kept out of the install log, and the installer wipes it from memory right after showing it. If you lose it, reset the account (see below) rather than looking for it in a file. The optional researcher account follows exactly the same rules; answering “n” to the researcher question makes the block report Researcher not created.

The bootstrap accounts, and when SeqDesk refuses to create them

SeqDesk ships two built-in default accounts as a recovery convenience:

AccountEmailPasswordRole
Adminadmin@example.comadminFACILITY_ADMIN
Researcheruser@example.comuserRESEARCHER

They are not created unconditionally. The seeder distinguishes two situations:

  • A brand-new, completely empty database. If the install named no account of its own, the built-in defaults are created so that there is always a way in. An unattended install that omits bootstrap account settings is exactly this case, and is where you will meet admin@example.com in practice.
  • A database that was already configured — site settings exist but no users do. Here the shipped password is refused outright. The log says Not creating bootstrap admin account …: This database was already configured, so no account is created with the built-in default password, and it tells you to set bootstrap.users.admin.password (or passwordHash) in settings.json and restart.

The same refusal applies when the install names an account but supplies no password for it: This install names the account but configured no password for it.

If the built-in defaults did get created, change or remove them before the host is reachable from any other machine. They are published in this documentation and in the source. Bootstrap defaults are a recovery convenience, not production credentials.

Resetting a password

There is no “forgot password” link and no password-reset email — SeqDesk has no outbound mail path it can rely on. Recovery is operator-driven, from the shell on the host:

cd "$HOME/seqdesk" seqdesk reset-password admin@example.com

Pass --password <value> to supply one instead of having it generated, and --dir /path/to/seqdesk if you are not already in the install directory. This is also how you unlock a researcher who has lost their password.

What else the seed created

Alongside the accounts, the first seed writes:

  • The SiteSettings singleton — site name SeqDesk, brand colours, contact email, and the default post-submission instructions researchers see after they submit an order.
  • The default sequencing order form: a Sequencing Order Details group (Sequencing Order Name, Number of Samples), a Sequencing Information group (Sequencing Technology, Library Strategy, Library Source), per-sample fields (Organism, Sample Title, Sample Alias, Sample Volume, Concentration), and four admin-only facility fields.
  • The default study form: Principal Investigator, Study Abstract, a MIxS metadata field, and collection date.

Everything there is editable from the admin area — see the Admin Quickstart.

For a populated evaluation, configure a sequencing-data path and then open Admin → Settings → Demo data, or run seqdesk demo-data install on the server. The Example Data & Provenance page lists exactly what it creates and distinguishes the synthetic local fixture from the pre-populated hosted demo and real public-read CI fixtures.

Logging in day to day

Sign in at /login. After authentication every user lands on the Sequencing Orders page.

Sessions are JWT-based NextAuth sessions carried in a cookie. There is no separate API token: scripts that need to call the API log in and reuse the same session cookie.

Built-in Help page

Every signed-in user can open /help, an in-app reference rendered from static content with no configuration needed. It covers the five-step workflow (create a sequencing order → submit samples → track sequencing → build studies → facility processing), the four main areas (Sequencing Orders, Studies, Analysis, Publishing), who usually does what, a task-to-location table, a facility-admin setup table, and status basics. It is the fastest way to orient a new user without leaving the app.

The two roles

User.role is a plain string with two values. There is no third role, no read-only auditor, and no per-study permission layer.

RESEARCHER — the default for self-registered accounts.

  • Create, edit and submit their own sequencing orders
  • Manage samples while the order is DRAFT
  • Create studies and assign samples from orders they own
  • See sequencing files once the facility publishes the delivery
  • See a pipeline run once the facility marks it Final
  • Sidebar: Sequencing Orders, Studies, Analysis, Support, Help

FACILITY_ADMIN — everything.

  • Sees every sequencing order and every study in the instance
  • The only role that can attach FASTQ files to samples
  • The only role that can start, stop or delete a pipeline run
  • The only role that can publish a delivery or mark a run final
  • The only role that reaches /admin/** and the ENA Submissions surface
  • Creates invite codes for further admins

The full capability matrix is in How SeqDesk Works.

Inviting users

Researchers self-register

Researchers register themselves at /register. The form collects first and last name, email (unique across the instance), researcher role (Principal Investigator, Postdoctoral Researcher, PhD Student, Master Student, Lab Technician, Other), department, optional institution, and a password of at least 8 characters.

Two things to configure first:

  • Departments. The department dropdown is populated from /admin/departments. Create them before sharing the registration URL.
  • Account Validation. Turning this module on lets you restrict registration to listed email domains. With enforcement on, an outside address is rejected with Registration is restricted to email addresses from: …; with enforcement off, the user is warned but allowed through.

Admins need an invite code

Admins cannot self-register — the registration API rejects a FACILITY_ADMIN signup without a code.

Generate an invite code

Go to Settings → Accounts (/admin/admin-accounts, titled “Admin Accounts”) and create a new invite code. You can optionally restrict it to a specific email address and set an expiry date.

Share the code

The new admin registers at /register/admin, enters the code to verify it, then creates their account with a password of at least 6 characters. Codes are single-use and validated server-side, so an already-used code returns This invite has already been used, an expired one returns This invite has expired, and one issued for a different address returns This invite is for a different email address.

Manual setup, if auto-seeding fails

Rarely, you may need to run what the installer runs, from the active release directory:

cd "$HOME/seqdesk/current" npm run db:migrate:deploy # Apply pending Prisma migrations npm run db:seed # Seed default data

These are the same commands the /setup screen suggests. Restart the app afterwards — the bootstrap configuration is read from disk at start-up.

Next steps