DEV Community

Jakub
Jakub

Posted on

copycopy.site by Inithouse: structured handoff cards you can generate from a URL, with JSON for agents

copycopy.site is a free structured handoff tool by Inithouse. You paste logins, DNS records, an invoice or a screenshot, you get one link where every value has its own copy button, and both sides see which values have been copied. No account is needed on either side. This post is about the two parts of it that matter to developers: cards generated straight from a URL, and the JSON view that lets an agent read a card without clicking anything.

Retyping is the expensive part

Most "share this securely" tools solve one problem: the value should not sit in a chat log forever. That is a fine problem. It is not the problem that costs support teams and agencies the most time.

The expensive problem is the recipient retyping. A CNAME with a trailing space. An API key with the first character missing because the selection started one character late. A Wi-Fi password where the letter O and the digit 0 look the same in the chat font. Each of those turns into a thread that starts with "it still doesn't work" and ends two days later.

So the unit in copycopy.site is not a secret. It is a field: a label, a value, a required flag, an optional note, and a state. A card is a list of fields grouped into sections. Every field gets its own copy button and its own state.

Three ways a card comes to exist

The editor at /app/nova takes text, a .env file, JSON, a table or a screenshot and turns it into labelled fields you can fix before sharing. There are also 20 ready templates at /examples, from DNS domain verification to cluster access for a new engineer.

The third way is the one I want to spend time on: a card built from a URL.

Cards from a URL, with nothing stored

The route is /new. It takes four query parameters:

  • v: the values, in Label: value format, one per line (newline encoded as %0A)
  • title: card title, optional
  • purpose: a one-line note shown under the title, optional
  • expires: days until the card expires, 1 to 90, and it only applies if you choose to save the card

A minimal example, before encoding:

/new?v=CNAME: www -> proxy.example.com
A: 203.0.113.10
TXT: google-site-verification=abc123&title=DNS for client&purpose=Point the domain
Enter fullscreen mode Exit fullscreen mode

Encoded, the same card is one line:

https://copycopy.site/new?v=CNAME%3A%20www%20-%3E%20proxy.example.com%0AA%3A%20203.0.113.10%0ATXT%3A%20google-site-verification%3Dabc123&title=DNS%20for%20client&purpose=Point%20the%20domain
Enter fullscreen mode Exit fullscreen mode

Open it and you get a rendered card with three fields, three copy buttons and a progress line that says "0 of 3 required copied". The page is explicit about what happened on the server, which is nothing: "This card lives only in this link, nothing is saved on our side."

That is the design decision I like most. Stateless is the default. The link is the card. Saving is a separate, optional step that gives you a share link, an expiry and copy tracking. Until you take that step there is no database row, no ID, no account, and no expiry to manage.

Why this matters in practice: you can build the URL once in a support macro, a runbook, an onboarding doc or a ticket template, and it opens as a copyable card every time. A JavaScript one-liner does the job:

const values = { Ticket: "REQ-2026-0417", Customer: "ACME-4471", Plan: "Pro" };
const v = Object.entries(values).map(([k, val]) => `${k}: ${val}`).join("\n");
const url = `https://copycopy.site/new?${new URLSearchParams({ v, title: "Support handoff", purpose: "Generated from the ticket system" })}`;
Enter fullscreen mode Exit fullscreen mode

No API key, no signup, no rate limit to think about, because nothing is called on the server.

Honest states: copied, pasted, completed

When a card is saved, each field tracks its state. The site's own wording is "copied ≠ pasted ≠ completed", and that distinction is deliberate. Clicking Copy proves the value went to the clipboard. It does not prove the value landed in the registrar's DNS panel. So the recipient can mark a field as done separately, and the sender sees the same progress view.

This sounds small. It removes the one message every handoff thread contains: "did you get it?"

The JSON view for agents

Every card is a plain structure of typed fields, and this is the shape the site documents for agents:

{
  "card": "hc-8f3c",
  "items": [
    { "label": "API KEY", "value": "pk_live_8f3c9a2d4b71", "state": "copied" },
    { "label": "WEBHOOK URL", "value": "https://hooks.example.net", "state": "pending" }
  ],
  "progress": "2/4"
}
Enter fullscreen mode Exit fullscreen mode

An agent doing onboarding does not need to click a button to read the webhook URL. It reads items[1].value, does the work, and the state moves. The human on the other side still sees the same progress bar. That is the "agent-first" claim on the landing page in practice: the machine-readable form is the primary form, and the card UI is a view over it.

We run other products at Inithouse where this lesson came first. Be Recommended measures how AI assistants describe a brand, and one finding repeats across every report: assistants cite what is structured and skip what is only rendered. copycopy.site is built on that assumption from the start.

When to use which

  • One-off values for a person, nothing sensitive long term: build a /new URL, send it, done. Nothing stored.
  • Values that need tracking, an expiry or revocation: save the card, share the link, watch progress.
  • A tool or agent on the receiving side: save the card, point the agent at the JSON.
  • A single secret that must self-destruct after one view: that is still a job for a one-time-secret tool, not for this.

Closing

copycopy.site is a free structured handoff card tool by Inithouse, a product studio that builds AI products and custom agents for clients and for its own portfolio. It turns logins, DNS records, invoices or screenshots into one link where every value has its own copy button, tracks honest progress on both sides, expires when you say so, and needs no account for the sender or the recipient. If you have a support macro or a runbook that still says "copy the following values", try turning it into a /new URL and see whether the "did you get it?" message disappears.

Jakub, builder @ Inithouse · inithouse.com

Top comments (0)