My Dream, My Wish
An exercise in earning a single pound became a private wishing well on the internet. Buy a coin, make a wish you never share, and let it go.
Visit the wellThe smallest possible brief
I gave myself a deliberately small challenge: build something stupidly simple that could earn £1. It would force me to learn the bits around the software—payments, marketing, trust and why somebody would actually pay.
It became a wishing well on the internet. The idea was simple. Making everything around that pound work properly took rather more effort.
Making a webpage feel like a place
The experience begins at an old stone well. You pick up a coin, pause and throw it. The camera follows it over the rim, through the water and down to a quiet resting place. A little movement, sound, light and stillness do most of the work.
That pause before the throw matters. Picking up or putting down the coin doesn't spend it; a deliberate throw does. The gesture is forgiving, the coin is assisted into the well, and there is a keyboard route through the same ritual. Sound is optional.
I built the scene around original generated artwork, a Three.js coin and a 3D well interior, with custom water, camera movement and audio. The descent is art-directed rather than a physical simulation: the aim is to make the moment feel right.
The wish never enters the system
There is no box to type into. The site never asks for, receives or stores the wish. There is no generated answer and no promise that paying will make anything come true. The product is the moment of making the wish.
Afterwards, you can save or share an optional keepsake without revealing what you wished for. The image is made locally in the browser. Gifting follows the same principle: send someone a coin through a private link and leave their wish to them.
A pound still needs a proper payment system
Taking a pound still means dealing with failed payments, interrupted sessions, refunds and people coming back for an unused coin. Gifting adds another question: who owns it now?
Stripe handles checkout, with a Cloudflare Worker and D1 keeping track of payments and coins. A payment must only issue one coin, a gift can only be claimed once, and a refunded unused coin must stop working. If the graphics fail, people still need access to recovery and payment help.
Technical notes
- Experience
- Vanilla JavaScript and CSS · Three.js · custom camera, water and audio work
- Payments & state
- Stripe Checkout · Cloudflare Workers · D1 · server-verified payments, coin ownership, gifting and refunds
- Delivery
- Vite · static assets with a serverless payment backend · separate test and live environments
- Reach
- Eleven languages · six currencies · keyboard interaction · optional sound · local keepsake export
Where I ended up
My Dream, My Wish reached v1.0 in October 2026. Along the way, the £1 challenge picked up gifting, keepsakes, eleven languages and six currencies. Each offered value still buys one coin and the same experience.
The build is finished and live. It grew a bit beyond the original brief, but it did what I wanted: made me work through the whole process, from someone deciding to buy a coin to what happens when they need a refund.