PortlinePortlineDocs

Local mode

The same app on a local Supabase database, with row-level security and seeded users.

Local mode runs Portline against real Postgres and Supabase Auth on your machine. Every permission rule is enforced by the database, not just the app. You need Docker running.

Start Supabase

pnpm db:start

This starts the local stack on these ports:

ServicePort
API (PostgREST, Auth)4161
Postgres4162
Studio4163

Studio is at http://localhost:4163 if you want to look at the tables.

Create the schema and seed it

pnpm db:reset
pnpm db:seed

db:reset applies the migrations from scratch. db:seed fills the database from the same generator the demo uses, so ids, names and numbers match what you see in demo mode.

Start the app

pnpm local

Then sign in at http://localhost:4100/login.

Seeded users

Every user has the password portline-local.

EmailWorkspaceRole
avery@harborline.exampleHarborline Logistics (Growth)Owner
priya@harborline.exampleHarborline LogisticsAdmin
diego@harborline.exampleHarborline LogisticsDispatcher
mei@harborline.exampleHarborline LogisticsDispatcher
sam@harborline.exampleHarborline LogisticsViewer
elif@harborline.exampleHarborline LogisticsViewer
owner@starterfreight.exampleStarter Freight (Starter)Owner

Sign in as Sam to see what a viewer gets: everything the plan includes is readable, and writes are refused by the app and by the database, even if you call the database directly. Sign in to the Starter workspace to see Fleet, Warehouses and Docks locked.

Changing the plan

Nobody can change a workspace's plan from the app, owners included. Only the service role can. The script uses it:

pnpm plan:set harborline scale active

The arguments are the workspace slug, the plan (starter, growth, scale) and the subscription status (active, trialing, grace, lapsed). Try lapsed to see the workspace go read-only. Plans and access explains what each status does.

Stopping

pnpm db:stop

On this page