Camber
A build-aware fitment and off-road parts theme for trucks, 4x4s, and trail builds.
Version 0.1.0 · Shopify Online Store 2.0 · Liquid, JSON templates, native CSS and JavaScript
1. Purpose
Camber is built for the customer who has already changed the truck. The buying anxiety is not “which part looks good?” It is “will this fit with my lift, tire size, drive type, and year?”
The signature interaction is the Build Garage. The customer saves year, make, model, lift, tire size, and drive type in localStorage. Every product card, the collection page, and the product signature compare that build with merchant-entered fitment ranges. The result is a stock fit, modified fit, no fit, or an honest “check fit” state.
The visual language is a trail-garage field manual: steel panels, dust paper, trail orange, tread strips, part numbers, clipped corners, and technical spec cards. It is rugged, not a neon tuner shop.
2. What is included
- Complete Online Store 2.0 theme: JSON templates, sections, blocks, header and footer section groups.
- Build-led home page: hero with a live build selector, build garage, six category tiles, “Fits your build” featured shelf, build gallery, installation guides, FAQ, and newsletter.
- Build Garage: native Liquid + vanilla JS, localStorage build, shared selectors, build summary, build stage, and no-JS fallback.
- Fitment signature: stock/modified ranges, fit status, current build, clearance and install notes, OEM cross-reference, and a check-fit form.
- Product cards with fit badge, part number, build stage, and a fitment note.
- Collection page with a saved-build bar, Fits my build toggle, native filters, product grid, and empty state.
- Cart drawer, predictive search, account component, gift card, password, 404, blog, article, page, contact, and search templates.
- Product recommendations and an optional complementary-products block.
- Responsive images, keyboard access, visible focus, reduced-motion support, and semantic landmarks.
- Six licensed Shopify Burst product photos, two landscape photos, and a 14-variant, 6-product demo CSV in
demo/camber/. - Theme editor settings for colors, typography, layout, build option lists, product cards, social links, and SEO.
3. Requirements
- A Shopify store with the Online Store channel.
- A Shopify plan that supports the features you want to use (selling plans, pickup, markets).
- Shopify CLI 4.x for local development, or the Shopify admin upload workflow.
- A development store is strongly recommended before publishing.
4. Installation
Option A — Shopify CLI
npx shopify theme dev --store your-store.myshopify.com --path themes/camber
To upload an unpublished theme:
npx shopify theme push --store your-store.myshopify.com --path themes/camber --unpublished
Option B — Admin upload
- Create a ZIP of the
themes/camberdirectory (do not zip the parent folder). - In Shopify admin, go to Online Store → Themes → Add theme → Upload ZIP file.
- Preview the theme, then publish when ready.
5. Configuration
Theme editor
Open Online Store → Themes → Customize. The main settings are:
- Colors — surface
#F2EEE8, steel#2B2F33, dust#C9C1B6, trail orange#D9682C, ink#14171A. - Typography — Space Grotesk headings, Work Sans body, base size, and heading scale.
- Layout — page width, section spacing, corner radius, and the dust/tread texture.
- Build selector — year, make, model, lift, tire diameter, and drive type lists; fitment help link.
- Product cards — part number, fit badge, and build stage.
- Social media — profile URLs used by the footer.
- SEO — social share image and favicon.
Trail orange is used for fills and borders. Small orange text on the light surface uses the darker #A3471C, and orange text on steel uses #F29A6B.
Build selector lists
The build garage, hero, header panel, and product check-fit panel all read from the global option lists:
- Years — one per line.
- Makes — one per line.
- Models — one per line.
- Lifts — one per line, in inches.
- Tire diameters — one per line, in inches.
- Drive types — one per line.
The build is saved under camber-build in localStorage. It is a guest, per-device profile. There is no app, remote API, or customer-account sync.
The header build chip opens the compact selector on every page. The hero and build garage provide the same form on the home page. The product signature includes a check-fit form. All forms update together.
Without JavaScript, the build forms are hidden and a fitment-desk fallback link is shown. The product cards keep their neutral Check fit state, and the collection fit toggle is hidden.
Build garage
The home page build garage shows the current build, a derived build stage (Stock or Modified), the full selector, a clear action, a “Shop what fits” link, and a fitment guide link when configured. Clearing the build resets every summary, badge, and toggle on that page.
The build comparison uses only merchant-entered data. It does not contain a vehicle database and does not promise fitment.
Fitment signature
snippets/product-signature.liquid reads:
| Metafield | Type | Used by |
|---|---|---|
custom.part_number |
Single-line text | Card, product meta, signature |
custom.build_stage |
Single-line text | Card stage and signature |
custom.fit_universal |
Boolean | Universal fitment |
custom.fit_makes |
Single-line text | Vehicle match |
custom.fit_models |
Single-line text | Model match |
custom.fit_drives |
Single-line text | Drive match |
custom.fit_year_min |
Number (integer) | Year range |
custom.fit_year_max |
Number (integer) | Year range |
custom.fit_stock_lift |
Number (decimal) | Stock lift maximum |
custom.fit_stock_tire |
Number (decimal) | Stock tire maximum |
custom.fit_modified_lift |
Number (decimal) | Modified lift maximum |
custom.fit_modified_tire |
Number (decimal) | Modified tire maximum |
custom.clearance_notes |
Multi-line text | Clearance guidance |
custom.install_notes |
Multi-line text | Install guidance |
custom.oem_cross_reference |
Single-line text | OEM/cross-reference |
The fit comparison is:
- No saved build → Set your build.
- No fitment data → Check fit.
- Universal product → Stock fit.
- Make, model, drive, and year must match.
- Within stock lift and tire maxima → Stock fit.
- Within modified maxima → Fits with mods.
- Outside both → Does not fit.
0 means zero inches, not “no limit”. Use fit_universal for universal products. The product signature hides the fitment panel when no fitment data exists, keeps the notes/OEM when they do, and never claims guaranteed fitment.
Product page
The product page shows the part number, build stage, fit badge, price, product form, description, pickup, sharing, and the fitment signature. The signature includes the current build, stock and modified maxima, fit scope, a check-fit form, clearance notes, install notes, OEM reference, and the fitment disclaimer.
Collection page
The collection masthead shows the collection image, title, description, count, saved build, and a Fits my build toggle. Turning the toggle on hides parts whose current status is not Stock or Modified. The toggle requires a saved build; without one it explains how to set the build and leaves the shelf intact.
Native filters can cover vehicle, build stage, lift, tire size, drive type, and engine through product tags. The fit toggle is an additional client-side comparison.
Category and home sections
The home page includes six category tiles, a featured “Fits your build” shelf, a three-build gallery, installation guides from a blog, a fitment FAQ, and a newsletter. All section copy and collections are editor settings.
Demo catalog
demo/camber/products.csv contains six products and fourteen variant rows. The fictional demo build is 2019 Northbend Ridge / 2 in lift / 33 in tires / 4WD.
With that build saved:
- Suspension kit — Fits with mods.
- Wheel — Stock fit.
- Tire — Fits with mods.
- Skid plate — Does not fit (2015–2018 only).
- Recovery strap — Stock fit (universal).
- Roof rack — Fits with mods.
The full import order, tags, collections, filters, pages, menus, and test script are in demo/camber/README.md.
6. Customisation
- Design tokens — edit
config/settings_schema.jsondefaults or use the theme editor. CSS variables are generated insnippets/css-variables.liquid. - Theme CSS —
assets/theme.csscontains the trail-garage art direction.assets/base.csscontains shared commerce mechanics and content utilities. - Theme JavaScript —
assets/base.jscontains shared cart, search, header, media, and motion behavior.assets/theme.jscontains the build garage, fit comparison, collection toggle, and gift-card recipient. - Sections — add or duplicate sections in
sections/. Each section has a{% schema %}block. - Product page blocks — reorder or hide description, form, complementary products, custom liquid, app blocks, and the fitment signature.
- Translation — edit
locales/en.default.json. - Icons —
snippets/icon.liquidcontains original SVG paths.
7. Validation status
npx shopify theme check --path themes/camber --fail-level error: 0 offenses in the final run.node tools/validate-themes.mjs: all structural checks passed with Camber in the portfolio scan.- Live-store installation, build persistence, cart behavior, filters, fitment comparisons, checkout, and Lighthouse were not executed in this environment. Run the commands in section 8 on a development store before submission.
8. Pre-launch checklist
npx shopify theme check --path themes/camber --fail-level error
node tools/validate-themes.mjs
npx shopify theme dev --store your-store.myshopify.com --path themes/camber
Then verify on the development store:
- Save and clear a build in the header panel, hero, build garage, and product check-fit panel.
- Confirm the build summary follows the home, product, collection, and footer.
- Check every fit status against the metafields and the demo build.
- Turn Fits my build on and off; confirm the empty state and no-build prompt.
- Product form, variant selection, price, compare-at price, media, add to cart, pickup, and accelerated checkout.
- Cart page and drawer quantities, remove, note, discounts, selling plans, and drawer refresh.
- Search results, no results, predictive search, sort, filter, and query preservation.
- Gift card recipient toggle and hidden fields.
- Mobile header, build panel, menu, search, cart, and horizontal overflow at 390×844.
- Heading order, keyboard access, focus states, plural labels, and reduced motion.
9. Known limitations
- The build profile is local to the browser and device. It does not sync to a customer account.
- Fitment is merchant-entered data, not a full vehicle database. It cannot see tire brand, actual ride height, worn bushings, or local inspection rules.
0means zero inches. Universal products must usefit_universal; the theme does not treat zero maxima as “unlimited”.- The collection fit toggle filters only the products already loaded on the current collection page. Use the native filters for the broader catalog.
- Fitment is not a guarantee, alignment plan, or safety approval. The signature says so.
- The demo images use licensed Shopify Burst photography. Original SVG product art remains in
demo/camber/images/as offline fallbacks. - The
theme_infodocumentation and support URLs point todeivisoft.eu. Publish those pages before submission. - The theme ships one preset. Additional presets require a
/listingsfolder and separate demo stores. - Shopify Theme Store acceptance is not guaranteed. Review the current requirements and test on a development store before submitting.
10. Support and license
See LICENSE.md for the commercial license terms. See the repository root THIRD_PARTY_NOTICES.md for third-party components. This theme does not bundle third-party JavaScript libraries or font files.
For support, use the contact channel defined by the seller. Theme support covers theme bugs and documented configuration; it does not include custom design or code changes.
FAQ
How do I install the theme?
Install the ZIP from the Theme Store or upload it under Online Store → Themes → Add theme → Upload ZIP file. Then publish or preview the theme.
Does the theme require apps?
No. The core experience uses native Shopify features. App blocks are available for optional integrations such as reviews, subscriptions, or wholesale pricing.
How do I get support?
Use the support form. Include your store URL, theme name, and a description of the issue. We reply within two business days.
How do updates work?
Theme Store purchases include updates. Download the latest version from the Theme Store or your Shopify admin and apply it to a duplicate of your theme before publishing.