Sign in to manage your identity and connected apps.
PortAuthorityPass
Stable
↩
Returning to
—
Overview
Platform Admin
?
—
—
—
Apps
—
accessible
Managed
—
you control
Quick Access
Loading…
Profile
Your Port Authority Passport — your photo, your number, what you choose to share.
—
Add a tagline so scanners know who you are.
Passport No.PAP-————-————
Your QR
Action modeSwitch what people get when they scan your QR code from your PAP profile.
Invite permissions
These travel with your in-person Black Ledger invite card and are recorded when the invite is accepted.
Current payload—
Profile sharing is ready.
What this QR shares is set in .
Pending friend requests 0
No incoming friend requests.
How to talk to people
Add a friendFlips the QR above to Add friend. Let them scan it, or share the payload.
Invite to a groupGenerate a group / invite slug payload to share in Harbor apps.
Invite to DiscordPoint the QR at your Discord invite link so scanners land in the right server.
Open Black LedgerHand someone a ledger entry-point with the permission set above.
Identity
Display nameHow your name appears in apps. Edit on the Settings page.
—
UsernameUnique handle across the platform.
—
EmailUsed for sign-in. Edit on the Settings page.
—
PAP user IDShow this when another Harbor app needs to add you.
—
Security Activity
Devices, networks, and link origins observed on your PAP account.
Stable
Live posture
See what looks normal — and what does not.
This feed tracks authenticated PAP activity using request metadata, browser hints, and Cloudflare edge headers when available. It is your early-warning panel for strange logins and unfamiliar regions.
Recent events0
Countries seen0
Watch hits0
Origin map
Recent activity across the world
Waiting for activity
Recent events
Login and session signals
Easy phase: PAP + browser + Cloudflare headers. Rich ASN/VPN intelligence can be layered in later.
Loading security activity…
Derived signals
What stands out in this activity
Fast country changes, unusual referrers, and device churn are inferred locally from the recent feed.
Analyzing recent signals…
Route watch
Recent travel and path transitions
These hops are inferred from consecutive PAP sessions, not full packet-level traces.
Building route trace…
Admin · visitor intelligence
Every recent visit across Harbor
Loading…
Visits0
Unique IPs0
Devices0
Apps0
Loading visitors…
Apps
All apps connected to your PAP identity.
0
Loading apps…
Integration Docs
How to connect any app to PortAuthorityPass for authentication.
How it works
PortAuthorityPass (PAP) is a centralized auth gateway. Any app you own can delegate its login flow to PAP. Once a user is authenticated here, PAP redirects them back to your app. Your app then uses the Supabase session to verify who the user is.
1User visits your app and clicks "Sign in"
↓
2Your app redirects to PAP: https://auth.plabs.cloud/?return_to=https://yourapp.com
↓
3User signs in on PAP (or is already signed in)
↓
4PAP redirects back to your app's return_to URL
↓
5Your app reads the user's session using the shared Supabase client
Step 1 — Register your app (Admin only)
Go to Admin → Apps → + Add App. Fill in:
Name — display name shown in the portal
Slug — a unique lowercase ID, e.g. my-tool
Entry URL — the base URL of your app, e.g. https://mytool.plabs.cloud
Icon — optional emoji shown next to the app name
Once saved, the app appears in the platform and users with membership can access it.
Step 2 — Add your Supabase client
In your app, install @supabase/supabase-js and initialise it with the same project URL and anon key as PAP:
import { createClient } from '@supabase/supabase-js';
const supabase = createClient(
'https://api.plabs.cloud', // PAP Supabase URL
'YOUR_ANON_KEY' // from supabase/config.toml → anon key
);
Because both PAP and your app share the same Supabase project, the user's session cookie/token is valid in both places.
Step 3 — Redirect to PAP for login
Instead of a login form, send users to PAP with a return_to parameter:
// In your app — detect unauthenticated user, then:
window.location.href =
'https://auth.plabs.cloud/?return_to=' +
encodeURIComponent(window.location.href);
Step 4 — Read the user in your app
After PAP redirects back, call getSession() to confirm the user:
const { data: { session } } = await supabase.auth.getSession();
if (!session) {
// Not authenticated — redirect to PAP
} else {
const user = session.user;
console.log('Logged in as', user.email);
}
Supabase credentials
Find these in supabase/config.toml or by running npx supabase status:
API URL:—
Anon Key:—
Settings
Profile
UsernameUnique across all apps. Cannot be changed yet.
—
Display nameHow your name appears in apps.
—
Identity card privacy
What people see when they scan youUsed by the in-person event QR mode and the open-profile fallback. Toggle off anything you don't want a stranger reading off your phone.
Account
EmailYour sign-in email address.
—
PasswordChange your sign-in password.
••••••••••••
Security
Active sessionsYou are currently signed in on this device.
1 session
Two-factor authenticationExtra verification at sign-in.
Not configuredComing soon
Danger Zone
Delete accountPermanently remove your account and all associated data. This cannot be undone.
Identity Links
BioA short description shown on your profile.
—
Discord LinkTwo ways to link: A) Go to #join in Ghost Ship 404 → click Get My Link Code → enter the code below. B) Click Generate code here → go to #join in Discord → click I have a PAP code → enter the code.
Not linked
Your link code—
GitHubYour GitHub username.
—
Twitter / XYour Twitter / X handle.
—
👻 Ghost Encryption Keys
Key Status
Ghost keys are generated and managed inside the Ghost app.
PAP stores your public key so others can send you encrypted messages.
This will permanently remove your account and all associated data from PortAuthorityPass. There is no way to undo this — your data cannot be recovered.
✕ All your profile data will be erased
✕ All connected apps will be unlinked
✕ You will be signed out immediately
User Details
—
Scanned passport
Identity card
?
✓ Verified by Port Authority
⚠ This person is sharing very little info. You can still add them — or decline.
This card did not include any visible details.
Passport photo
Choose a source
Generation runs on the local FLUX lane and may take ~30–90 seconds.