Storify Setup & Installation
Everything you need to install, configure, and deploy Storify - from your first pnpm install to AI, payments, POS, and production hosting.
Overview
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.
Read sectionQuickstart
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.
Read sectionRequirements
Storify runs anywhere modern Node.js apps can run. These versions match the bundled package and are the supported baseline for buyer installs.
Read sectionDownload & Setup
Download from CodeCanyon, unzip the package, and install dependencies. Storify ships as a ready-to-run Next.js project.
Read sectionStorify 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.
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
Install dependencies
From the unzipped Storify source folder, install all packages with pnpm.
bashcd storify pnpm install - 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.
bashtouch .env - 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.
bashpnpm db:seed - 4
Start the dev server
Open http://localhost:3000. The seed command prints demo credentials in your terminal. Change all demo passwords before production.
bashpnpm dev
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.
Download from CodeCanyon, unzip the package, and install dependencies. Storify ships as a ready-to-run Next.js project.
- 1
Download from CodeCanyon
Sign in to CodeCanyon -> Downloads -> Storify. Choose 'All files & documentation'.
- 2
Unzip the package
Extract the archive to a permanent location. The main application folder is usually /storify.
bashunzip storify-v1.0.0.zip -d ~/projects/ cd ~/projects/storify - 3
Install dependencies
Storify uses pnpm for fast, deterministic installs. Run this once after every download or update.
bashpnpm install - 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.
bashpnpm lint pnpm test pnpm build
Use pnpm only
The lockfile is pnpm-only. Mixing package managers can corrupt dependency resolutions.
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.
# 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| Key | Required | Description |
|---|---|---|
MONGODB_URI | Required | MongoDB connection string for the Storify database. Use the local example for development or an Atlas URI in production. |
MONGODB_DB_NAME | Required | Database name used by app scripts, migrations, and admin creation commands. |
BETTER_AUTH_SECRET | Required | Random 32+ character secret used by Better Auth to sign sessions and auth state. Never commit a real value. |
BETTER_AUTH_URL | Required | Canonical app URL used by Better Auth for callbacks and trusted origins. |
NEXT_PUBLIC_APP_URL | Required | Public storefront URL used in links, metadata, emails, and client-side app configuration. |
OPENAI_API_KEY | Required | Required for the AI Sales Agent. Without it, the storefront chat assistant stays unavailable. |
WEB_PUSH_PUBLIC_KEY | Optional | Public VAPID key for browser push subscriptions. Generate with pnpm push:keys. |
WEB_PUSH_PRIVATE_KEY | Optional | Private VAPID key used by the server to sign push payloads. Keep it secret. |
WEB_PUSH_SUBJECT | Optional | VAPID 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.
Storify stores users, vendors, products, categories, orders, settings, payments, reviews, blog posts, inventory, and AI conversations in MongoDB.
- 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
Allow network access
In MongoDB Atlas, add your local IP address for development and your hosting provider's outbound IPs for production.
txtAtlas -> Network Access -> Add IP Address - 3
Seed demo data
Loads demo settings, admin, vendors, customers, staff, categories, products, orders, coupons, collections, inventory locations, and sample store data.
bashpnpm db:seed - 4
Reset only for testing
Use reset only on a disposable database. It clears existing records before loading demo ecommerce data.
bashpnpm 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.
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
Start in development
Hot reload, fast refresh, and source maps. Defaults to port 3000.
bashpnpm dev - 2
Run a production build
Compiles, optimizes, and runs the Next.js production server. Use this before deploying changes.
bashpnpm build pnpm start - 3
Create a real admin
For production, create your own admin account instead of relying on seed credentials.
bashpnpm 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.
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.
/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/storageSettings 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.
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
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.
txtstorify-media - 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
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.
txthttps://assets.yourdomain.com - 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.
https://<ACCOUNT_ID>.r2.cloudflarestorage.comKeep 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.
Storify supports Stripe, PayPal, Razorpay, Paystack, and cash-on-delivery. Enable only the gateways you want from Admin -> Settings -> Payments.
- 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 fieldstxtPublishable Key Secret Key Webhook Secret Test connection - 2
Configure webhooks
Point Stripe, Razorpay, and Paystack webhooks to the matching deployed endpoints so orders are marked paid after gateway confirmation.
bashhttps://yourdomain.com/api/payments/webhook https://yourdomain.com/api/payments/razorpay/webhook https://yourdomain.com/api/payments/paystack/webhook - 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 fieldstxtPayPal: 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
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.
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.
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
Add OpenAI API key
Set OPENAI_API_KEY in .env, then restart the app. The admin dashboard will show whether OpenAI is configured.
bashOPENAI_API_KEY=your-openai-api-key-here - 2
Configure the assistant
Open Admin -> AI Sales Agent to adjust prompt behavior, store context, suggested questions, and assistant availability.
- 3
Generate push keys
Run the bundled command and copy the public/private pair into .env.
bashpnpm push:keys - 4
Set web push variables
Paste the generated VAPID values into the web push keys from .env.example.
bashWEB_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
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.
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
Update general store settings
Open Admin -> Settings -> General to set store name, default currency, supported currencies, timezone, colors, and other store-wide defaults.
- 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
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.tstsexport const DEFAULT_STORE_NAME = "Storify"; export const DEFAULT_CURRENCY = "USD"; export const DEFAULT_PRIMARY_COLOR = "#2065D1"; - 4
Replace favicons and PWA icons
Update /public/favicon.svg, /public/pwa icons, and any storefront imagery you want bundled with the deployed app.
Storify ships with 15+ locale files and RTL-ready routing. Locales live under /locales and are loaded with next-intl.
- 1
Edit existing strings
Open /locales/<locale>.json and edit values directly. Changes hot-reload in development.
- 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/i18nts// Example locale list ["en", "ar", "bn", "de", "es", "fr", "hi", "ja", "zh"] - 3
RTL support
Arabic is included and should switch layout direction automatically. Test menus, checkout, product pages, and dashboards in RTL before launch.
- 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.
Vercel is the fastest path to production for most Storify buyers. Prepare environment variables, MongoDB Atlas, storage, and payment webhooks before launch.
- 1
Push to a GitHub repo
Create a private GitHub repo and push the source. Vercel will pull from it.
bashgit 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
Import the repo into Vercel
vercel.com -> New Project -> Import. Vercel auto-detects Next.js.
- 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
Connect MongoDB Atlas
Add Vercel's outbound access to MongoDB Atlas Network Access, then set MONGODB_URI in Vercel before deploying.
bashMONGODB_URI=mongodb+srv://username:password@cluster0.mongodb.net/storify - 5
Update gateway webhooks
After your production domain is live, add Stripe, Razorpay, and Paystack webhook URLs from the Payment Gateways section.
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
Build and start the stack
From the project root, build the images and run them in the background.
bashdocker compose up -d --build - 2
Seed only for evaluation
Load demo records only when you are setting up a test or evaluation instance.
bashdocker compose exec app pnpm db:seed - 3
Front with Caddy
Use nginx or Caddy to terminate TLS and proxy to localhost:3000. Caddy can provision Let's Encrypt automatically.
Caddyfilenginxstorify.yourdomain.com { reverse_proxy localhost:3000 }
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.
Once your app is live, route a custom domain to it. Both Vercel and Caddy can provision SSL certificates for free.
- 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
Verify in Vercel or Caddy
Vercel auto-verifies once DNS propagates. Caddy reissues the certificate on the next request.
- 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
Update external integrations
Update payment webhooks, PayPal return/cancel URLs, storage public URL, and email sender links to use the production domain.
After your first deploy, create real users and assign scoped roles for admin, vendors, staff/sellers, and customers.
- 1
Create the production admin
Use the create-admin script to create or upgrade a user to admin with a strong password.
bashpnpm create-admin admin@yourdomain.com "StrongPassword123!" "Store Admin" - 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
Approve vendors
Review vendor applications, approve or reject sellers, configure commission rates, and monitor payouts from the admin dashboard.
- 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.
Keep Storify updated while protecting your database, uploaded media, custom translations, and brand customizations.
- 1
Download the latest build
Download updates from your CodeCanyon account and compare the version against the changelog before merging.
- 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
Install and rebuild
Install dependencies and run a production build after merging each release.
bashpnpm install pnpm build - 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
Back up uploaded media
If you use R2 or S3, enable bucket lifecycle/versioning where possible and keep provider credentials safe.
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.