---
title: I built a joke website in ten days. It made $10.
description: "The honest accounting of a ten-day joke site. Not the launch post. What the agents built, where I launched it, and why $10 was the right number."
date: 2026-09-09
tags: [build-in-public, ai, launch, peeko]
url: "https://mahdif.com/blog/i-built-a-joke-website-in-ten-days-it-made-10/"
---

# I built a joke website in ten days. It made $10.

The honest accounting of a ten-day joke site. Not the launch post. What the agents built, where I launched it, and why $10 was the right number.

<figure style="margin:2.75rem 0;" data-wide><img src="/images/blog/i-built-a-joke-website-in-ten-days-it-made-10/post-header.png" alt="The ass.auction wordmark, a pair of boxers beside the words AS asterisk dot AUCTION." width="1664" height="311" style="display:block;width:100%;height:auto;border:1px solid var(--border);border-radius:var(--radius-lg);background:var(--card);"></figure>

The site is ass.auction. A photo of a pair of boxers with 22 spots on them. You pay to put your logo on one. Everyone who has paid is ranked by what they have spent, the top 22 are worn on the boxers, and everyone below sits on a list. Someone spends more than you and you slide down, with your name in a public log. There is a chat, live cursors, sound effects, a handful of easter eggs, and a line at the top that says I will tattoo your logo on my ass, with an asterisk.

<figure style="margin:2.75rem 0;" data-wide><div class="browser-frame"><div class="browser-frame-bar"><span class="bf-dot"></span><span class="bf-dot"></span><span class="bf-dot"></span><span class="browser-frame-title">ass.auction</span></div><div class="browser-frame-scroll"><img src="/images/blog/i-built-a-joke-website-in-ten-days-it-made-10/site-homepage.jpg" alt="The ass.auction homepage: the tattoo line above a photo of boxers carrying paid logos, with the leaderboard below." width="1664" height="1156" style="display:block;width:100%;height:auto;"></div></div><figcaption style="margin-top:0.85rem;text-align:center;font-size:0.85rem;color:var(--muted-foreground);">The whole product. One page, 22 spots, and a sentence that explains itself.</figcaption></figure>

This post is the honest accounting. Not the launch post. The launch post already happened and nobody read it.

## Why I built it

In late August a site called outbid.lol went around X. One page, one leaderboard, and you pay to rank higher on it. By its maker's own count it made $220,000 in five days. Within a week there were more than a hundred clones.

<figure style="margin:2.75rem 0;" data-wide><div class="browser-frame"><div class="browser-frame-bar"><span class="bf-dot"></span><span class="bf-dot"></span><span class="bf-dot"></span><span class="browser-frame-title">outbid.lol</span></div><div class="browser-frame-scroll"><img src="/images/blog/i-built-a-joke-website-in-ten-days-it-made-10/outbid-homepage.jpg" alt="The outbid.lol homepage, a single leaderboard of paid entries ranked by amount." width="1664" height="1156" style="display:block;width:100%;height:auto;"></div></div><figcaption style="margin-top:0.85rem;text-align:center;font-size:0.85rem;color:var(--muted-foreground);">outbid.lol. One page, one leaderboard, and a five dollar floor.</figcaption></figure>

A friend said it would be funny to launch one that says I will tattoo your logo on my ass. I checked, and the domain was available. At that point I had to.

outbid.lol was about a week old when I started. The window looked short and the build looked small. Speed was the whole strategy.

I had also just shipped two serious products back to back, [Peeko](/blog/peeko-is-open-the-first-thing-it-did-was-lie-to-me) and [Sondo](https://usesondo.com). I wanted something with no roadmap and no customer interviews. A thing that was allowed to be dumb.

## What ten days actually bought

I did not write most of the code, and I did not write the plan either. I dictated the brief and locked the decisions. An agent turned that into a plan, a second agent tore the plan apart before any code existed, and one conversation acted as the conductor. It split the work into packages and spawned a worker conversation for each one. I reviewed, pushed back, and merged.

The receipts, because they are the only interesting part:

A launch plan that went through an adversarial review before any code existed. 39 findings, most of them fixed before a single file was written.

A full redesign midway, in Figma.

Stripe checkout with a real price floor recomputed on the server, so nobody can pay less than a spot is worth by editing the page.

Outbid and confirmation emails. An unsubscribe flow that survived a security review I did not ask for, because an agent noticed that corporate mail scanners click every link in an email.

Live cursors, a chat with sign in, an admin dashboard, promo codes, and over 700 tests. Zero of them written by me.

It is, by a wide margin, the most polished thing I have ever shipped in ten days. And that is the problem.

## The redesign

The first version took a day. The agents designed it themselves, in the browser, as plain HTML mock-ups. I picked the one I liked least badly and they built it. It worked, and it looked like every other site in the trend.

<figure style="margin:2.75rem 0;" data-wide><div class="browser-frame"><div class="browser-frame-bar"><span class="bf-dot"></span><span class="bf-dot"></span><span class="bf-dot"></span><span class="browser-frame-title">ass.auction, day one</span></div><div class="browser-frame-scroll"><img src="/images/blog/i-built-a-joke-website-in-ten-days-it-made-10/v1-code-only.jpg" alt="The first version of ass.auction: a cartoon ass with thirteen fixed price spots, a claim button reading Claim The Tramp Stamp for 50 dollars, and sections titled The Drama Log and The Fallen." width="1440" height="2125" style="display:block;width:100%;height:auto;"></div></div><figcaption style="margin-top:0.85rem;text-align:center;font-size:0.85rem;color:var(--muted-foreground);">Day one, and the model I later threw away: thirteen fixed spots on a cartoon ass. It is empty because this is a fresh boot of that old build.</figcaption></figure>

So I stopped and designed it properly in Figma. Seven frames. Then the agents threw away what they had built and did it again from those.

<figure style="margin:2.75rem 0;" data-wide><img src="/images/blog/i-built-a-joke-website-in-ten-days-it-made-10/figma-redesign.jpg" alt="The Figma redesign of ass.auction: the landing frame, with the boxers, the leaderboard and the bottom bar." width="1664" height="1040" style="display:block;width:100%;height:auto;border:1px solid var(--border);border-radius:var(--radius-lg);background:var(--card);"><figcaption style="margin-top:0.85rem;text-align:center;font-size:0.85rem;color:var(--muted-foreground);">The redesign. Seven frames, two days, and a complete rebuild off the back of them.</figcaption></figure>

The part I enjoyed most was the branding, and it took more of the ten days than I should admit. The mark is a pair of boxers. The wordmark is the domain with the second s swapped for an asterisk, and the same asterisk closes the tattoo line above the boxers, so the joke and the logo share a glyph. Green because it felt fresh and positive, and because it sits well on cream, which is warmer and softer than white. The text is a very dark green rather than black, so nothing on the page is a colour the brand does not own. Everything is Inter. It is a small system, and it is one system.

<figure style="margin:2.75rem 0;" data-wide><div class="browser-frame"><div class="browser-frame-bar"><span class="bf-dot"></span><span class="bf-dot"></span><span class="bf-dot"></span><span class="browser-frame-title">Brand sheet</span></div><div class="browser-frame-scroll" style="max-height:400px"><img src="/images/blog/i-built-a-joke-website-in-ten-days-it-made-10/branding.png" alt="The ass.auction brand sheet: wordmark variants, the green, ink and cream palette with hex values, the boxers symbol in four treatments, and the logo lockup with its clearspace." width="1664" height="1631" style="display:block;width:100%;height:auto;"></div></div><figcaption style="margin-top:0.85rem;text-align:center;font-size:0.85rem;color:var(--muted-foreground);">The brand sheet. One symbol, one wordmark that hides an asterisk where a letter should be, and three colours.</figcaption></figure>

<figure style="margin:2.75rem 0;" data-wide><div class="browser-frame"><div class="browser-frame-bar"><span class="bf-dot"></span><span class="bf-dot"></span><span class="bf-dot"></span><span class="browser-frame-title">ass.auction/design</span></div><div class="browser-frame-scroll"><img src="/images/blog/i-built-a-joke-website-in-ten-days-it-made-10/design-page.jpg" alt="The ass.auction design system page, listing colour tokens, type scale, buttons, inputs, dialogs and every other component built from them." width="1440" height="10160" style="display:block;width:100%;height:auto;"></div></div><figcaption style="margin-top:0.85rem;text-align:center;font-size:0.85rem;color:var(--muted-foreground);">The same system once it was code. Every component on the site is built out of this page.</figcaption></figure>

## How a spot changes hands

Here is the whole loop. You land, pick a spot, and bid. The price you are shown is a suggestion; the server recomputes it from the current standings before it will take your money, so nobody underpays by editing the page. You pay in Stripe and come back with your logo on the boxers. A confirmation email arrives when Stripe confirms the payment, not when you place the order.

Then someone spends more than you, and you get a second email telling you who knocked you down, with one link that opens the site already priced to take your rank back. Your own spending still counts, so climbing back only costs the difference. That link is the entire business model.

<figure style="margin:2.75rem 0;" data-wide><div style="overflow-x:auto;border:1px solid var(--border);border-radius:var(--radius-lg);background:var(--card);padding:1.25rem;"><svg viewBox="0 0 1240 470" xmlns="http://www.w3.org/2000/svg" role="img" aria-labelledby="aaFlowTitle" style="display:block;width:100%;min-width:860px;height:auto;"><title id="aaFlowTitle">How a spot changes hands: land on the page, pick a spot, bid, pay in Stripe, your logo goes on the boxers, a confirmation email arrives when Stripe confirms the payment, and when someone outbids you an outbid email sends you back to bid again.</title><defs><marker id="aaAr" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,0 L10,5 L0,10 z" style="fill:var(--muted-foreground);opacity:0.55"/></marker><marker id="aaArP" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,0 L10,5 L0,10 z" style="fill:var(--primary)"/></marker></defs><rect x="20" y="40" width="208" height="100" rx="12" style="fill:var(--card);stroke:var(--border);stroke-width:1.5"/><g transform="translate(40,56) scale(0.917)" style="fill:none;stroke:var(--muted-foreground);stroke-width:2;stroke-linecap:round;stroke-linejoin:round"><path d="M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0" /> <circle cx="12" cy="12" r="3" /></g><text x="208" y="72" text-anchor="end" style="font-family:var(--font-sans);font-size:13px;font-weight:600;fill:var(--muted-foreground);opacity:0.6">1</text><text x="40" y="110" style="font-family:var(--font-sans);font-size:19px;font-weight:600;fill:var(--foreground)">Land on the page</text><rect x="268" y="40" width="208" height="100" rx="12" style="fill:var(--card);stroke:var(--border);stroke-width:1.5"/><g transform="translate(288,56) scale(0.917)" style="fill:none;stroke:var(--muted-foreground);stroke-width:2;stroke-linecap:round;stroke-linejoin:round"><path d="M12.034 12.681a.498.498 0 0 1 .647-.647l9 3.5a.5.5 0 0 1-.033.943l-3.444 1.068a1 1 0 0 0-.66.66l-1.067 3.443a.5.5 0 0 1-.943.033z" /> <path d="M21 11V5a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h6" /></g><text x="456" y="72" text-anchor="end" style="font-family:var(--font-sans);font-size:13px;font-weight:600;fill:var(--muted-foreground);opacity:0.6">2</text><text x="288" y="110" style="font-family:var(--font-sans);font-size:19px;font-weight:600;fill:var(--foreground)">Pick a spot</text><rect x="516" y="40" width="208" height="100" rx="12" style="fill:var(--card);stroke:var(--primary);stroke-width:1.5"/><g transform="translate(536,56) scale(0.917)" style="fill:none;stroke:var(--primary);stroke-width:2;stroke-linecap:round;stroke-linejoin:round"><path d="m14 13-8.381 8.38a1 1 0 0 1-3.001-3l8.384-8.381" /> <path d="m16 16 6-6" /> <path d="m21.5 10.5-8-8" /> <path d="m8 8 6-6" /> <path d="m8.5 7.5 8 8" /></g><text x="704" y="72" text-anchor="end" style="font-family:var(--font-sans);font-size:13px;font-weight:600;fill:var(--muted-foreground);opacity:0.6">3</text><text x="536" y="110" style="font-family:var(--font-sans);font-size:19px;font-weight:600;fill:var(--foreground)">Bid</text><text x="536" y="129" style="font-family:var(--font-sans);font-size:14px;fill:var(--muted-foreground)">$5 minimum</text><rect x="764" y="40" width="208" height="100" rx="12" style="fill:var(--card);stroke:var(--border);stroke-width:1.5"/><g transform="translate(784,56) scale(0.917)" style="fill:none;stroke:var(--muted-foreground);stroke-width:2;stroke-linecap:round;stroke-linejoin:round"><rect width="20" height="14" x="2" y="5" rx="2" /> <line x1="2" x2="22" y1="10" y2="10" /></g><text x="952" y="72" text-anchor="end" style="font-family:var(--font-sans);font-size:13px;font-weight:600;fill:var(--muted-foreground);opacity:0.6">4</text><text x="784" y="110" style="font-family:var(--font-sans);font-size:19px;font-weight:600;fill:var(--foreground)">Pay in Stripe</text><rect x="1012" y="40" width="208" height="100" rx="12" style="fill:var(--card);stroke:var(--border);stroke-width:1.5"/><g transform="translate(1032,56) scale(0.917)" style="fill:none;stroke:var(--muted-foreground);stroke-width:2;stroke-linecap:round;stroke-linejoin:round"><circle cx="12" cy="12" r="10" /> <path d="m16 9-5.5 5.5L8 12" /></g><text x="1200" y="72" text-anchor="end" style="font-family:var(--font-sans);font-size:13px;font-weight:600;fill:var(--muted-foreground);opacity:0.6">5</text><text x="1032" y="110" style="font-family:var(--font-sans);font-size:19px;font-weight:600;fill:var(--foreground)">Logo on the boxers</text><line x1="228" y1="90" x2="262" y2="90" style="stroke:var(--muted-foreground);stroke-width:1.5;fill:none;opacity:0.55" marker-end="url(#aaAr)"/><line x1="476" y1="90" x2="510" y2="90" style="stroke:var(--muted-foreground);stroke-width:1.5;fill:none;opacity:0.55" marker-end="url(#aaAr)"/><line x1="724" y1="90" x2="758" y2="90" style="stroke:var(--muted-foreground);stroke-width:1.5;fill:none;opacity:0.55" marker-end="url(#aaAr)"/><line x1="972" y1="90" x2="1006" y2="90" style="stroke:var(--muted-foreground);stroke-width:1.5;fill:none;opacity:0.55" marker-end="url(#aaAr)"/><rect x="1012" y="320" width="208" height="100" rx="12" style="fill:var(--card);stroke:var(--border);stroke-width:1.5"/><g transform="translate(1032,336) scale(0.917)" style="fill:none;stroke:var(--muted-foreground);stroke-width:2;stroke-linecap:round;stroke-linejoin:round"><path d="M22 13V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v12c0 1.1.9 2 2 2h8" /> <path d="m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7" /> <path d="m16 19 2 2 4-4" /></g><text x="1200" y="352" text-anchor="end" style="font-family:var(--font-sans);font-size:13px;font-weight:600;fill:var(--muted-foreground);opacity:0.6">6</text><text x="1032" y="390" style="font-family:var(--font-sans);font-size:19px;font-weight:600;fill:var(--foreground)">Confirmation email</text><text x="1032" y="409" style="font-family:var(--font-sans);font-size:14px;fill:var(--muted-foreground)">when Stripe confirms</text><rect x="516" y="320" width="208" height="100" rx="12" style="fill:var(--card);stroke:var(--primary);stroke-width:1.5"/><g transform="translate(536,336) scale(0.917)" style="fill:none;stroke:var(--primary);stroke-width:2;stroke-linecap:round;stroke-linejoin:round"><path d="m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7" /> <rect x="2" y="4" width="20" height="16" rx="2" /></g><text x="704" y="352" text-anchor="end" style="font-family:var(--font-sans);font-size:13px;font-weight:600;fill:var(--muted-foreground);opacity:0.6">7</text><text x="536" y="390" style="font-family:var(--font-sans);font-size:19px;font-weight:600;fill:var(--foreground)">Outbid email</text><text x="536" y="409" style="font-family:var(--font-sans);font-size:14px;fill:var(--muted-foreground)">priced to take it back</text><path d="M1116,140 L1116,314" style="stroke:var(--muted-foreground);stroke-width:1.5;fill:none;opacity:0.55" marker-end="url(#aaAr)"/><path d="M1006,370 L740,370" style="stroke:var(--muted-foreground);stroke-width:1.5;fill:none;opacity:0.55" marker-end="url(#aaAr)"/><path d="M620,320 L620,146" style="stroke:var(--primary);stroke-width:1.75;fill:none" marker-end="url(#aaArP)"/><text x="638" y="238" style="font-family:var(--font-sans);font-size:13px;font-weight:600;fill:var(--primary)">and back to a bid</text></svg></div><figcaption style="margin-top:0.85rem;text-align:center;font-size:0.85rem;color:var(--muted-foreground);">The loop. Everything from step five onwards exists to get you back to step three.</figcaption></figure>

## The details nobody asked for

This is the part I am actually proud of, so it gets its own section. Most of these were designed in Figma first and built by an agent from the frame. The rest came out of feedback rounds.

**The tattoo line.** Just under a second after the page loads, the sentence slides up from behind the boxers, and the asterisk at the end spins once so you know it does something. Hover it and the tooltip says it is a marketing stunt, obviously, and that your logo is on my ass right now, getting clicks.

<figure style="margin:2.75rem 0;" data-wide><video autoplay muted loop playsinline controls preload="metadata" poster="/images/blog/i-built-a-joke-website-in-ten-days-it-made-10/videos/tattoo-line-poster.jpg" style="display:block;width:100%;border:1px solid var(--border);border-radius:var(--radius-lg);background:var(--card);"><source src="/images/blog/i-built-a-joke-website-in-ten-days-it-made-10/videos/tattoo-line.mp4" type="video/mp4">The tattoo line arriving, and the asterisk spin.</video><figcaption style="margin-top:0.85rem;text-align:center;font-size:0.85rem;color:var(--muted-foreground);">The tattoo line arriving, and the asterisk spin.</figcaption></figure>

**Shake the boxers.** Grab the boxers and shake them and every logo falls off with a gravity effect, lands in a heap at the bottom, and then climbs back up one by one. There are four sounds in that one gesture: the grab, the shake, the papers coming loose, and the first one landing.

<figure style="margin:2.75rem 0;" data-wide><video playsinline controls preload="metadata" poster="/images/blog/i-built-a-joke-website-in-ten-days-it-made-10/videos/shake-drop-poster.jpg" style="display:block;width:100%;border:1px solid var(--border);border-radius:var(--radius-lg);background:var(--card);"><source src="/images/blog/i-built-a-joke-website-in-ten-days-it-made-10/videos/shake-drop.mp4" type="video/mp4">Shake, drop, and the staggered return.</video><figcaption style="margin-top:0.85rem;text-align:center;font-size:0.85rem;color:var(--muted-foreground);">Shake them and the logos come loose. Sound on: the papers and the landing are the point.</figcaption></figure>

**Pull them down.** Drag the boxers down past half their height and they come off. There is a cartoon butt underneath. Click the cheeks and they jiggle, with a slap. The slap is five separate recordings and the site picks one at random each time, because two hits on anything never sound the same, and you would not notice that until they did. I wrote about the same idea in 2021, when I [rebuilt the clap reaction](/blog/reinventing-the-clap-reaction) out of a handful of real claps. Click them ten times and a peach drops in, lands with a thud, and reveals a promo code for $5 off. A line underneath counts how many people have seen the ass. Hover it and you get confetti and a cheer, for having seen it.

<figure style="margin:2.75rem 0;" data-wide><video playsinline controls preload="metadata" poster="/images/blog/i-built-a-joke-website-in-ten-days-it-made-10/videos/undress-peach-poster.jpg" style="display:block;width:100%;border:1px solid var(--border);border-radius:var(--radius-lg);background:var(--card);"><source src="/images/blog/i-built-a-joke-website-in-ten-days-it-made-10/videos/undress-peach.mp4" type="video/mp4">The undress, the slap, and the peach.</video><figcaption style="margin-top:0.85rem;text-align:center;font-size:0.85rem;color:var(--muted-foreground);">The undress, the slap, and the peach. Sound on.</figcaption></figure>

**Live cursors.** Everyone on the page sees everyone else's cursor, positioned relative to the layout so they land in the same spot on every screen. There are eight colours, so past eight people you start sharing. My own cursor is the only one in ink and it carries a tiny pair of boxers, so people can tell when the admin is on the page without me saying anything. If they get in the way, a control in the header switches them off.

<figure style="margin:2.75rem 0;" data-wide><img src="/images/blog/i-built-a-joke-website-in-ten-days-it-made-10/cursors-specimen.jpg" alt="The cursor set: your own cursor in black, eight colours for other visitors, and the admin cursor in ink carrying a small pair of boxers." width="1664" height="281" style="display:block;width:100%;height:auto;border:1px solid var(--border);border-radius:var(--radius-lg);background:var(--card);"><figcaption style="margin-top:0.85rem;text-align:center;font-size:0.85rem;color:var(--muted-foreground);">Your cursor, the eight everyone else gets, and mine.</figcaption></figure>

**The sounds.** Almost everything on the site makes one. Hover, press, toggle, a dialog opening, a message sent, the shake, the papers landing, the zip when the boxers go back on. The trick is the level. A hover tick sits at 44 and a dialog at 34, under a master at 80. You are not supposed to hear them. You are supposed to miss them when they are gone, the way you would miss the click of a door or the sound of a page turning. Silence is the thing that feels wrong. Every sound has its own volume in the admin, and one switch in the footer kills all of them.

<figure style="margin:2.75rem 0;" data-wide><div class="browser-frame"><div class="browser-frame-bar"><span class="bf-dot"></span><span class="bf-dot"></span><span class="bf-dot"></span><span class="browser-frame-title">ass.auction admin</span></div><div class="browser-frame-scroll"><img src="/images/blog/i-built-a-joke-website-in-ten-days-it-made-10/sounds-panel.jpg" alt="The sounds panel in the ass.auction admin: a master volume at 80 percent, then sixteen moments each with its own sound and volume slider, including Slap (one of five), Papers falling and Crowd cheer." width="1440" height="1543" style="display:block;width:100%;height:auto;"></div></div><figcaption style="margin-top:0.85rem;text-align:center;font-size:0.85rem;color:var(--muted-foreground);">Every sound on the site, with its own volume. The slap is listed as one of five, which is the whole trick.</figcaption></figure>

**The rest.** The logo assembles itself on load, boxers first. Hover it in the header and the boxers wiggle. Hover my name in the footer and the pizza next to it wiggles. Hovering a logo on the boxers resets its rotation, pads it, and offers to steal the spot. Every claim and every outbid drops into the chat feed as its own line, so the timeline of who took what from whom writes itself. The site shows my handle and nothing else, I chat as The Auctioneer, and guessing who built it is part of the game.

<figure style="margin:2.75rem 0;" data-wide><video playsinline controls preload="metadata" poster="/images/blog/i-built-a-joke-website-in-ten-days-it-made-10/videos/interactions-poster.jpg" style="display:block;width:100%;border:1px solid var(--border);border-radius:var(--radius-lg);background:var(--card);"><source src="/images/blog/i-built-a-joke-website-in-ten-days-it-made-10/videos/interactions.mp4" type="video/mp4">A run through the site's interactions: the logo assembling, hover states on the boxers, the chat bar being dragged and resized, and the wiggles in the header and footer.</video><figcaption style="margin-top:0.85rem;text-align:center;font-size:0.85rem;color:var(--muted-foreground);">Most of the small stuff in one pass. Sound on.</figcaption></figure>

None of this made anyone come.

## The crowd I tried to fake

There is an admin dashboard with more knobs than the site has customers. Listings, uploads, chat, users, every sound on the site with its own volume, and a settings page I am not proud of.

It can add a number to the visitor total. It can pad the count of people online, drawing from a range I set, the same padded figure for everyone, drifting every ten minutes so it never looks static. It can pad the count of people who have seen the ass. It can give any listing invented clicks. There is a page that invents entire bidders with invented brand names and posts invented chatter from a cast of fake people, so the room is never empty while I am looking at it.

<figure style="margin:2.75rem 0;"><img src="/images/blog/i-built-a-joke-website-in-ten-days-it-made-10/admin-settings.jpg" alt="The online count floor control in the ass.auction admin, set to add between 5 and 32, beside live figures reading online now real zero and online shown right now fourteen." width="905" height="448" style="display:block;width:100%;height:auto;border:1px solid var(--border);border-radius:var(--radius-lg);background:var(--card);"><figcaption style="margin-top:0.85rem;text-align:center;font-size:0.85rem;color:var(--muted-foreground);">The control that pads the online count. In this shot nobody is on the site and it says fourteen.</figcaption></figure>

I turned all of it on. My own note to myself, still sitting in the admin page's source, says the number should read somewhere between five and thirty, because I wanted to create the perception that you are with other people. The online count sits in the header the entire time you are on the site. The chat has Google sign in, you can drag it along the bottom and resize it in both directions, and every claim and every outbid drops into it, so there would be something to argue about, the way people argue at a game.

One thing I want to be exact about, because the difference matters to me. The money counters never lied. Invented bidders carry no orders, so every figure about revenue excludes them by construction. What I padded was the appearance of company, not the appearance of sales.

It did not work. You cannot fake the thing the mechanic actually runs on. People stay because other people are there, and a padded number is not other people.

## Launch day, by the numbers

I opened the site on September 4. I posted about it on X a handful of times, replied under other people's tweets, and posted it on Reddit.

I track the site with [Peeko](https://usepeeko.com), my own analytics product, so I have the whole funnel rather than a feeling. Everything below is the first five days, September 4 to 8, before Product Hunt, straight out of the Peeko command line, with nothing seeded on the analytics side.

<figure style="margin:2.75rem 0;" data-wide><img src="/images/blog/i-built-a-joke-website-in-ten-days-it-made-10/peeko-funnel.png" alt="The ass.auction funnel in Peeko, from visit to paid claim." width="1664" height="623" style="display:block;width:100%;height:auto;border:1px solid var(--border);border-radius:var(--radius-lg);background:var(--card);"><figcaption style="margin-top:0.85rem;text-align:center;font-size:0.85rem;color:var(--muted-foreground);">The funnel in Peeko for the first five days. Visit, claim dialog opened, checkout started, paid.</figcaption></figure>

<figure style="margin:2.75rem 0;" data-wide><div class="browser-frame"><div class="browser-frame-bar"><span class="bf-dot"></span><span class="bf-dot"></span><span class="bf-dot"></span><span class="browser-frame-title">Peeko</span></div><div class="browser-frame-scroll"><img src="/images/blog/i-built-a-joke-website-in-ten-days-it-made-10/peeko-stats.png" alt="The Peeko dashboard for ass.auction: 214 people, 270 visits, 636 page views, $10 revenue verified by Stripe, 4m 46s on site, and the traffic curve peaking on September 6." width="1664" height="769" style="display:block;width:100%;height:auto;"></div></div><figcaption style="margin-top:0.85rem;text-align:center;font-size:0.85rem;color:var(--muted-foreground);">The top of the Peeko dashboard on September 8, which is where these numbers come from.</figcaption></figure>

People: 214
Visits: 270
Page views: 636
Time on site: 4 minutes 46 seconds
Left after one page: 68%

Where they came from: 85% direct, which mostly means people pasting a link from a DM or a group chat. Then Reddit with 19 views, X with 18, Bluesky with 13, Hacker News with 3, LinkedIn with 3.

<figure style="margin:2.75rem 0;"><div style="display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:0.9rem;padding:clamp(20px, 6vw, 40px);border:1px solid var(--border);border-radius:var(--radius-lg);background:var(--card);"><span style="display:inline-flex;align-items:center;gap:0.55rem;font-size:0.82rem;color:var(--muted-foreground);white-space:nowrap;"><svg width="16" height="16" fill="currentColor" style="flex:none;display:block" aria-hidden="true" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M12 0C5.373 0 0 5.373 0 12c0 3.314 1.343 6.314 3.515 8.485l-2.286 2.286C.775 23.225 1.097 24 1.738 24H12c6.627 0 12-5.373 12-12S18.627 0 12 0Zm4.388 3.199c1.104 0 1.999.895 1.999 1.999 0 1.105-.895 2-1.999 2-.946 0-1.739-.657-1.947-1.539v.002c-1.147.162-2.032 1.15-2.032 2.341v.007c1.776.067 3.4.567 4.686 1.363.473-.363 1.064-.58 1.707-.58 1.547 0 2.802 1.254 2.802 2.802 0 1.117-.655 2.081-1.601 2.531-.088 3.256-3.637 5.876-7.997 5.876-4.361 0-7.905-2.617-7.998-5.87-.954-.447-1.614-1.415-1.614-2.538 0-1.548 1.255-2.802 2.803-2.802.645 0 1.239.218 1.712.585 1.275-.79 2.881-1.291 4.64-1.365v-.01c0-1.663 1.263-3.034 2.88-3.207.188-.911.993-1.595 1.959-1.595Zm-8.085 8.376c-.784 0-1.459.78-1.506 1.797-.047 1.016.64 1.429 1.426 1.429.786 0 1.371-.369 1.418-1.385.047-1.017-.553-1.841-1.338-1.841Zm7.406 0c-.786 0-1.385.824-1.338 1.841.047 1.017.634 1.385 1.418 1.385.785 0 1.473-.413 1.426-1.429-.046-1.017-.721-1.797-1.506-1.797Zm-3.703 4.013c-.974 0-1.907.048-2.77.135-.147.015-.241.168-.183.305.483 1.154 1.622 1.964 2.953 1.964 1.33 0 2.47-.81 2.953-1.964.057-.137-.037-.29-.184-.305-.863-.087-1.795-.135-2.769-.135Z"/></svg>Reddit</span><span style="display:block;height:6px;border-radius:999px;background:color-mix(in srgb, var(--foreground) 10%, transparent);overflow:hidden;"><span style="display:block;height:100%;width:100.0%;border-radius:999px;background:var(--foreground);"></span></span><span style="font-size:0.82rem;font-variant-numeric:tabular-nums;font-weight:600;color:var(--foreground);">19</span><span style="display:inline-flex;align-items:center;gap:0.55rem;font-size:0.82rem;color:var(--muted-foreground);white-space:nowrap;"><svg width="16" height="16" fill="currentColor" style="flex:none;display:block" aria-hidden="true" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M14.234 10.162 22.977 0h-2.072l-7.591 8.824L7.251 0H.258l9.168 13.343L.258 24H2.33l8.016-9.318L16.749 24h6.993zm-2.837 3.299-.929-1.329L3.076 1.56h3.182l5.965 8.532.929 1.329 7.754 11.09h-3.182z"/></svg>X</span><span style="display:block;height:6px;border-radius:999px;background:color-mix(in srgb, var(--foreground) 10%, transparent);overflow:hidden;"><span style="display:block;height:100%;width:94.7%;border-radius:999px;background:var(--foreground);"></span></span><span style="font-size:0.82rem;font-variant-numeric:tabular-nums;font-weight:600;color:var(--foreground);">18</span><span style="display:inline-flex;align-items:center;gap:0.55rem;font-size:0.82rem;color:var(--muted-foreground);white-space:nowrap;"><svg width="16" height="16" fill="currentColor" style="flex:none;display:block" aria-hidden="true" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M5.202 2.857C7.954 4.922 10.913 9.11 12 11.358c1.087-2.247 4.046-6.436 6.798-8.501C20.783 1.366 24 .213 24 3.883c0 .732-.42 6.156-.667 7.037-.856 3.061-3.978 3.842-6.755 3.37 4.854.826 6.089 3.562 3.422 6.299-5.065 5.196-7.28-1.304-7.847-2.97-.104-.305-.152-.448-.153-.327 0-.121-.05.022-.153.327-.568 1.666-2.782 8.166-7.847 2.97-2.667-2.737-1.432-5.473 3.422-6.3-2.777.473-5.899-.308-6.755-3.369C.42 10.04 0 4.615 0 3.883c0-3.67 3.217-2.517 5.202-1.026"/></svg>Bluesky</span><span style="display:block;height:6px;border-radius:999px;background:color-mix(in srgb, var(--foreground) 10%, transparent);overflow:hidden;"><span style="display:block;height:100%;width:68.4%;border-radius:999px;background:var(--foreground);"></span></span><span style="font-size:0.82rem;font-variant-numeric:tabular-nums;font-weight:600;color:var(--foreground);">13</span><span style="display:inline-flex;align-items:center;gap:0.55rem;font-size:0.82rem;color:var(--muted-foreground);white-space:nowrap;"><svg width="16" height="16" fill="currentColor" style="flex:none;display:block" aria-hidden="true" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M0 24V0h24v24H0zM6.951 5.896l4.112 7.708v5.064h1.583v-4.972l4.148-7.799h-1.749l-2.457 4.875c-.372.745-.688 1.434-.688 1.434s-.297-.708-.651-1.434L8.831 5.896h-1.88z"/></svg>Hacker News</span><span style="display:block;height:6px;border-radius:999px;background:color-mix(in srgb, var(--foreground) 10%, transparent);overflow:hidden;"><span style="display:block;height:100%;width:15.8%;border-radius:999px;background:var(--foreground);"></span></span><span style="font-size:0.82rem;font-variant-numeric:tabular-nums;font-weight:600;color:var(--foreground);">3</span><span style="display:inline-flex;align-items:center;gap:0.55rem;font-size:0.82rem;color:var(--muted-foreground);white-space:nowrap;"><svg width="16" height="16" fill="currentColor" style="flex:none;display:block" aria-hidden="true" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z"/></svg>LinkedIn</span><span style="display:block;height:6px;border-radius:999px;background:color-mix(in srgb, var(--foreground) 10%, transparent);overflow:hidden;"><span style="display:block;height:100%;width:15.8%;border-radius:999px;background:var(--foreground);"></span></span><span style="font-size:0.82rem;font-variant-numeric:tabular-nums;font-weight:600;color:var(--foreground);">3</span></div><figcaption style="margin-top:0.85rem;text-align:center;font-size:0.85rem;color:var(--muted-foreground);">The social referrers, by page views. Most of the rest was direct, which mostly means a link pasted into a DM.</figcaption></figure>

Opened the claim dialog: 18 people
Opened a steal: 13 people
Reached Stripe: 5 people
Paid: 3 orders. Two at $5, and one friend who found the coupon hidden behind the peach and used it to put his site on the boxers for free

The funnel end to end, from landing on the page to paying within the hour: 197 people in, 1 out. Half a percent.

<figure style="margin:2.75rem 0;"><div style="display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:0.9rem;padding:clamp(20px, 6vw, 40px);border:1px solid var(--border);border-radius:var(--radius-lg);background:var(--card);"><span style="display:inline-flex;align-items:center;gap:0.55rem;font-size:0.82rem;color:var(--muted-foreground);white-space:nowrap;"><svg aria-hidden="true" style="flex:none;display:block" xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" > <path d="M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0" /> <circle cx="12" cy="12" r="3" /> </svg>Landed</span><span style="display:block;height:6px;border-radius:999px;background:color-mix(in srgb, var(--foreground) 10%, transparent);overflow:hidden;"><span style="display:block;height:100%;width:100.0%;border-radius:999px;background:var(--foreground);"></span></span><span style="font-size:0.82rem;font-variant-numeric:tabular-nums;font-weight:600;color:var(--foreground);">197</span><span style="display:inline-flex;align-items:center;gap:0.55rem;font-size:0.82rem;color:var(--muted-foreground);white-space:nowrap;"><svg aria-hidden="true" style="flex:none;display:block" xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" > <path d="M12.034 12.681a.498.498 0 0 1 .647-.647l9 3.5a.5.5 0 0 1-.033.943l-3.444 1.068a1 1 0 0 0-.66.66l-1.067 3.443a.5.5 0 0 1-.943.033z" /> <path d="M21 11V5a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h6" /> </svg>Opened a claim</span><span style="display:block;height:6px;border-radius:999px;background:color-mix(in srgb, var(--foreground) 10%, transparent);overflow:hidden;"><span style="display:block;height:100%;width:9.1%;border-radius:999px;background:var(--foreground);"></span></span><span style="font-size:0.82rem;font-variant-numeric:tabular-nums;font-weight:600;color:var(--foreground);">18</span><span style="display:inline-flex;align-items:center;gap:0.55rem;font-size:0.82rem;color:var(--muted-foreground);white-space:nowrap;"><svg aria-hidden="true" style="flex:none;display:block" xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" > <path d="m13 19 6-6" /> <path d="M14.5 17.5 3.586 6.586A2 2 0 013 5.172V3h2.172a2 2 0 011.414.586L17.5 14.5" /> <path d="m14.828 6.172 2.586-2.586A2 2 0 0118.828 3H21v2.172a2 2 0 01-.586 1.414l-2.586 2.586" /> <path d="m16 16 4 4" /> <path d="m19 21 2-2" /> <path d="m5 14 4 4" /> <path d="m5 21-2-2" /> <path d="M7.5 16.5 4 20" /> </svg>Opened a steal</span><span style="display:block;height:6px;border-radius:999px;background:color-mix(in srgb, var(--foreground) 10%, transparent);overflow:hidden;"><span style="display:block;height:100%;width:6.6%;border-radius:999px;background:var(--foreground);"></span></span><span style="font-size:0.82rem;font-variant-numeric:tabular-nums;font-weight:600;color:var(--foreground);">13</span><span style="display:inline-flex;align-items:center;gap:0.55rem;font-size:0.82rem;color:var(--muted-foreground);white-space:nowrap;"><svg aria-hidden="true" style="flex:none;display:block" xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" > <rect width="20" height="14" x="2" y="5" rx="2" /> <line x1="2" x2="22" y1="10" y2="10" /> </svg>Reached Stripe</span><span style="display:block;height:6px;border-radius:999px;background:color-mix(in srgb, var(--foreground) 10%, transparent);overflow:hidden;"><span style="display:block;height:100%;width:2.5%;border-radius:999px;background:var(--foreground);"></span></span><span style="font-size:0.82rem;font-variant-numeric:tabular-nums;font-weight:600;color:var(--foreground);">5</span><span style="display:inline-flex;align-items:center;gap:0.55rem;font-size:0.82rem;color:var(--muted-foreground);white-space:nowrap;"><svg aria-hidden="true" style="flex:none;display:block" xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" > <circle cx="12" cy="12" r="10" /> <path d="m16 9-5.5 5.5L8 12" /> </svg>Paid</span><span style="display:block;height:6px;border-radius:999px;background:color-mix(in srgb, var(--foreground) 10%, transparent);overflow:hidden;"><span style="display:block;height:100%;width:1.5%;border-radius:999px;background:var(--foreground);"></span></span><span style="font-size:0.82rem;font-variant-numeric:tabular-nums;font-weight:600;color:var(--foreground);">3</span></div><figcaption style="margin-top:0.85rem;text-align:center;font-size:0.85rem;color:var(--muted-foreground);">The whole funnel, with no time limit on it. The gap between landing and opening a claim is the one that decided this.</figcaption></figure>

Now the part that made the whole thing worth it to me:

Pulled the boxers down: 7 people
Shook the logos off: 4 people
Slapped it: 173 times, by 6 people
Found the secret code behind the peach: 5 people
Shared it on X with the share button: 0

<figure style="margin:2.75rem 0;"><div style="display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:0.9rem;padding:clamp(20px, 6vw, 40px);border:1px solid var(--border);border-radius:var(--radius-lg);background:var(--card);"><span style="display:inline-flex;align-items:center;gap:0.55rem;font-size:0.82rem;color:var(--muted-foreground);white-space:nowrap;"><svg aria-hidden="true" style="flex:none;display:block" xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" > <path d="M12 5v14" /> <path d="m19 12-7 7-7-7" /> </svg>Pulled them down</span><span style="display:block;height:6px;border-radius:999px;background:color-mix(in srgb, var(--foreground) 10%, transparent);overflow:hidden;"><span style="display:block;height:100%;width:100.0%;border-radius:999px;background:var(--foreground);"></span></span><span style="font-size:0.82rem;font-variant-numeric:tabular-nums;font-weight:600;color:var(--foreground);">7</span><span style="display:inline-flex;align-items:center;gap:0.55rem;font-size:0.82rem;color:var(--muted-foreground);white-space:nowrap;"><svg aria-hidden="true" style="flex:none;display:block" xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" > <path d="M18 11V6a2 2 0 0 0-2-2a2 2 0 0 0-2 2" /> <path d="M14 10V4a2 2 0 0 0-2-2a2 2 0 0 0-2 2v2" /> <path d="M10 10.5V6a2 2 0 0 0-2-2a2 2 0 0 0-2 2v8" /> <path d="M18 8a2 2 0 1 1 4 0v6a8 8 0 0 1-8 8h-2c-2.8 0-4.5-.86-5.99-2.34l-3.6-3.6a2 2 0 0 1 2.83-2.82L7 15" /> </svg>Slapped it</span><span style="display:block;height:6px;border-radius:999px;background:color-mix(in srgb, var(--foreground) 10%, transparent);overflow:hidden;"><span style="display:block;height:100%;width:85.7%;border-radius:999px;background:var(--foreground);"></span></span><span style="font-size:0.82rem;font-variant-numeric:tabular-nums;font-weight:600;color:var(--foreground);">6</span><span style="display:inline-flex;align-items:center;gap:0.55rem;font-size:0.82rem;color:var(--muted-foreground);white-space:nowrap;"><svg aria-hidden="true" style="flex:none;display:block" xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" > <path d="M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z" /> <path d="M20 2v4" /> <path d="M22 4h-4" /> <circle cx="4" cy="20" r="2" /> </svg>Found the peach</span><span style="display:block;height:6px;border-radius:999px;background:color-mix(in srgb, var(--foreground) 10%, transparent);overflow:hidden;"><span style="display:block;height:100%;width:71.4%;border-radius:999px;background:var(--foreground);"></span></span><span style="font-size:0.82rem;font-variant-numeric:tabular-nums;font-weight:600;color:var(--foreground);">5</span><span style="display:inline-flex;align-items:center;gap:0.55rem;font-size:0.82rem;color:var(--muted-foreground);white-space:nowrap;"><svg aria-hidden="true" style="flex:none;display:block" xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" > <path d="m18 8 4 4-4 4" /> <path d="M2 12h20" /> <path d="m6 8-4 4 4 4" /> </svg>Shook them</span><span style="display:block;height:6px;border-radius:999px;background:color-mix(in srgb, var(--foreground) 10%, transparent);overflow:hidden;"><span style="display:block;height:100%;width:57.1%;border-radius:999px;background:var(--foreground);"></span></span><span style="font-size:0.82rem;font-variant-numeric:tabular-nums;font-weight:600;color:var(--foreground);">4</span><span style="display:inline-flex;align-items:center;gap:0.55rem;font-size:0.82rem;color:var(--muted-foreground);white-space:nowrap;"><svg aria-hidden="true" style="flex:none;display:block" xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" > <circle cx="18" cy="5" r="3" /> <circle cx="6" cy="12" r="3" /> <circle cx="18" cy="19" r="3" /> <line x1="8.59" x2="15.42" y1="13.51" y2="17.49" /> <line x1="15.41" x2="8.59" y1="6.51" y2="10.49" /> </svg>Shared it</span><span style="display:block;height:6px;border-radius:999px;background:color-mix(in srgb, var(--foreground) 10%, transparent);overflow:hidden;"><span style="display:block;height:100%;width:1.2%;border-radius:999px;background:var(--foreground);"></span></span><span style="font-size:0.82rem;font-variant-numeric:tabular-nums;font-weight:600;color:var(--foreground);">0</span></div><figcaption style="margin-top:0.85rem;text-align:center;font-size:0.85rem;color:var(--muted-foreground);">People who found each thing I spent the ten days on. The share button is the flat one at the bottom.</figcaption></figure>

Six people slapped a cartoon butt 173 times between them. Nobody shared it. That is the entire launch in two lines.

One more number. 35 crawler requests in those five days, and 14 of them came from OpenAI's bots. Google sent 9. The AI companies read the site more carefully than the humans did.

<figure style="margin:2.75rem 0;" data-wide><div class="browser-frame"><div class="browser-frame-bar"><span class="bf-dot"></span><span class="bf-dot"></span><span class="bf-dot"></span><span class="browser-frame-title">Peeko</span></div><div class="browser-frame-scroll"><img src="/images/blog/i-built-a-joke-website-in-ten-days-it-made-10/crawler-stats.png" alt="Peeko's crawler breakdown for ass.auction, listing OpenAI, Google and other bots by request count." width="1136" height="695" style="display:block;width:100%;height:auto;"></div></div><figcaption style="margin-top:0.85rem;text-align:center;font-size:0.85rem;color:var(--muted-foreground);">The crawler breakdown. Seven bots, two of them OpenAI's.</figcaption></figure>

$10.

Peeko tied one of the two paid sales to a direct visit and could not tie the other to anything. I assumed the checkout was not passing Peeko's page token to Stripe. It was, since the day before launch. The likely cause is that the tracker script is cached for four hours, so a returning buyer can be running an older copy with no token in it. So even the $10 taught me something about my own product.

## What the $10 taught me

The trend was real. The mechanic worked. The site worked. None of that was the bottleneck.

The bottleneck was that I launched it where I have nobody. My X account is small. My Reddit account is smaller. The site that made real money on this mechanic was built by someone with an audience who could make the first ten bids happen in an afternoon. The mechanic only works once the drama starts, and the drama needs a crowd.

I have a crowd. It is on LinkedIn, and it is over four thousand people, many of them founders and senior designers. I could not send them a site with that name. I knew that on day one. By launch I had even hidden my own name on the site and given myself a pseudonym in the chat.

So I built a viral machine that could not be pointed at the only audience I have.

That hit me harder than the number.

## The part I got wrong on purpose

I spent the ten days on the details above. Every one of them made the site better, and none of them made anyone come.

I know this pattern. Three weeks earlier, my analytics product had zero signups, and I wrote in its own progress log that zero signups is an audience problem, not a plumbing one. Then I went and built ten more days of plumbing on a different product.

Building is where I feel in control. Distribution is where I do not. So I build.

## Where the human stays

I do not regret the ten days. The multi-agent workflow I used to build it is now the way I build everything, and this was the project that proved it on something with real payments and real users. That is worth more than $10 to me.

I regret the order. Audience first, then the machine that needs one. I had that written down and did it backwards anyway.

## If you are about to launch something

Count the people you can actually reach before you count the features. If the number is small, the launch is a post, not a product.

Name the thing so you can show it to everyone you know. If you have to hide it from your main channel, you have already cut your distribution in half.

Write the honest post afterward either way. It is the only part of the launch that reaches the people you have.

The site made $10. This post is the first thing from those ten days that gets to go where my audience is.

It is also on [Product Hunt](https://www.producthunt.com/products/ass-auction), as of midnight. Same site, same joke, same 22 spots. By eight in the morning it was ninth for the day, and three companies I had never heard of had outbid each other for the top spot, at $10, then $15, then $20. That is $45 in eight hours, against $10 in the first five days. Nothing about the site changed. Only who was looking.

<figure style="margin:2.75rem 0;" data-wide><div class="browser-frame"><div class="browser-frame-bar"><span class="bf-dot"></span><span class="bf-dot"></span><span class="bf-dot"></span><span class="browser-frame-title">Peeko</span></div><div class="browser-frame-scroll"><img src="/images/blog/i-built-a-joke-website-in-ten-days-it-made-10/peeko-ph-morning.png" alt="The Peeko dashboard for ass.auction on the morning of September 9: 519 people, 595 visits, $55 revenue verified by Stripe, and the traffic line flat through September 8 then rising steeply on September 9." width="1664" height="779" style="display:block;width:100%;height:auto;"></div></div><figcaption style="margin-top:0.85rem;text-align:center;font-size:0.85rem;color:var(--muted-foreground);">The same dashboard on the morning of September 9. The flat line is the five days. The dotted line is Product Hunt.</figcaption></figure>
