v1.0.0 is ready - AI Sales Agent, POS, multi-vendor, and PWA docs.Read update guide
logo
DocsDocumentation
⌘ K
Documentation·Store setup

Storify Setup & Installation

Everything you need to install, configure, and deploy Storify - from your first pnpm install to AI, payments, POS, and production hosting.

Chapter 01 · Overview

Welcome to Storify

Storify is a production-ready AI-powered ecommerce platform built with Next.js 16, React 19, MongoDB, Better Auth, and Tailwind CSS. This documentation covers setup, configuration, payments, AI, POS, localization, deployment, and ongoing maintenance.

What's in the package

Full source code, ecommerce storefront, admin dashboard, vendor dashboard, staff/POS workflows, database models, seed scripts, and PWA-ready assets.

Commerce modes

Run a single-vendor store or enable marketplace mode with vendor onboarding, commissions, payouts, vendor products, and vendor dashboards.

AI and modern selling

AI Sales Agent, smart search, product reviews, 3D product media, abandoned checkout recovery, analytics, and installable PWA support.

Payments

Stripe, PayPal, Razorpay, Paystack, and cash-on-delivery flows are built into checkout and admin settings.

Recommended first path

Start with Quickstart, then Environment Variables, then Admin & Roles. After you can log in, configure store settings from the admin dashboard.

Chapter 02 · Quickstart

Get running in 5 minutes

If you already have Node, pnpm, and MongoDB ready, this is the fastest path to a working Storify installation. Each step is expanded later in the docs.

  1. 1

    Install dependencies

    From the unzipped Storify source folder, install all packages with pnpm.

    bash
    cd storify
    pnpm install
  2. 2

    Create the env file

    Create .env in the project root, then add the keys from the bundled .env.example. Payment, SMTP, OAuth, analytics, and storage credentials are managed later from Admin -> Settings.

    bash
    touch .env
  3. 3

    Connect MongoDB and seed

    Set MONGODB_URI, then load demo store data so you can explore admin, vendor, customer, products, orders, POS, and settings immediately.

    bash
    pnpm db:seed
  4. 4

    Start the dev server

    Open http://localhost:3000. The seed command prints demo credentials in your terminal. Change all demo passwords before production.

    bash
    pnpm dev

Chapter 03 · Requirements

System & runtime requirements

Storify runs anywhere modern Node.js apps can run. These versions match the bundled package and are the supported baseline for buyer installs.

Node.js 20.19.28+

Use Node 20 LTS or newer. The app uses Next.js 16, React 19, and React Compiler, so Node 18 is not supported.

pnpm 10.24.0

The package is locked to pnpm. Enable it with corepack, then run pnpm install from the project root.

MongoDB 6+

MongoDB Atlas is recommended. Self-hosted MongoDB also works when MONGODB_URI and MONGODB_DB_NAME are correct.

Object storage

Cloudflare R2 or AWS S3 stores product images, 3D models, blog images, category media, and uploaded storefront assets.

Hosting suggestion

For most buyers, Vercel + MongoDB Atlas + Cloudflare R2 is the fastest path. VPS and Docker are also covered below.

Chapter 04 · Download & Setup

Get the source running locally

Download from CodeCanyon, unzip the package, and install dependencies. Storify ships as a ready-to-run Next.js project.

  1. 1

    Download from CodeCanyon

    Sign in to CodeCanyon -> Downloads -> Storify. Choose 'All files & documentation'.

  2. 2

    Unzip the package

    Extract the archive to a permanent location. The main application folder is usually /storify.

    bash
    unzip storify-v1.0.0.zip -d ~/projects/
    cd ~/projects/storify
  3. 3

    Install dependencies

    Storify uses pnpm for fast, deterministic installs. Run this once after every download or update.

    bash
    pnpm install
  4. 4

    Verify the install

    Run lint, tests, and a production build before deployment. If your package does not include tests for a custom module, lint and build are the minimum smoke checks.

    bash
    pnpm lint
    pnpm test
    pnpm build

Use pnpm only

The lockfile is pnpm-only. Mixing package managers can corrupt dependency resolutions.

Chapter 05 · Environment Variables

Configure .env

Storify scripts read from .env, and Next.js also loads it during development and production builds. Keep this file private and never commit real secrets.

.env.example
bash
# Database
MONGODB_URI=mongodb://localhost:27017/storify
MONGODB_DB_NAME=storify

# Better Auth (generate a random 32+ character string)
BETTER_AUTH_SECRET=your-secret-here
BETTER_AUTH_URL=https://your-app-url.com

# App Configuration
NEXT_PUBLIC_APP_URL=https://your-app-url.com

OPENAI_API_KEY=your-openai-api-key-here
WEB_PUSH_PUBLIC_KEY=your-web-push-public-key-here
WEB_PUSH_PRIVATE_KEY=your-web-push-private-key-here
WEB_PUSH_SUBJECT=your-web-push-subject-here
KeyRequiredDescription
MONGODB_URIRequiredMongoDB connection string for the Storify database. Use the local example for development or an Atlas URI in production.
MONGODB_DB_NAMERequiredDatabase name used by app scripts, migrations, and admin creation commands.
BETTER_AUTH_SECRETRequiredRandom 32+ character secret used by Better Auth to sign sessions and auth state. Never commit a real value.
BETTER_AUTH_URLRequiredCanonical app URL used by Better Auth for callbacks and trusted origins.
NEXT_PUBLIC_APP_URLRequiredPublic storefront URL used in links, metadata, emails, and client-side app configuration.
OPENAI_API_KEYRequiredRequired for the AI Sales Agent. Without it, the storefront chat assistant stays unavailable.
WEB_PUSH_PUBLIC_KEYOptionalPublic VAPID key for browser push subscriptions. Generate with pnpm push:keys.
WEB_PUSH_PRIVATE_KEYOptionalPrivate VAPID key used by the server to sign push payloads. Keep it secret.
WEB_PUSH_SUBJECTOptionalVAPID subject, usually a mailto: address or your production app URL.

Generate BETTER_AUTH_SECRET fast

Run openssl rand -base64 32 in your terminal and paste the output as the value.

Settings-managed credentials

Payment gateways, SMTP email, OAuth, analytics, storage, SEO, shipping, order rules, and marketplace/POS behavior are configured from Admin -> Settings and saved in the database.

Chapter 06 · Database Setup

Connect MongoDB & seed data

Storify stores users, vendors, products, categories, orders, settings, payments, reviews, blog posts, inventory, and AI conversations in MongoDB.

  1. 1

    Create a MongoDB database

    Create a MongoDB Atlas cluster and database named storify, or prepare a self-hosted MongoDB instance.

    bash
    # MongoDB Atlas example
    MONGODB_URI=mongodb+srv://username:password@cluster0.mongodb.net/storify
    MONGODB_DB_NAME=storify
  2. 2

    Allow network access

    In MongoDB Atlas, add your local IP address for development and your hosting provider's outbound IPs for production.

    txt
    Atlas -> Network Access -> Add IP Address
  3. 3

    Seed demo data

    Loads demo settings, admin, vendors, customers, staff, categories, products, orders, coupons, collections, inventory locations, and sample store data.

    bash
    pnpm db:seed
  4. 4

    Reset only for testing

    Use reset only on a disposable database. It clears existing records before loading demo ecommerce data.

    bash
    pnpm db:reset

Production: skip the seed

Never run pnpm db:seed or pnpm db:reset against a live store database. They insert demo records and accounts intended for evaluation.

Chapter 07 · Running Locally

Start the dev server

Use dev for local work and build/start for production validation. The storefront, admin, vendor, staff, POS, and API routes all run from the same Next.js app.

  1. 1

    Start in development

    Hot reload, fast refresh, and source maps. Defaults to port 3000.

    bash
    pnpm dev
  2. 2

    Run a production build

    Compiles, optimizes, and runs the Next.js production server. Use this before deploying changes.

    bash
    pnpm build
    pnpm start
  3. 3

    Create a real admin

    For production, create your own admin account instead of relying on seed credentials.

    bash
    pnpm create-admin admin@yourdomain.com "StrongPassword123!" "Store Admin"

Change demo passwords

If you use seeded data for a staging preview, change all seeded passwords before exposing the URL to anyone else.

Chapter 08 · Settings Reference

Complete admin settings reference

Use this as the checklist for Admin -> Settings. It maps every visible settings page to the configuration it controls, so buyers know exactly where each store behavior is managed.

General Settings

Reference: Admin -> Settings -> General. Covers store name, description, email, phone, domain, address, logo, dark logo, favicon, timezone, default language, default currency, supported languages, and supported currencies.

Appearance

Reference: Admin -> Settings -> Appearance. Controls primary, secondary, and accent colors, theme mode, contrast, RTL, compact layout, navigation layout, navigation color, preset color, font family, and border radius.

Multi-Vendor Mode

Reference: Admin -> Settings -> Multi-Vendor Mode. Enables marketplace mode and vendor permissions for products, orders, store settings, analytics, payouts, and POS access.

Point of Sale (POS) Access

Reference: Admin -> Settings -> Point of Sale (POS) Access. Controls POS availability for admins, vendors, and sellers, default POS location, receipt behavior, smart grid, sounds, offline payments, payment methods, and return rules.

Inventory Locations

Reference: Admin -> Settings -> Inventory Locations. Creates active/default inventory locations used by admin stock, vendor stock, transfers, POS inventory, and fulfillment workflows.

Two-Factor Authentication

Reference: Admin -> Settings -> Two-Factor Authentication. Enables 2FA globally and can require it for admins and vendors.

OAuth / Social Login

Reference: Admin -> Settings -> OAuth / Social Login. Configures Google and Facebook login with client IDs, app IDs, and saved client secrets.

Security & Access Control

Reference: Admin -> Settings -> Security & Access Control. Covers email verification, vendor verification, session duration, login attempts, lockout duration, password policy, and rate-limit presets for admin, vendor, checkout, cart, coupon, and auth routes.

Payment Settings

Reference: Admin -> Settings -> Payment Settings. Configures Stripe, PayPal, Razorpay, Paystack, and cash-on-delivery, including public keys, saved secrets, webhook secrets, sandbox/live mode, order status sync, and connection tests.

Email Configuration (SMTP)

Reference: Admin -> Settings -> Email Configuration (SMTP). Controls SMTP enablement, host, port, username, saved password, from email, from name, SSL/TLS, email verification rules, vendor verification rules, and test email sending.

Order Settings

Reference: Admin -> Settings -> Order Settings. Controls order number prefix, tax rate, default shipping cost, free shipping threshold, vendor commission rate, and minimum withdrawal amount.

Shipping & Delivery

Reference: Admin -> Settings -> Shipping & Delivery. Configures shipping origin, processing days, estimated delivery display, shipping zones, flat/free-over/subtotal-range rates, fallback rates, and local pickup.

SEO Settings

Reference: Admin -> Settings -> SEO Settings. Manages meta title, meta description, meta keywords, Open Graph image, and robots.txt content for storefront SEO.

Social Media Links

Reference: Admin -> Settings -> Social Media Links. Stores Facebook, X/Twitter, Instagram, YouTube, LinkedIn, and TikTok URLs for storefront footer and public metadata.

Analytics Integration

Reference: Admin -> Settings -> Analytics Integration. Connects Google Analytics, Google Tag Manager, Facebook Pixel, TikTok Pixel, and Plausible, including self-hosted Plausible domain and API URL.

Maintenance Mode

Reference: Admin -> Settings -> Maintenance Mode. Enables a temporary maintenance screen, custom message, and optional allowed IPs for admin-safe access during updates.

Storage Settings

Reference: Admin -> Settings -> Storage Settings. Selects Cloudflare R2 or AWS S3, stores account/endpoint/region/bucket/access credentials, public CDN URL, upload path prefix, allowed MIME types, and max image/video/3D model size limits.

Settings route reference (replace en with your locale)
txt
/en/admin/settings/general
/en/admin/settings/appearance
/en/admin/settings/marketplace
/en/admin/settings/pos
/en/admin/settings/locations
/en/admin/settings/two-factor
/en/admin/settings/oauth
/en/admin/settings/security
/en/admin/settings/payment
/en/admin/settings/email
/en/admin/settings/orders
/en/admin/settings/shipping
/en/admin/settings/seo
/en/admin/settings/social
/en/admin/settings/analytics
/en/admin/settings/maintenance
/en/admin/settings/storage

Settings vs environment variables

Most store behavior is controlled from Admin -> Settings after deployment. Environment variables are still required for app bootstrapping, Better Auth, database connection, and server-only fallback secrets.

Recommended launch order

Configure General, Storage, Payment, Email, Shipping, SEO, Analytics, Security, then POS and Multi-Vendor Mode. Test checkout, upload, email, and login before going live.

Chapter 09 · Storage

Configure product media storage

Storify supports S3-compatible storage for product images, 3D model files, category thumbnails, blog images, and storefront media. Cloudflare R2 and AWS S3 are supported from admin settings.

  1. 1

    Create a bucket

    Create a Cloudflare R2 bucket or AWS S3 bucket for Storify uploads. Use a lowercase bucket name with numbers and hyphens only.

    txt
    storify-media
  2. 2

    Create scoped access credentials

    For R2, create an API token with Object Read & Write permission scoped to the bucket. For S3, create an IAM user or access key with least-privilege object access.

  3. 3

    Connect a public media URL

    For production, connect a custom domain such as assets.yourdomain.com. For local testing, an R2 public development URL can work.

    txt
    https://assets.yourdomain.com
  4. 4

    Verify uploads

    In Admin -> Settings -> Storage, save the provider settings and run the built-in test. Then upload a product image and a 3D model from the product editor.

Cloudflare R2 endpoint format
txt
https://<ACCOUNT_ID>.r2.cloudflarestorage.com

Keep write credentials server-only

Never expose storage access keys in NEXT_PUBLIC_* variables or client-side code. Only public media URLs should be browser-readable.

Chapter 10 · Payment Gateways

Configure checkout payments

Storify supports Stripe, PayPal, Razorpay, Paystack, and cash-on-delivery. Enable only the gateways you want from Admin -> Settings -> Payments.

  1. 1

    Add Stripe keys

    Open Admin -> Settings -> Payment Settings, enable Stripe, then enter the publishable key, secret key, and webhook secret. Saved secrets are hidden after save.

    Stripe fields
    txt
    Publishable Key
    Secret Key
    Webhook Secret
    Test connection
  2. 2

    Configure webhooks

    Point Stripe, Razorpay, and Paystack webhooks to the matching deployed endpoints so orders are marked paid after gateway confirmation.

    bash
    https://yourdomain.com/api/payments/webhook
    https://yourdomain.com/api/payments/razorpay/webhook
    https://yourdomain.com/api/payments/paystack/webhook
  3. 3

    Add PayPal, Razorpay, and Paystack

    Use sandbox/test keys first. Store credentials in Admin -> Settings -> Payment Settings, then test each enabled gateway before switching to live mode.

    Gateway fields
    txt
    PayPal: Client ID, Client Secret, Mode, Webhook ID
    Razorpay: Key ID, Key Secret, Webhook Secret
    Paystack: Public Key, Secret Key
    COD: Instructions, minimum amount, maximum amount
  4. 4

    Switch to live mode

    When ready, replace test keys with live keys, create production webhooks, make a small real payment, then verify order and transaction records.

Cash-on-delivery

COD does not require gateway keys. Enable it from payment settings if your store supports offline collection.

Chapter 11 · Email / SMTP

Wire up transactional email

Password resets, staff invites, order emails, abandoned checkout recovery, and customer notifications use the SMTP transport.

Resend

Simple for new stores. In Admin -> Settings -> Email Configuration, use smtp.resend.com as host and resend as username.

SendGrid

Good for higher send volume and mature sender reputation. Enter the SendGrid SMTP host, port, username, and API password in Email Configuration.

Postmark

Excellent for transactional email such as receipts, password reset, and order updates.

Generic SMTP

Works for testing and smaller shops. Use production-grade credentials before launch.

Verify your sender domain

Always set up SPF, DKIM, and DMARC for the From Email domain you configure in Admin -> Settings -> Email Configuration. Without domain authentication, store emails often land in spam.

Chapter 12 · AI, PWA & Push

Enable AI Sales Agent and app notifications

The AI Sales Agent helps shoppers with product advice, payment questions, delivery guidance, and buying decisions. PWA and web push make Storify feel app-like from the browser.

  1. 1

    Add OpenAI API key

    Set OPENAI_API_KEY in .env, then restart the app. The admin dashboard will show whether OpenAI is configured.

    bash
    OPENAI_API_KEY=your-openai-api-key-here
  2. 2

    Configure the assistant

    Open Admin -> AI Sales Agent to adjust prompt behavior, store context, suggested questions, and assistant availability.

  3. 3

    Generate push keys

    Run the bundled command and copy the public/private pair into .env.

    bash
    pnpm push:keys
  4. 4

    Set web push variables

    Paste the generated VAPID values into the web push keys from .env.example.

    bash
    WEB_PUSH_PUBLIC_KEY=your-web-push-public-key-here
    WEB_PUSH_PRIVATE_KEY=your-web-push-private-key-here
    WEB_PUSH_SUBJECT=your-web-push-subject-here
  5. 5

    Customize PWA assets

    Replace app icons and manifest assets under /public/pwa, then rebuild and test installability in Chrome or Edge.

Keep AI keys private

OPENAI_API_KEY must stay server-side. Never add it as NEXT_PUBLIC_OPENAI_API_KEY.

Chapter 13 · Branding & Theme

Customize the storefront

Storify includes admin-managed store settings plus code-level brand defaults. Use admin settings for day-to-day changes and source files for packaged defaults.

  1. 1

    Update general store settings

    Open Admin -> Settings -> General to set store name, default currency, supported currencies, timezone, colors, and other store-wide defaults.

  2. 2

    Customize online store content

    Use Admin -> Online Store and Admin -> Content to manage menus, homepage sections, pages, blog posts, collections, and promotional content.

  3. 3

    Change packaged defaults

    Edit config/branding.config.ts when you want the source package defaults to match your brand before seeding or deployment.

    config/branding.config.ts
    ts
    export const DEFAULT_STORE_NAME = "Storify";
    export const DEFAULT_CURRENCY = "USD";
    export const DEFAULT_PRIMARY_COLOR = "#2065D1";
  4. 4

    Replace favicons and PWA icons

    Update /public/favicon.svg, /public/pwa icons, and any storefront imagery you want bundled with the deployed app.

Chapter 14 · Multi-language

Add or edit languages

Storify ships with 15+ locale files and RTL-ready routing. Locales live under /locales and are loaded with next-intl.

  1. 1

    Edit existing strings

    Open /locales/<locale>.json and edit values directly. Changes hot-reload in development.

  2. 2

    Add a new language

    Copy /locales/en.json to /locales/<your-locale>.json and translate values. Then register the locale in the i18n config.

    lib/i18n
    ts
    // Example locale list
    ["en", "ar", "bn", "de", "es", "fr", "hi", "ja", "zh"]
  3. 3

    RTL support

    Arabic is included and should switch layout direction automatically. Test menus, checkout, product pages, and dashboards in RTL before launch.

  4. 4

    Currency settings

    Use Admin -> Settings -> General to set default currency and supported currencies. Test product prices, checkout totals, invoices, and POS totals after changes.

Chapter 15 · Deploy to Vercel

One-click deploy (recommended)

Vercel is the fastest path to production for most Storify buyers. Prepare environment variables, MongoDB Atlas, storage, and payment webhooks before launch.

  1. 1

    Push to a GitHub repo

    Create a private GitHub repo and push the source. Vercel will pull from it.

    bash
    git init
    git add .
    git commit -m "Initial Storify setup"
    git remote add origin git@github.com:you/storify.git
    git push -u origin main
  2. 2

    Import the repo into Vercel

    vercel.com -> New Project -> Import. Vercel auto-detects Next.js.

  3. 3

    Add environment variables

    Project Settings -> Environment Variables. Paste the keys from .env.example. Set NEXT_PUBLIC_APP_URL and BETTER_AUTH_URL to your production URL.

  4. 4

    Connect MongoDB Atlas

    Add Vercel's outbound access to MongoDB Atlas Network Access, then set MONGODB_URI in Vercel before deploying.

    bash
    MONGODB_URI=mongodb+srv://username:password@cluster0.mongodb.net/storify
  5. 5

    Update gateway webhooks

    After your production domain is live, add Stripe, Razorpay, and Paystack webhook URLs from the Payment Gateways section.

Chapter 16 · Deploy to VPS / Docker

Self-host on your own server

If you prefer your own server, Storify can run behind nginx or Caddy with a managed MongoDB connection or a self-hosted MongoDB container.

  1. 1

    Build and start the stack

    From the project root, build the images and run them in the background.

    bash
    docker compose up -d --build
  2. 2

    Seed only for evaluation

    Load demo records only when you are setting up a test or evaluation instance.

    bash
    docker compose exec app pnpm db:seed
  3. 3

    Front with Caddy

    Use nginx or Caddy to terminate TLS and proxy to localhost:3000. Caddy can provision Let's Encrypt automatically.

    Caddyfile
    nginx
    storify.yourdomain.com {
      reverse_proxy localhost:3000
    }
docker-compose.yml
yaml
services:
  app:
    build: .
    ports: ["3000:3000"]
    env_file: .env
    environment:
      MONGODB_URI: mongodb://storify:change-me@mongo:27017/storify?authSource=admin
      MONGODB_DB_NAME: storify
    depends_on: [mongo]
  mongo:
    image: mongo:7
    restart: unless-stopped
    environment:
      MONGO_INITDB_ROOT_USERNAME: storify
      MONGO_INITDB_ROOT_PASSWORD: change-me
    volumes:
      - mongodata:/data/db
    ports: ["27017:27017"]

volumes:
  mongodata:

Use a managed database when possible

Self-hosting MongoDB works, but you own backups, replication, and upgrades. MongoDB Atlas offloads that work.

Chapter 17 · Custom Domain & SSL

Point your domain at Storify

Once your app is live, route a custom domain to it. Both Vercel and Caddy can provision SSL certificates for free.

  1. 1

    Add an A or CNAME record

    For Vercel, add a CNAME pointing to cname.vercel-dns.com. For your VPS, point an A record at the server IP.

  2. 2

    Verify in Vercel or Caddy

    Vercel auto-verifies once DNS propagates. Caddy reissues the certificate on the next request.

  3. 3

    Update application URLs

    Switch NEXT_PUBLIC_APP_URL and BETTER_AUTH_URL to https://yourdomain.com and redeploy. These are used in emails, auth callbacks, and public metadata.

  4. 4

    Update external integrations

    Update payment webhooks, PayPal return/cancel URLs, storage public URL, and email sender links to use the production domain.

Chapter 18 · Admin & Roles

Set up store roles

After your first deploy, create real users and assign scoped roles for admin, vendors, staff/sellers, and customers.

  1. 1

    Create the production admin

    Use the create-admin script to create or upgrade a user to admin with a strong password.

    bash
    pnpm create-admin admin@yourdomain.com "StrongPassword123!" "Store Admin"
  2. 2

    Configure multi-vendor mode

    Use Admin -> Settings to enable or disable marketplace mode. In single-vendor mode, Storify uses the default main store vendor.

  3. 3

    Approve vendors

    Review vendor applications, approve or reject sellers, configure commission rates, and monitor payouts from the admin dashboard.

  4. 4

    Invite staff and sellers

    Create staff users for POS, inventory, orders, products, and customer workflows. Role-based permissions keep admin-only areas protected.

Do not share admin accounts

Shared logins break accountability. Create separate admin, staff, and vendor accounts for every real user.

Chapter 19 · Updates & Backups

Stay current and recoverable

Keep Storify updated while protecting your database, uploaded media, custom translations, and brand customizations.

  1. 1

    Download the latest build

    Download updates from your CodeCanyon account and compare the version against the changelog before merging.

  2. 2

    Diff and merge

    Use git or your favorite diff tool to merge new files. Review /locales, /public, config files, and any customized components carefully.

  3. 3

    Install and rebuild

    Install dependencies and run a production build after merging each release.

    bash
    pnpm install
    pnpm build
  4. 4

    Schedule database backups

    Use MongoDB Atlas automated backups or set up nightly mongodump on a VPS.

    bash
    # Cron: nightly backup at 02:00
    0 2 * * * mongodump --uri="$MONGODB_URI" --archive=/backups/storify-$(date +\%F).archive --gzip
  5. 5

    Back up uploaded media

    If you use R2 or S3, enable bucket lifecycle/versioning where possible and keep provider credentials safe.

Chapter 20 · Troubleshooting

Fix common issues

Most install problems fall into the same handful of buckets. Walk through these before opening a support ticket.

MONGODB_URI connection refused

Check username, password, database name, and Atlas Network Access allowlist. For self-hosted MongoDB, confirm authSource.

AI Sales Agent unavailable

Check OPENAI_API_KEY, restart the server, then verify Admin -> AI Sales Agent shows OpenAI configured.

Payment succeeds but order stays pending

Confirm the correct gateway webhook URL and webhook secret are configured for the same test/live mode as your keys.

Emails landing in spam

Set up SPF, DKIM, and DMARC for your sender domain. Resend and SendGrid have step-by-step UIs for this.

Product images or 3D models do not show

Check storage provider settings, public media URL, bucket permissions, file MIME type, and next.config.ts image remotePatterns.

pnpm install fails

Delete node_modules only, keep pnpm-lock.yaml, run corepack enable, then run pnpm install again.

Updates·Last updated May 15, 2026
↑ Back to top