Author: curl airxsun

  • Week 13: 3-13 — eleven rounds, two decks, one argument

    Three Thirteen is the card game at our table. Eleven rounds; the deal starts at three cards and grows to thirteen; whatever number just got dealt is wild. It teaches in one round and lasts all evening, and for years the scorekeeping has run on paper pads I print myself, which works right up until someone disputes the math in round nine and the pad has no opinion.

    This week’s domain isn’t mine. That’s a first. 3-13.info belongs to Tyler, and it’s the best-named domain this project has touched: the game is literally called 3-13, and the name plays it back with a hyphen. My shelf full of dormant domains had nothing that fit better, so week thirteen became a collab week — his name, our build.

    The build is a scorekeeper for iPhone. Add the table, give everyone a face — a selfie, a photo, or an initialed circle for the committal-averse — and the app quietly runs the ceremony: whose deal it is (the dealer’s avatar wears a badge that advances itself), what’s wild this round, who’s leading (a small crown, lowest score, because low wins). Tyler beta-tested it the way you hope a partner will, which is to say he sent a list. Blank scores must not mean zero. Names must survive deletion. A rematch button. Groups, so “just us two” has its own all-time standings. All of it went in the same day, because when your user is three feet away the feedback loop is just dinner.

    The site carries the other half: the rules written plainly, the scoring table, the printable score pads (the paper ones, ennobled), and one page for a physical gift set that deliberately has no price, because inventing one before Tyler decides on production would be fiction with a buy button.

    My favorite shipped feature is a sentence. With two decks in play, three identical nines — club, club, diamond — is a legal set; a run can never repeat a card. That ruling, per the authoritative rules archive, ended an argument that had survived multiple game nights at our table. It’s now printed on the site and enforced by the app. Most software ships features; occasionally it ships a verdict.

    Honest state of the week: the app is in TestFlight with three real testers, and the site is live at 3-13.info proper — Tyler turned the key, and the borrowed address it launched under now just points home. The icon is his to draw, the gift set is his to price, and neither needs a nudge. It’ll land when it lands.

    The 1w1i takeaway: I spent eleven weeks pulling names off my own shelf, and the best fit yet was on someone else’s. Build for a table you already sit at, and let the domain belong to whoever loved the game first.

    — c

  • Week 12: minneapolos — the pun was the easy part

    Some domains get bought because of a plan. minneapolos.com got bought in January 2024 because the word made me laugh: Minneapolis with polos hiding inside it, a whole product category folded into a city name like a note passed in class. It has sat on the shelf for two and a half years waiting for me to take the joke seriously. This week I did, and it turns out the pun was the easy part.

    The idea is embroidered polos with small Minneapolis icons on the chest. Not the big-graphic hometown tee — there are good people making those already — but the quiet version: a stitched mark about the size of a drink coaster, local pride at lapel-pin volume. The polo your kids should have gotten you. It jumped its original late-September slot for exactly that reason: this is a gift, and gifts have a runway that starts in October and doesn’t wait.

    The most useful work of the week looked nothing like building a store. It was trademark research, and it works like a photographic negative: list everything Minneapolis you can’t stitch, and look at what’s left. You can’t touch the Prince symbol — the estate holds it. You can’t do the First Avenue stars, the team marks, or, and this one surprised me, the Spoonbridge and Cherry, because a sculpture carries copyright the way a logo carries trademark. What’s left is the Stone Arch Bridge, the loon, the skyline, the North Star — public landmarks and state symbols, the quiet stuff only locals clock. The lawyers pushed me into better taste than I started with. The four icons that survived the cut are a better product line than the ten I brainstormed.

    Here’s the honest-scope part. The store that shipped this week sells nothing. There’s no checkout, because there’s no shirt yet, and I’ve decided to stop pretending that’s a bug. Print-on-demand embroidery has two serious platforms, both of which will happily take my money today, and the only way to know whose stitching deserves the chest of a fifty-dollar polo is to order samples from both and put them side by side. So the site does the one thing a site can truthfully do at this stage: it shows the four designs, states an expected price, and takes an email address. First-run pricing and first pick go to the list, in order. If the list stays too small to stitch a run well, the page says I’ll tell you that instead — and I will.

    Even the product photos are honest about not being photos. Every shirt on the page is a drawing — a flat-lay illustration with a little magnifying loupe showing the stitch detail — and the page says so in plain text, because the illustrations are also the actual embroidery files-in-waiting. The same four SVG marks on the site go to the digitizer when the samples get ordered. The mockup is the artwork. I like when the demo and the deliverable turn out to be the same file.

    The 1w1i takeaway: physical products invert this project’s premise. Software ships in a week because the marginal copy is free; a shirt ships in a season because thread is real. What a week is actually for, with atoms involved, is shipping the demand test — the storefront, the designs, the list — before a dollar goes to inventory. Eleven previous weeks taught me to ship the smallest true thing. This week the smallest true thing is a promise with a sign-up sheet, made carefully enough to keep.

    — c

  • Week 10: cve.social — the week the ocean won

    Week 10 had a plan, and the plan had a certain glamour to it. I was going to stand up my own corner of the social internet from a deck chair in the middle of the Atlantic: a Bluesky handle that is just my domain, and behind it a small self-hosted fediverse server humming on a rented box in Germany. Starlink made it technically possible. I want to be clear that the technology held up its end. The satellite constellation performed flawlessly. The bottleneck was the guy in the deck chair.

    Here is what I learned about provisioning servers on a cruise: you don’t. Not because the bandwidth isn’t there — it is, eerily so — but because a ship is a machine purpose-built to dissolve exactly the kind of intention that server provisioning requires. Every step needs an account, a payment method, a two-factor code, a decision. The ship needs you to look at the ocean. The ocean wins. It should win. That’s what it’s for.

    So Week 10 shipped nothing on Friday, and I’m writing this from dry land almost two weeks late. What finally shipped is deliberately small: cve.social now has a front door. A dark little identity card that says who lives here — Carl, the person, not the company — with three doors on it, all honestly marked COMING: the Bluesky handle, the fediverse address, the mailbox. The one link that works today points away from the page, to the business site, which is the entire point. The person and the company get separate front doors, and mixing them up is how you end up over-exposed in both directions.

    The idea underneath is worth the wait. On Bluesky your handle can be a domain you own, which means identity stops being something you rent from a platform and starts being something you hold the deed to. The handle IS the domain. For a project that’s spent ten weeks pulling dormant domains off a shelf, this one is different in kind: the domain isn’t the address of the product. It’s the product.

    The 1w1i takeaway: a weekly cadence generates two ledgers — the things you shipped, and the truth about when. The streak is only worth keeping if the second ledger stays honest. Week 10 is a miss, recorded as one, with the smallest true thing shipped late and the rest still COMING. I’d rather show you that than a Friday timestamp with a story behind it.

    P.S. — August 27. This post sat in drafts long enough to earn a correction, and it’s one I’m glad to make: the rest of cve.social arrived, and it arrived in a single afternoon. The Bluesky handle verified, so the domain is literally my username now. The mailbox came alive, and its first job was catching its own verification codes. And the part the ocean took — the self-hosted fediverse server — is running on a small box in Nuremberg: a mastodon.social account searched for @cve@cve.social and the follow just landed. Every COMING label on the front door is gone — and so is the business link, because the card reads better as all person, no company. Some weeks you lose to the ocean. Apparently you get them back on land.

    — c

  • 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