A managed box for your remote terminals — a Pro add-on. Price = the box's cost + our service margin — the split is on every card. Paying again while active extends your period.
Lost access on your phone with the laptop at home? Get a pairing code for your box here — no desktop needed. Single use, expires in ten minutes.
| Date | Item | Amount | Status |
|---|
| Account | Plan | Activity | VPS | Paid | Access | Manage VPS |
|---|
For a box you provisioned yourself. Run
scripts/provision-vps.sh on it first — that is what creates the
standard jasper login and the key-only sshd every managed box has.
Attaching a box that has not been provisioned records an address the app cannot use.
Leave login and port blank for a box we ordered; fill them in for one
built by hand, which keeps whatever login its image shipped with.
The last two fields turn on phone --recover for this account, and they are
the reason it has never worked for anyone: attaching a box records its address, and
registering it for recovery is a second step that nothing performed, so
phone --recover answered "No box attached to this account yet" to customers
with a live paired box. Get both values from
node scripts/enable-pair-recovery.mjs <user@host> <https://url> — it prints
the secret once. Leave them blank to attach a box without recovery.
Boxes whose paid period has ended. Access is cut the instant a period lapses and the machine is stopped at the provider — but a stopped server still bills at every provider we use. Deleting it is the only thing that ends the invoice, and it is never done automatically: releasing a machine destroys a customer's work and is an operator decision, taken here, one box at a time.
| Account | Host | Plan | Provider | Past period end | State | Costing us |
|---|
Every machine destroyed from this panel, newest first. Written before the box record is dropped, because afterwards there is no host, no instance id and no way to explain the invoice line that stopped.
| When | Account | Host | Provider | Disk | Why | By |
|---|
Which Stripe account checkout charges right now. The switch is instant and applies to every visitor; a mode can only be selected once its secret key is on the server (STRIPE_SECRET_KEY for live, STRIPE_TEST_SECRET_KEY for test).
| Mode | Key | Monthly price | Annual price | Webhook |
|---|
A short message the app shows the person at the keyboard, at most once every few days, in a terminal that is actually in use. Text only — a notice cannot carry a command or a script, and each user can switch notices off permanently for a terminal. Publishing shows it at once in a terminal that is open — no Trigger needed. Consecutive notices are spaced by ~45s so a batch arrives one at a time rather than as a pile, and “Repeat every N min” brings one back on that cadence until the reader dismisses it. There is no “unsend” for one already displayed.
| When | Title | Body | Link | State |
|---|
What users typed into “Report bug” in the app. The same report also goes to Sentry — Sentry says what broke, this says who hit it and when.
| When | Who | What they wrote | Build | Sentry |
|---|
People who left an email on the landing — “Book a demo” and the iOS “notify me”. Newest first.
| When | Wanted |
|---|
| Code | Discount | Used | Redeemed by | State |
|---|
Each code unlocks the desktop download a fixed number of times. Entering one mints a fresh link that expires in 30 minutes — the release URL is never handed to a browser.
| Code | Build | Used | Left | For | Redeemed by | State |
|---|
Every download is stamped with an opaque marker in the ZIP's archive comment (read it from a leaked copy with unzip -z file.zip). Paste it here to see who downloaded that copy, on which code, and when.
| When | Who | Code | Marker |
|---|