Installation
From the monorepo (development) or after cloning the platform repo:
npm install npm run build:cli npm run jj -- --help
Production API (default unless configured otherwise):
jj config --api https://api.77thjunction.app
Config is stored at ~/.77th-junction/config.json (token, API URL, email).
Authentication
| Command | Description |
|---|---|
jj login | Opens browser OAuth — recommended |
jj login --password | Email/password prompt (fallback) |
jj logout | Clears saved token |
jj whoami | Show signed-in user |
jj status | API health + session check |
Browser login hits /cli/authorize on the web app, then polls /auth/cli/poll until the CLI receives a Firebase ID token.
Projects
jj projects list jj projects create "Portfolio site" --path ~/projects/portfolio
Create picks a slug from the name. List shows slug, status, name, and live URL when deployed.
Deploy
jj deploy ./dist --project portfolio # Auto-detects dist/, build/, or out/ inside the folder
The CLI zips the deploy root and POSTs to /projects/:id/deploy. On success it prints the live URL (subdomain or path based on platform mode).
Billing commands
| Command | Description |
|---|---|
jj billing balance | Credit balance and plan |
jj billing pricing | Hosting plans and auto-fix credit costs |
jj billing subscribe starter | Opens PayPal for Personal plan |
jj billing subscribe builder | Opens PayPal for Pro plan |
jj billing subscribe pro | Opens PayPal for Team plan |
jj billing buy pack25 | One-time 25-credit pack |
jj billing buy pack60 | One-time 60-credit pack |
jj billing buy pack150 | One-time 150-credit pack |
CI example (GitHub Actions)
# Store JJ_TOKEN as a repo secret (from jj login flow or dashboard)
- run: npm ci && npm run build
- run: npx @77th/cli deploy ./dist --project my-site
env:
JJ_API_URL: https://api.77thjunction.app
JJ_TOKEN: ${{ secrets.JJ_TOKEN }}CI token flow: sign in once locally, copy token from ~/.77th-junction/config.json into your CI secret store. Rotate if exposed.