Latch

Modules

Kit

Everything you own, what it is made of, when it was actually used — and the badges your toys earn for it. Gear, toys and consumables, each measured the way it is actually used.

On this page

🦴 Kit is the inventory. What you own, what you want, what you've retired, what it is made of, what it cost — and, because the app is already watching the clock, when you actually used it and what happened.

It is the part of Latch that answers questions you cannot answer today: which hood you actually reach for, whether the expensive plug earned its price, how much lube a month really costs, and which toy your body has learned to trust.

Three kinds, because they are measured three different ways

Kind What it is How it is measured
🦴 Toy plugs, dildos, vibes, strokers, e-stim, pumps bouts of time, and what happened at the end
🐶 Gear hoods, collars, harnesses, paws, tails, the cage, restraints, attire time worn
🧴 Consumable lube, treats, supplements, cleaner, batteries what's left

This is not cosmetic. Asking "how much lube is left" of a plug is meaningless, and so is "how many hours did you wear the lube". Each kind is only ever asked the question it can answer.

Categories carry their own fields

A plug has an insertable length, a maximum diameter and a base type. A hood has a size, a closure and a vision type. A lube has a base — water, silicone, oil or hybrid. A cage has a ring, a gap and a cage length. Pick the category and the right fields appear.

Two things follow from the app knowing what everything is made of:

Lengths

Every length is stored in millimetres and shown in both units. Insertables are entered in inches because that is what the box says; rings and gaps in millimetres because that is how they are sold. You never do the conversion yourself, which is where the mistake would actually happen.

Bouts: putting something on and taking it off

There are two kinds of bout, because they are measured differently:

Each can be logged now (start it, and finish it when it comes off) or from earlier (see Logging one from earlier below).

Pick one or several things — a hood and a collar and a plug is one bout, not three — say whether it's play or wear, and Start now. The dashboard then shows what is on and a one-tap way to finish.

When you finish, Latch asks:

Everything you answer feeds the calendar and the progress page. Play, gear, coming and edging are each their own activity, which means each gets its own colour on the calendar and its own streak — see Progress.

Whether you were caged is not a question

Latch already knows whether the lock was on, so it never asks and it cannot be told you were caged when it wasn't. That is what makes a caged orgasm a real achievement rather than a self-report. The one thing you can tell it is the opposite — see Logging a finish below.

Logging one from earlier

Did it hours (or days) ago and never started a bout? Kit → 📝 Log one from earlier takes the whole thing in one go: the items, play or wear, From and To (or From and how many minutes), and for play how it ended, the questions, a note, and anything you used. It lands at the times it happened, so the calendar, the bout list, the hours and the log all put it there, marked ↶ logged later. A bout told more than two days after it ended still counts everywhere but earns no XP.

Caged comes from the lock at the moment it started. It refuses an end before the start, and it refuses to overlap a bout of the same item that is still open.

Started it now by mistake?

If you started a bout when you began telling it, its start is now, and an end time from earlier can't be right. The finish form shows when the bout started, and won't take an end before it. Under it, ↶ it all happened earlier — log it as a past bout throws the open bout away and writes the real one from From to the end time you set, with everything you'd already filled in.

A refused save keeps what you typed

If Latch refuses a form (an end before the start, a time it can't read, a time in the future), the page comes back with everything you typed still in it and the reason beside the form. It does not throw your words away. That holds for every form that takes words: kit, reflections, confessions, check-ins, notes and the rest. A slider you hadn't moved comes back unmoved, so it still records nothing.

Logging a finish without a bout

Came, ruined or edged and don't want to start and stop a bout — or it was days ago? Kit → 💦 Log a finish: pick what happened, set When (empty = right now), and optionally the toy and how long. It counts exactly like a finished bout: the Came activity, the calendar, item stats and badges all see it.

Caged is taken from the lock at that moment. If you were locked in the game but physically out of the cage (a cleaning break), pick 🔓 I was out of the cage — it is recorded as uncaged but still belongs to that lock. There is no way to claim caged when no lock was running. Leave the length empty if you don't know it: Latch stores "unknown", never a made-up zero.

Like every kit write it is yours alone: your AI Handler, a pack's Handler and the chat bot cannot log one for you (they are refused, the way they are refused a bout). And like a bout it stays home — it is not on the chat bot's news, a pack's card or anything your AI is shown; a badge it earns reaches the room only as a badge.

A slider you don't move records nothing

Not a zero — nothing. The scale starts at 1, so a stored 0 could only ever be invented, and once it is written nobody can tell it from an answer. The same rule runs through the whole app: an unmeasured thing is blank, never zero. See Privacy and Export.

If you forget to take something off

Latch will tell you a play bout has been open a long time. It will not close it for you, because it does not know when you took it off — and a guessed end time becomes a duration, which becomes a total, which becomes a badge. Finish it with the real time, or discard the bout entirely. Discarding records nothing at all; it does not log a zero-second use.

Wear bouts are exempt: a cage legitimately runs for weeks. That is the game.

The cage

Name your cage in settings and every lock opens a wear bout for it automatically, closing when you unlock. Its worn hours simply are your locked hours — there is no second thing to remember and no separate number to reconcile.

Consumables

Give a bottle an opening amount, a unit and a reorder level. Log what you use — from the end-of-bout form, or from the item page. The level is derived from that log, never stored as a number that gets overwritten, so "how much did August cost" stays an answerable question forever.

A consumable with no stock history reads "level unknown", not "empty". Those are different facts, and a shopping list padded with things nobody ever counted is a list you stop reading.

Photos

Every item takes photos — as many as you like, one of them the cover. They go through the same door as every other picture in Latch: stored in your own volume, never on a NAS, never anywhere off the box. See Photos.

Badges

Your kit earns trophies. So do you. Nothing is claimed or bought — a rule is checked every few minutes and awards itself when it becomes true. The cabinet is at /badges and it lists the whole catalogue, not just what you've won, so you can see what a badge takes.

Your toys can earn: Favourite toy of the month · Most-worn gear of the month · Made me come · Reliable · The one · Workhorse · Veteran · Heirloom · and Dust collector, which is not a compliment.

You can earn: Hands free · Well trained · Kitted out · Quartermaster · Well worn · Second skin · and Held the line, for a month of real play with nothing given up.

And from the log itself (the achievements module, not kit): First Latch · Seven Days · A Month Kept · Good Dog (fifty verified tasks) · Long Haul (a lock of a week or more) · Said Out Loud (a hundred reflections) · On the Record (twenty-five photos) · Let the Wheel Decide (a hundred spins) · Still Here (thirty check-ins) · A Year Under (a year locked, all told). These carry drawn art in the cabinet; the rest wear their emoji until the forge catches up.

A monthly badge is decided after the month ends

"Favourite toy of August", decided on the 3rd of August, is a claim about three days wearing the name of a month. So August's trophy lands on the 1st of September, and once a month is decided it stays decided — a bout logged late can never quietly move a trophy that has already been given, or mint a second holder of the same month.

A genuine tie is awarded to everyone tied, because calling one of two equals "the favourite" would be false. And a month with only one lonely bout crowns nobody.

Each badge carries the evidence it was earned on, frozen at the time: "12 bouts · 4 h 20 m". The rows underneath keep moving; the trophy does not quietly restate itself every time you look at it.

With a Pup ID, every badge also gets a paper — your own signature on it, naming a kit item by its uid, never its name. Deleting an item (only possible while it has no history) removes its badges; their papers stay, as a record of what was true when they were signed. A pack sees a kit badge only under Badges earned with kit — and, when its figure is a lock's length, only with the clock too: the cage's worn time is the time you were locked, so Well worn, Second skin and a tally on the cage are never shown to pack-mates (the list).

Wishlist

Anything can be marked ✨ wishlist. It sits in the inventory, it can hold specs and a price, and it cannot be used in a bout — you don't have it yet. Later the Handler will have opinions about it.

What leaves the box

Nothing, unless you say so. Your inventory is the single most identifying thing in this database, so the shareable export excludes every kit table by construction. The one exception is opt-in per item: tick "may be named on a share card" and that item's name and category — not its price, its size, its notes, its photos or its use — become shareable. Wishlist items never are.

The Kennel Card is the other opt-in, and it is per view: tick an item on a view and its name and kind go on that page, with photos, specs, a price and a shop link each a further tick. It is the one place a ✨ wish can be shown. Your notes never are.

The full backup, which never leaves your machine, contains everything: two more spreadsheets (kit.csv and bouts.csv) and every table. See Export.

Carrying your kit to a new box

The edit form's 🧳 travels with my pup to my next box (on by default for toys and gear) is a carry flag only: it decides what goes into your pup.json when you arrive on your own new box. It never decides what any pack sees — that is chosen on Consent, item by item.

What travels is the item's name, category and status (owned or retired), its numbers and choices — sizes in millimetres, materials, yes/no fields — and its cover photo if that photo is marked 🧳 too (see Photos). Text fields stay home — a tag engraving, a brand, a colour — and so do notes, prices, bouts, consumables and the wishlist. Every item has a random uid that travels with it, so the new box knows it is the same thing.

An item that arrived that way is carried: it earned nothing by arriving (the kit-collection badges Kitted out and Quartermaster do not count it), and it can travel again.

Deleting

You can delete an item only while it has no history, which covers the typo you made thirty seconds ago. Once it has been used, retire it instead — deleting it would rewrite totals you have already been shown, and this log does not rewrite itself. See The spirit of it.


This page also ships inside the app, at /guide — so your own instance always serves the guide for the version you are running, with the internet unplugged. Get Latch · Something wrong here? Tell me.