Structured handoff card

Never make anyone retype what you send them.

Paste anything — logins, DNS records, an invoice, a screenshot — or generate a card straight from a URL. Get one link where every value has its own copy button and nothing gets lost in the thread.

Three ways to make a card

Build it however the moment needs.

Paste — the main way

From clipboard

Drop in text, a .env file, JSON, a table or a screenshot — or type values manually. Edit the detected fields and share a tracked link.

Open the editor →
Example

From a template

Pick one of 20 real handoffs — DNS, invoices, Wi-Fi, cluster access — and tweak it.

Browse examples →
URL

From a link

For scripts and docs — most people paste. Put values in a URL parameter; the card renders instantly, with nothing stored.

Create via URL →

Live example

Recipient card · integration setup

ID: hc-8f3c
Progress0 of 3 required copied
Account
01
WORKSPACE IDrequired

ws_7f21c9ab

Paste into the integration settings screen.

02
API KEYrequired

pk_live_8f3c9a2d4b71

Public key — safe to store in the client config.

Integration
03
SETUP COMMANDrequired

npx handoff init --workspace ws_7f21c9ab

Run once in the project root.

Honest states: copied ≠ pasted ≠ completed. Go on — the buttons really copy.

This is what your recipient sees. Build yours →

How it works

Three steps, no account

Pastestep 01

Drop in whatever you already have

Text, a .env file, JSON, a table — even a screenshot. We read it and turn it into labelled fields grouped into sections. Fix anything that came out wrong.

Sharestep 02

Send one link

You get a private page for yourself and a share link for the other side. The link expires when you want it to and can be revoked at any moment.

Trackstep 03

See what they actually took

Each value is copied with one click and marked as done. Both of you see the same progress, so nobody has to ask “did you get it?”.

Power-user shortcut

Already have values in a ticket or runbook? Skip the editor.

Encode values in a URL and the card renders instantly — nothing stored. It's a quick preview, not the full product: a card saved from the editor adds sharing, per-field tracking, expiry and revocation.

/new?v=Ticket%3A%20REQ-2026-0417%0ACustomer%3A%20ACME-4471%0APlan%3A%20Pro%0ARenewal%20date%3A%202026-10-14%0AAdmin%20panel%3A%20https%3A%2F%2Fadmin.acme.io%2F4471&title=Support%20handoff%20%E2%80%94%20ACME-4471&purpose=Generated%20from%20the%20ticket%20system.
  • v — “Label: value” lines
  • title — optional
  • purpose — optional
  • expires — 1–90 days, saved cards only
Try this URL →

Agent-first

Machine-readable by design

Every card is a plain structure of typed fields, so an agent can read the values and report state without human clicking.

{
  "card": "hc-8f3c",
  "items": [
    { "label": "API KEY", "value": "pk_live_8f3c9a2d4b71", "state": "copied" },
    { "label": "SETUP COMMAND", "value": "npx handoff init --workspace ws_7f21c9ab", "state": "pending" }
  ],
  "progress": "1/3"
}

Stop retyping values out of chat threads.

Send your first card today. No account, no "can you send that again?".

Create a card