CoSpin · the paper trail
What changed
Every build, in order, with nothing important left
out and nothing boring left in. Mostly.
The room reaches the clock
- Installed on an iPhone, the strip behind the clock now belongs
to the app. It used to belong to iOS, which painted it from your
phone's light or dark setting and had no idea the room had
gone teal. It moved when the phone did and never when the app did —
which is the most annoying kind of nearly-working.
- It follows the room. A dark room runs straight to the top of
the screen with no seam at all. A light one gets a band in the deep
end of its own colour, because the price of owning that strip on iOS
is that the clock is always white, and a white clock on a bone
background is a clock you own but cannot read.
- Every room is checked. All sixteen guest colours on both
skins, and the plain one, held to 7:1 against white. Thirty-four
rooms, thirty-four distinct bands, no exceptions and no eyeballing.
- Nothing changes in a normal browser tab. The whole thing only
exists for an app you actually installed.
- 1.4.1: and then it didn't appear, because the whole thing
hung on a CSS media query that iOS home screen apps don't reliably
answer. Built the feature, hid it behind the one door iOS won't
open. It asks Apple's own question now as well.
- There's a line at the bottom of this card reporting what the app
makes of the screen it's on. A phone has no console, and both of the
things wrong with this were invisible from anywhere else.
- 1.4.12: the status bar goes back to iOS. Taking it over
was the only way to make it follow the room, and the price turned out
to be the bottom of the screen — the same swap that hands you the
strip behind the clock hands back a window fourteen pixels shorter
than the phone. A coloured strip at the top is not worth a cut one at
the bottom.
- So the band, the contrast ladder that kept a white clock legible
over thirty-four rooms, the fade at the bottom of the wheel, the mask
on the confetti and the shifted cannons are all gone. Everything
below the clock is exactly what it was at 1.3.1, which is to say it
runs off the bottom edge like it always did. Android still follows
the room; it always could.
- If you installed CoSpin between 1.4.0 and 1.4.11, make the icon
again. iOS decides how the status bar behaves at the moment the
icon is created and never looks at it again, so the old icons are
still running the old arrangement and no build can reach them. Press
and hold, remove, add to the Home Screen. Nothing you have collected
is stored on the icon.
- 1.4.11: the strip at the bottom of the screen is not a
fact about phones. It is a fact about this app, installed on an
iPhone, since 1.4.0 — the change that took the status bar over
also handed back a window fourteen pixels shorter than the screen.
The wheel had been running clean off the bottom edge for months
before that, and the confetti had never been cut.
- Three separate fixes went out for it, and all three went to every
screen there is: the wheel faded on desktops that had nothing to
fade, and the confetti cannons moved up twenty-two pixels on
machines with no strip to clear. The app now measures the gap
instead of assuming it, and the compensations only exist where the
gap does. Everywhere else it is back to running off the edge, which
is what it did before we ever went near it.
- 1.4.10: a pale strip along the very bottom of any dialog
over a coloured room. The dim you see through a dialog and the page
colour behind it are two separate recipes that have to agree, and
they were mixing 60% and 78% of the same room — a difference nobody
would notice anywhere except the one strip at the foot of the screen
where only the page colour reaches. Both now read from a single
number, so they cannot drift apart again.
- The question card had it too and nobody had mentioned it. On a
guest's room it was dimming with one colour and the page behind was
dimming with another, which is the same bug wearing a different hat.
Fixed in the same breath.
- 1.4.9: and the confetti, which was landing on that same
fourteen pixels and getting sliced along a straight line. It now
fades out just before the edge, so the paper falls out of view
instead of being guillotined. The cannons moved up a touch to fire
clear of the fade — twenty-two pixels at fifteen a frame, which is
nobody's idea of a noticeable distance.
- 1.4.6 through 1.4.8: the big faint wheel behind the board.
It was never falling short — it runs to 1200 in an 860-tall window
and was simply being cut there, while the screen carries on to 874.
Nothing on the page can paint that last strip, so pushing the wheel
further down did precisely nothing, twice. It now fades to the colour
of the page before the cut, arriving exactly at it, so the strip below
matches and there is no line. It sinks instead of being scissored,
which is what it was always meant to do.
- 1.4.5: and the sheets that are the whole screen —
the name card and Options on a phone — now run their own bone off
the bottom edge instead of stopping at the home indicator with a
dark strip under them. There is no scrim to match when the sheet is
everything; matching one anyway was the bug.
- 1.4.4: and the other end. Taking the whole screen means
taking the strip the home indicator sits on too, and a see-through
scrim stopped before it — so the room glowed through as a bright bar
under a darkened screen. The page behind now wears the same wash the
scrim would have given it, which makes the seam a seam between two
identical things.
- 1.4.3: and then the Options card lost its close button,
along with the intake's and the changelog's. All three were exactly
where they had always been — underneath the new band. Taking the top
of the screen for the clock means giving it back to everything that
covers the whole screen, which is now one number they all agree on.
- 1.4.2: and if the app is installed but the status bar still
isn't playing along, it now says so and tells you to reinstall.
iOS decides how that strip behaves when the icon is made and never
asks again, so a new build cannot reach it. Three rounds of "it's
still broken" before anyone thought to check that.
A phone on its side, put straight
- The name sits in the middle again. Turned sideways, the
wheel is deliberately bigger than the screen and hangs off the
bottom — and the name and hint beside it were being measured against
the wheel rather than the window, so they sat ninety pixels low.
They were perfectly centred. On the wheel. Which you cannot see all
of. That was the problem.
- The wheel's outer ring is all there. It is drawn just
outside the wheel's own edge, and the crop that trims the bottom was
flush with it, shaving the ring off the top and the right. It now
has room to be a circle.
- The blur reaches the whole wheel. It used to start at the
halfway mark, which was a guess, and on the widest phones the guess
left a seam down the wheel's edge. It now starts where the wheel
actually starts, and a little before.
- An empty phone or email box no longer offers to continue.
The button was on before you had typed anything, off the moment you
typed one character, and on again at the end — enthusiastic about
nothing, then suddenly hard to please. Skip is how you say no, and
it is right there.
The ledger learns everyone's name
- Accounts, not a shared password. You sign in to the ledger
with your own email and your own password. A shared password can tell
you somebody was allowed in; it can never tell you which somebody. We
got tired of that particular whodunnit.
- Bring people in one at a time. Add their email, hand them the
setup code that appears, and they choose their own password. Nothing
is emailed, so nothing gets stuck in a spam folder — the weak link is
you remembering to actually pass the code along.
- Remove somebody and they're out immediately. Not "after
everyone changes the password." Immediately, on every device they
were signed in on.
- What has been done. A list at the bottom of the ledger: who
signed in, who added whom, and every deletion with a name attached.
Deleting a guest destroys the evidence of itself, so the evidence now
lives somewhere else. Alibis available on request.
- Fixed before it bit anyone: taking back an invite nobody had
claimed was blocked by the rule that stops you removing the last
person who can get in. An unclaimed invite is not a person. It is a
sticky note.
- Collecting still needs nothing at all. Open the page, play, done.
None of the above ever comes near a booth.
Open the page. That is the setup.
- No key, no code, no nothing. Open CoSpin on any phone and it
collects. The booth key is gone, and with it the QR code, the paste
box and the twenty minutes in a Cloudflare dashboard. Two commits
after we built the nicest possible way to type a secret into a
tablet, we found the nicer one: don't.
- Name your game. There's a field on the setup screen — call
it "Sunday youth night" and every turn played carries that name into
the ledger. Four games in an evening are now four things instead of
one long Tuesday. Optional: an unnamed game still runs, it just goes
in the books as unnamed, like a racehorse nobody believed in.
- Two clocks per turn. When it was played and when it actually
reached us, which are the same thing right up until the wifi has an
opinion. The ledger shows the gap: "straight away" most of the time,
"3 hours later" when a booth spent the afternoon offline and the
tablet held on anyway.
- Where it came from. Each turn records the address it was
sent from, so two booths are tellable apart and a nonsense row has a
return label on it.
- The ledger sets its own password. First person to open it
picks one, and it lives in the booth's own database. No dashboard, no
redeploy, no secret that can't be read back. Do it the day it goes
up — until somebody chooses one, anybody can.
- Fixed: a stray null byte had been sitting in the ledger's
unlock check since it was written, quietly making it search for
nothing at all. It worked. It should not have.
Keys, and how to stop typing them
- Point a camera at it. The ledger now draws the setup link as
a QR code. Show it to a new tablet and it joins the booth — nothing
typed, nothing pasted, nobody reading a secret out loud across a
room. We wrote the encoder ourselves, which is either very impressive
or a cry for help. Reader, it was both.
- The code knows when to leave. It disappears after ninety
seconds and whenever you close the page. That code is the
key, and a key should not linger like the last guest at a wedding.
- “No key on this tablet” is now a button. It used to be a
complaint. Tap it, paste the key, done. Same row fixes a key that has
been rotated out from under a tablet — everything it was quietly
holding goes the second the new one lands.
- Send data. One row in Options that answers the only question
anyone has at the end of a day: can I close this now. It counts what
is waiting, says why the last try failed in words a human uses, and
retries on its own when the wifi wanders back.
- Nothing is lost to a dropped connection. Turns queue on the
tablet and go up when they can. The booth has already proved this
the hard way, which is not how we would have chosen to prove it.
The back of the booth
- The Booth Ledger. A page at
/ledger that shows
everything held about everybody who has played, and — the important
half — the way to get rid of it. Two presses to forget somebody. No
dialog box you can hammer through by muscle memory.
- Contact details now come with a clock. Ninety days, a line
on screen telling the guest so before they hand anything over, and a
job at 4:17 every morning that actually does the deleting. A promise
with a cron behind it is a promise.
- Phone numbers and emails get checked. Ten digits and an @
with something either side of it. We are not going to guess what you
meant by
jim@jim.
- Fixed: the party screen occasionally insisted it was Bob's
turn when it was very much Janice's. Bob has been asked to sit down.
Two modes, not three
- Questions mode has retired. It and Party were the same game
wearing different hats, and one of the hats was doing nothing. Party
kept the good bits. Nobody has noticed, which rather proves the
point.
- Everyone gets a face. The name-and-avatar step from the
booth now works in Party too, so the roster is people rather than a
list of strings.
- The room takes the colour of whoever is up. In every mode,
not just the booth. Checked against the contrast rules in all sixteen
colours, because a room you cannot read is just a mood.
The first one
- A wheel, some questions, and a room full of people who did not
know each other twenty minutes ago. That was the whole brief.
- One file, no server needed, works with the wifi off. Email it,
put it on a stick, open it on a plane.
This icon is a version
behind. iOS decides how the status bar behaves when the icon is made
and never revisits it, so this build cannot reach it — which is why the
clock is hard to read and the wheel stops short of the bottom. Press and
hold the CoSpin icon, remove it, then add it to the Home Screen again —
everything you have collected is kept.