What they asked for
A site that shows the hours, the location, what's in season, and a couple of photos that make the place look like the place. Nothing fancy. Konrad isn't going to log into a CMS every week — he's out back sorting peaches. The site had to work whether he touched it or not.
Forty-plus years in the area and they'd never had a website of their own. Customers found them through a Facebook page, a Yelp listing somebody else made, and word of mouth. That's fine until someone's trying to figure out on a Tuesday evening whether the stand is open and whether the peaches are in yet. The site needed to answer those two questions without anyone having to pick up the phone.
What I actually built
A single-page site in plain HTML and CSS. Five sections: hero, a short "since 1985" story, what's in season right now, visit info with the address and phone number as a clickable link, and reviews pulled in as plain quotes. The whole thing is about 160 lines of HTML. No build step, no framework, no database.
The gallery sorts newest-first automatically, so whenever Konrad drops a new photo in the folder and I commit it, that photo is the first thing visitors see. He sends me photos from his phone. I add them. Done.
Hosted on GitHub Pages. DNS runs through Cloudflare. SSL is automatic. The whole stack costs about a dollar a month in domain registration and nothing else — the hosting is free. That's why the monthly rate is what it is: it's my time answering the phone when Konrad calls, not a server bill.
What broke and how I fixed it
The first Lighthouse accessibility audit came back with a contrast issue. Two little labels on the page were using a semi-transparent white that looked fine but didn't pass WCAG contrast ratios. Five minutes with a color picker and it was solved.
The Google Maps embed on the visit section didn't have an accessible fallback for screen readers. Added a text link under it so anyone not loading the iframe still gets the address. Small fix, real difference for the one customer a year who needs it.
In April I did a spring refresh. Konrad had new photos with 2018 prices still visible on the signs in them. I re-cropped the shots to hide the old prices and pulled in fresh Google reviews. That took maybe an afternoon. The site hadn't been touched in three months before that, and it didn't need to be.
What I'd do differently
Honestly, not much. The one thing I'm going to change for the next client is skipping Formspree entirely for contact forms. The free tier caps at 50 submissions a month and a site that works for five years is going to hit that cap eventually. Going straight to a Cloudflare Worker plus Resend costs nothing, has no cap, and takes about an hour to set up. Learned that on a different project and now it's the default.
I'd also get my own photos in earlier. Konrad's phone shots are great for the gallery and feel like the place — which is the whole point — but for the hero I want something with a little more intention behind it. Next spring refresh, I'll bring a camera.
How Konrad actually uses it
He doesn't log in. He never will. He sends me photos when he has them and I put them up the same day. If a price or an hour changes, he texts me and I update the line in the HTML. Total time per update: about two minutes. That's what the monthly buys.
When customers call asking if something is in season, he can just send them the link. That's the whole value. The site is an answering machine for the questions he'd rather not keep answering in person.
Want one like this?
If your business is roughly this shape — local, been around a while, needs a site that works without weekly babysitting — I'm probably your guy. Starter tier runs $399 and sites like this go live in about a week. Here's how it works.