Behind the Build

How Gear Gadget Picks Your Camping Gear

Five questions go in. A complete kit comes out. Here is everything that happens in between, with nothing hidden.

Most gear sites tell you what to buy without showing their work. Gear Gadget does the opposite. The kit builder is an algorithm running against a catalog of about 50 products, with rules that map your inputs to specific picks. Both the catalog and the rules live in a public git repository at github.com/cainky/gear-gadget. If you want to skip this post and read the actual code, the entry point is src/lib/engine/build.ts.

For everyone else, here is the same logic in plain English.

The 5 Inputs and What They Do

Group size (solo, couple, family)

Drives quantities: one sleeping bag per person, one sleeping pad per person, one chair per person. Also pushes tent capacity up a notch (family of 3 picks from 4-6-person tents so you have elbow room).

Cargo space (compact, midsize, full-size)

Filters tents by packed size (compact cars get 'compact' or 'standard' packability only, never 'bulky'). Caps cooler size: a Civic gets 28-quart options; a minivan unlocks the 52-quart family coolers. Also picks chair style (compact-folding for small cars; oversized recliners for trucks).

Budget tier ($250, $450, $650)

Selects quality tier. Not a spend cap. The $450 pick is the 'mid-tier quality' kit, not 'spend $450 total.' Your actual total scales with group size (a family kit at $450 selects mid-tier products but the bill is closer to $700 because you need 4 of everything personal-sized).

Season (warm, year-round)

Sets a temperature-rating floor on sleeping bags and an R-value floor on sleeping pads. Warm means bags rated to 30-40 degrees Fahrenheit and pads with R-value 2-3. Year-round forces 20-degree bags and R-value 4+ pads (the gear gets noticeably more expensive at this floor).

Cooking (yes, no)

If yes: adds a stove to the kit and pushes cooler size up one bracket (you need room for ingredients, not just drinks). If no: skips the stove entirely, sizes the cooler for snacks and drinks only.

Tier Is Quality, Not a Spend Cap

This is the most common misconception. If you pick the $450 tier as a family of 4 and the kit total comes back at $720, that is not a bug. The picker selected mid-tier products (Coleman Sundome instead of the budget Coleman Skydome, Kelty Cosmic 20 instead of the budget Coleman Brazos) and then multiplied the per-person items by 4.

If you actually need a hard ceiling, there is a checkbox at the bottom of the form: Stick strictly to my budget. Tick it and the engine trims items in reverse priority order (chair, then lighting, then cooler, then stove) until the kit total fits the tier label. It will never trim a tent or sleeping gear, because going without shelter or warmth is not a kit, it is a regret.

When the strict cap is on and the result is still over budget, you will see a note that shelter and sleep gear alone exceed the cap. At that point the right move is up a tier, not trying to shave more.

Two-Phase Product Selection

For each slot (tent, sleeping bag, sleeping pad, cooler, chair, lighting, stove), the engine runs in two phases.

Phase 1: Curated candidates

Each slot has a hand-picked list of products in slots.json that the maintainer believes are the right call for that specific combination of inputs. The engine walks the list in order and picks the first one that meets your hard requirements (region availability, season floor, cargo cap).

Phase 2: Category fallback

If none of the curated candidates meet your requirements (often because a specific Canadian-buyable mid-tier option is out of stock), the engine searches the entire category for any product whose attributes pass your filters. Phase 2 prefers products with a Prime-eligible offer, so the fallback is still typically a fast-shipping pick.

A slot that fails both phases comes back as a 'fallback' in the response. You see a card that says What we couldn't fill with a short description of what to look for if you want to source it yourself.

Why Canadians See Fewer Products (On Purpose)

The kit builder reads cf-ipcountry from Cloudflare and routes you to either amazon.com (US) or amazon.ca (CA). For US visitors, we run a lenient policy: a product appears in your kit if it is currently or recently sold on amazon.com, even if today's inventory is out. The reasoning is that US Amazon usually restocks within days and a slightly stale option is better than no option.

For Canadian visitors, the policy is strict. A product only appears in your kit if our verifier (more on that below) confirmed within the last week that the amazon.ca listing is present with at least one buyable offer. Smaller US-only brands are excluded entirely for Canadians. The result is a smaller catalog of about 30 confirmed-buyable products instead of 50, but you never get the 'cannot be shipped to your delivery location' page that started this entire project.

The exact rules are in src/lib/affiliate/region.ts if you want to read them.

When the Kit Comes Back Partial

Some input combinations are genuinely tough. Family of 4 + compact car + budget tier + cold weather is fighting physics. Either the tent does not fit a Civic, or the cooler family-meal-sized exceeds the cargo cap, or there is no cold-rated sleeping bag at the budget tier.

When the kit fills fewer than all 6 or 7 categories, the engine runs a constraint conflict probe. It re-runs the kit build with single-axis changes (one bigger budget, one larger cargo space, milder season) and counts how many extra slots each change would unlock. The top 3 changes that unlock the most slots get surfaced as suggestion buttons at the top of the partial kit. Clicking one re-runs the build with that single input changed.

This is meaningfully better than 'sorry, no kit found.' Most partial kits become full kits with one input bump.

The Verifier That Keeps Links From Rotting

Amazon catalogs change constantly. Products go out of stock, ASINs get reused, listings move, items become regional. A static affiliate catalog will rot within months if nobody is checking. The full deep dive on this piece (with code excerpts and the 4-state classifier walked end-to-end) is at How We Verify Every Amazon Link Still Works. The short version follows.

A GitHub Actions workflow runs every Monday at 09:00 UTC. It launches a real headless Chromium browser via Playwright and visits every Amazon URL in the catalog (both amazon.com and amazon.ca). It classifies each response as one of: catalog_present, out_of_stock, not_present, or inconclusive. The results are diffed against the last clean snapshot.

If a product flipped from catalog_present to not_present, the workflow opens a GitHub issue with the drift report so a human can replace it. The verifier itself does not silently overwrite the catalog with bad data: if too many checks come back inconclusive (typically when the runner IP gets bot-detected), it aborts before writing anything.

You can run the same check locally with npm run verify:amazon-ca or just open the most recent workflow run in the Actions tab.

Why We Are Open About This

Most affiliate sites compete on volume of pages, SEO tricks, or marketing budget. We do not have those. We compete on being honest about the picks, the algorithm, and the limits.

When a comparison post on another site says 'we tested 24 tents,' that is almost always 'we read 24 Amazon listings.' When ours says 'spec-and-reviews comparison from our catalog,' that is what it is. When the kit builder picks a tent, you can trace the exact reason: it appeared in this slot's curated list with this requirement match, at this tier and region.

If you find something the engine gets wrong, the right place to flag it is a GitHub issue. We will fix it in the next deploy.

FAQ

How does Gear Gadget make money?

Amazon Associate links. When you click through to amazon.com or amazon.ca and buy something, Amazon pays us a small commission at no extra cost to you. We have separate associate accounts per storefront (geargadget04-20 for amazon.com, geargadget08-20 for amazon.ca) so commission attributes correctly. There are no sponsored placements; nobody pays us to feature their gear.

Are these affiliate links?

Yes. Every product link on the kit builder and in guides goes through /api/out, which appends our affiliate tag and redirects you to the correct regional Amazon storefront. The affiliate disclosure is on every product card and at /about#affiliate-disclosure.

How often does the product catalog update?

A Playwright-based verifier runs once a week (Monday 09:00 UTC) and visits every Amazon listing in the catalog using a real headless browser. If a product becomes unbuyable on amazon.ca, it gets removed from kits for Canadian visitors automatically. If a product becomes unbuyable on both storefronts, a GitHub issue gets opened so a human can replace it.

Can I see the code?

Yes. The project is open at github.com/cainky/gear-gadget. The selection logic is in src/lib/engine/build.ts; the regional routing is in src/lib/affiliate/; the catalog is at src/lib/data/source/products.json. Reading the source is the most precise way to understand what the kit builder does.

Why does my Canadian friend see different products than I do?

We verify every amazon.com URL has a working amazon.ca equivalent before showing it to Canadian visitors. Some products are only sold on amazon.com (especially smaller brands or US-only distributors). For Canadian visitors we exclude those products entirely so you never click 'View on Amazon' and land on a page that says 'cannot be shipped to your delivery location.'

What happens if my inputs are too restrictive?

If we can't fill every category (e.g. small cargo + family + budget tier + cold weather is a tough combination), the kit comes back partial. You'll see 'Partial Kit' at the top with what we filled, plus 'What we couldn't fill' showing the categories we missed. Below that, the engine probes single-axis changes (one bigger budget? one larger cargo? warmer season?) and suggests the change that would fill the most extra slots.

Try It

The fastest way to see all of this in action is to run the builder for your own situation.

Build My Kit