mirror of
https://github.com/vercel/commerce.git
synced 2025-05-14 21:47:51 +00:00
106 lines
5.7 KiB
Markdown
106 lines
5.7 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
|
|
|
|
This fork is designed to provide a basic implementation of [Shopify's new Customer Accounts API](), which will allow a customer to login into their Next.js Shopify Website to update information and view orders. 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.
|
|
|
|
to do: env settings file
|
|
|
|
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.
|