PEACH &
MADISON

Peach & Madison · Our work

Carson
River Resort

A family resort on the East Fork Carson River since 1920. In six weeks we gave it a website with a point of view, direct booking on its own domain, an office that runs on iPads, email that lands, and a start in local search. We still run all of it.

The resort's roadside sign on the highway: Carson River Resort, over Cabins, River Camping and R.V. Park, with a flag and a dry, burned hillside behind.
Client
Carson River Resort, Markleeville, California
What we did
Diagnosis · Website and design · Alpine booking and point of sale · Email and domains · Local search · Training · Operations
When
First commit August 7, 2026 · Live September 18, 2026
Live
carsonriverresorts.com
The Carson River Resort home page: a painted river scene under the resort's script name, with a check-in and check-out box below.
The home page, set like an issue of a magazine. This one is Deer Season 2026.
6 weeksFirst commit to launch
58Pages in the sitemap
146Photographs
1,417 + 313Unit and browser tests
21 minThe cutover
17Reviews answered, day one

The resort

Seven cabins, each named for a piece of local history. Eleven numbered sites on the water that take a tent or an RV, and hookup spaces up top. A general store with ice, tackle and firewood, the last services before Monitor Pass. Elevation 5,530 feet, free Wi-Fi and no cell signal on any carrier.

Founded in 1920; the centennial was held in July 2022, two years late. There is no cabin №1. It burned down. Dogs are welcome everywhere.

“The more you are here, the more you want to be here.”

The owner, to the Record-Courier

The diagnosis

We wrote it down before we built anything. The old site was one long page exported from a design tool. Its HTML had no images, no links and no navigation, so search engines saw the title and nothing else. No description, no structured data. Prices were scrambled in the markup, and the Fourth of July events were still up in August.

Booking meant the phone, a Gmail inbox, or one of at least five separate Airbnb listings for the same seven cabins, each paying Airbnb's commission. The reservation book was a stack of paper registration cards. The resort's name is singular and its domain is plural, so half the directories pointed at the wrong address. Google showed 4.6 stars from 164 reviews, with recent ones waiting for a reply. The resort had never had analytics, so nobody could say how many people looked and left.

All three failures at once: nobody could find it, it didn't take bookings, and it ran on paper.

The research

A place with a century behind it deserves to be written about accurately. Before we designed anything we built a dossier: 21 research files and 25 side studies, on the mining history, the Lahontan cutthroat, the river and its planting records, the fires, the Death Ride, the 1950 census and the Alpine Signal. Then a fact-check of about 130 claims; seven were corrected before launch. When the bronze plaque in Markleeville dated the Great Fire to August 2, 1885, and a source said “the mid-1880s”, the plaque won.

We spent three days at the resort in early September. The owners answered the open questions in person. We photographed every cabin, the store and the river (one panorama of the East Fork is 9,812 pixels wide), and we photographed all 67 registration cards, the entire reservation book. Heenan Lake, up the road, was full of anglers with nobody staying at the resort. So the site got a Heenan Lake page.

The Heenan Lake page: a long-form guide to the lake, its season and the resort as the nearest place to stay.
The Heenan Lake page, written for the anglers who were already driving past.

The site

The home page changes with the seasons, like a magazine. Each issue gets its own cover and contents, so regulars always find something new. Each cabin carries its own story and its own booking link. And it has the pages people actually need up there: road and river conditions, a fish-planting page that reads the state's feed every day (the planting ledger goes back to 1938), getting here, gift certificates and the dogs policy.

The map is ours, not an embed: river reaches drawn from USGS data on self-hosted topographic tiles, with GPX and KML downloads, and it works with no signal, which is the only kind there is.

The design language is called the Heenan Lake Issue: seven typefaces, three inks (brick, mustard and teal), a paper ground, and a magazine's discipline about what goes where. A gate in the build enforces it, so a page added in a hurry can't drift. Under all of it: a real site map, structured data, a sitemap and a robots file for search.

The booking page on a phone: Book Your Stay, with the Google rating and the place picker.The receipt after picking №3 The Alpine for Oct 5–7: the stay total, the county tax, the deposit due tonight, the balance charged a week before arrival, the Book It button, and the note that payment finishes on Stripe's secure page.
Book on a phone: pick a cabin and dates, read the receipt, then Book It takes the deposit on Stripe. Nothing was booked for this picture.

Alpine

Alpine is the system we built to run the resort: one backend for the cabins, the sites and the store. Guests pick a cabin or a riverside site, see the calendar and prices, and pay the deposit on a secure Stripe checkout, on the resort's own domain. Staff run bookings and the store from iPads. No third-party booking site takes a cut or owns the guest.

Try it yourself: book a cabin at Carson River Resort →

Hookup spaces are still confirmed by phone, on purpose.

Read the Alpine case study →

The booking page: pick a cabin, dates and guests, with the deposit taken on Stripe.
Booking direct: pick a place, pick dates, pay the deposit. Each cabin has its own link.

The launch

Friday, September 18, 8:01 pm. We pointed the domain at the new site. The certificate didn't issue itself, so we issued it by hand; by 8:22 pm all 54 pages answered and the payment webhook was repointed. Nothing was deleted, so there was a way back. Search Console was verified and the sitemap submitted the same night. Analytics went live at 9:05 pm, on by default with a one-click opt-out in the footer that also honors Global Privacy Control and Do Not Track. The old .net address now redirects to the .com.

The next afternoon, the first paid online booking arrived: a riverside tent site, deposit taken on the resort's own domain.

Search

The morning after launch we audited the Google Business Profile and Yelp. We rewrote the Yelp description, added the RV Parks category, and answered the ten most recent Google reviews and seven on Yelp. The old markup listed store hours as midnight to midnight, which Google reads as “open 24 hours”. Fixed. Google's “people also search for” showed what was missing, so we built a rates page and a reviews page the same day.

Rankings take months, and we don't predict them. We report them to the resort as they come.

The rates page.The reviews page.
Two pages Google asked for: rates and reviews, built the day after launch.

Email

Nine addresses on the resort's own domain: five mailboxes and four shared ones, for booking, the store and the owners. Sending is authenticated (SPF, DKIM and DMARC) so confirmations and receipts land in the inbox, and a mailing list with double opt-in is ready for the season announcements. Before this, the resort answered from a personal address through a forwarding rule.

Training

An illustrated staff manual, The Office: 13 chapters and 58 figures, readable offline on the iPad. Staff had the store iPad in hand on the morning of launch day.

Speed and testing

We test cold loads on a throttled mid-range phone on slow 4G, not on our laptops, because that's what a guest has in the car below Monitor Pass. The first pass took 2.3 seconds off the largest paint on mobile.

Every change runs through eight gates before it can reach the resort: types, lint, a census of the content, 1,417 unit tests, derived files, the build, 313 browser tests and a set of guards, one of which checks all 3,790 internal links. Small-business sites almost never have this. Ours do.

Running it

We didn't hand it over and leave. We host it, keep it updated and change it as the seasons change, on our monthly plan. The home page is an issue; a new one goes out with the season.

Start

See it live at carsonriverresorts.com. Then send us the address of your site and what it should be doing that it isn't.