commit 7d2fb0c73761f2907b46ef52a2b653fd8f1a1397 Author: Danijel Date: Mon Jan 19 20:21:14 2026 +0100 chore: transfer repo diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..9ff0463 --- /dev/null +++ b/.env.example @@ -0,0 +1,7 @@ +COMPANY_NAME="Vercel Inc." +TWITTER_CREATOR="@vercel" +TWITTER_SITE="https://nextjs.org/commerce" +SITE_NAME="Next.js Commerce" +SHOPIFY_REVALIDATION_SECRET="" +SHOPIFY_STOREFRONT_ACCESS_TOKEN="" +SHOPIFY_STORE_DOMAIN="[your-shopify-store-subdomain].myshopify.com" diff --git a/.gitea/workflows/deploy-staging.yml b/.gitea/workflows/deploy-staging.yml new file mode 100644 index 0000000..1d5b118 --- /dev/null +++ b/.gitea/workflows/deploy-staging.yml @@ -0,0 +1,34 @@ +name: Build and Deploy +on: workflow_dispatch + +inputs: + user_version: + description: 'Custom version (e.g., 1.2.3)' + required: true + default: '1.0.0' + +jobs: + deploy: + runs-on: sent-shop-vps + steps: + - name: Checkout code + uses: actions/checkout@v3 + + - name: Calculate version + id: version + run: | + SHORT_SHA=$(git rev-parse --short=7 HEAD) + APP_VERSION=${{ inputs.user_version }}-${SHORT_SHA} + echo "Using version: ${APP_VERSION}" + + - name: Build and deploy + env: + COMPOSE_PROJECT_NAME: sent-shop # Unique identifier, must be kept not to overwrite other composes. + APP_VERSION: ${{ env.APP_VERSION }} + SHOPIFY_REVALIDATION_SECRET: ${{ secrets.SHOPIFY_REVALIDATION_SECRET }} + SHOPIFY_STOREFRONT_ACCESS_TOKEN: ${{ secrets.SHOPIFY_STOREFRONT_ACCESS_TOKEN }} + run: | + docker-compose build + docker-compose down + docker-compose up -d + echo "New version is up and running \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0298027 --- /dev/null +++ b/.gitignore @@ -0,0 +1,38 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage +.playwright + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* +.pnpm-debug.log* + +# local env files +.env* +!.env.example + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..448434d --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,28 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Next.js: debug server-side", + "type": "node-terminal", + "request": "launch", + "command": "pnpm dev" + }, + { + "name": "Next.js: debug client-side", + "type": "chrome", + "request": "launch", + "url": "http://localhost:3000" + }, + { + "name": "Next.js: debug full stack", + "type": "node-terminal", + "request": "launch", + "command": "pnpm dev", + "serverReadyAction": { + "pattern": "started server on .+, url: (https?://.+)", + "uriFormat": "%s", + "action": "debugWithChrome" + } + } + ] +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..8345c10 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,9 @@ +{ + "typescript.tsdk": "node_modules/typescript/lib", + "typescript.enablePromptUseWorkspaceTsdk": true, + "editor.codeActionsOnSave": { + "source.fixAll": "explicit", + "source.organizeImports": "explicit", + "source.sortMembers": "explicit" + } +} diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..5df18d1 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,61 @@ +# syntax = docker/dockerfile:1 + +FROM node:22-slim AS base + +ARG PORT=3005 +ARG COMPANY_NAME +ARG TWITTER_CREATOR +ARG TWITTER_SITE +ARG SITE_NAME +ARG SHOPIFY_REVALIDATION_SECRET +ARG SHOPIFY_STOREFRONT_ACCESS_TOKEN +ARG SHOPIFY_STORE_DOMAIN + +ENV PORT=${PORT} +ENV COMPANY_NAME=${COMPANY_NAME} +ENV TWITTER_CREATOR=${TWITTER_CREATOR} +ENV TWITTER_SITE=${TWITTER_SITE} +ENV SITE_NAME=${SITE_NAME} +ENV SHOPIFY_REVALIDATION_SECRET=${SHOPIFY_REVALIDATION_SECRET} +ENV SHOPIFY_STOREFRONT_ACCESS_TOKEN=${SHOPIFY_STOREFRONT_ACCESS_TOKEN} +ENV SHOPIFY_STORE_DOMAIN=${SHOPIFY_STORE_DOMAIN} +ENV NEXT_TELEMETRY_DISABLED=1 + +WORKDIR /app + +# Dependencies +FROM base AS dependencies + +COPY package.json package-lock.json ./ +RUN npm ci + +# Build +FROM base AS build + +COPY --from=dependencies /app/node_modules ./node_modules +COPY . . + +#Should be set to npm run build. +RUN npm run build + +# Run +FROM base AS run + +ENV NODE_ENV=production +ENV PORT=$PORT + +RUN addgroup --system --gid 1001 nodejs +RUN adduser --system --uid 1001 nextjs +RUN mkdir .next +RUN chown nextjs:nodejs .next + +COPY --from=build /app/public ./public +COPY --from=build --chown=nextjs:nodejs /app/.next/standalone ./ +COPY --from=build --chown=nextjs:nodejs /app/.next/static ./.next/static + +USER nextjs + +EXPOSE $PORT + +ENV HOSTNAME="0.0.0.0" +CMD ["node", "server.js"] diff --git a/README.md b/README.md new file mode 100644 index 0000000..ccb4861 --- /dev/null +++ b/README.md @@ -0,0 +1,74 @@ +[![Deploy with Vercel](https://vercel.com/button)](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 high-performance, server-rendered Next.js App Router ecommerce application. + +This template uses React Server Components, Server Actions, `Suspense`, `useOptimistic`, and more. + +

+ +> 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/)) +- [Ecwid by Lightspeed](https://github.com/Ecwid/ecwid-nextjs-commerce/) ([Demo](https://ecwid-nextjs-commerce.vercel.app/)) +- [Geins](https://github.com/geins-io/vercel-nextjs-commerce) ([Demo](https://geins-nextjs-commerce-starter.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/)) +- [Fourthwall](https://github.com/FourthwallHQ/vercel-commerce) ([Demo](https://vercel-storefront.fourthwall.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. + +- [React Bricks](https://github.com/ReactBricks/nextjs-commerce-rb) ([Demo](https://nextjs-commerce.reactbricks.com/)) + - Edit pages, product details, and footer content visually using [React Bricks](https://www.reactbricks.com) visual headless CMS. + +## 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/). + +
+ Expand if you work at Vercel and want to run locally and / or contribute + +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. +
+ +## Vercel, Next.js Commerce, and Shopify Integration Guide + +You can use this comprehensive [integration guide](https://vercel.com/docs/integrations/ecommerce/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. diff --git a/app/[page]/layout.tsx b/app/[page]/layout.tsx new file mode 100644 index 0000000..b99b0bc --- /dev/null +++ b/app/[page]/layout.tsx @@ -0,0 +1,12 @@ +import { Footer } from 'components/layout/footer'; + +export default function Layout({ children }: { children: React.ReactNode }) { + return ( + <> +
+
{children}
+
+