Over the last year, I shipped nine projects that went nowhere.
Some got a little traffic and then disappeared. Some were technically fine but gave people no reason to return. A few never made it far enough for me to learn whether the idea was good. I would finish one, tell myself the next one needed to be more useful or more polished, and start again.
None of them were dramatic failures. That was almost the frustrating part. They simply arrived, sat quietly on the internet, and were forgotten.
For the tenth project, I stopped trying to come up with something that sounded sensible in a pitch. I built the kind of website I wanted to find myself.
I missed websites that felt like places.
Not landing pages with a gradient, three feature cards, and a button asking me to book a demo. I mean websites you could wander around in. The kind where you clicked something because it looked interesting, not because a funnel had placed it in front of you.
That thought became publicdesktop.lol, a Windows XP-style desktop shared by everyone who visits it. It has now passed 3,000 visits, reached #6 on Product Hunt, and—more importantly—started filling up with files and icons left by people I have never met.
The premise is simple: the desktop has a fixed grid of coordinates, from A1 to H19. An empty coordinate costs $10 once. You can put an app shortcut, an image, or a text file there. Once a location is claimed, it stays claimed and cannot be outbid.
It is part tiny marketplace, part internet art project, and part excuse to build a surprisingly functional fake operating system in a browser.
I didn't want to build another directory
The first version of the idea was much less interesting. It was basically a grid of logos.
There are already thousands of directories, and most of them have the same problem: every listing feels temporary. You submit a project, it appears somewhere in a long page, and a week later nobody remembers where it was.
A desktop changed the meaning of the grid.
On a desktop, position matters. You remember that a file is in the top-right corner. You notice when something new appears next to it. An icon at F3 feels more like a small piece of property than row 83 in a directory.
That is why Public Desktop uses fixed coordinates. The layout does not reorder itself based on popularity, payment size, or an algorithm. If someone owns H19, their icon is at H19 for everyone.
The $10 price came from the same idea. I wanted the decision to be small enough to make on impulse, but real enough that the desktop would not immediately fill with disposable spam. There is no subscription and no recurring listing fee.
The nostalgia had to do something
I did not want Windows XP to be a decorative skin around a normal website.
The desktop has selectable icons, double-click behavior, draggable windows, a taskbar, a Start menu, Internet Explorer, Notepad, an image viewer, Paint, a media player, system settings, a recycle bin, and several small details that serve no conversion-related purpose whatsoever.
Those unnecessary details turned out to be important.
People open the Start menu because it is there. They try the Run dialog. They drag windows into awkward positions. They click the suspicious executable even though it is very clearly named DO_NOT_OPEN.exe.
On mobile, double-clicking and desktop-sized windows obviously make less sense, so the interaction changes to tapping and horizontal exploration. The site still behaves like the same shared computer rather than collapsing into a conventional mobile landing page.
The result is slower and stranger than a polished SaaS homepage. That is intentional.
A desktop icon is not just a logo
There are three permanent item types.
An app opens in a small Internet Explorer window with its favicon, original description, destination URL, click count, coordinate, and the time it was added. Visiting the website goes through a redirect endpoint so the outbound click can be counted and the destination receives a clear Public Desktop referral.
An image opens in the Windows Picture and Fax Viewer. A note opens in Notepad. All three are first-class objects on the same desktop.
This distinction seemed minor while I was building it, but it gave people permission to be less serious. Not every coordinate became a startup logo. Someone added goat.jpeg. Someone else left read_this.txt. There is an image called no_this_guy_goat.jpeg sitting permanently on the internet next to actual products.
That mixture is much closer to what I hoped the project would become.
The boring part was the important part
The interface is the visible part, but most of the work went into making a $10 permanent purchase behave like a permanent purchase.
The stack is Next.js 16, React 19, PostgreSQL, Drizzle, Stripe, and a small Docker deployment behind Caddy. Uploaded images are decoded and normalized with Sharp before they enter the asset store.
The data model separates a listing, a desktop spot, and a bid or purchase. A spot points to its current active purchase. That extra separation is useful for the public media player, which is the one non-permanent surface and can be replaced by a higher bid.
The difficult case is two people trying to buy the same empty coordinate.
Starting a checkout cannot permanently lock a spot, because plenty of people open Stripe and never finish. Leaving it completely open is also wrong, because two successful payments could race for the same coordinate.
I ended up using short-lived reservations before checkout and a guarded activation when Stripe confirms payment. Webhook handling is idempotent, and the database update succeeds only if the spot is still available for that purchase. If a stale checkout somehow completes after another purchase already won the coordinate, it must not overwrite the owner.
It is not the exciting part of the screenshot, but it is the part that lets the word “permanent” mean something.
The same caution applies to uploads. A filename and MIME type are not enough to trust an image. The server decodes it, checks dimensions and limits, rotates it correctly, resizes it for its intended use, and writes a normalized WebP file under a generated key. The public asset route only accepts keys matching the expected pattern.
Small projects still need boring boundaries.
The first launch that did not feel quiet
For a long time, I was looking at seed data and empty coordinates. That makes it hard to tell whether a shared-space idea actually works. A mocked community always looks suspiciously tidy.
Then real people started adding things.
The desktop became uneven almost immediately. Product icons appeared beside jokes, pictures, and notes. Some people chose visible central positions. Others deliberately picked coordinates near an existing item. The newest addition changed what the whole screen looked like without changing any application code.
That was the moment the project started making sense to me. The product is not really the XP interface. The product is the accumulated desktop.
I launched it on Product Hunt and watched it reach #6 Product of the Day. By then the site had passed 3,000 visits. After nine projects that struggled to get noticed, seeing strangers arrive at the same time was exciting and slightly terrifying.
I kept refreshing the analytics at first. It is difficult not to turn a launch into a scoreboard when the numbers are moving in real time. But the traffic also exposed the difference between a visit and participation. Three thousand visits make a satisfying screenshot. The meaningful event is somebody deciding that one coordinate should permanently contain their thing.
That is also why I hesitate to call the previous nine projects wasted time. Parts of them are hiding everywhere in this one: payment flows, deployment mistakes, small interaction details, and a much better sense of when I am polishing something nobody has asked for. Public Desktop looks like a sudden good idea from the outside. From my side, it is the tenth attempt.
I have been trying not to optimize away the weirdness while improving the path to that decision.
Things I would do differently
I would model the payment race before building the checkout UI. It is easier to design a wizard around the actual transaction rules than to retrofit those rules after the screens look finished.
I would also add shareable coordinate links on day one. Every permanent item naturally wants a URL like publicdesktop.lol/#F3. Owners are much more likely to share “this is my spot” than a generic homepage.
Finally, I would test with real content earlier. Four neat placeholder icons do not reveal layout problems. Long filenames, transparent favicons, portrait images, one-line notes, and questionable jokes do.
What I am building next
I want each purchase to create a small share card: “I claimed F3 on the internet's public computer.” That gives every new resident a simple way to bring someone else back to their coordinate.
I am also interested in the desktop as a record over time. The created-at timestamp is already visible inside every item window. Eventually, browsing old additions should feel a little like opening folders on a computer somebody has been using for years.
For now, it is still one desktop, 152 coordinates, and a growing collection of things strangers decided were worth leaving there.
You can explore it at publicdesktop.lol.
The launch is also on Product Hunt, and I post updates on X.
If you open DO_NOT_OPEN.exe, that part is on you.
Top comments (0)