the kandi bar

your kandi

string beads into a bracelet, name it, and hand it to a friend. it lives in this browser. no account.
what someone made for you stays yours. it never trades.
reading your arms…
nothing leaves your arm until you say you handed it over.

your arms

tap a bead
right · tradescrossingleft · keepshanded over
kandi://localStorage/bkandi
left arm · rcv = true → gift, cross = refused by code
armby → forbeads

handshake pipeline · KND1

    store · read from this browser, now

    verify · no trust in this page needed
    1. localStorage.getItem('bkandi') → the rows above
    2. fnv-1a/32 over KND1|maker|for|ts36|beads, base36 == the sixth field
    3. a checksum, not a signature: it catches a typo, not a forgery

    the whole bar

    🍬 the kandi bar

    the kandi bar — make it, name it, gift it, cross it, show it
    String beads, name it, then hand a line of text to someone you already talk to. Nothing leaves your arm until you say you handed it over. Show is a preview link, not proof they are the only holder. This browser keeps your arms; there is no inbox and no account. Your first kandi is already on your left arm.
    make it. name it. do the handshake. peace, love, unity — and on respect, the kandi crosses. right arm trades, left arm keeps, and the crossing doesn't move until something lands in your hand. no feed, no room, nobody's inbox — the string goes hand to hand down whatever channel you two already share, and the moment it lands it's theirs. what somebody made FOR you never re-trades: no gift button, no crossing button, ever, on that arm — that much really is code. and a string is a copy, not a token: once you've handed it over you can't un-hand it, which is exactly why the piece leaves your arm when you give it.
    Format: KND1|maker|for|ts36|beads|fnv — beads as [0-9] color indices and [A-Z] letter beads; FNV-1a/32 over the payload, base36. A checksum, not a signature — it catches a mistyped string, not a forged one, and a maker name is a claim, never an attestation. This page makes no outside request on load. Ruled 2026-08-26: rails-badge.js paints a status BAKED at build time from a real get_info read (head 516799778, 2026-08-26) and prints that bake's date, so a stale bake advertises its own staleness; it POSTs {} to eos.api.eosnation.io (falling back to eos.greymass.com) only when a reader taps ↻ — that request carries no kandi and no soul name, but your IP, User-Agent and its timing reach a third party, which is why it is now yours to choose. The only other request is lang.js GETting lang-corpus.json same-origin, and only when your language is not English. Receipt: a network capture of this page records zero cross-origin requests on load, and exactly one after the tap. State is localStorage only (bkandi written here; the riders own bregister, blang, btranslated_pref, bnr_rails_pin), no cookies, no sessionStorage, no IndexedDB, and no XHR, WebSocket, sendBeacon or analytics tag anywhere in the chain. Gift, cross and show all terminate in the OS clipboard — the carrying is done by the person, and "show it" copies a #k= fragment, not a query, so a shared piece never enters the host's request log; it does still put the maker and made-FOR names in the opener's address bar and history, because the piece IS its seed. Arriving with a fragment only pre-fills the receive box and never writes storage. No DM transport, no relay, no inbox, no video: open, not built, and said plainly. Clipboard write success is not a receive receipt. Animation never retires a piece; a deliberate local handoff writes the full export to the memory line first. A Show link is a copyable preview, not exclusive gift evidence. Crossing is two local handoffs, never an escrow. Names may use letters from any language; bead letters stay [0-9A-Z] and KND1 is not silently reinterpreted. Names are rendered as text, never markup. Digital kandi copies — the culture's answer is the retirement rule, so a completed gift removes the piece from your arm and keeps a memory line, the same shape as the corpus's withdrawal law.

    ⚗ THE COMPOSER — string it

    Beads: tap colors, or type a word — letters become letter-beads. Then name it: who you are (optional), and who it's for (only if it's made for someone — the dedication rides with the copy they receive). Either way it strings onto your right arm, because it is yours until you gift it; the made-FOR law binds the copy they receive.
    Letters are white beads, like the real thing — tap a colour to thread one in, or turn on thread colour and every word comes out alternating.

    🫱🫲 THE THREE ARMS — right trades, left keeps, the crossing swaps

    The etiquette, enforced as written in the mUseUm: tradeables ride the right arm; keepsakes and gifts received ride the left and never re-trade; never ask for a specific piece; and what you gift leaves your arm — a memory line stays, history kept.
    RIGHT ARM — tradeable, and gifts waiting to go
    LEFT ARM — keepsakes
    THE CROSSING — offered, and only for another piece
    Some kandi you would never give away. Offer it to the crossing instead: it stays yours until you paste their piece here. The swap happens in this browser only — there is no escrow and no one in the middle.
    on respect, the kandi crosses. this is the arm for the piece you would never hand over — it does not move until something lands. what comes back rides the left arm in this browser, because it was given to you.
    Mechanics, stated plainly: a crossing is TWO one-way handoffs the page performs locally, not an escrow — there is no third party and nothing to trust but the floor. Your side completes at the instant you paste theirs: your piece retires to the memory line and theirs is written to S.left with rcv:true, so it can never re-trade. Same KND1 string, same FNV-1a/32 checksum, same retirement rule as the gift — a copy you already handed over cannot be un-handed, which is why the piece leaves your arm rather than being marked "traded".
    Hand them your string, paste theirs. The swap happens the moment you paste — yours retires to the memory line, theirs rides your left arm in this browser and never re-trades.
    YOURS — hand this over
    THEIRS — paste what they are crossing to you

    🤲 RECEIVE — through interlocked hands

    Paste a kandi string somebody handed you. Look first. Keep is a second tap — received kandi then rides your left arm and never re-trades.
    Look first, then keep this is the piece in your hands — keep it only if you want it on the left decode-only preview. Keep writes rcv:true to S.left. Same KND1 is idempotent. Show #k= is not exclusive title.
    Limits of this bar
    This page never sends a kandi to anyone. You copy text and carry it. A Show link is a preview, not proof only they have it. Another tab of this same browser can change what is saved here.
    no inbox, no escrow, no take-backs — the string is a copy you walk across the floor.
    No remote atomic exchange. Crossing is two local handoffs. Clipboard write ≠ received. Show #k= is a copyable preview, not exclusive title. Checksum ≠ signature. localStorage only. Same-origin writes use a Web Lock, a fresh validated snapshot and one storage write. Browsers without Web Locks show saved arms read-only. Older open versions do not take this lock: reload every kandi tab after an upgrade. Animation does not commit retirement.