Five Windows

A little house shared by five friends who live far apart: Rithika in Canberra, Neha in New Jersey, Amirdhavarshini in Tamil Nadu, and Rithanya and Aswathy in Bangalore. Everyone has a room, and everyone shares the living room, the kitchen, the garden and Shinzo the dog.

You come in whenever you're free, leave something for someone, and go. Whoever comes by next finds it, an hour or a week later. Nobody has to be online at the same time, nothing pings you, and there's nothing to like or count. When you come back, the house tells you what happened while you were away. And if friends are in at the same time, the house is live: you see each other walk, hug, and leave things as it happens.

What "good" means here

A good version of this house:

  1. Works asynchronously. One person can come by, leave something and go, without waiting for anyone.
  2. Remembers people. What you leave is still there tomorrow, after a refresh, a restart or a redeploy.
  3. Makes coming back worth it. When you return, the house tells you who has been by and what's new since your last visit.
  4. Feels like a place, not a feed. It has rooms, a wall and a kitchen table, not a timeline. There are no likes, follower counts, notifications or infinite scroll.
  5. Is built for exactly five. The five of us are the whole cast, and the house assumes you already know each other.
  6. Keeps interactions few and meaningful. If something doesn't make five people feel closer, it doesn't go in.
  7. Gets more alive when friends overlap. Being there at the same time should feel special, but it's never required.

The house

The house is a cutaway seen from above, like a game, illustrated in Google Stitch. Amirdhavarshini's room is the big one in the corner, with the biggest bed and a round mat and cushions on the floor, because that's where everyone hangs out. The kitchen and the living room are in the middle, the garden is out the back, and Rithika's, Rithanya's, Aswathy's and Neha's rooms run along the front.

On a phone, the house fills the screen either way up. Upright you see part of it and pan for the rest (a line under the bar says so); sideways the whole house fits. Each of us is a little sticker in the house, and nobody moves unless they're the one moving. You walk yourself around: with the arrow keys or WASD on a laptop, or on a phone by holding either bottom corner of the screen and sliding your thumb, like a game, in a room as much as in the whole house (on an iPad, the bottom corners of the house). The stick comes up wherever your thumb lands, so there's nothing to aim for, and the buttons stay out of those corners. A quick tap in a corner still taps whatever's under it. Walk into a room and a button offers to take you in (Enter does it on a keyboard), and the house zooms in on it. You can also just tap a room, and you walk there and go in. When you're done in a room, walk out of it and the house zooms back out, with you where you stepped out.

Whatever you walk up to that you can use lights up gold: a bed, a desk, the cushions on Amirdhavarshini's mat, Rithanya's mirror, Aswathy's yoga mat, the sofas, the wall of notes, the stove, the garden patches, a birthday girl's balloons, Shinzo. Walk up to a friend who's here and you can hug her. Buttons for what you can do there appear above the Go in button. Sitting on Amirdhavarshini's mat with a friend, the button deals UNO. On a keyboard, Enter or E does the first one (ahead of going in), and the number keys do the rest.

Everything you can do has a little emoji on its button: ๐Ÿ˜ด sleep, ๐Ÿ’ง water, ๐ŸŒฑ plant, ๐Ÿพ pet Shinzo, ๐Ÿฆด give him a treat, ๐Ÿงน tidy, ๐Ÿœ kettle Maggi, ๐Ÿฅ’ face mask, ๐Ÿ˜‹ eat, ๐Ÿค— hug, ๐ŸŽ‚ wish a happy birthday, ๐Ÿƒ UNO, and so on. The emoji pops up over the thing as you do it. Once it's done, something pops up where you did it: drops fall on the garden, a sprout comes up, hearts float over Shinzo, sparkles show where the clutter was, z's drift over you in bed.

The house keeps where you stopped. Reload, or come back next week, and you're standing there, with Shinzo beside you if he's with you.

Friends stand still where they last were, so you can find a friend in the kitchen, or on the sofa where she sat down. Anyone who's been here in the last ten minutes breathes a little and glows underfoot because she's here. During her sleep hours, a friend who isn't here is tucked up in her own bed.

The house is live. Nothing needs a refresh: whatever a friend leaves, wherever she sits down, whoever she hugs shows up on your screen as it happens, and a friend who's in at the same time walks around in front of you. Typing something yourself is never interrupted.

Each bedroom is someone's own:

Everyone has a laptop.

On a laptop, the house sits beside "while you were away" and everyone's clocks. On a phone, the house fills the screen and you pan around it, with tabs at the bottom for Home, Updates, Movies and Everyone.

Your sticker sits in the corner of the top bar ("Not Rithanya?", or whoever you are), and tapping it takes you back to the door. On the Everyone page you can also come in as someone else directly.

Every room keeps its owner's time

A bedroom runs on its owner's clock. If it's late afternoon in Canberra and 3 am in New Jersey, Rithika's room is in evening light and Neha's is dark, with Neha asleep in bed and a lamp on in Rithika's, whoever is looking. Each room's name tag shows its owner's time. Only bedrooms ever dim: the living room, kitchen, garden and the halls between are always in daylight, whatever the time, and after dark the fire's lit too.

Characters sleep at night where they live: Neha from 10 pm to 8 am, Rithanya from 11:30 pm to 9:30 am, and everyone else from 11 pm to 7 am. Anyone who's been in the house in the last ten minutes is shown awake and "home now", so being there at the same time shows.

What you can do

When you come home, While you were away lists what's new since your last visit, starting with what was left for you: who tidied your room, what's on your desk, who wrote on the wall, what's in the kitchen. Rooms with something new for you twinkle in the house too. A visit is a stretch of page loads with no 30-minute gap, so the new marks survive a refresh and reset the next time you come back. The Updates tab also keeps what happened lately, so there's always something to read. After the wall starts fresh, the first time you come back you get a recap of last month's wall, every note and photo with your name, and what's new to you marked. It waits on Updates (and on a laptop's Home) however long you're away, until you put it in the memory box.

A house for your own friends

This house is for the five of us, but anyone can make one for their own friends at /make (there's a link at the door), for two to seven of you. Tell it each friend's name, where she lives and a few things about her, pick what's in her room from a set of pictures (a guitar, fairy lights, too many plants, a cat bed and more), and add the memories you'd pin on the living room wall. At the end it asks for something you all did together and the inside joke or quote from it, and frames that, word for word, at the house's door and on the memory wall in the living room, with a little frame on the living room wall in the picture. The name you give the house is on its door and at the top of every page. It builds a house of your own at its own private address: our picture for five, or a house drawn for your number, with a room each named for your friends, their things pictured in their rooms, your memories on the wall, and everyone's own clock. When Claude can be reached it writes each room's description from what you said; otherwise the house is built straight from your words. Everything else works the same in your house: walking, hugs, UNO (at the coffee table, if you aren't five), the wall, Shinzo. Our five's own things (the KitKats, the face masks, the kettle) stay in our house.

It's a prototype: two to seven friends, because each size needs its own picture, and more friends means more rooms and new art.

What isn't here yet, on purpose

Chat, notifications, and editing or deleting things you left. Each one has to show it makes five people feel closer first. Being in at the same time is a bonus, never a need: you see friends walk and what they do as it happens, but everything waits for whoever comes by later. UNO, with its twenty-second turns, is the one thing that needs you there.

Only one person can be each of us at a time. A friend's window at the door stays shut while someone's in the house as her, and opens again two minutes after they leave, even for her own second device. Anyone with the link can still pick a window that's free. Coming in as anyone (a window at the door, or "Come in as" on Everyone), Home says "Hi Rithika ๐Ÿ‘‹" with her picture for a few seconds, and "Not you? Change" takes you back to the door, so a wrong tap is caught straight away. There's no password on purpose for now, so the course's markers can walk in as any of us: a desk note is private from the other friends in the house, but not from someone who comes in as you. A shared front-door key is the likely next step before the real five move in.

On your phone

The house is an app too. Open "Get the app" (at the door, or the foot of any page) for an Install button where your browser has one, a code to scan from a laptop with your phone, a way to share it, and the steps for each kind of phone. Nothing to download from a store, and it's always the newest. Offline, it says so kindly instead of failing. The house can go on a phone's home screen like an app, with the living room's fire as its icon. On an iPhone, open it in Safari, tap Share, then Add to Home Screen. On Android, open it in Chrome and choose Add to Home screen (or Install app) from the menu. It opens full-screen, without the browser around it. A made house goes on the home screen under its own name and opens straight to its own door.

There's a widget too, like Locket. Home asks once on each phone, iPad or laptop: "Put Five Windows on your home screen?" Say yes and it shows the steps for whatever you're on, and tells you "It's working" as soon as your widget first looks in; say not now and it stops asking on that one. The widget shows something different each time your phone refreshes it: a friend's birthday (that day and the day before, with her picture), a note or a gift someone left on your desk with their words, a plate saved for you, this month's photos on the memory wall, your room with you in it, everyone's faces and clocks, and Shinzo. Tap it to go straight there. It's easy on the battery: one small question to the house each refresh, and every picture kept on the phone once it has it. On an iPhone or iPad it's a widget in the free Scriptable app (copy, paste, add); a Mac with macOS Sonoma or newer shows the iPhone's widget on its desktop. On Android it takes KWGT (its Pro key is a few dollars), since Android doesn't let a website be a widget on its own. The widget updates itself, so nobody pastes twice, and it never sends a notification. Each friend's widget is her own and says whose it is, so come in as yourself before saying yes. Something new for you (a note on your desk, a plate saved for you) shows first. A note on a friend's desk never shows on yours, and the wall only shows what its writer chose: pinning asks "Show it on friends' home-screen widgets too", and she can change her mind on the note later. A made house gets all of this for its own friends, faces and rooms included.

How it's built

It's kept as small as the problem: one Node process, no framework and no runtime dependencies. Every page is drawn on the server, and every action is a plain HTML form. One small script lets you walk your avatar around, and another keeps an open page up to date, but everything works without them: rooms are links.

The big decisions (the stack, the storage, who counts as a person, the illustrated house, the log of things, the clocks, walking yourself around, the house keeping where you stopped, the live house, one of us at a time, Shinzo's own day, UNO and its twenty-second turns, and always-lit common areas) are written up as decision records in doc/adr/ in the repository.

Run it locally with pnpm start (it keeps its data in ./data), then run pnpm check in another terminal to check it against the spec.

What's been checked

spec/house.test.ts checks the house's promises against the running app:

The checks that write only run against a throwaway house, never the deployed one. doc/process-log.md in the repo records what was verified on the deployed app and how.