Contents
It's a Thursday night in August and the weekend just came free. In British Columbia that makes me the wrong kind of camper.
The right kind settled on dates in the spring and set an alarm for the morning the booking window opened. What I have is two days' notice and five questions: what's open, what's close, what's smoky, what's under a fire ban and which roads the car can handle.
No map answers two of those at once. So I built one that answers all five.
A Better Camper started this spring as a toy and went public in the summer.
01
It started as an atlas
I live in British Columbia and for years I camped at one of the same two places.
Not for lack of options. The opposite: an overwhelming number of them (a paradox of choice - a common theme in my life), no way to reason about any of them, and the discovery that anything interesting was already booked solid if it belonged to the province.
So camping meant rolling the dice.
Pick a region, drive out, get lucky.
I didn't even know how first come, first served worked; that alone took research.
The best thing I stumbled into was the free recreation sites, run by a different government agency, barely on the maps most people use and suddenly a real option once something could tell me where they were.

I scoped Alberta out on purpose. I'm from there and my friends still camp there, but its system is different enough that covering both meant solving two problems at once. I cut that scope pretty fast.
One province, my backyard, done properly.
The day-one version was an atlas: everything I could find, laid out in one place so exploring was possible at all. It's still on the site, and it still answers the first question, which was never whether site 14 is free on the long weekend.
It was what even exists. There is so much out there to explore.

Lakeside, first-come · 868 spots

Swim from camp · 293 spots

Small campgrounds · 914 spots

Then the atlas needed drive times, because "close" in BC changes if it's a fire road, or pavement. Throw in current gas prices and fuel economy too.
Next: the forecast, then smoke and fire bans, which for a good stretch of every summer decide where you can go at all. Somewhere in there the atlas stopped being an atlas.
02
What it is
A collection of camping options, ranked.
The catalogue holds every place in British Columbia you can legally spend the night: BC Parks campgrounds, the free recreation sites, Parks Canada, private grounds and the informal spots OpenStreetMap knows about.
The ranking is the product.
Give it your dates and it scores everything within reach on forecast, smoke and air quality, wildfires and fire bans, road access and the drive from your door. Want to stay in one place or road trip and complete a loop? It does that.

Beatton Provincial Park · 1,136 km · 14h 58m

Paarens Beach Provincial Park · 843 km · 11h 25m
A trip planner strings sites into a route and checks it against the vehicle you actually drive. When you're ready to book it hands you to BC Parks or the operator; it never takes the reservation or the payment.

It's deliberately not a live feed (it can't be with the current data availability). Conditions come from public sources on a refresh cycle, the app says so, and the official page gets the last word before you drive.
There's a lot of mountain biking in it too (of course there is, if you know me at all).
Once the app knew where every campsite in the province was, mapping them against the trail networks was never not going to happen. Four years running a trail association will do that to a person. If you don't ride, none of it gets in your way.

03
The data layer
The catalogue is reconciled from ten public sources: BC Parks' reservation system, Recreation Sites and Trails BC, Parks Canada, OpenStreetMap three different ways, BC Wildfire's fire zones, Statistics Canada boundaries, Open-Meteo for weather, OSRM for drive times. Seventeen scheduled jobs keep them in sync.
The whole thing refreshes daily.
Reconciliation is the unglamorous middle.
The same campground shows up in three sources under three names at three slightly different locations, and turning that into one record somebody can trust is most of the actual work. Then each site gets enriched: nearest fuel, town, lake, hot spring, trailhead, its fire zone, a cached drive time.

The fire layer was a gut call August made for me. You didn't want to be outside in Kelowna, the air was toxic.
Where to escape to?
Wildfires were burning across the province and attaching air quality and fire data to every site stopped being a nice-to-have. Then the combined data said something no single source says out loud: for a stretch of August there was nowhere in British Columbia outside the north where camping would have been even mildly pleasant.

I've done this job before at a different scale. The Global Wine Database, the one that grew out of a wine column and became a career, was the same shape: many sources, no shared keys, one reconciled record everything downstream can rely on.
It's funny how I keep coming back to these patterns.
04
The editorial layer
Data is one thing, content is another.
How do you write content for 1800 campsites, most of which you've never been to let alone heard of? Well, data.
Most of the catalogue carries a written description, and I didn't write them. A model did, inside the same agent harness that builds the app, generated from each site's verified record.
The model gets editorial guardrails, facts from the aggregated data, including looking at the images and developing its own database of information to help create useful accurate content.

The interesting part is when they get written. Every description is cached against a hash of the facts behind it. Change nothing and the prose never regenerates.
Fix a road rating or add a closure note and the hash breaks, and the site earns a new description on the next pass.
In the coach piece I wrote that the cost of LLM features is in the constraints, not the prompt. I'd sharpen that now: the constraint worth the most is the one tying generated words to the facts underneath them.
A description that can't drift from its record is the only kind I'd put in front of somebody about to drive up a logging road.
05
The watcher
The app keeps a rolling cache of site availability and when a booked-out weekend opens up it tells you.
It knows the difference between an opening that covers a weekend and one that doesn't, and it counts how often a spot has reopened, because cancellations churn.
It's currently a premium feature, which I haven't launched to the public yet; but it works and will be available soon.
The alert is plain text on purpose. It renders everywhere, markup can't trip a spam filter, and the message is a list of dates and a link. Every opening carries a booking link with the park, dates, gear and party size already filled in, because the minute this lands is the one minute speed matters.
Cancellations get retaken within hours, and "open the site, find the watch, scan again" is two hops too many.
Watch alert · 15 August 2026
06
Effort
The speed of this build is nothing short of insane.
All of it, the catalogue and the pipeline and the ranking and the watcher and accounts and reviews and an editorial voice, came out of roughly a hundred hours.
That's gut feel, but the commit history backs it up: evenings, weekends and a pace that got honestly addictive, because I was never building in the abstract. I was trying to book my own trips the whole time. Sized against how I've shipped software for twenty years, it's a year of roadmap for a small team.
The build runs as a crew of sub-agents: an orchestrator, a designer, an engineer, a tester, infrastructure monitoring humming in the background. I describe the outcome, review the work and keep the decisions.
The specification is the artifact you write and the implementation is the artifact you generate.
That inverts the last twenty years, where the code was the thing you owned and the spec was the thing that went stale in a document nobody opened.
Now the spec is load-bearing. Write a vague one and you get a confidently wrong feature.
Expensive frontier models carry the heavy work. The small open ones keep earning jobs off them and chasing those led me into the Hugging Face rabbit hole, where there's a specialist for copy, engineering, design, video and anything else you can name. I've lost whole evenings in there and shipped things I wouldn't have attempted otherwise.
Want your mind blown? Go explore image generation LLMs. Holy crap.
The other half of the leverage is instrumentation, and it's the part I'd have skipped on a side project ten years ago.
Exceptions get caught and filed in production before I notice them. Every watch scan, planner submission and alert sent is a tracked event. A survey asks real visitors what they'd miss if the thing vanished. It all lands in PostHog, which is a large part of why one person can hold this much surface area.
The loop that still gets me runs on Mondays. Google Search Console feeds into that same data warehouse, and an agent reads the week: what ran, what real people did with it, what to tweak next.
The analysis arrives and the improvements queue themselves.
The loop tunes; it doesn't steer. The big swings, like the fire layer, still start as gut calls.
Product management/design is alive and well (for now).
07
Real users this time
"When are you making this public? I want to use this!"
The fitness tracker piece ended on a boast I stand by: no auth, no users table, no billing, just me and my data. This is the opposite experiment.
A Better Camper has accounts, roles, reviews with a moderation queue, an onboarding email. All the machinery I was proud to skip, built on purpose, because the audience stopped being me. Modest amounts of security and cloud infrastructure built to scale if it needs to.

An audience of one forgives a wrong road rating, because they know which roads they've already driven.
A catalogue makes promises to people who don't know me. Some of it is still wrong: a road rated too kindly, a campground that closed without notice. Most of the fixes started as an email from somebody who trusted the site enough to correct it.
08
Two front doors
A month ago, search sent nobody here at all. It's now the front door, most people arrive through it and they stay about nine minutes.
For a utility whose whole job is to answer one question and hand you off to a government booking page, nine minutes is the number I'm proudest of. Nobody spends nine minutes anywhere by accident.
I'm careful about that number because I also watched a week where a few thousand visitors showed up out of nowhere, stayed nine seconds each and vanished. Bots.
So does SEO still matter? So far, plainly yes.
Search dwarfs everything else and the tuning is what moved it. But a second door is opening and I can already watch it: assistants send people here now. It's a rounding error next to Google, and nearly all of it arrived in the past week. Those visitors also bounce at half the rate of everyone else, which figures.
Nobody lands here from an assistant by accident.
The old playbook assumes somebody types a query, scans a page of blue links and picks one. More and more they ask a question and get an answer and the only thing that matters is whether your data is inside it.
Which happens to be the thing this app is made of. A verified record with a clean page for every site is what a crawler indexes and what an assistant quotes.
Same work, two doors and it scales.
09
What I'm learning
The fight is sprawl.
The codebase and the product grow faster than one person's context and keeping the documentation coherent is hard enough before you point an army of agents at it.
Speed multiplies output and weeds at the same rate. The agents plant faster than they weed.
Everything the app knows is built on open information. The advantage was never access. It's design. Design to improve an outcome.
Camp better.
10
What it changed
Ask me how long a feature takes to build and the number I give now is a fraction of the one I'd have given in January, and it isn't going back up. A pile of ideas I'd written off as too much work for one person moved into range this year. I've built more (outside of this) than I have in years.
Improving my life by reducing the mundane is addictive.
When a feature costs an evening instead of a sprint, "can we build it" stops being an interesting question.
What's left is whether it deserves to exist. Cutting became the work. Taste is the scarce input now.
The current timeline problem is distribution.
Building got easy. Getting anyone to know a thing exists did not. What I have is the boring asset: a verified record for every campsite in the province, refreshed daily, that a crawler can index and an assistant can quote.
If the new front door opens for whoever holds the most accurate answer, then the reconciliation nobody wants to do is the marketing.
That's the bet. Ask me in a year.
Until then: it's Thursday night, the weekend just came free, and for once I know exactly where to go.
It's at abettercamper.com. If you camp in British Columbia, use it. If you find something wrong, tell me. And if you're building on public data, or shipping a side project to its first strangers, my inbox is open.