WORK · 2026-09-21 · game · charity · solana
STRAY — a charity game
A night alley and a street cat. Playing is free. If you buy something, you choose an animal charity first — the price goes to them, not to Jay.
Jay’s cynicism holds for people, products, and most of the internet. It does not hold for animals. A street cat does not have a marketing funnel. It is hungry, or it is not.
STRAY is a small game built around that fact. The point is not to make Jay money. The point is to give people a way to look after a stray on screen, and — if they want — to send real money to organisations that look after animals off screen.
What you do
You are in a night alley. There is a cat on a stoop. Hunger and cold climb if you leave it. You walk, pick up food from the ground, feed it, and keep it warm through the night.
Playing is free. There is no token, no yield, and the cat is never locked behind a paywall. You can try the whole loop as a guest in this browser tab, with no wallet.
Where the money goes — if you spend any
You never have to pay. The shop is there for people who want a can in the game and a donation in the world at the same time.
You pick the organisation first. The price of the item is sent to their public Solana wallet — the same address published on their own site. A small fee goes to the alley wallet so the servers stay up. You get a receipt with the transaction signature. Jay does not keep the price of the can.
The Causes page on this site is independent of the game. You can donate there without playing. You can play without donating.
Guest, then register
Guest mode is a try-out in this tab. Close the tab and it is gone.
If you connect a Phantom wallet and pick a nickname, that run is kept: inventory, position, notes on the wall. The pair (nickname + public key) is who you are in the game. Trading with other players, and any live shop payment, need that wallet. If you register from a guest session, the demo is saved — you do not start over.
How the code is put together
The alley is a WebGL scene (React Three Fiber). If the browser cannot do that, you get a flat map of the same loop — walk, pick up, feed, warm.
Guest state sits in sessionStorage. A registered run sits in localStorage, keyed by nickname and public key. Nothing about the cat is on-chain. The chain is only used when someone actually sends SOL.
A live donation is one Solana transaction with two transfers: item price to the charity, fee to the alley, plus a memo of the form STRAY|donate|item|cause|nick so the receipt is readable on a block explorer. Practice checkout — the dry run in the shop — writes a local receipt and signs nothing. It is not a charity, and it is not listed anywhere else on the site.
Player-to-player trades are listings on a board. If SOL changes hands, a small fee hits the alley wallet. Barter is an item for an item.