A 10x10 px plot costs 1 EUR, and there is no size limit on a plot
Every time a plot sells, that ground costs 1 EUR more per 10x10, forever
The cheapest any square will ever be is the first time it sells, which happens once
Any live plot can be taken over at its current price and the previous owner stays in its history
There is no end date and no countdown, the canvas stays open and every plot stays contestable forever
Two buyers grabbing one plot resolve to one winner and one refreshed quote, deterministically
I do not know whether it fills, and killing the deadline is what stops a slow canvas from having a public funeral
In 2005 a 21 year old sold a million pixels on one webpage for a dollar each and paid for university with it. The Million Dollar Homepage is still online two decades later, GeoCities-era logos and all, which is the part I keep thinking about. Nobody bought pixels. Everybody bought a spot in the group photo.
I rebuilt it for 2026. Same canvas, same million pixels, one mechanic the original could not have: the group photo keeps getting retaken.
The 2005 page had a flaw as a game. Once a pixel sold, the story there ended. Alex Tew got his money, the buyer got a permanent square, and after five months there was nothing left to do but look at it. Mine never reaches that state, because a plot can always be bought out from under whoever holds it, at a price that goes up every single time.
Every plot costs money, and the first one costs least
A 10x10 px plot is 1 EUR. That is the floor, and it only exists once per square.
I built a free first claim first, and ran it for three weeks. The reasoning was decent: a stranger landing on a 99 percent empty canvas is not weighing 1 EUR against value received, they are deciding whether this is a real thing or an abandoned side project, and a card form is a bad way to ask. Give the first claim away, count it as a sale anyway, and let the second buyer pay.
I took it out. Not because it failed but because it made the product harder to say. Half the page was explaining an exception: what counts as free, why it is capped at 20x20, why claiming free ground still counts as a sale, what happens if someone takes the free square you just claimed. That is four sentences of mechanics standing between a visitor and one number.
The number is 1 EUR per 10x10, and it goes up.
The ratchet is the whole product
Every sale of a square adds 1 EUR per 10x10 to that square. Permanently.
A 10x10 is 1 EUR the first time it sells, 2 EUR the second, 3 EUR the third. A bigger plot is the sum of its cells, so a rectangle covering ground that has sold different numbers of times costs different amounts per part of itself, and the panel shows you the breakdown before you pay.
Two things fall out of that, and they are the reason the mechanic exists.
The first: nothing is ever sold out. There is no state where a visitor arrives and finds nothing to buy. The canvas can be 100 percent claimed and still have 10,000 plots for sale, just at higher prices than yesterday.
The second: the cheapest a square will ever be is right now, and that is a fact rather than a marketing line. Every square's price is a public number that only moves up, printed on the plot's own page next to the count of how many times it has changed hands.
What else is on the page
Plots snap to a 10px grid, minimum 10x10, no maximum: if you want the whole canvas and can pay for it, the panel will quote you. There is a hard cap of 400 EUR per 10x10, which would take four hundred separate sales of one square and is not going to happen.
The grid carries a cheapest-ground filter, so you can dim everything above the current floor price and see exactly where the bargains are, and a price heatmap that tints sold ground by what it costs now. Once prices diverge, where the canvas runs hot IS the content. Under it sits a market ledger: an activity ticker, a price histogram, and a leaderboard of the most contested ground. Click any row and the canvas scrolls to that rectangle.
The page also renders the whole canvas as a 3D price landscape, where height is price. Untouched ground lies flat and every square that has sold stands up by what it costs next, so the skyline is a picture of where the money has been. Drag to orbit, click a column to send the 2D canvas to that plot. A browser that will not run WebGL gets the same ranking as a bar chart and loses nothing but the dimension.
Nothing on this canvas is ever sold out
Any live plot can be taken over by paying its current price. Your image and link replace the previous owner's, and their image does not get deleted. It moves into that plot's recorded history.
Every live plot has its own page, crawlable, no JavaScript required, showing the artwork, the link, how many times the ground has changed hands, what it costs to take it now, and the chain of everyone who held it before. That history is part of what you are buying. "This plot changed hands 4 times" is a fact about the plot, and it is worth more than a plot nobody wanted.
Plot pages also count outbound clicks. A pixel buyer on the 2005 page had no way of knowing whether their square did anything at all. Here the plot page prints the visits it has sent, which is the only honest evidence a canvas like this can offer, and it is also what makes a proven plot worth taking at a higher price.
You can always buy your plot back. At the new price, like everyone else.
I deleted the endgame
The first version of this had a seal: a date after which nothing could be claimed or taken over again, and whoever held a plot at that moment held it permanently. I wired a countdown to it, then a second condition so a blank canvas could not seal, and then I deleted all of it.
Here is what a countdown actually does. If the canvas is filling, it is social proof. If it is not, it is an obituary running in public, and there is no version of the code that knows which one it is showing. Adding a second condition made the rule fairer and the page more confusing: two progress bars, an AND, and a promise a visitor has to model in their head before they understand what they are buying.
So the canvas has no end date. It stays open, and every plot stays contestable, forever.
That costs me the scarcity trick, and it is worth it. The scarcity was never in the deadline anyway. It is in the ground: there are 10,000 plots, and each one is cheapest the first time it sells. Nobody gets a second chance at the first sale of a plot.
What is permanent here is not the grid, it is the ledger. Every plot keeps the full chain of everyone who has ever held it, and no takeover deletes an entry. You cannot be removed from the history of a plot you claimed. That is the thing worth owning, and it does not need a clock to be true.
The parts that were actually hard
The visible half is a Next.js app over a Postgres table of rectangles. The interesting problems were races and trust.
Two people can grab the same plot in the same second. That has to resolve to exactly one winner, because a page selling permanent placement cannot sell the same ground twice. The claim does an optimistic insert and then a post-check with a deterministic tiebreak on creation time and id, so both requests independently agree on who won. The loser does not get an error, it gets a refreshed quote, because by then the price has moved and quoting from stale data is how you accidentally sell a 200 EUR plot for 2.
Checkout rides my existing store on Shopify rather than a payment stack of its own, using one deliberately dumb trick. Every price on this canvas is a whole number of euros by construction, so the cart holds a single 1 EUR unit with quantity set to the total. No price drift, no second source of truth, nothing to reconcile.
Payment confirmation does not trust the webhook signature alone. Shopify signs webhooks created through the API with a key that turned out to be neither the app secret nor the store secret, which I discovered the way everyone discovers these things. So the handler has two paths: verify the signature if it matches, and otherwise take the order id out of the payload, fetch that order from the Admin API with a fresh token, and trust only what comes back. A forged payload cannot survive the lookup. The paid amount is checked against the price that was locked at reservation time, so an order that paid less than the quote does not flip anything.
Nothing a buyer submits waits for me. Plots go live the moment they are paid for, because a review queue on a canvas is just a slower canvas, and I am one person who sleeps. There is one rule, and it is about people rather than taste: nothing that degrades another human being. Breaking it gets the plot pulled by hand, no discussion, and the ground goes straight back on the market. That is a worse policy than pre-moderation on the day something ugly gets through, and a better one on all the others.
What I expect to happen
Honestly, I do not know.
The mechanism has no ceiling, which sounds better than it is: unlimited upside is what you say when you cannot forecast. What I can say is where the money is. Every claim earns, starting at 1 EUR, and the ground people end up fighting over earns again each time. There may be no fights at all.
The plausible outcomes are that it fills, that two people spend a month buying the same square back and forth and that becomes the whole story, or that it sits at 3 percent claimed for years. Removing the end date is what makes the third one survivable rather than humiliating. A canvas with no deadline that is 3 percent claimed is just early. The same canvas with an expired countdown on it is a failure with a timestamp.
The canvas is open. A 10x10 is 1 EUR, and the person after you pays more for it than you did.
Top comments (0)