Author: curl airxsun

  • Week 9: cabinchoice — the name wanted the woods

    Some weeks you build the idea you planned. This week the domain overruled the plan. cabinchoice.com has been on the queue since the start as the flagship: cruise-ship cabin reviews, because picking the right stateroom is the best decision a cruiser makes after picking the ship, and the official deck plans are no help at all. I’d even built the bones in June: a census of every stateroom on a Celebrity Edge-class ship, all 1,355 of them across seven decks, with my own rendered deck plan. It never shipped. Something better happened instead.

    The hook was always personal. We’re back on the same ship, so what cabin did we love five years ago? That became an iPhone app, and then the app refused to stay small. It grew a crew logbook, a port diary, and a way to measure how rough the sea is by laying the phone flat and letting the motion sensors watch the ship breathe. Somewhere in there it stopped being about choosing a cabin at all, so it got its own name, Cruisery, its own domain, and a spot on TestFlight. The stateroom census will find its home over there eventually.

    Which left cabinchoice.com holding a parked page and a question. Here’s the thing I finally admitted: the name never said cruise. Say “cabin choice” to anyone who hasn’t spent weeks inside my head and they picture pine trees, a lake, an A-frame with smoke curling out of the chimney. The name was bought for one idea and was always better at a different one. This week I let it have its way.

    So cabinchoice.com is now the start of an Airbnb-type site for cabins. The real kind. Find one, book one, or list the one you own. What shipped is deliberately small: a coming-soon page with a waiting list that asks one question beyond your email, which side of the door you’re on. Book a stay, list a cabin, or just keep me posted.

    That one question is the whole strategy. Marketplaces die of empty supply; the graveyard is full of two-sided ideas that built the product first and found out there was only one side. The list is an instrument. If “book a stay” piles up while “list a cabin” sits at zero, the idea has answered, and the answer cost a page instead of a year.

    The page itself is split down the middle because the business is: stayers on one side, owners on the other, one list at the bottom. The cabin is hand-drawn SVG, sun and chimney smoke and all, because opening a brand about honest cabins with stock photos of someone else’s would start it on a lie. And the doorman is forty lines of PHP I’ve grown fond of: a hidden field only robots fill in, a timestamped token that rejects any form completed faster than a human can type an email address, and a per-visitor cap that locked me out during my own testing on the fourth signup. Being turned away by your own bouncer is an underrated form of quality assurance.

    The 1w1i takeaway: I used to think naming ran one direction. You have an idea, you attach a name. Week 9 says it runs both ways. The app outgrew its name and left home; the name stayed put and turned out to know exactly what it wanted to be. Listen to the domain. It was telling everyone but me all along.

    — c

  • Week 8: The flip sprint — what a clever name is actually worth

    I have a domain-buying habit. For years I’ve registered names the way other people buy lottery tickets: see a clever combination that’s somehow still available, grab it, picture the thing it could become. Most of them became a line on a renewal invoice. This week I finally did the thing I’d been avoiding, which is put a batch of them up for sale.

    Seven names. terrorfish, meanmeme, 30thirty, hyperb0le, a barfly pair, and emeraldcay. Each one made me grin when I registered it, and not one was ever going to get built. So this week is the inverse of the rest of the year. Not making something, but admitting which names were never going to become anything, and letting them go.

    The uncomfortable lesson came first. I’d always half-believed a clever name was worth something on its own. It isn’t. A domain is worth exactly what the next person will pay, and for an unproven brandable with no traffic and nobody waiting, that number is usually small, sometimes zero. terrorfish.com is a genuinely fun name. It is also a name nobody is specifically looking for, which means it just sits there until the right brand happens to wander by and search for it.

    Then there’s the exception, and it taught me where the value actually lives. One name in the batch is different. I registered emeraldcay.com years ago because it sounded like a private island. It turns out there is one: “Emerald Cay Estate,” a real and rather famous luxury estate in Turks and Caicos. That single fact makes the domain worth more than the other six combined, because for once there is a specific person who would want it, the estate’s owner. Value in a domain isn’t the cleverness. It’s an exact match to something real that someone already cares about.

    The other quiet lesson was about the difference between owning and selling. When I went to list these, I found they were already showing “for sale” pages, and had been for ages, doing absolutely nothing. A domain parked on a page that says “make an offer” is a message in a bottle. Actually selling means putting the name where buyers look, a marketplace that pushes the listing out across the registrars where people search, and for the good one, going and finding the buyer yourself. The names had sat “for sale” forever and sold nothing, because I’d only ever done the easy half.

    So this is an unglamorous week and it may make no money at all. Unproven brandables list high and sell at a fraction, if they sell. It’s the first time this project has pointed at revenue instead of just shipping, and my honest expectation is modest: maybe one finds a home, probably emeraldcay, probably not this week. But the collection is lighter and finally aimed at the door, and I’ve stopped quietly paying to warehouse names I was never going to use.

    The 1w1i takeaway: a build-in-public year isn’t only about what you make. It’s also about being honest about what you won’t. Half the discipline of a portfolio is knowing which bets to close, and doing it on purpose instead of by forgetting to cancel the renewal. Clever got me the names. Only reality gets them sold.

    — c

  • Week 7: gopherguts — the part of a guide that isn’t the writing

    I’ve owned gopherguts.com since a past life and let it sit for years. The name is too good to waste: Gopher for the University of Minnesota, guts for the honest, in-the-trenches version nobody puts in the official brochure. This week it became what it should have been all along — an unofficial guide to being a U of M freshman, the thing I wish someone had handed me before move-in day.

    The content was mostly written already: eleven guides, about seventeen thousand words, on dorms, Dinkytown, the U-Pass, surviving your first Minnesota winter, where to eat without going broke, and the health and safety numbers you want in your phone before you need them. So I figured this was a quick week. Build the pages, ship it.

    It was not a quick week, and the reason is the whole point.

    A guide like this lives or dies on being right. It’s one thing to be wrong about a restaurant on a travel site; it’s another to print the wrong number for a crisis line on a page a scared eighteen-year-old might open at 2 a.m. When I looked hard at the draft, it had a hundred and sixty-three specific facts flagged as unconfirmed: phone numbers, transit fares, dorm deadlines, immunization rules, which places were still open. Every one of those was a small promise to a reader. Publishing them unchecked would have been the easy move and the wrong one.

    So the week’s actual work wasn’t writing or building. It was checking. Every one of those hundred and sixty-three facts got verified against the official source it pointed to — the University’s own housing and health and transit pages, the city, the state health department — and then the highest-stakes ones, the numbers somebody would actually dial, got a second independent pass whose only job was to try to prove the first one wrong.

    That second pass earned its place. The draft was mostly solid, but it was confidently wrong in eight spots. It claimed a famous fourteen-stool breakfast counter had added dinner service (it hadn’t). It blurred the dorm application deadline into the payment deadline, which are two different dates with real money attached. It had the wrong navigation path for the emergency-alert signup and undersold the length of the downtown skyways. Small things, except that “small and wrong” is exactly what erodes trust in a resource. A handful of facts I couldn’t confirm against an official page at all, so the site doesn’t assert them — it sends you to the source and says, plainly, check this yourself. The emergency phone numbers all checked out, and the process even filled in one the draft had left blank.

    There was a second discipline running underneath all of it: staying honestly unofficial. “Golden Gophers,” the mascot, the maroon and gold — those are the University’s, not mine, and a student guide that cosplays as the institution is both dishonest and a lawsuit waiting to happen. So gopherguts wears its own colors, uses the University’s name only to refer to it factually, and says on every page that it is not affiliated with the U. The honesty isn’t a legal hedge bolted on at the end. It’s the same instinct as checking the facts: be exactly what you are, and be right about it.

    The 1w1i takeaway: on a guide, the writing is the cheap part. Being right is the product. I spent this week not adding words but removing every claim I couldn’t stand behind, and the site is smaller and truer for it. It’s live at gopherguts.com, a countdown to move-in ticking on the front page, aimed at whoever’s about to haul a mini-fridge up four flights in late August and could use an honest word from someone who’s done it.

    — c

  • Week 6: Cape Coral Things — three real photos and a fake owl

    I spent part of the summer in Cape Coral, and I came home meaning to build a little firsthand guide to the place. The pitch was simple and, I thought, easy: a running list of what’s actually worth your time down there, written by someone who’d been standing in front of it. Not a listicle assembled from other people’s blogs. The good stuff, kept current.

    Then I sat down with what I’d actually brought back, and the whole week turned on it.

    Seven photos. Three of them were real: a canal grid shot from up high, where the number everyone quotes about Cape Coral (more miles of canal than any city on earth) finally means something because you can see it; a sunset over the boats at Cape Harbour; and a plastic owl. The other four were the kind of images that end up in your camera roll without you taking them. Different sizes, none of them from my phone, all of them of exactly the right subjects. Burrowing owls, the fireworks, the pretty stuff. They would have filled the page beautifully.

    The easy move was to use them, or to paper over the gaps with stock, or to let an image model dream up a burrowing owl that never existed. Every other guide site does some version of this, and nobody would have known. But a firsthand guide that isn’t firsthand is just a listicle wearing a nicer jacket, and the one thing this site had going for it was that it was true. So I threw the four out and built on the three.

    That constraint ended up designing the whole site. If every photo has to be ours, then the page splits itself in two without any help from me: what we’ve actually seen, which gets photographs, and next on the list, which is text, honestly flagged as not shot yet. The real burrowing owls are in that second list, because I never got a clean one. Four Mile Cove is there. The Yacht Club is there. The site says so, in plain words, instead of borrowing someone else’s picture and pretending.

    Which brings me to the owl. Cape Coral’s mascot is the burrowing owl, a little ground owl the whole town is fond of, and the only owl I came home with is a plastic decoy bolted to the rail of a tiki bar to scare the birds off, with a real grackle standing right next to it, completely unbothered, waiting on someone’s fries. I could have been embarrassed by that. Instead it became the best thing on the page. A town obsessed with a bird, and the closest I got was a fake one that wasn’t even doing its job. That’s not a failure to hide, it’s the most honest photo I took all week, so it leads the section.

    Mechanically it’s a single static page in its own visual language, sunny aqua and sand, nothing like the last few things I’ve built. It went up over its DreamHost placeholder this week with a proper cert, and it lives on social under one handle everywhere, @capecoralthings, because it’s meant to be a living guide I add to over time, not a one-week-and-done. There’s no 1w1i branding on the site itself; the guide should stand on its own, as a guide.

    The takeaway I keep landing on: the honest constraint made a better product than the dishonest shortcut would have. Refusing to fake it left me with a smaller site, fewer photos, more admissions of what I haven’t done yet. It also left me with the only version of this that’s worth anyone’s trust, and a plastic owl for a mascot. I’ll take the owl.

    — c

  • Week 5: workspacemarket — a marketplace built from the editor

    workspacemarket.place is a secondary market for daily workspace reservations at Universal Containers. Hoteling means nobody has an assigned seat: you book a desk each morning, the good ones go fast, so the site lets you buy the right to a colleague’s reservation for a day. The window seat the week of the sales convention. The desk by the good espresso on a free-bagel Friday. There’s a premium tier too, an office share, where a VP keeps their corner office and sells the spare seat, so you can take your 1:1s from a skyline view while they work three feet away. It’s played completely straight. That’s the joke.

    The desk-resale gag is a Trojan horse for a stack demo. What I actually wanted to find out: with Salesforce Headless 360 — where everything on Salesforce is now an API, an MCP tool, or a CLI command — could an AI coding agent build a real, public, Salesforce-backed product end to end, from the editor? Mostly, yes. And the places it couldn’t were the interesting part.

    The backend is a free Agentforce and Data Cloud Developer Edition doing real work: seven custom objects, and an escrow state machine in Apex that runs a purchase through held funds (simulated), a confirmed handoff where the reservation transfers to the buyer, and release, with a refund path and guarded transitions. Its tests pass at 100%, because the agent wrote the tests too. In front of it sits a React app in the site’s own visual language, an architect’s blueprint of a floor plan with one coral desk “on the market,” and a thin PHP proxy on DreamHost that holds the OAuth secret outside the webroot so the static app never touches Salesforce directly. The surge pricing is real: a guest seat in the VP’s office during Container-Con, the company’s August conference, lists at a steep multiple.

    None of that backend was clicked together. Two Salesforce MCP servers are wired into the editor, and each drove real work against the org. The DX MCP provisioned the objects, fields, Apex, and seed data, and deployed the escrow endpoint the Buy button calls. The Data 360 MCP stood up the Data Cloud layer: data streams into DLOs, then data model objects mapping the desk and listing data, then a Calculated Insight over them. Two toolchains, one agent, no Salesforce UI for any of it.

    The payoff is that all three “360s” end up live on one page. Customer 360 is the marketplace itself. Data 360 is a live Data Cloud round trip: the “Market pulse” strip queries that Calculated Insight in real time through the CDP Query API, and reports that office-share seats average about $34 surge-adjusted versus about $16 for a hot desk — real numbers, computed in Data Cloud, on page load. And Einstein answers the “Find a desk” chat: ask in plain English and a Salesforce model composes the reply, grounded on the live listings, citing real desks and prices and refusing to invent ones that aren’t there.

    Then the two honest walls, which were the most useful thing I learned. First, “never opened the UI” holds for the backend but not the AI platform. The data model, the logic, the seed data were all authored as text and deployed headless, but building the agent, turning Einstein on, and granting the API scopes all needed the Setup UI. The data layer is fully headless today; the AI layer still makes you click.

    Second, the chat you’re talking to is in-org Einstein, not the Agentforce agent runtime. I did build a real Agentforce agent, and it’s active. But its Agent API only answers through Salesforce’s external gateway, and that gateway isn’t switched on for a free Developer Edition. I could prove it cleanly: the sibling Models API returns the same blank 404 from that host, while the identical Einstein call works instantly from inside the org. So the chat grounds Einstein directly through a bit of Apex instead. Same org AI, a different door. The agent sits ready for the day the gateway opens.

    Funds are simulated; nobody sells a desk and no money moves. The booking app it pretends to integrate with is called SpaceMeh, and the “meh” is the whole reason a secondary market would exist. It cost one domain registration, a few afternoons, and zero dollars of Salesforce licensing. The marketplace is live at workspacemarket.place, with a colophon at /stack if you want the wiring. Go look at the floor plan, ask the chat for something cheap, and don’t try to actually buy the corner office.

    — c

  • Week 4: exfedjobs — useful to people having a hard week

    I registered exfedjobs.com in January 2025, when it was becoming clear that a lot of federal workers were about to be looking for work. Then, like most of my domains, it sat there. This week I finally built it, and it turned into the most carefully-handled thing I’ve made for this project, because the audience is real people in the middle of a hard stretch.

    The temptation with a domain like this is obvious: stand up a “job board,” sprinkle in some affiliate links to resume services, and call it a business. I didn’t want to do that. These are people who lost a job, often suddenly, sometimes after decades of public service. The honest move was to make something genuinely useful and take nothing from them — no listings I can’t really maintain, no data collection, no upsell. So exfedjobs is a curated launchpad: it points straight at the real authorities and the resources that actually help, and it says plainly that it’s independent, free, and not affiliated with any agency.

    Getting it right meant getting the facts right. The most useful part of the site isn’t jobs at all — it’s the benefits-and-money section, because several of those decisions run on a roughly 60-day clock: continuing your health coverage, handling your TSP, filing for unemployment as a former fed, severance, retirement. Those are the things that quietly hurt people if they miss the window. I researched each one and linked the official source rather than paraphrasing it, because on this topic “close enough” is worse than nothing.

    The thing I didn’t expect was how the project wanted to grow. The real question a displaced fed asks isn’t “where are the jobs” — it’s “where does my kind of work go?” A cyber person, a public-health scientist, an 1102 contracting officer, and an agency attorney have completely different next steps. So the one page became eight: a clean front door plus a page for each field, covering where that experience lands, the boards and employers that value it, how to translate the federal title into private-sector words, and which credentials actually move the needle. That last part matters more than people think; “ISSO” and “program analyst” are invisible to a private recruiter until you rename them.

    I also had to hold a line on tone. This is a politically charged moment, and it would have been easy to make the site about that. But someone who just lost their paycheck doesn’t need my opinion — they need the unemployment link and a straight answer about their health insurance. So there’s no politics on the page. It states the practical situation, helps, and gets out of the way. I even cut the one section that explained “what happened,” because the people who need this site already know what happened.

    The 1w1i lesson this week is one I keep relearning: usefulness beats cleverness, especially when the stakes are personal. The most respectful thing I could build wasn’t impressive — it was accurate, honest about what it is, and pointed firmly onward to people who can do more. Same lesson as the lake a couple weeks back: you don’t have to be the one in charge to be worth someone’s time. You just have to actually help.

    — c

  • Week 3: Grass Lake — being useful without being in charge

    Most people meet Grass Lake at sixty miles an hour. It’s a shallow 27-acre wetland tucked behind the Highway 62 / 35W interchange in the Kenny neighborhood of southwest Minneapolis — cattails, herons, two feet of water — and thousands of people drive past it daily without knowing it has a name. I walk it. I’ve also owned grasslake.org since 2013, sitting empty the whole time. This week it became a thing.

    The idea was deliberately small: a plain, honest informational site about the lake — what it is, the loop you can walk, why it’s healthier than it looks, how a neighbor can help, and where to go for the people who actually run things. No donations, no sign-ups, no committee. Just useful.

    The hardest decision was about standing. Real bodies care for Grass Lake — the Minnehaha Creek Watershed District manages it, the city and the DNR have roles, the Kenny Neighborhood Association serves the area. I’m none of those. So the whole site had to make that unmistakable: a neighbor who walks the lake, not an agency that runs it. When it describes the watershed district’s water work, that work is credited to the watershed district. The site points at the authorities; it never pretends to be one. And it’s info-only on purpose — the second you add a donate button you’re in nonprofit-and-fiscal-sponsor territory, which is not what a walking guide needs.

    It’s honest about the place, too. Grass Lake isn’t a postcard. It’s shallow, it’s marshy, and yes — you’ll hear planes and traffic the entire loop. The site says exactly that. A wetland behind a highway is still worth knowing; pretending otherwise would just be the wrong kind of brochure.

    Mechanically it’s a single static page — replacing an old Microsoft Word document that had been parked at the domain since 2017 — built from a week of reading watershed management plans and water-quality data, with links out to everyone doing the real work. If the neighborhood association ever wants it, it’s theirs.

    The 1w1i takeaway: you don’t have to be in charge of something to be useful to it. The most honest move turned out to be the smallest one — say plainly “I’m just a neighbor who walks this lake,” then make the page genuinely helpful and hand people off to those who can do more. Civic good, no costume required.

    — c

  • Week 2: airxsun — building the brand before the business

    Some weeks the idea is a product. This week the idea was a maybe.

    airxsun is a name I’ve been holding onto. Not for a company that exists — for one that might. The pull keeps coming back: somewhere down the road, a small, senior consultancy at the intersection of CRM and AI — the place a lot of businesses are about to spend the next decade either getting right or getting wrong. I’m not running that today. No clients, nothing booked. But “someday maybe” ideas have a way of staying vague forever, and vague ideas can’t be judged. So this week’s seed was simple: make the maybe real enough to look at.

    The name is the whole concept in three syllables — air · x · sun. Air into sun: a sunrise. And the x in the middle isn’t decoration, it’s the point: intelligence radiating out from the customer core, AI × CRM — the multiply where the value compounds. So the brand had to be that, not just say it.

    I reworked the identity from scratch (the first pass read too playful for senior work). The mark is now a single continuous line: a blue cloud flowing into a golden sun, crossing itself in the middle — an infinity loop and an “x” at once. Cool air into warm sun; clarity in, intelligence out. I locked a deliberately tiny palette — two brand hues, a gradient, two neutrals, and that’s the brand. No sprawling system to maintain. Lowercase wordmark, the “x” in sun-gold to tie the mark to the name.

    Then I gave it a home: a single static page — fast, nothing to patch, no WordPress to babysit — that says plainly what airxsun would be and offers an honest way to get in touch. The hard part was not overclaiming. It’s tempting to dress a someday-idea up as a going concern. Instead the copy leans on what’s actually true: senior, vendor-honest, outcome-driven — the kind of help you’d want from someone who’s done the work, minus the agency theater. A real page, a real contact, no pretending there’s a team behind a curtain.

    That’s the whole move, and it’s a recurring 1w1i lesson: you don’t have to start the business to make the idea concrete. Give it a name that means something, a face that looks the part, and a front door that works — and now it’s a thing you can stand in front of and decide about, instead of a fog you keep meaning to get to. The business may or may not happen. The brand is ready either way.

    — c

  • Week 1: burntsto.re — the shortcut that grew a brewery

    Some domains you register because you have a plan. Some you register because the name is too good to let a stranger have it. Back in 2017 I bought three — burntstorebeer.com, burntstorebrewery.com, burntstorebrewing.com — for the second reason. There is no brewery. There never was. There’s just Burnt Store Road: twenty-some miles of Southwest Florida running from Punta Gorda down through Cape Coral, named for a frontier trading post on Charlotte Harbor that burned to the ground in 1849 — and the stubborn conviction that somebody should brew beer under that name.

    This week’s seed was tiny: wire up burntsto.re — the clever .re hack sitting over at 101domain — as a 301 to the main domain. Ten minutes in a registrar panel. Done. Except the main domain was an empty WordPress “Coming Soon” shell from 2023, and pointing a great short URL at nothing is like printing business cards for a company that doesn’t answer the phone.

    So the redirect grew into a build. The WordPress shell got backed up and retired in favor of a single static page — no plugins to patch, nothing to hack, loads instantly. Then the project got lucky: digging through old files I found a professionally designed 2022 brand package — a palm tree whose fronds are flames, set in a sunset-gradient circle. Far better than anything I’d hand-draw. So the whole page is built around that mark, with the palette pulled straight from the logo’s gradient (sun-yellow → ember → plum) and the road’s 1849 story told bar-stool style.

    The beer lineup exists entirely on paper, and leans all the way into the locale: No See-Um (a Florida light lager named for the smallest menace on the sandbar), Oyster Brau (a golden ale for the half-shell crowd), and Flipper’s Share (a stout slow-aged in rum barrels — out here the dolphins take the angel’s cut, not the angels). Recipes in progress; nothing brewed, nothing sold.

    The taproom section is where the honesty rule earns its keep. There’s no lease and no brewhouse — but there is a target on the map: Seven Islands, the ±48-acre waterfront district on Old Burnt Store Road in NW Cape Coral that the city council approved in January 2026 as a resort-and-marina village. I dropped in a concept mockup of a brewpub imagined into that rendering, captioned plainly: concept, not construction — unofficial, base rendering credited, not affiliated with the project. The hours still read “Mon–Sun · not yet.”

    There’s even a store: a Palm Flame tee, an Old Burnt Store Rd. trucker hat, an 1849 pint glass, a koozie. Every item is marked Sold out — which is true, in the sense that none of them have been printed. Things move fast when supply is zero.

    Through all of it runs the one line that keeps the whole thing honest, in a sunset banner you can’t miss: a brand in development — no taproom yet, no beer for sale yet. The name, the plan, and the thirst are real. If you’re a brewer who wants to bring it to life, the contact link works.

    The siblings (…beer, …brewery) 301 home too. One store, one fire, one website.

    — c

  • Week 0: Building One Week One Idea

    It felt right to start at the beginning: Week 0 is building this site itself.

    You can’t run a build-in-public project without a place to build in public. So before any of the dormant domains get their turn, the project needed a home — somewhere to publish the weekly write-ups, lay out the rules, and keep myself honest. That’s oneweekoneidea.com, and standing it up was the first week’s idea.

    What I did this week

    • Pointed the domain, set up hosting and WordPress, and got HTTPS working.
    • Handled the unglamorous basics — clean permalinks, no sample clutter, hardened login and security.
    • Wrote the About page and The Rules — the premise, and the constraints I’m holding myself to.
    • Set the publishing rhythm: pick Monday, build through the week, ship Friday.

    The bigger picture

    Behind this site is a portfolio of domains I’ve been sitting on for two decades. Some are genuinely good ideas that never got built — a brewery shop, a neighborhood marketplace, a music project, and a few I’m almost embarrassed to admit I registered. One per week, I’ll pull one off the shelf and make it real.

    Next week

    The first real idea comes off the shelf. I keep a rolling queue so Monday never starts blank — and there’s no shortage of material.

    See you Friday.

    — c