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
- Create a
custom.age_restrictedboolean metafield on products. - Set it to
truefor regulated products. - The theme shows a configurable gate on those product pages. Confirmation is stored in
sessionStoragefor the browser session. - 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 inassets/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_infodocumentation/support URLs point todeivisoft.eu. Publish the documentation and support pages before submission. - One preset ships at launch. Additional presets require a
/listingsfolder 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.