
A whole home to sell
I’m moving abroad, and almost everything in my home has to go before I do, from the sofa and the fridge to the bed, the shelf and the coffee machine. I could picture what was coming, with dozens of listings and hundreds of messages in which people ask if it’s still available, ask if I can do less and arrange to pick it up on Saturday, and on Saturday nobody shows up. The way things were heading, I’d spend my last weeks in town haggling over a sofa on WhatsApp.
That’s when I thought the price could sort itself out if I put everything on a site where anyone interested places a bid and the highest bid wins, with no haggling and no back-and-forth, just one last message to arrange the pickup. Since many of the buyers speak Spanish and pay in Argentine pesos, that’s where the name came from, because subasta is Spanish for “auction”.

The starting point
Subasta was inspired by a system Gabriel Teixeira built with the same idea, and the problems his ran into became requirements for mine from day one:
- Alerts. Many people missed knowing when someone outbid them, so here anyone who confirms their email gets the outbid alert and the final-stretch reminders, 48, 24, 2 and 1 hour before the end.
- Booked pickups. In his system, scheduling came in along the way, while in Subasta it was part of the flow from the start, with the winner picking a free slot and getting a calendar invite by email.
The management side is all mine, designed from the problems I saw in his, and it brings together the pricing logic, the MCP connector that links the Admin panel to Claude to create and edit items in bulk, the skill that runs that flow and a history with undo for everything the AI touches. On top of that came my perspective as a director of product, after working on many products, which is to care for the experience on both sides, for the people bidding and for whoever runs the auction.
Paper first, then screens
Since I’m not a developer, I built all of Subasta in conversation with Claude, and what made it work was not starting with code. Before any screen, I spent 45 minutes writing the product down with Atlas, the documentation method I’ve been testing at work, which always follows the same order:
- Constitution. This is where the product is defined along with the rules nothing can break, which for Subasta included “I talk as little as possible” and “money never goes through the site”, and it’s also where the vocabulary gets fixed, so it’s “bid” and never “offer”, “pickup” and never “delivery”.
- Objects. These are the things that exist in the system (item, bid, buyer, pickup), each with its own states and rules.
- Flows. These are the journeys, like placing a bid or booking a pickup, and they only point to the objects’ rules.
Every unanswered question became a pending decision until I made the call, and nothing went in as a guess, so when the AI went to build it already knew what to do in every case, even two bids landing in the same second.
I started at 3:43 pm, Atlas was done at 4:26 pm and by 9 pm the site was ready, built in five stages that each ended with something working. The tweaks went on into the early hours, and in total it took about 12 hours.
Nothing can block the first bid
The most important moment in an auction is the first bid, because that’s when someone decides to play, so I removed everything that got in the way of it.
A first bid only takes a name, email and WhatsApp number, with no password and no code. In the first version I asked people to confirm their email before bidding, for security, and I soon saw what that did, because someone was excited, one tap away from bidding, and I was sending them off to dig a code out of their inbox.
So I flipped it and turned email confirmation into a trade, where right after the bid the site asks if you want to know when someone outbids you. If you confirm, you get email alerts and unlock the My bids, Pickups and Notifications tabs, which show a padlock until then, and if you skip it you keep bidding as usual, because I wanted the email to feel like a reward, not a wall.

Coming back later on another device only takes your email and a code, with no password to remember.

The rest of the site follows the same idea of removing friction:
- The bid comes ready. The field already shows the next valid amount, always round, in steps of 5 reais, and you just tap.
- Everyone in their own currency. If you think in pesos, you bid in pesos, and the equivalent in reais shows beside it.
- Sharing is copying. The button just copies the link, which turns into a WhatsApp preview with the photo, current bid and “Bid”.
- The ending has urgency. In the last 48 hours a banner at the top changes color, and in the last hour it becomes a countdown.
- The pickup books itself. The winner picks a day and time on the site, and the invite lands in both our calendars.

The Admin panel: an auction I run on my own
On the buyer’s side the rule was removing friction, and on mine it was not turning this into a second job. I was going to run everything alone, with dozens of items and the move around the corner, so every screen in the Admin panel was designed for me to get things done in a few clicks and move on.
Entering dozens of items by hand would be the first bottleneck, which is why the panel has a connector to Claude, where I describe things in a conversation, the way I’d say them (“grey sofa bed, about five years old, starts at 1,200”), and it creates the drafts with title, description, category and the Spanish version. Then I just upload the photos, which the browser compresses.


When an item closes, it moves to Sales, which works like a to-do list showing who won, whether they’ve booked the pickup and a button that opens WhatsApp with the message ready, in the buyer’s language. If they disappear, I pass the item to the next highest bid with one tap.

Since the AI also makes changes to the auction, I needed to know who did what, so the History logs every change with its source (me in the panel, Claude in the chat or the system itself) and an undo button whenever going back won’t hurt a buyer.

And everything that applies to the whole auction, like the end date, pickup hours, closed days and the exchange rate between reais and pesos, lives on a single screen, Settings.

What real use changed
Even with everything specified, the product changed once real people started using it. The Google Calendar integration became an email invite, which solves the same problem without asking for access to anyone’s account, and the pickup slots, which I was going to open one by one, became default hours with closed days marked separately. The friends who tested on their phones found the rest, like the login that dropped when you closed Safari and the field that zoomed in when tapped.
What stayed with me is that writing code is no longer the hard part, because the real time went into the 45 minutes thinking through the rules and the hours watching people use it.