NapX PMS Docs
Admin Guide

Admin Overview

Introduction to the NapX PMS Admin Dashboard — what it is, who uses it, and how to access it.

Admin Dashboard Overview

The NapX PMS Admin Dashboard (apps/admin) is a self-contained Next.js application that gives super-administrators full visibility and control over the entire platform — across all tenants.

Who can access it?

Access is restricted to system administrators — users who exist in the system_admins table. Within that group, users with isSuperAdmin = true have additional write permissions (create, update, delete operations).

Important: The admin app connects directly to the database. It does not proxy through apps/api. This means it runs independently and can be deployed separately.

Accessing the admin

EnvironmentURL
Local devhttp://localhost:4000
StagingConfigured via Amplify env
ProductionConfigured via Amplify env

Local setup

  1. Copy the example environment file:

    cp apps/admin/.env.example apps/admin/.env.local
  2. Fill in the required values — see Getting Started for the full env reference.

  3. Ensure the local database is running:

    docker-compose -f docker-compose.yml up -d
  4. Seed an initial super-admin user:

    pnpm --filter @repo/database run db:seed
  5. Start the admin app:

    pnpm run dev:admin
  6. Sign in at http://localhost:4000/login with the seeded credentials.

Default seeded credentials

The development seed creates a super-admin account. Check packages/database/prisma/seed.ts for the credentials — they are not used in production.

How index pages work

Every admin index page uses the same operational header pattern so lists behave consistently across the dashboard:

  • Page title and supporting description on the left
  • Primary action on pages that support writes
  • Inline search in the header row
  • Filter button that opens a right-side sheet with page-specific filters

Search filters the rows already loaded on the page. Filters are model-aware, and active filters remain visible so operators can see why a list is narrowed before changing views or sharing a URL.

Detail sheets and shareable URLs

Most list pages support deep-linkable detail sheets.

  • Choosing View details from a row action opens the entity sheet and adds ?id=<recordId> to the URL
  • Closing the sheet removes the id query param again
  • Rooms, spaces, and space types also support ?propertyId=<propertyId> so filtered views can be shared directly

This keeps common admin workflows shallow: list, inspect in a sheet, copy identifiers if needed, then return to the same filtered list state.

On this page