mirror of
https://github.com/vercel/commerce.git
synced 2025-05-19 16:07:01 +00:00
110 lines
5.9 KiB
Markdown
110 lines
5.9 KiB
Markdown
[](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2Fvercel%2Fcommerce&project-name=commerce&repo-name=commerce&demo-title=Next.js%20Commerce&demo-url=https%3A%2F%2Fdemo.vercel.store&demo-image=https%3A%2F%2Fbigcommerce-demo-asset-ksvtgfvnd.vercel.app%2Fbigcommerce.png&env=COMPANY_NAME,SHOPIFY_REVALIDATION_SECRET,SHOPIFY_STORE_DOMAIN,SHOPIFY_STOREFRONT_ACCESS_TOKEN,SITE_NAME,TWITTER_CREATOR,TWITTER_SITE)
|
|
|
|
# Next.js Commerce
|
|
|
|
A Next.js 14 and App Router-ready ecommerce template featuring:
|
|
|
|
- Next.js App Router
|
|
- Optimized for SEO using Next.js's Metadata
|
|
- React Server Components (RSCs) and Suspense
|
|
- Server Actions for mutations
|
|
- Edge Runtime
|
|
- New fetching and caching paradigms
|
|
- Dynamic OG images
|
|
- Styling with Tailwind CSS
|
|
- Checkout and payments with Shopify
|
|
- Automatic light/dark mode based on system settings
|
|
|
|
<h3 id="v1-note"></h3>
|
|
|
|
> Note: Looking for Next.js Commerce v1? View the [code](https://github.com/vercel/commerce/tree/v1), [demo](https://commerce-v1.vercel.store), and [release notes](https://github.com/vercel/commerce/releases/tag/v1).
|
|
|
|
## Providers
|
|
|
|
Vercel will only be actively maintaining a Shopify version [as outlined in our vision and strategy for Next.js Commerce](https://github.com/vercel/commerce/pull/966).
|
|
|
|
Vercel is happy to partner and work with any commerce provider to help them get a similar template up and running and listed below. Alternative providers should be able to fork this repository and swap out the `lib/shopify` file with their own implementation while leaving the rest of the template mostly unchanged.
|
|
|
|
- Shopify (this repository)
|
|
- [BigCommerce](https://github.com/bigcommerce/nextjs-commerce) ([Demo](https://next-commerce-v2.vercel.app/))
|
|
- [Medusa](https://github.com/medusajs/vercel-commerce) ([Demo](https://medusa-nextjs-commerce.vercel.app/))
|
|
- [Saleor](https://github.com/saleor/nextjs-commerce) ([Demo](https://saleor-commerce.vercel.app/))
|
|
- [Shopware](https://github.com/shopwareLabs/vercel-commerce) ([Demo](https://shopware-vercel-commerce-react.vercel.app/))
|
|
- [Swell](https://github.com/swellstores/verswell-commerce) ([Demo](https://verswell-commerce.vercel.app/))
|
|
- [Umbraco](https://github.com/umbraco/Umbraco.VercelCommerce.Demo) ([Demo](https://vercel-commerce-demo.umbraco.com/))
|
|
- [Wix](https://github.com/wix/nextjs-commerce) ([Demo](https://wix-nextjs-commerce.vercel.app/))
|
|
|
|
> Note: Providers, if you are looking to use similar products for your demo, you can [download these assets](https://drive.google.com/file/d/1q_bKerjrwZgHwCw0ovfUMW6He9VtepO_/view?usp=sharing).
|
|
|
|
## Integrations
|
|
|
|
Integrations enable upgraded or additional functionality for Next.js Commerce
|
|
|
|
- [Orama](https://github.com/oramasearch/nextjs-commerce) ([Demo](https://vercel-commerce.oramasearch.com/))
|
|
- Upgrades search to include typeahead with dynamic re-rendering, vector-based similarity search, and JS-based configuration.
|
|
- Search runs entirely in the browser for smaller catalogs or on a CDN for larger.
|
|
|
|
## Running locally
|
|
|
|
You will need to use the environment variables [defined in `.env.example`](.env.example) to run Next.js Commerce. It's recommended you use [Vercel Environment Variables](https://vercel.com/docs/concepts/projects/environment-variables) for this, but a `.env` file is all that is necessary.
|
|
|
|
> Note: You should not commit your `.env` file or it will expose secrets that will allow others to control your Shopify store.
|
|
|
|
1. Install Vercel CLI: `npm i -g vercel`
|
|
2. Link local instance with Vercel and GitHub accounts (creates `.vercel` directory): `vercel link`
|
|
3. Download your environment variables: `vercel env pull`
|
|
|
|
```bash
|
|
pnpm install
|
|
pnpm dev
|
|
```
|
|
|
|
Your app should now be running on [localhost:3000](http://localhost:3000/).
|
|
|
|
<details>
|
|
<summary>Expand if you work at Vercel and want to run locally and / or contribute</summary>
|
|
|
|
1. Run `vc link`.
|
|
1. Select the `Vercel Solutions` scope.
|
|
1. Connect to the existing `commerce-shopify` project.
|
|
1. Run `vc env pull` to get environment variables.
|
|
1. Run `pnpm dev` to ensure everything is working correctly.
|
|
</details>
|
|
|
|
## Vercel, Next.js Commerce, and Shopify Integration Guide
|
|
|
|
You can use this comprehensive [integration guide](http://vercel.com/docs/integrations/shopify) with step-by-step instructions on how to configure Shopify as a headless CMS using Next.js Commerce as your headless Shopify storefront on Vercel.
|
|
|
|
## Shopify Customer Accounts
|
|
|
|
to do: env settings file
|
|
update Shopify stuff so points here
|
|
instructions
|
|
|
|
This fork is designed to provide a basic implementation of [Shopify's new Customer Accounts API](https://shopify.dev/docs/api/customer), which will allow a customer to login into their Next.js Shopify Website to update information and view orders, see Shopify's [launch announcement](https://www.shopify.com/partners/blog/introducing-customer-account-api-for-headless-stores) to learn more.
|
|
|
|
It uses the concepts of Next.js middleware and server actions to implement the Shopify Customer Accounts API Integration. All the new code for the Customer Accounts API is included in: lib/shopify/customer folder, middleware
|
|
|
|
The code for this repo is adapted for Next.js from code provided by Shopify
|
|
|
|
To Set This Up, please follow:
|
|
|
|
1. icons/client components
|
|
2. Get
|
|
3. Set up URLs
|
|
4. Add the following ENV variables to your .env (and Vercel dashboard)
|
|
|
|
https://shopify.dev/docs/custom-storefronts/building-with-the-customer-account-api/hydrogen
|
|
https://shopify.dev/docs/api/customer
|
|
|
|
There are several issues that make this code much more complex on NextJs:
|
|
|
|
1. Get can't origin in RSC - you can get this in middleware and pass down as props
|
|
https://blog.stackademic.com/how-next-js-middlewares-work-103cae315163
|
|
|
|
2. Can't set Cookies in RSC!
|
|
|
|
So to do this correctly, we have to use a fixed origin based on ENV variables, which makes testing difficult. Can only test in one environment.
|
|
|
|
And 2, we need to pass the tokens to a client component, which sets the cookies client side. We couldn't figure out any other way to get this to work.
|