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:
| Step | What it is checking | What to do if it errors |
|---|---|---|
| PostgreSQL database (or Neon database) | The configured connection is reachable | Fix the connection string or start the server |
| Migration connection | Only shown for pooled connections: a non-pooled DIRECT_URL exists | Add DIRECT_URL — Prisma migrations cannot run through a pooler |
| Database schema | The Prisma tables exist | Run npm run db:migrate:deploy |
| Initial data | Users, site settings and default forms exist | Run npm run db:seed |
| Admin login | Everything above passed | Continue 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 set | What the Login block shows |
|---|---|
| You typed one in the guided wizard | Admin <your-email> / configured profile password — the password is never echoed back |
| You left the wizard password prompt blank | Admin <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:
| Account | Password | Role | |
|---|---|---|---|
| Admin | admin@example.com | admin | FACILITY_ADMIN |
| Researcher | user@example.com | user | RESEARCHER |
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.comin 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 setbootstrap.users.admin.password(orpasswordHash) insettings.jsonand 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.comPass --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
SiteSettingssingleton — site nameSeqDesk, 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 dataThese are the same commands the /setup screen suggests. Restart the app
afterwards — the bootstrap configuration is read from disk at start-up.