Borough

A local, pickup, and wholesale Shopify theme for food, beverage, and neighbourhood retail.
Version 0.1.0 · Shopify Online Store 2.0 · Liquid, JSON templates, native CSS/JS


1. Purpose

Borough is built for merchants with physical locations, pickup, local delivery, and wholesale. It treats the storefront as an extension of the neighbourhood: store locator, local availability, menu board, pickup, age gating, and trade purchasing in one coherent experience.

The theme is aimed at food and beverage retailers, specialty grocery, garden centres, and local retail with 1–20 locations.

2. What is included

  • Complete Online Store 2.0 theme.
  • Local hero with store locator and pickup messaging.
  • Store locator cards with address, hours, phone, directions, and pickup links.
  • Menu board with categories, descriptions, and prices.
  • Local pickup steps and wholesale CTA.
  • Community events calendar.
  • Product page with local availability, unit note, menu availability, pickup, wholesale block, and configurable age gate.
  • Collection page with dense product cards and local availability.
  • Predictive search, cart drawer, cart page, account component, gift card, password, 404, blog, article, and contact templates.
  • Licensed Shopify Burst photography and vector fallbacks in demo/.

3. Requirements

  • Shopify store with the Online Store channel.
  • Shopify CLI 4.x or admin theme upload.
  • Shopify POS / pickup locations configured for pickup availability.
  • Optional metafields for local availability, unit note, menu availability, and age restriction.
  • A wholesale contact page or form for the wholesale CTA.

4. Installation

npx shopify theme dev --store your-store.myshopify.com --path themes/borough
npx shopify theme push --store your-store.myshopify.com --path themes/borough --unpublished

Or upload a ZIP of themes/borough in Online Store → Themes → Add theme → Upload ZIP file.

5. Configuration

Theme editor

  • Colors — warm white, deep green, tomato, mustard, kraft.
  • Typography — DM Sans headings, Libre Baskerville body.
  • Header — store selector text/link, utility message, menu.
  • Age gate — eyebrow, heading, text, confirm label, exit label.
  • Product — local availability label/fallback, age gate toggle, pickup/payment settings.
  • Homepage — local hero, store locator, featured collection, menu board, pickup steps, wholesale CTA, events, story, newsletter.

Metafields

Metafield Type Used by
custom.local_availability Single-line text Product card and product page local availability
custom.unit_note Single-line text Product page unit note
custom.menu_availability Rich text Product page menu availability
custom.age_restricted Boolean Enables the age gate for the product

Store locator

Add one Location block per store in the Store locator section. The block supports name, address, hours, phone, directions link, and pickup link. The theme does not call a maps API; directions links open the customer's map app.

Pickup

Configure pickup locations in Shopify admin (Settings → Locations and Shipping and delivery → Local pickup). The product page uses Shopify's native store_availabilities data. If none exist, the pickup block is hidden.

Age gate

  1. Create a custom.age_restricted boolean metafield on products.
  2. Set it to true for regulated products.
  3. The theme shows a configurable gate on those product pages. Confirmation is stored in sessionStorage for the browser session.
  4. The age gate is a storefront UX aid, not a legal compliance system. Merchants remain responsible for local regulations.

Wholesale

Use a page with a contact form, or a wholesale app with an app block. The theme provides the path and messaging; it does not implement tiered pricing or account approval.

6. Customisation

  • assets/theme.css — Borough art direction: local hero, store cards, menu board, pickup steps, wholesale CTA, events, age gate.
  • assets/theme.js — age gate and protected product form state; shared motion lives in assets/base.js.
  • sections/hero-local.liquid, store-locator.liquid, menu-board.liquid, local-pickup.liquid, wholesale-cta.liquid, community-events.liquid.
  • snippets/age-gate.liquid.
  • snippets/product-card.liquid — compact card with local availability.
  • locales/en.default.json — storefront strings.

7. Validation status

  • shopify theme check: 0 errors, 0 warnings at the time of writing.
  • Structural validator passes required templates, sections, JSON, and account/localization checks.
  • Live-store installation, home/product/collection/cart/search, add-to-cart, and Lighthouse home-page audits were executed on the branded demo stores. Checkout, app-dependent flows, and template-level Lighthouse runs remain unmeasured. See docs/05-validation-report.md.

8. Known limitations

  • Local availability depends on merchant-authored metafields or Shopify's pickup data; the theme does not query a separate inventory system.
  • Wholesale pricing and account approval require a wholesale app or Shopify Plus features.
  • The age gate is client-side and session-based. It is not a substitute for legal compliance or server-side verification.
  • The demo photography is licensed from Shopify Burst. The SVG illustrations remain available as offline fallbacks in demo/<theme>/images/.
  • The theme_info documentation/support URLs point to deivisoft.eu. Publish the documentation and support pages before submission.
  • One preset ships at launch. Additional presets require a /listings folder and separate demo stores.
  • Theme Store acceptance is not guaranteed.

9. Support and license

See LICENSE.md and the root THIRD_PARTY_NOTICES.md. No third-party JavaScript libraries or font files are bundled. Theme support covers bugs and documented configuration, not custom design or code.

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.