Selvedge
A project-first Shopify theme for craft supply stores.
Version 0.1.0 · Shopify Online Store 2.0 · Liquid, JSON templates, native CSS and JavaScript
1. Purpose
Selvedge is built for stores that sell materials for a specific making project: fabric shops, yarn stores, quilting suppliers, pattern makers, and notions shelves. The buying model is project-based. The customer chooses a project, size, and materials, and the theme turns that into a complete cart.
The signature interaction is the Project Builder. A second native calculator on the product page answers “How much do I need?” from product metafields or block settings. Neither feature uses an app, a remote API, or a third-party script.
2. What is included
- Complete Online Store 2.0 theme: JSON templates, sections, blocks, header and footer section groups.
- Project-led home page: split project hero, four project tiles, stash staples, project builder, method, studio story, FAQ, and newsletter.
- Project Builder with project blocks, size multipliers, material lists, and one-step cart add through
/cart/add.js. - Product page with a native fiber card, dye-lot and care notes, substitution guidance, quantity calculator, and “Add all materials” path.
- Swatch-forward product cards with fiber, weight, and project-use labels.
- Collection page with a swatch grid, native sorting and filtering, active filter pills, pagination, and an empty state.
- Predictive search, cart drawer, cart page, account component, gift card, password, 404, blog, article, and contact templates.
- Responsive image strategy, keyboard access, visible focus, reduced-motion support, and semantic landmarks.
- Theme editor settings for colors, typography, layout, product cards, social links, and SEO.
- Licensed Shopify Burst photography (six product squares, two landscapes) and an importable six-product CSV in
demo/selvedge/.
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/selvedge
To upload an unpublished theme:
npx shopify theme push --store your-store.myshopify.com --path themes/selvedge --unpublished
Option B — Admin upload
- Create a ZIP of the
themes/selvedgedirectory (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 — paper, ink, rust, surface, rule, and muted text.
- Typography — Archivo headings, Work Sans body, base size, heading scale.
- Layout — page width, section spacing, corner radius, worktable grid lines.
- Product cards — vendor visibility, fiber and weight, project label, swatch shape.
- Social media — profile URLs used by the footer.
- SEO — social share image and favicon.
Home page sections
The default index.json composes:
- Project hero
- Project tiles
- Stash staples
- Project builder
- How it works
- Studio story
- FAQ
- Newsletter
Every section can be reordered, hidden, or duplicated in the editor. The project hero and project builder are the two pieces that define the buying model.
Project Builder
The builder is a section made of Project blocks. Each block accepts:
| Setting | Purpose |
|---|---|
| Project name | The label shown on the selector and in the cart property. |
| Pattern or product | The primary product added with the project. |
| Size label | The size shown to the customer, for example Size M or Throw · 12 fat quarters. |
| Base quantity | The primary product quantity at the base size. |
| Size multiplier | Multiplies the base quantity for the selected size. Use 1 for one size. |
| Material quantity | The quantity of each listed material, before the size multiplier. |
| Material handles | Comma-separated product handles, for example sashiko-thread,mend-patch-kit. |
The primary quantity is ceil(base quantity × size multiplier). Each material quantity is ceil(material quantity × size multiplier). The builder renders every project server-side, then uses vanilla JavaScript to switch panels, update the hidden variant and quantity inputs, and post the complete item list to /cart/add.js. Each line item receives Project and Size properties, which the cart renders automatically.
Limitation: every listed material in a block uses the same material quantity. A merchant who needs different quantities per material should use separate blocks, or add a note in the product description. This keeps the block schema small and the demo data importable. With JavaScript disabled, the form posts the primary product only; it is a working no-JS fallback, not the full builder.
Quantity calculator
The calculator is rendered by snippets/product-signature.liquid inside the Fiber card and calculator block on the product template.
It reads:
custom.yield_per_unit— how many units one package, skein, spool, or metre yields.custom.yield_unit— the unit label, for examplemetres.custom.package_label— the plural label for the result, for exampleskeins.custom.package_label_singular— the singular label for a result of one, for exampleskein.custom.size_yardage— size and units inLabel=unitspairs separated by semicolons, for exampleSmall=2.5;Medium=3.5;Large=4.5.
The formula is ceil(units needed ÷ yield per unit). The result updates the product form quantity input, and the Use this quantity button scrolls to the add-to-cart button.
Block settings provide fallbacks for yield, yield unit, quantity label, and size data. If no yield is available from either the metafield or the block, the calculator is hidden. If no size data exists, the units input still works on its own.
Add all materials
The Project materials block reads custom.materials as a comma-separated list of product handles. It renders the available variants, then adds the selected product quantity and one of each available material through /cart/add.js. Unavailable materials are skipped and marked. The block hides itself when the metafield is empty.
Optional metafields
The theme works without metafields. These are optional enhancements:
| Metafield | Type | Used by |
|---|---|---|
custom.fiber |
Single-line text | Product card, fiber card |
custom.weight |
Single-line text | Product card, fiber card |
custom.yardage |
Single-line text | Fiber card |
custom.dye_lot |
Single-line text | Fiber card |
custom.care |
Multi-line text | Fiber card care note |
custom.substitution |
Multi-line text | Fiber card substitution note |
custom.yield_per_unit |
Number (decimal) | Quantity calculator |
custom.yield_unit |
Single-line text | Quantity calculator |
custom.package_label |
Single-line text | Quantity calculator result |
custom.package_label_singular |
Single-line text | Quantity calculator result for one |
custom.size_yardage |
Single-line text | Quantity calculator sizes |
custom.materials |
Single-line text | “Add all materials” block |
custom.project_use |
Single-line text | Product card project label |
custom.complementary_products |
List of product references | Complementary products block |
Metafield definitions are not required. Create them in Settings → Custom data if you want to use the related features.
Recommended content
- Collections:
stash-staples,garment-projects,quilt-projects,bag-projects,mend-projects. - Pages: About, Project guide, Contact (use the
page.contacttemplate), Shipping. - Menus:
main-menu,footer,customer-account-main-menu. - Native filters: configure Project, Fiber, Weight, and Skill level in the Search & Discovery app. The demo CSV uses tags such as
project-garment,fiber-linen,weight-midweight, andskill-beginner. - Two articles so the blog and article templates are testable.
6. Customisation
- Design tokens — edit
config/settings_schema.jsondefaults or use the theme editor. CSS variables are generated insnippets/css-variables.liquidand rendered in the theme, password, and gift card layouts. - Theme CSS —
assets/theme.csscontains the Selvedge art direction.assets/base.csscontains shared commerce mechanics and content utilities. - Theme JavaScript —
assets/base.jscontains shared cart, search, header, and motion behavior.assets/theme.jscontains the project builder, materials add, and quantity calculator. - Sections — add or duplicate sections in
sections/. Each section has a{% schema %}block. - Product page blocks — reorder or hide blocks in the theme editor. The purchase form is a block, so it can be positioned directly after the fiber card.
- Translation — edit
locales/en.default.json. The theme usestfilters for storefront strings. - Icons —
snippets/icon.liquidcontains original SVG paths. Add a newwhenbranch for new icons.
7. Validation status
shopify theme check --path themes/selvedge --fail-level error: 0 offenses (see the final validation run).node tools/validate-themes.mjs: required files, JSON, section references, render references, account component, localization, and Follow on Shop checks pass for Selvedge.- Live-store installation, checkout, project-builder cart behavior, pickup, selling plans, 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/selvedge --fail-level error
node tools/validate-themes.mjs
npx shopify theme dev --store your-store.myshopify.com --path themes/selvedge
Then verify on the development store:
- Project builder: select each project, confirm the materials list and total, add to cart, confirm project and size properties in the drawer.
- Calculator: open a product with yield data, change size and units, confirm the quantity input updates.
- Add all materials: confirm the selected product and listed materials appear in the bag, and unavailable materials are skipped.
- Variant selection, price, compare-at price, unit price, media, and add-to-cart state.
- Cart page and drawer quantities, remove, note, discounts, selling plans, and accelerated checkout.
- Search results, no results, predictive search, sorting, filtering, and query preservation.
- Gift card recipient toggle and hidden fields.
- Mobile header, menu, search, cart, and horizontal overflow at 390×844.
- Heading order, keyboard access, focus states, and plural labels.
9. Known limitations
- Live demo store:
selvedge-cdzsjn40.myshopify.com(passworddemo2026). Screenshots and listing copy live intheme-store/. - The demo catalog uses licensed Shopify Burst photography. Original SVGs remain in
demo/selvedge/images/as offline fallbacks. - The project builder uses a uniform material quantity per block. Use separate blocks for different quantities.
- The calculator depends on merchant data. Without
custom.yield_per_unit, it hides rather than guessing. - 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.