Custom templates allow you to create unique layouts and designs for specific types of content within your Hydrogen storefront, similar to Shopify’s theme templates but fully integrated with Weaverse’s visual builder.
Step 1: Creating a Custom Template in Weaverse Studio
Open Weaverse Studio.
In the Studio topbar, click the page navigation dropdown.
Choose the resource group you want, such as Products, then click Create template. The selected group determines the template type.
Enter the Template name (e.g., Product - Preorder, Collection - Lookbook Grid) and select an existing template under Based on, if available.
Optionally select resources under Assignments, or leave it empty to create a draft.
Click Create template or Create draft as shown. The new template starts with the selected base template’s content, rather than necessarily starting blank.
Step 2: Assigning the Template to a Shopify Resource
Once your custom template is created, it will open in Weaverse Studio. You can then assign it to specific Shopify resources (like products or collections) directly within the Studio:
Locate Assignment Options: You have two main ways to open the template assignment panel:
Left Panel: In the left-hand panel, under the template name, find the Assign button next to “Custom template”.
Settings Panel (Right): Alternatively, look for the Template assignments button in the Settings panel on the right side of the Studio. It might be grouped under sections like “Layout”.
Open Assignment Panel: Click either the Assign button or the Template assignments button.
Select Resources: A panel will appear displaying a list of available resources (e.g., products) that match the template type. Check the box next to each resource you want to apply this custom template to.
Save Assignments: After selecting the resources, click the main Save button in the Studio’s top bar to save your template assignments.
Now, whenever a visitor views one of the assigned resources on your live storefront, Hydrogen will need to load the data associated with this specific custom template instead of the default one.
Step 3: Configuring Hydrogen Routing for Custom Templates
Good news! You do not need to add complex logic to your Hydrogen route loaders to handle custom templates. Weaverse automatically detects if a custom template has been assigned to a resource (like a product or collection) based on the assignments you configured in Step 2.As long as your route loader calls context.weaverse.loadPage() with the correct type and handle, Weaverse will return the data for the assigned custom template if one exists, or fall back to the default template data otherwise.Standard Loader Logic (Example for Products):Your loader should look similar to the standard implementation, focusing on fetching Shopify data and then calling loadPage. Pilot’s product route already does this — it lives at app/routes/products/product.tsx and is registered in app/routes.ts as route(":productHandle", "routes/products/product.tsx") inside the products prefix.
// app/routes/products/product.tsx// Registered in app/routes.ts — a file under app/routes/ is not a route by itself.import type { LoaderFunctionArgs } from "react-router";import { CACHE_DEFAULT } from "~/utils/cache";import { unwrapStorefront } from "~/utils/storefront";import { validateWeaverseData, WeaverseContent } from "~/weaverse";// ... other imports (PRODUCT_QUERY, etc.)export async function loader({ params, context }: LoaderFunctionArgs) { const { productHandle } = params; const { storefront, weaverse } = context; // 1. Fetch product data from Shopify. `storefront.graphql` returns // `{ data, errors }`; `unwrapStorefront` throws on errors, so wrap it // in try/catch if you need to. const { product } = unwrapStorefront( await storefront.graphql(PRODUCT_QUERY, { variables: { handle: productHandle /* ... */ }, cache: CACHE_DEFAULT, }), ); if (!product) { throw new Response(null, { status: 404 }); } // 2. Load Weaverse Page Data (Handles Custom Templates Automatically) // Simply provide the type and handle. Weaverse checks for assignments. const weaverseData = await weaverse.loadPage({ type: "PRODUCT", handle: productHandle, }); // 3. `loadPage()` returns `WeaverseLoaderData | null` — on failure it // resolves to `null` rather than throwing, so a try/catch around it // would never fire. Check the result instead; Pilot's // `validateWeaverseData` helper throws a 404 for a missing page. validateWeaverseData(weaverseData); // 4. Return all necessary data (a plain object — no `json()`) return { product, weaverseData /* ... other data */ };}export default function ProductRoute() { // Render <WeaverseContent /> using data from useLoaderData() // ... return <WeaverseContent />;}
Key Takeaway: The crucial part is ensuring you always pass the correct handle (e.g., product handle, collection handle) to weaverse.loadPage(). Weaverse uses this handle to look up assignments internally.
Step 4: Customizing the Template in Weaverse Studio
Once created and assigned, you customize the template visually:
Open the custom template in Weaverse Studio (select it from the template list).
Click Add Section to add banners, product details blocks, related items, etc.
Configure section settings, layouts, and styles specifically for this template.
Important: Sections added here define the structure for all resources using this template. Content specific to the resource (like product title, images) will populate automatically based on the data passed from the loader.
Use global theme settings and reuse global sections for consistency, or create unique sections just for this template.
Save and Publish the template in Weaverse Studio. Preview it by visiting a resource assigned to this template on your storefront.
Naming: Use clear, descriptive names for your templates (e.g., Product - Landing Page Style, Collection - Minimal Grid).
Scope: Use custom templates when you need a distinct layout for multiple items of the same type. For one-off pages or unique routes, consider a Custom Page.
Organization: Keep your template list tidy. Delete unused templates.
Consistency: Leverage global sections and theme settings where possible to maintain brand consistency even within custom templates.
Verify the template is correctly assigned to the resource (check Metafield value or assignment setting).
Ensure the template is Published in Weaverse Studio.
Double-check the Hydrogen route loader logic – is it correctly identifying the assigned template and calling loadPage with the right parameters?
Check for typos in template handles/IDs entered in Metafields.
Clear browser cache or test in incognito mode.
Sections Missing/Incorrect:
Confirm sections were added and saved to the template in Weaverse Studio.
Check if the necessary data is being passed from the loader if sections rely on it (e.g., ensure the product object is available).
Ensure there are no JavaScript errors in the browser console related to rendering.
Last modified on November 10, 2026
Was this page helpful?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Weaverse","colors":{"primary":"#246aff","light":"#599aff","dark":"#1e40af"},"logo":{"light":"https://mintcdn.com/weaverse/UqDg35noNYU1xQJr/logo/light.svg?fit=max\u0026auto=format\u0026n=UqDg35noNYU1xQJr\u0026q=85\u0026s=03570de959edb471a7177f81be24d246","dark":"https://mintcdn.com/weaverse/UqDg35noNYU1xQJr/logo/dark.svg?fit=max\u0026auto=format\u0026n=UqDg35noNYU1xQJr\u0026q=85\u0026s=37c6ba54acdc2f2fec124b27d05ac379","href":"https://weaverse.io"},"favicon":"https://mintcdn.com/weaverse/EOrmVdYBR-QCAvXJ/favicon.ico?fit=max\u0026auto=format\u0026n=EOrmVdYBR-QCAvXJ\u0026q=85\u0026s=fee3d7a85f68c8b9e62d849017c3c087","api":{"playground":{"display":"interactive"},"examples":{"defaults":"required","languages":["curl","javascript","python"]}},"navbar":{"links":[{"href":"https://weaverse.io","label":"Weaverse.io"},{"href":"https://github.com/weaverse","label":"GitHub"},{"href":"https://wvse.cc/weaverse-slack","label":"Community"}],"primary":{"type":"button","label":"Studio","href":"https://studio.weaverse.io/dashboard"}},"footer":{"socials":{"x":"https://x.com/WeaverseIO","github":"https://github.com/weaverse","slack":"https://wvse.cc/weaverse-slack"}},"seo":{"metatags":{"og:site_name":"Weaverse Docs","twitter:site":"@WeaverseIO","keywords":"Weaverse, Shopify Hydrogen, headless commerce, visual page builder, React Router, Next.js"},"organization":{"name":"Weaverse","url":"https://weaverse.io","logo":"https://docs.weaverse.io/logo/light.svg","sameAs":["https://github.com/weaverse","https://x.com/WeaverseIO","https://wvse.cc/weaverse-slack"]}},"integrations":{"posthog":{"apiKey":"phc_BnZAhY8ELZCZukEErb6ab9T7txSsMolcgGIIhMj5oSP","apiHost":"https://posthog.weaverse.io"}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","add-mcp","download-spec","cursor","vscode"],"display":"header"},"thumbnails":{"preset":"headline","appearance":"dark"},"metadata":{"timestamp":true},"markdown":{"instructions":["Weaverse component configuration uses `settings`. `inspector` is deprecated; never generate it.","Weaverse Hydrogen themes use React Router v7: import from `react-router`, never `react-router-dom` or `@remix-run/*`.","Before using any code sample, read `@weaverse/hydrogen` in the project's `package.json`: 6.x and 5.x import from different entries and use different type names, so code for one does not build on the other.","`@weaverse/hydrogen` 6 (Shopify Hydrogen 2026.10 and later, the version these docs show) imports from `@weaverse/hydrogen/react-router` and uses `Weaverse*` types such as `WeaverseComponentProps`, `WeaverseComponentLoaderArgs` and `WeaverseComponentSchema`; the root `@weaverse/hydrogen` entry only exports `createSchema()`, data helpers and types.","`@weaverse/hydrogen` 5.x (Hydrogen 2026.4 and earlier) imports everything from `@weaverse/hydrogen` and uses `HydrogenComponentProps`, `ComponentLoaderArgs` and `HydrogenComponentSchema`. On a 5.x project, convert samples to these names. Upgrade to 6 only when asked (`npx @weaverse/cli@latest migrate v6`, plus the Hydrogen 2026.10 upgrade). Do not mix major versions.","Next.js themes use `@weaverse/hydrogen` 6.2.0 or later: import client and shared code from `@weaverse/hydrogen/next` and server-only code from `@weaverse/hydrogen/next/server`. `@weaverse/next` is deprecated; never install or import it.","For live project data (pages, theme settings, translations), use the Weaverse MCP server: https://weaverse.io/docs/developer-tools/weaverse-mcp"]},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"weaverse","hasAudioNarration":false,"actualSubdomain":"weaverse","customDomains":["weaverse.io"],"gitSource":{"type":"github","owner":"weaverse","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"feedback":{"thumbs":true},"entitlements":{},"buildId":"6af5837551057243856f5731","clientVersion":"0.0.4117","searchFilterCounts":[{"language":"default","tag":"Content API","count":54},{"language":"default","tag":"React Router","count":43},{"language":"default","tag":"Guides","count":42},{"language":"default","tag":"Ecosystem","count":22},{"language":"default","tag":"Next.js","count":21},{"language":"default","tag":"SDKs","count":18},{"language":"default","tag":"Drafts and publishing","count":12},{"language":"default","tag":"Hooks","count":10},{"language":"default","tag":"Help \u0026 Community","count":10},{"language":"default","tag":"Building Components","count":7}]},"assistantConfig":{},"basePath":"/docs","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"features/custom-templates","slug":"/features/custom-templates","pageMetadata":{"title":"Custom Templates","description":"Create and assign unique templates for products, collections, pages, and blogs in your Hydrogen storefront using Weaverse.","published":true,"href":"/features/custom-templates"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Create and assign unique templates for products, collections, pages, and blogs in your Hydrogen storefront using Weaverse.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={code:`code`,em:`em`,hr:`hr`,img:`img`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,OptimizedImage}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);return _jsxs(_Fragment,{children:[_jsx(Heading,{level:`1`,id:`custom-templates-in-weaverse`,children:`Custom Templates in Weaverse`}),`\n`,_jsx(_components.p,{children:`Custom templates allow you to create unique layouts and designs for specific types of content within your Hydrogen storefront, similar to Shopify’s theme templates but fully integrated with Weaverse’s visual builder.`}),`\n`,_jsx(Heading,{level:`2`,id:`overview`,children:`Overview`}),`\n`,_jsxs(_components.p,{children:[`Unlike `,_jsx(_components.strong,{children:`Custom Pages`}),` which create entirely new routes, `,_jsx(_components.strong,{children:`Custom Templates`}),` override the default layout for existing Shopify resource types. Use them to:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Create distinct designs for specific products (e.g., a pre-order layout).`}),`\n`,_jsx(_components.li,{children:`Design unique collection pages (e.g., a lookbook style).`}),`\n`,_jsx(_components.li,{children:`Apply special layouts to certain standard pages or blog posts/articles.`}),`\n`,_jsx(_components.li,{children:`Maintain consistent branding while tailoring the user experience for specific content.`}),`\n`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Supported Template Types:`})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Product`}),`\n`,_jsx(_components.li,{children:`Collection`}),`\n`,_jsx(_components.li,{children:`Page (Standard Shopify Pages)`}),`\n`,_jsx(_components.li,{children:`Blog`}),`\n`,_jsx(_components.li,{children:`Article`}),`\n`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`prerequisites`,children:`Prerequisites`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Familiarity with Weaverse Studio and Hydrogen development.`}),`\n`,_jsx(_components.li,{children:`Weaverse Hydrogen package integrated into your storefront.`}),`\n`,_jsx(_components.li,{children:`Understanding of Shopify resources (Products, Collections, etc.).`}),`\n`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`step-1-creating-a-custom-template-in-weaverse-studio`,children:`Step 1: Creating a Custom Template in Weaverse Studio`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Open `,_jsx(_components.strong,{children:`Weaverse Studio`}),`.`]}),`\n`,_jsx(_components.li,{children:`In the Studio topbar, click the page navigation dropdown.`}),`\n`,_jsxs(_components.li,{children:[`Choose the resource group you want, such as `,_jsx(_components.strong,{children:`Products`}),`, then click `,_jsx(_components.strong,{children:`Create template`}),`. The selected group determines the template type.`]}),`\n`,_jsxs(_components.li,{children:[`Enter the `,_jsx(_components.strong,{children:`Template name`}),` (e.g., `,_jsx(_components.code,{children:`Product - Preorder`}),`, `,_jsx(_components.code,{children:`Collection - Lookbook Grid`}),`) and select an existing template under `,_jsx(_components.strong,{children:`Based on`}),`, if available.`,`\n`,_jsx(OptimizedImage,{src:`https://mintcdn.com/weaverse/6CZovEr06L6Ob7kB/images/custom-templates/create-page-template-dialog.png?fit=max\u0026auto=format\u0026n=6CZovEr06L6Ob7kB\u0026q=85\u0026s=1441ead189285d0398dcda118a413c5a`,alt:`Create page template dialog with product assignments`,\"data-og-width\":`1136`,width:`1136`,\"data-og-height\":`1334`,height:`1334`,\"data-path\":`images/custom-templates/create-page-template-dialog.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/weaverse/6CZovEr06L6Ob7kB/images/custom-templates/create-page-template-dialog.png?w=280\u0026fit=max\u0026auto=format\u0026n=6CZovEr06L6Ob7kB\u0026q=85\u0026s=f1857c8525f78058b9d2f279df1f642d 280w, https://mintcdn.com/weaverse/6CZovEr06L6Ob7kB/images/custom-templates/create-page-template-dialog.png?w=560\u0026fit=max\u0026auto=format\u0026n=6CZovEr06L6Ob7kB\u0026q=85\u0026s=35c16a1242e1d93bec7e1a6824d4efae 560w, https://mintcdn.com/weaverse/6CZovEr06L6Ob7kB/images/custom-templates/create-page-template-dialog.png?w=840\u0026fit=max\u0026auto=format\u0026n=6CZovEr06L6Ob7kB\u0026q=85\u0026s=5f7054c7573c7a4cd5ca5177501e55fd 840w, https://mintcdn.com/weaverse/6CZovEr06L6Ob7kB/images/custom-templates/create-page-template-dialog.png?w=1100\u0026fit=max\u0026auto=format\u0026n=6CZovEr06L6Ob7kB\u0026q=85\u0026s=a6d21b3733c9d916d41d83a9809a49e7 1100w, https://mintcdn.com/weaverse/6CZovEr06L6Ob7kB/images/custom-templates/create-page-template-dialog.png?w=1650\u0026fit=max\u0026auto=format\u0026n=6CZovEr06L6Ob7kB\u0026q=85\u0026s=dfb3bda5eb75c40bba24056d16b4102a 1650w, https://mintcdn.com/weaverse/6CZovEr06L6Ob7kB/images/custom-templates/create-page-template-dialog.png?w=2500\u0026fit=max\u0026auto=format\u0026n=6CZovEr06L6Ob7kB\u0026q=85\u0026s=69cbba01b14c50f44f7fbe66b6a3b994 2500w`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`Optionally select resources under `,_jsx(_components.strong,{children:`Assignments`}),`, or leave it empty to create a draft.`]}),`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`Create template`}),` or `,_jsx(_components.strong,{children:`Create draft`}),` as shown. The new template starts with the selected base template’s content, rather than necessarily starting blank.`]}),`\n`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`step-2-assigning-the-template-to-a-shopify-resource`,children:`Step 2: Assigning the Template to a Shopify Resource`}),`\n`,_jsx(_components.p,{children:`Once your custom template is created, it will open in Weaverse Studio. You can then assign it to specific Shopify resources (like products or collections) directly within the Studio:`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Locate Assignment Options:`}),` You have two main ways to open the template assignment panel:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Left Panel:`}),` In the left-hand panel, under the template name, find the `,_jsx(_components.strong,{children:`Assign`}),` button next to “Custom template”.\n`,_jsx(_components.img,{src:`https://cdn.shopify.com/s/files/1/0838/0052/3057/files/assign_template_left_panel.webp?v=1745484491`,alt:`Assign Button in Left Panel`})]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Settings Panel (Right):`}),` Alternatively, look for the `,_jsx(_components.strong,{children:`Template assignments`}),` button in the Settings panel on the right side of the Studio. It might be grouped under sections like “Layout”.\n`,_jsx(_components.img,{src:`https://cdn.shopify.com/s/files/1/0838/0052/3057/files/template_assignments_button_inspector.webp?v=1745484491`,alt:`Template Assignments Button in Settings Panel`})]}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Open Assignment Panel:`}),` Click either the `,_jsx(_components.strong,{children:`Assign`}),` button or the `,_jsx(_components.strong,{children:`Template assignments`}),` button.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Select Resources:`}),` A panel will appear displaying a list of available resources (e.g., products) that match the template type. Check the box next to each resource you want to apply this custom template to.\n`,_jsx(_components.img,{src:`https://cdn.shopify.com/s/files/1/0838/0052/3057/files/template_assignment_resource_list.webp?v=1745484491`,alt:`Select Resources for Template Assignment`})]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Save Assignments:`}),` After selecting the resources, click the main `,_jsx(_components.strong,{children:`Save`}),` button in the Studio’s top bar to save your template assignments.`]}),`\n`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`Now, whenever a visitor views one of the assigned resources on your live storefront, Hydrogen will need to load the data associated with this specific custom template instead of the default one.`}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`step-3-configuring-hydrogen-routing-for-custom-templates`,children:`Step 3: Configuring Hydrogen Routing for Custom Templates`}),`\n`,_jsxs(_components.p,{children:[`Good news! You `,_jsx(_components.strong,{children:`do not`}),` need to add complex logic to your Hydrogen route loaders to handle custom templates. Weaverse automatically detects if a custom template has been assigned to a resource (like a product or collection) based on the assignments you configured in Step 2.`]}),`\n`,_jsxs(_components.p,{children:[`As long as your route loader calls `,_jsx(_components.code,{children:`context.weaverse.loadPage()`}),` with the correct `,_jsx(_components.code,{children:`type`}),` and `,_jsx(_components.code,{children:`handle`}),`, Weaverse will return the data for the assigned custom template if one exists, or fall back to the default template data otherwise.`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Standard Loader Logic (Example for Products):`})}),`\n`,_jsxs(_components.p,{children:[`Your loader should look similar to the standard implementation, focusing on fetching Shopify data and then calling `,_jsx(_components.code,{children:`loadPage`}),`. Pilot’s product route already does this — it lives at `,_jsx(_components.code,{children:`app/routes/products/product.tsx`}),` and is registered in `,_jsx(_components.code,{children:`app/routes.ts`}),` as `,_jsx(_components.code,{children:`route(\":productHandle\", \"routes/products/product.tsx\")`}),` inside the `,_jsx(_components.code,{children:`products`}),` prefix.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`46`,language:`tsx`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`tsx`,children:_jsxs(_components.code,{language:`tsx`,numberOfLines:`46`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// app/routes/products/product.tsx`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Registered in app/routes.ts — a file under app/routes/ is not a route by itself.`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` type`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`LoaderFunctionArgs`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` } `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`from`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"react-router\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`CACHE_DEFAULT`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` } `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`from`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"~/utils/cache\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`unwrapStorefront`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` } `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`from`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"~/utils/storefront\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`validateWeaverseData`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`WeaverseContent`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` } `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`from`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"~/weaverse\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// ... other imports (PRODUCT_QUERY, etc.)`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`export`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` async`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` function`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` loader`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`({ `}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`params`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`context`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` LoaderFunctionArgs`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` const`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`productHandle`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` } `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` params`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` const`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`storefront`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`weaverse`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` } `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` context`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:\" // 1. Fetch product data from Shopify. `storefront.graphql` returns\"})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:\" // `{ data, errors }`; `unwrapStorefront` throws on errors, so wrap it\"})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` // in try/catch if you need to.`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` const`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`product`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` } `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` unwrapStorefront`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` storefront`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`graphql`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`PRODUCT_QUERY`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` variables:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`handle:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` productHandle`}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` /* ... */`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` cache:`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` CACHE_DEFAULT`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }),`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` );`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` if`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`!`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`product`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) { `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`throw`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` new`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` Response`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`null`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`status:`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 404`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }); }`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` // 2. Load Weaverse Page Data (Handles Custom Templates Automatically)`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` // Simply provide the type and handle. Weaverse checks for assignments.`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` weaverseData`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` weaverse`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`loadPage`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`({`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` type:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"PRODUCT\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` handle:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` productHandle`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` });`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:\" // 3. `loadPage()` returns `WeaverseLoaderData | null` — on failure it\"})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:\" // resolves to `null` rather than throwing, so a try/catch around it\"})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` // would never fire. Check the result instead; Pilot's`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:\" // `validateWeaverseData` helper throws a 404 for a missing page.\"})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` validateWeaverseData`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`weaverseData`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:\" // 4. Return all necessary data (a plain object — no `json()`)\"})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` return`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`product`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`weaverseData`}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` /* ... other data */`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` };`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`export`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` default`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` function`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` ProductRoute`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#D4D4D4`},children:`() `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` // Render \u003cWeaverseContent /> using data from useLoaderData()`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` // ...`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` return`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#4EC9B0`},children:`WeaverseContent`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#808080`},children:` />`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Key Takeaway:`}),` The crucial part is ensuring you always pass the correct `,_jsx(_components.code,{children:`handle`}),` (e.g., product handle, collection handle) to `,_jsx(_components.code,{children:`weaverse.loadPage()`}),`. Weaverse uses this handle to look up assignments internally.`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`step-4-customizing-the-template-in-weaverse-studio`,children:`Step 4: Customizing the Template in Weaverse Studio`}),`\n`,_jsx(_components.p,{children:`Once created and assigned, you customize the template visually:`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Open the custom template in `,_jsx(_components.strong,{children:`Weaverse Studio`}),` (select it from the template list).`]}),`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`Add Section`}),` to add banners, product details blocks, related items, etc.`]}),`\n`,_jsx(_components.li,{children:`Configure section settings, layouts, and styles specifically for this template.`}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Important:`}),` Sections added here define the `,_jsx(_components.em,{children:`structure`}),` for all resources using this template. Content specific to the resource (like product title, images) will populate automatically based on the data passed from the loader.`]}),`\n`,_jsx(_components.li,{children:`Use global theme settings and reuse global sections for consistency, or create unique sections just for this template.`}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Save`}),` and `,_jsx(_components.strong,{children:`Publish`}),` the template in Weaverse Studio. Preview it by visiting a resource assigned to this template on your storefront.`]}),`\n`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`best-practices`,children:`Best Practices`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Naming:`}),` Use clear, descriptive names for your templates (e.g., `,_jsx(_components.code,{children:`Product - Landing Page Style`}),`, `,_jsx(_components.code,{children:`Collection - Minimal Grid`}),`).`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Scope:`}),` Use custom templates when you need a distinct `,_jsx(_components.em,{children:`layout`}),` for multiple items of the same type. For one-off pages or unique routes, consider a `,_jsx(_components.strong,{children:`Custom Page`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Organization:`}),` Keep your template list tidy. Delete unused templates.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Consistency:`}),` Leverage global sections and theme settings where possible to maintain brand consistency even within custom templates.`]}),`\n`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`troubleshooting`,children:`Troubleshooting`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Template Not Applying:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Verify the template is correctly assigned to the resource (check Metafield value or assignment setting).`}),`\n`,_jsxs(_components.li,{children:[`Ensure the template is `,_jsx(_components.strong,{children:`Published`}),` in Weaverse Studio.`]}),`\n`,_jsxs(_components.li,{children:[`Double-check the Hydrogen route loader logic – is it correctly identifying the assigned template and calling `,_jsx(_components.code,{children:`loadPage`}),` with the right parameters?`]}),`\n`,_jsx(_components.li,{children:`Check for typos in template handles/IDs entered in Metafields.`}),`\n`,_jsx(_components.li,{children:`Clear browser cache or test in incognito mode.`}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Sections Missing/Incorrect:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Confirm sections were added and saved to the `,_jsx(_components.em,{children:`template`}),` in Weaverse Studio.`]}),`\n`,_jsxs(_components.li,{children:[`Check if the necessary data is being passed from the loader if sections rely on it (e.g., ensure the `,_jsx(_components.code,{children:`product`}),` object is available).`]}),`\n`,_jsx(_components.li,{children:`Ensure there are no JavaScript errors in the browser console related to rendering.`}),`\n`]}),`\n`]}),`\n`]}),`\n`,_jsx(_components.hr,{})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Custom Templates","description":"Create and assign unique templates for products, collections, pages, and blogs in your Hydrogen storefront using Weaverse.","published":true,"href":"/features/custom-templates"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Custom Templates in Weaverse","slug":"custom-templates-in-weaverse","depth":1,"children":[]},{"title":"Overview","slug":"overview","depth":2,"children":[]},{"title":"Prerequisites","slug":"prerequisites","depth":2,"children":[]},{"title":"Step 1: Creating a Custom Template in Weaverse Studio","slug":"step-1-creating-a-custom-template-in-weaverse-studio","depth":2,"children":[]},{"title":"Step 2: Assigning the Template to a Shopify Resource","slug":"step-2-assigning-the-template-to-a-shopify-resource","depth":2,"children":[]},{"title":"Step 3: Configuring Hydrogen Routing for Custom Templates","slug":"step-3-configuring-hydrogen-routing-for-custom-templates","depth":2,"children":[]},{"title":"Step 4: Customizing the Template in Weaverse Studio","slug":"step-4-customizing-the-template-in-weaverse-studio","depth":2,"children":[]},{"title":"Best Practices","slug":"best-practices","depth":2,"children":[]},{"title":"Troubleshooting","slug":"troubleshooting","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/docs/_mintlify/custom/weaverse/0543a9a70b6f3643/snitcher.js","/docs/_mintlify/custom/weaverse/20987ec1c9b2ceb6/same-tab-nav.js"],"subdomain":"weaverse","siteName":"Weaverse","title":"Custom Templates - Weaverse","navMaps":{"firstHrefInVersion":{"v5.x":{"href":"/features/custom-templates","matchLevel":0}},"firstHrefInLanguage":{}},"lastModified":"2026-11-10T07:06:12.697Z","gitLastModified":"2026-11-10T07:06:03.000Z","originalFileLocation":"features/custom-templates.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Create and assign unique templates for products, collections, pages, and blogs in your Hydrogen storefront using Weaverse.\">\u003cmeta data-mint-head name=\"keywords\" content=\"Weaverse, Shopify Hydrogen, headless commerce, visual page builder, React Router, Next.js\">\u003cmeta data-mint-head name=\"application-name\" content=\"Weaverse\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/weaverse/BNjY59OJurJKyxIa/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/docs/mintlify-assets/_mintlify/favicons/weaverse/BNjY59OJurJKyxIa/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/weaverse/BNjY59OJurJKyxIa/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/weaverse/BNjY59OJurJKyxIa/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/weaverse/BNjY59OJurJKyxIa/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/weaverse/BNjY59OJurJKyxIa/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/weaverse/BNjY59OJurJKyxIa/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/weaverse/BNjY59OJurJKyxIa/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/weaverse/BNjY59OJurJKyxIa/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Custom Templates - Weaverse\">\u003cmeta data-mint-head property=\"og:description\" content=\"Create and assign unique templates for products, collections, pages, and blogs in your Hydrogen storefront using Weaverse.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Weaverse Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://weaverse.io/docs/features/custom-templates\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://weaverse.mintlify.site/docs/_mintlify/api/og/v2?division=Pages+%26+Routing\u0026amp;title=Custom+Templates\u0026amp;description=Create+and+assign+unique+templates+for+products%2C+collections%2C+pages%2C+and+blogs+in+your+Hydrogen+storefront+using+Weaverse.\u0026amp;theme=27b71a4830417710c5655f27\u0026amp;signature=3035e1fe3f11045ede340f58c8a1e3ba6bd306327c6934e8b50eb5e16a7e504c\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Custom Templates - Weaverse\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Create and assign unique templates for products, collections, pages, and blogs in your Hydrogen storefront using Weaverse.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://weaverse.mintlify.site/docs/_mintlify/api/og/v2?division=Pages+%26+Routing\u0026amp;title=Custom+Templates\u0026amp;description=Create+and+assign+unique+templates+for+products%2C+collections%2C+pages%2C+and+blogs+in+your+Hydrogen+storefront+using+Weaverse.\u0026amp;theme=27b71a4830417710c5655f27\u0026amp;signature=3035e1fe3f11045ede340f58c8a1e3ba6bd306327c6934e8b50eb5e16a7e504c\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/docs/mintlify-assets/_mintlify/favicons/weaverse/BNjY59OJurJKyxIa/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Weaverse\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#246aff\">\u003clink data-mint-head rel=\"canonical\" href=\"https://weaverse.io/docs/features/custom-templates\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/docs/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/docs/features/custom-templates.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://weaverse.io/#organization\",\"name\":\"Weaverse\",\"url\":\"https://weaverse.io\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://docs.weaverse.io/logo/light.svg\"},\"sameAs\":[\"https://github.com/weaverse\",\"https://x.com/WeaverseIO\",\"https://wvse.cc/weaverse-slack\"]},{\"@type\":\"WebSite\",\"@id\":\"https://weaverse.io/docs#website\",\"name\":\"Weaverse\",\"url\":\"https://weaverse.io/docs\",\"publisher\":{\"@id\":\"https://weaverse.io/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://weaverse.io/docs/features/custom-templates#webpage\",\"url\":\"https://weaverse.io/docs/features/custom-templates\",\"name\":\"Custom Templates\",\"description\":\"Create and assign unique templates for products, collections, pages, and blogs in your Hydrogen storefront using Weaverse.\",\"dateModified\":\"2026-11-10T07:06:03.000Z\",\"isPartOf\":{\"@id\":\"https://weaverse.io/docs#website\"},\"breadcrumb\":{\"@id\":\"https://weaverse.io/docs/features/custom-templates#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://weaverse.io/docs/features/custom-templates#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Pages \u0026 Routing\",\"item\":\"https://weaverse.io/docs/features/custom-pages\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Custom Templates\",\"item\":\"https://weaverse.io/docs/features/custom-templates\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://weaverse.io/docs/features/custom-templates#article\",\"headline\":\"Custom Templates\",\"name\":\"Custom Templates\",\"description\":\"Create and assign unique templates for products, collections, pages, and blogs in your Hydrogen storefront using Weaverse.\",\"url\":\"https://weaverse.io/docs/features/custom-templates\",\"mainEntityOfPage\":{\"@id\":\"https://weaverse.io/docs/features/custom-templates#webpage\"},\"dateModified\":\"2026-11-10T07:06:03.000Z\",\"publisher\":{\"@id\":\"https://weaverse.io/#organization\"},\"isPartOf\":{\"@id\":\"https://weaverse.io/docs#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Weaverse\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Weaverse\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/docs/features/custom-templates.md","siteName":"Weaverse","nav":{"global":null,"versions":[{"version":"v5.x","default":true,"tag":"Latest","tabs":[{"tab":"Get Started","pages":[{"title":"Get Started","href":""}]},{"tab":"Guides","dropdowns":[{"dropdown":"React Router","icon":"https://mintlify.s3.us-west-1.amazonaws.com/weaverse/images/icons/react-router.svg","groups":[{"group":"Environment","pages":[{"title":"Environment Variables","href":"/development-guide/environment-setup"},{"title":"Studio vs. Live Environment","href":"/development-guide/design-mode"}]},{"group":"Building Components","pages":[{"title":"Creating Components","href":"/development-guide/creating-components"},{"title":"Component Schema","href":"/development-guide/component-schema"},{"title":"Input Settings","href":"/development-guide/input-settings"},{"title":"Weaverse Hydrogen Component","href":"/development-guide/weaverse-component"},{"title":"Styling \u0026 Theming","href":"/development-guide/styling-theming"},{"title":"Section Data Fetching","href":"/development-guide/data-fetching"},{"title":"Data Connectors","href":"/development-guide/data-connectors"}]},{"group":"Content Management","pages":[{"title":"Global Sections","href":"/features/global-sections"},{"title":"Scheduled Publishing","href":"/features/schedule-publish"},{"title":"Navigation Configuration","href":"/features/navigation-menus"},{"title":"Third-party Integration","href":"/features/third-party-integrations"},{"title":"Installable Mobile App (PWA)","href":"/features/mobile-app-pwa"}]},{"group":"Internationalization","pages":[{"title":"Markets and Localization","href":"/features/markets-localization"},{"title":"Translation Feature Guide","href":"/features/translation-feature-guide"},{"title":"i18next Integration","href":"/features/i18next-integration"}]},{"group":"Security \u0026 Privacy","pages":[{"title":"Content Security Policy","href":"/features/content-security"},{"title":"Cookie Consent Banner","href":"/features/cookie-consent-banner"},{"title":"Analytics \u0026 Conversion Tracking","href":"/features/analytics-tracking"},{"title":"Security \u0026 Deployment Practices","href":"/features/security-deployment-practices"}]},{"group":"Pages \u0026 Routing","pages":[{"title":"Custom Pages","href":"/features/custom-pages"},{"title":"Page SEO","description":"Wire Weaverse Studio's per-page SEO editor into your Hydrogen storefront.","href":"/features/page-seo"},{"title":"Custom Templates","href":"/features/custom-templates"},{"title":"Custom Routing","description":"Learn how to create custom URL structures for your Hydrogen storefront with Weaverse, mapping them to specific content types.","href":"/features/custom-routing"}]},{"group":"Advanced","pages":[{"title":"Rendering Weaverse Pages","href":"/guides/rendering-page"},{"title":"Advanced Localization Guide","href":"/guides/localization-advanced"},{"title":"Multi-Project Architecture","href":"/guides/multi-project-architecture"},{"title":"Customer Account API Local Development","href":"/development-guide/customer-account-local-dev"},{"title":"Multipass in Hydrogen","href":"/development-guide/multipass-in-hydrogen"}]},{"group":"Deployment","root":{"title":"Deployment","href":"/guides/deployment/index"},"directory":"card","pages":[{"title":"Deploy to Shopify Oxygen","href":"/guides/deployment/oxygen"},{"title":"Custom Domain \u0026 DNS Setup","href":"/guides/deployment/custom-domain-and-dns"},{"title":"Deploy with Docker","href":"/guides/deployment/docker"},{"title":"Deploy to Cloudflare Workers","href":"/guides/deployment/workers"}]}]},{"dropdown":"Next.js","icon":"https://mintlify.s3.us-west-1.amazonaws.com/weaverse/images/icons/nextjs.svg","groups":[{"group":"Getting started","pages":[{"title":"Weaverse for Next.js","href":"/nextjs/overview"},{"title":"Next.js Quickstart","href":"/nextjs/quickstart"}]},{"group":"Next.js","pages":[{"title":"Rendering Pages in Next.js","href":"/nextjs/rendering-pages"},{"title":"Data Fetching in Next.js","href":"/nextjs/data-fetching"},{"title":"Connect Weaverse Studio","href":"/nextjs/studio"},{"title":"Markets \u0026 Translations","href":"/nextjs/markets-translations"}]},{"group":"Content Management","pages":[{"title":"Global Sections","href":"/features/global-sections"},{"title":"Navigation Configuration","href":"/features/navigation-menus"},{"title":"Third-party Integrations in Next.js","href":"/nextjs/third-party-integrations"},{"title":"Installable Mobile App (PWA)","href":"/features/mobile-app-pwa"}]},{"group":"Deployment","pages":[{"title":"Deploy to Vercel","href":"/guides/deployment/vercel"}]}]}]},{"tab":"SDKs","dropdowns":[{"dropdown":"React Router","icon":"https://mintlify.s3.us-west-1.amazonaws.com/weaverse/images/icons/react-router.svg","groups":[{"group":"Overview","pages":[{"title":"Introduction","sidebarTitle":"Overview","href":"/api-reference/introduction"}]},{"group":"Hooks","pages":[{"title":"useWeaverse","href":"/api-reference/use-weaverse"},{"title":"useItemInstance","href":"/api-reference/use-item-instance"},{"title":"useParentInstance","href":"/api-reference/use-parent-instance"},{"title":"useChildInstances","href":"/api-reference/use-child-instances"},{"title":"useThemeSettings","href":"/api-reference/use-theme-settings"}]},{"group":"Components","pages":[{"title":"WeaverseHydrogenRoot","href":"/api-reference/weaverse-root"},{"title":"WeaverseClient","href":"/api-reference/weaverse-client"},{"title":"withWeaverse","href":"/api-reference/with-weaverse"}]},{"group":"Utilities \u0026 Types","pages":[{"title":"getSelectedProductOptions","href":"/api-reference/get-selected-product-options"},{"title":"IMAGES_PLACEHOLDERS","href":"/api-reference/images-placeholders"},{"title":"Types","href":"/api-reference/types"}]}]},{"dropdown":"Next.js","icon":"https://mintlify.s3.us-west-1.amazonaws.com/weaverse/images/icons/nextjs.svg","groups":[{"group":"Overview","pages":[{"title":"@weaverse/hydrogen/next API Reference","href":"/nextjs/api-reference"}]},{"group":"Hooks","pages":[{"title":"useWeaverse","href":"/nextjs/api/use-weaverse"},{"title":"useItemInstance","href":"/nextjs/api/use-item-instance"},{"title":"useParentInstance","href":"/nextjs/api/use-parent-instance"},{"title":"useChildInstances","href":"/nextjs/api/use-child-instances"},{"title":"useThemeSettings","href":"/nextjs/api/use-theme-settings"}]}]}]},{"tab":"Content API","pages":[{"title":"Content API","href":"/content-api/overview"}]},{"tab":"Ecosystem","pages":[{"title":"Ecosystem","href":"/ecosystem"}]},{"tab":"Help \u0026 Community","pages":[{"title":"Help \u0026 Community","href":"/resources"}]}]}]},"basePath":"","title":"Custom Templates - Weaverse","buildId":"dpl_AHzSCQPRq6mP9FZXEa5AbDZTffie","deploymentId":"dpl_AHzSCQPRq6mP9FZXEa5AbDZTffie","dynamics":["a74be98ba7"],"chunks":["zoom-image-lightbox-BrVVh3El.js","lightbox-handle-r17bVUz3.js"]}