Customer Portal

Overview

Customer Portal is the customer-facing single-page app of the platform: a Vue 3 application built into static files and served by unprivileged nginx behind the API Gateway.

Current scope. The repository ships the front-end shell, with a home page and a shopping-cart page. A Java backend (customer-portal-be) is planned but not implemented, so the portal does not yet call a Labs64.IO API on its own.

Capabilities

Capability Description
Static, one image A multi-stage build produces files served by unprivileged nginx; the image runs on any cluster or static host.
Edge authentication Sign-in is handled at the API Gateway (OIDC/JWT); the app itself is static.
Modern front end Vue 3 (Composition API), Vite, Pinia, TypeScript, Bootstrap 5 and Bootstrap Vue Next.
Composable Module federation (@originjs/vite-plugin-federation) is available for micro-frontends.
Tested Unit tests with Vitest, end-to-end tests with Playwright, linted with ESLint.

Architecture

The portal is a single-page app served by nginx. The API Gateway authenticates the caller and routes /customer-portal to it.

flowchart LR
    Browser["Browser"] -->|"GET /customer-portal"| GW["API Gateway"]
    GW -->|"static files"| CP["customer-portal-fe<br/>Vue 3 · nginx (unprivileged)"]

Quick Start

Install the platform with the BYO profile of the installer and answer yes to “Enable Customer Portal”, or run the full local ecosystem and open http://gateway.localhost/customer-portal.

To see the app without a cluster, run the published image. Only the edge tag is published today:

docker run -d --rm --name portal -p 8080:8080 labs64/customer-portal-ui:edge

Open http://localhost:8080 and clean up with docker rm -f portal.

Install with Helm

The portal chart has no backend dependency, so this is the shortest install of any module:

helm repo add labs64io https://labs64.github.io/labs64.io-helm-charts
helm repo update

helm install my-portal labs64io/customer-portal -n labs64io --create-namespace

Put it behind your gateway route at /customer-portal. See Deploy to your Kubernetes cluster and the chart on Artifact Hub.

Build from source

Needs Node and npm (Docker for the image):

git clone https://github.com/Labs64/labs64.io-customer-portal.git && cd labs64.io-customer-portal/customer-portal-fe
npm install
npm run dev          # hot-reload dev server on http://localhost:8080
npm run test:unit    # Vitest
npm run test:e2e     # Playwright
npm run lint         # ESLint
docker build -t customer-portal-ui .

The repository’s AGENTS.md describes the layout, commands and tests; the Contributing guide covers the workflow.

Configuration

The chart has no backend dependency; enable the UI with ui.enabled. The nginx image listens on port 8080 as an unprivileged user.

REST APIs

The Customer Portal is a client, not a server. It does not expose REST APIs.

Events

The Customer Portal does not publish events.

Operations

The portal is stateless static content: scale it with replicas and cache it at the edge. Because authentication happens at the gateway, expose it only through the gateway route.

Troubleshooting

Symptom Cause Resolution
ImagePullBackOff No release tag of labs64/customer-portal-ui exists yet Use the edge tag, or build the image from the repository.
404 at /customer-portal The route is not installed Enable the module and its gateway route in the chart values.