COMMONS

Live: https://comp4020-final-abhayskahlon.fly.dev/

One creature. Not one each — one, shared by everyone currently in the same room. A room is an explicit, chosen scope: a visitor opens the site, enters a name, and either hosts a brand-new room (getting a short code back) or joins an existing one by typing that code. Everyone in the same room shares that room’s one creature — a stranger in there can feed, play with, walk, clean, or put it to sleep, and the next person in that room sees exactly what the one before them left behind: its current needs, a short, chronological record of who did what, and — read straight off those same current needs, never a new mechanic of its own — a quiet suggestion of what might help next. A different room has its own completely separate creature, history, and live updates — nothing one room does is visible to another. There’s no login — a lightweight, anonymous cookie is enough to tell visitors in the same room apart — and most actions both help the creature and cost something (cleaning is the one free action), so one person’s choice changes what the next person in that room should reasonably do next.

The creature can look like one of five fixed, hand-drawn appearances — Milo (the default), Plip, Bella, Simbaa, or Oliver — switched by any visitor in the room. It’s purely cosmetic: switching never resets or changes stats, progress, or history, the same shared way a hat or scarf already worked before appearances existed. Everyone in the room sees whichever one is currently selected.

Rooms

Adventure

A sixth, shared activity alongside the five care actions — not a sixth action in the rules sense (it’s never gated by a stat threshold the way play/walk/sleep are, and it doesn’t count against that “exactly five” number), just a second way to interact with the same one creature. Sending the room’s creature on an adventure opens a short, playable, retro pixel-art side-scrolling runner — jump over logs, puddles, and rocks, duck under flying birds, using whichever of the five appearances the room currently has selected. However the run goes, confirming “Return to Commons” triggers the exact same shared, deterministic outcome adventure always has: happiness up, energy and cleanliness down, visible in the room’s history the same way every other action already is. The game itself is cosmetic — its own distance and star count are never sent anywhere and never change a stat or the XP awarded — and it’s an enhancement, not a requirement: with JavaScript unavailable, the same button performs the adventure immediately, exactly as it always did.

Progression

Two separate, both unranked, both room-level — never a per-visitor score:

Both move together — the same successful action feeds both — but neither is derived from the other, and neither is ever attributed to which visitor contributed what.

What “good” means here (v1)

A good shared-care system makes collective responsibility visible without turning care into competition.

That’s a first, rough definition, guarding against two failures at once. The first is invisibility: if nobody can see what anyone else did, shared responsibility quietly becomes nobody’s responsibility — the creature just degrades, and no one in particular is accountable. The second is the opposite overcorrection: make that visibility competitive — a leaderboard, a score, “most caring visitor” — and the shared object stops being the point; the ranking is. COMMONS sits between those: a visible, named, chronological history of who acted, with no ranking attached at all.

What grounds this

A few things we actually read while deciding this, not retrofitted after:

Why these features, together

Care history, milestones, XP/levels, appearances, and contextual suggestions are five separate mechanisms, but all five answer the same question from a different angle, not five different questions. Care history (above) makes the instant legible — who acted, what they did, when. Milestones and XP/levels make the cumulative legible — what this room has built together over its whole lifetime, read as a shared total nobody owns individually, never as a comparison between the people who contributed to it. Appearances and contextual suggestions are the cosmetic and advisory layer riding on top of that same visible, shared state — a different look for the one creature everyone already sees, and a plain-language reading of numbers already on the page — neither is a second currency, a per-visitor score, or a new thing to manage. All five pieces read off the same underlying state and the same session/room scoping; none of them exists to be collected, ranked, or claimed by one visitor over another.

What was deliberately left out, for the same reason: a shared claim/release system for who’s “doing” the next care action, and a suggested daily schedule, were both considered and set aside, not for being infeasible but for widening the shared-care idea into a task- coordination one — a different concept, not a deeper version of this one (PROCESS.md, Decision 17).

What we chose not to build

Accounts, chat, leaderboards, shops, inventories, AI, notifications, maps, an admin dashboard. No score for being the visitor who acted most — the history is unranked, on purpose, and so are both of the room-level progress tracks described above. Rooms let multiple groups each have their own creature, isolated from every other group — not a second creature within one room, not a per-user pet; the five selectable appearances are five looks for that one creature, not five creatures.

Tested vs. judged

Tested automatically, every time this ships: the four needs never leave their 0–100 bound; an action the current state doesn’t allow changes nothing; care history is attributed to the session that actually acted, and a rejected action is never recorded; two different visitors get distinct identities; a change one person makes reaches every other open tab in the same room within about a second, via a signal that carries no copy of the state itself — only SQLite does; a room’s creature, history, and live updates are never visible to a different room; and every care action and room event — success or rejection — is durably recorded server-side, attributed to a non-reversible per-session tag, never the visitor’s raw session credential.

Left to a person, because no test can hold it: whether this actually reads as shared responsibility rather than a solo pet with a visitor log attached, whether the history feels informative rather than watched, and whether this definition of good is itself any good. It’s a first version, meant to change as the week does.