Getting Started

Introduction

Edit page
Understand what Customer Portal provides, how it is structured, and where to begin.

Nuxt Customer Portal is an MIT-licensed collection of Nuxt layers for organizations that need a secure place to work with customers, suppliers, and internal teams. It provides the shared foundation—authentication, organizations, roles, administration, navigation, and a dashboard—while business workflows are added as optional packages.

The repository is licensed under MIT. Before depending on the alpha packages, read the current licensing and compatibility status.

That division is the project’s main design choice:

  • Portal core owns stable contracts and cross-cutting infrastructure.
  • Feature layers own complete business capabilities, from pages to database tables.
  • The host application stays thin and composes the installed layers.
The current timesheets feature is used for real operational work. It includes weekly entry, internal and client approvals, supplier workflows, reporting, and an invoices module with PDF and email delivery.

Choose your path

Run it locally

Install Customer Portal, configure PostgreSQL, and start the development server.

Understand the architecture

Learn how portal core, the host, and feature layers fit together.

Look up a contract

Find configuration, feature-registry fields, OpenAPI discovery, and compatibility guidance.

Explore the modules

See how the production timesheets and invoices workflow is assembled.

Build a feature layer

Add a self-contained module without coupling it to the host application.

Brand a deployment

Replace the reference identity, public content, themes, and email branding.

What the base portal includes

  • Email/password authentication, email verification, password recovery, and optional GitHub or Google OAuth.
  • Organizations, memberships, invitations, active-organization selection, and owner/admin/member roles.
  • System-administrator tools for managing users and organizations.
  • A feature registry for navigation, module menus, dashboard widgets, and typed policies.
  • PostgreSQL with Drizzle ORM and dependency-ordered provider migration streams.
  • English and Dutch localization with messages owned by each layer.
  • A Docker-ready Nuxt application with frontend and server routes in one service.

Current feature layers

LayerPurpose
coreHeadless sessions, authorization, database access, registry, and extension contracts
uiNeutral shell primitives, fallback layouts, dashboards, and surface rendering
authenticationSign in, sign up, verification, and password recovery
organizationsAccount settings, organizations, members, and invitations
administrationSystem-administrator user and organization management
presetCore platform composition for common installations
kitConfiguration, diagnostics, migrations, and legacy adoption
service-requestsA compact reference feature for tenant-scoped request workflows
timesheetsTime entry, approvals, suppliers, reporting, and invoices

Public pages, branding, and the application shell belong to the consuming host, as demonstrated independently by Apex and Brutal.

The source is available on GitHub. If you want to contribute, start with the contribution guide.