enable-shopify-menus

от vercel

Заменить жёстко заданные меню навигации и подвала на меню, управляемые через Shopify.

npx skills add https://github.com/vercel/shop --skill enable-shopify-menus

Enable Shopify Menus

By default, the storefront's nav and footer render hardcoded items from shopConfig.navigation in shop.config.ts. The components themselves (QuickLinks, MobileMenu, Footer's FooterMenu) already consume MenuItem[] in Shopify shape and render up to three levels of nesting. This skill swaps the data source from shopConfig.navigation.nav / shopConfig.navigation.footer to a live Shopify menu fetched by handle, with a fallback to the hardcoded items if the menu is missing or empty.

Before you start

Ask the user two questions in order:

1. Which menus do you want to fetch from Shopify?

  • Nav menu — replaces the hardcoded items used by the desktop quick links and mobile sheet.
  • Footer menu — replaces the hardcoded footer columns.
  • Both

2. What are the Shopify menu handles?

Ask for each selected menu. Defaults: main-menu for nav, footer for footer.

Wait for the user to answer before proceeding.


Part A: Enable Shopify nav menu

Skip this section if the user did not select the nav menu.

Edit components/nav/index.tsx. Add the getMenu import and swap the data source:

import { getMenu } from "@/lib/shopify/operations/menu";

Inside Nav, replace const items = shopConfig.navigation.nav; with:

const menu = await getMenu({ handle: "NAV_HANDLE" });
const items = menu?.items ?? shopConfig.navigation.nav;

Replace "NAV_HANDLE" with the handle the user provided. QuickLinks and MobileMenu already accept MenuItem[], so no other component changes are needed. Keep shopConfig.navigation.nav as the fallback.


Part B: Enable Shopify footer menu

Skip this section if the user did not select the footer menu.

Edit components/footer/index.tsx. Make the component async, add the getMenu import, and swap the data source:

import { getMenu } from "@/lib/shopify/operations/menu";

Change the signature to async and replace const items = shopConfig.navigation.footer; with:

const menu = await getMenu({ handle: "FOOTER_HANDLE" });
const items = menu?.items ?? shopConfig.navigation.footer;

Replace "FOOTER_HANDLE" with the handle the user provided. FooterMenu already accepts MenuItem[]. Keep shopConfig.navigation.footer as the fallback.

The Footer callsite in app/layout.tsx (or wherever it is rendered) already passes locale; if it is not wrapped in <Suspense>, the menu fetch will block layout render — that is acceptable since getMenu is cached with "use cache: remote" and cacheLife("max"). Wrap in <Suspense> only if you specifically want the rest of the page to stream ahead of the footer.


Guardrails

  • The getMenu() operation in lib/shopify/operations/menu.ts already handles caching ("use cache: remote", cacheTag("menus")) and URL transformation. Do not duplicate that logic.
  • Always preserve the shopConfig.navigation.nav / shopConfig.navigation.footer fallback so a missing or empty Shopify menu doesn't leave the user with a blank nav or footer.
  • External links (URLs starting with http) are handled by the existing MenuLink helpers in each component — no change needed.

Больше skills от vercel

benchmark-sandbox
vercel
Запускает сценарии оценки vercel-plugin в песочницах Vercel вместо локальных панелей WezTerm. Предоставляет эфемерные микроВМ с предустановленными Claude Code и плагином,…
official
emil-design-eng
vercel
Этот навык кодирует философию Эмиля Ковальски в отношении полировки интерфейса, дизайна компонентов, анимационных решений и незаметных деталей, которые делают программное обеспечение приятным в использовании.
official
vercel-react-best-practices
vercel
Рекомендации по оптимизации производительности React и Next.js от инженеров Vercel. Этот навык следует использовать при написании, ревью или рефакторинге React/Next.js…
official
vercel-react-best-practices
vercel
Рекомендации по оптимизации производительности React и Next.js от инженеров Vercel. Этот навык следует использовать при написании, рецензировании или рефакторинге React/Next.js…
official
write-guide
vercel
Создайте техническое руководство, которое обучает реальному примеру использования через последовательные примеры. Концепции вводятся только тогда, когда они нужны читателю.
official
release
vercel
Vercel-plugin — запуск шлюзов, обновление версии, генерация артефактов, коммит и пуш. Используйте, когда вас просят «выпустить релиз», «запустить», «обновить версию и запушить» или «сделать релиз».
official
deepsec
vercel
Запустить DeepSec для проверки проекта Vercel из dev3000. Используется для одношаговой настройки DeepSec, начальной загрузки контекста проекта, ограниченной первичной обработки и…
official
backport-pr
vercel
Выполнить бэкпорт объединённого pull request Next.js из canary в предыдущую ветку релиза, например next-16-2. Используйте, когда пользователь просит выполнить бэкпорт, cherry-pick или открыть…
official