A complete, production-ready e-commerce frontend built with Next.js — including Fashion, Beauty, and Jewelry storefronts and a full Admin Dashboard, ready to customize and connect to your own backend or API.
Thank you for purchasing AyanTheme! AyanTheme is a modern e-commerce template built on Next.js, designed for online stores that need a fast, animated, premium storefront out of the box.
AyanTheme ships with three complete, independent demos — Fashion, Beauty, and Jewelry — each with its own layout style, color palette, and product-page variations, so you can launch a store that matches your niche without starting from scratch. It also includes a full Admin Dashboard with its own separate login, for managing products, orders, promotions, shipping and users. The interface is fully translatable and ships with English and Arabic (full RTL) out of the box.
A bold, editorial storefront for apparel brands: lookbook sliders, size & color variations, and a fast filterable shop. Ships with 3 home styles, 3 product-page styles, a product list, 3 About and 3 Contact layouts, plus FAQ and Help Center.
Live preview: next.ayantheme.com/en/fashion
A soft, ingredient-focused layout for cosmetics and skincare: shade pickers, routine bundles, and rich product reviews. Same page set as Fashion — 3 home styles, 3 product-page styles, product list, About/Contact variants, FAQ and Help Center.
Live preview: next.ayantheme.com/en/beauty
A quiet luxury layout for jewelry: macro imagery, material specs, gift packaging options, and elegant motion. Same page set as Fashion and Beauty — 3 home styles, 3 product-page styles, product list, About/Contact variants, FAQ and Help Center.
Live preview: next.ayantheme.com/en/jewelry
A complete store management dashboard, kept entirely separate from the customer-facing account area with its own login flow:
Admin sign-in: /account-admin/sign-in · Dashboard: /admin — both gated separately from the customer account area (/user) via the ADMIN_ROOT_URL / USER_ROOT_URL environment variables. See Section 4.
The customer account panel provides a dedicated area for customers to manage their account activity and information:
Also included:
| Requirement | Version / Notes |
|---|---|
| Node.js | 20.9 or later
(Node.js 22.x recommended; development tested with Node.js 22.13.1) |
| Package manager | npm, yarn, or pnpm |
| Next.js |
15.5.x — App Router based project
|
| React | 19.x |
| Code editor | Any modern code editor (VS Code recommended) |
AyanTheme is a frontend template — no database or backend server is required to run the included interface. Authentication uses signed JWT session cookies (no database adapter), and storefront content is served from the included placeholder JSON data until you connect your own API.
Follow these steps exactly, in order:
npm install
or yarn install / pnpm install, depending on the package manager you prefer.
cp .env.example .env.local
Then open .env.local and fill in the required values. See the table below.
npm run dev
Open http://localhost:3000 in your browser.
npm run build
npm run start
| Variable | Description |
|---|---|
ASSET_PREFIX | CDN base URL prepended to static asset paths (images, JS/CSS chunks, etc.) — leave empty to serve assets from the same domain as the site |
BASE_PATH | Only needed if the site is hosted under a subfolder instead of the domain root (e.g. example.com/store) — leave empty otherwise |
DOMAIN / PROTOCOL | Hostname and scheme of the deployed site, used together to build absolute URLs on the server (e.g. middleware locale redirects) when the incoming request isn't available — must match your real domain in production, not localhost |
API_URL | Base URL of the backend/API the frontend fetches data from |
SITE_URL | Public URL of the site itself — used for canonical links, sitemap.xml, robots.txt, and Open Graph/social meta tags |
NEXTAUTH_URL | Full public URL of the deployed site, required by NextAuth to build auth callback URLs — must match your real domain in production |
JWT_SECRET | Random secret string used to sign JWTs — generate a unique value per deployment, e.g. openssl rand -base64 32, never reuse the example value |
NEXTAUTH_SECRET | Random secret string NextAuth uses to sign/encrypt session tokens — generate a separate unique value per deployment |
SIGNIN_URL / SIGNUP_URL / SIGNOUT_URL / ERROR_URL / VERIFY_REQUEST_URL | Custom auth page routes for the customer account sign-in flow |
SIGNIN_URL_ADMIN / SIGNUP_URL_ADMIN / SIGNOUT_URL_ADMIN / ERROR_URL_ADMIN / VERIFY_REQUEST_URL_ADMIN | Same as above, but for the separate admin login flow |
USER_ROOT_URL / ADMIN_ROOT_URL | Base path for the customer account area (/user) and admin dashboard (/admin) — used by middleware to detect which routes require a logged-in session |
AyanTheme follows a clean, domain-driven folder structure so related code stays together and is easy to customize:
src/
├── demos/ # Demo-specific pages & UI (one folder per demo)
│ ├── fashion/
│ ├── beauty/
│ └── jewelry/
├── domains/ # Shared business logic, organized by feature
│ ├── cart/
│ ├── product/
│ └── shipping/
└── shared/ # Shared components, hooks, and utilities
You generally won't need to touch anything inside domains/ or shared/ unless you're changing core functionality. Day-to-day customization (colors, content, layout tweaks) happens inside demos/{demo-name}/.
Each demo lives at its own route under a locale prefix (e.g. en, ar) — there is no build-time flag or environment variable to set. All three demos run side by side from the same codebase:
| Demo | Base Route | Example (EN) |
|---|---|---|
| Fashion | /[locale]/fashion | next.ayantheme.com/en/fashion |
| Beauty | /[locale]/beauty | next.ayantheme.com/en/beauty |
| Jewelry | /[locale]/jewelry | next.ayantheme.com/en/jewelry |
Within a demo, each page that has multiple style variants (Home, Product, About, Contact) is selected with a style query parameter. The first style is the default and needs no parameter:
/en/fashion → Home, Style 1 (default)
/en/fashion?style=style2 → Home, Style 2
/en/fashion?style=style3 → Home, Style 3
/en/fashion/product/2?style=style2 → Product page, Style 2
/en/fashion/about?style=style3 → About page, Style 3
Pages with a single layout — Shop/product list, FAQ, Help Center, and Size Guide — don't take a style parameter, e.g. /en/fashion/search, /en/fashion/faq, /en/fashion/help-center, /en/fashion/size-guide.
src/demos/ and their routes — the shared domains/ and shared/ code is used by all three, so nothing else needs to change. This step is optional; most buyers keep all three demos available.Because AyanTheme is a Next.js application, it does not use a one-click WordPress-style installer. It needs to be built and hosted on a Node.js-capable environment.
vercel.com..env.local in the Vercel project settings.npm run build on the server (or upload the built output).npm run start to serve the production build.All color values are centralized so you can re-skin the entire template without touching component code:
_colors.scss — raw color palette variables._light.scss — the $light-themes map, mapping semantic tokens (primary, secondary, accent, base, text, surface, background, and a lightest–darkest scale) to the raw palette._dark.scss — the equivalent $dark-themes map used automatically when Dark Mode is on.Which palette is active is controlled by a single CSS class on <body> — matching the palette's key in $light-themes/$dark-themes (default, theme2, theme3, theme4, theme5). This class comes from settings.theme (see appSettings / the initial settings API) and is applied in the root layout: <body className={settings.theme}>. To re-theme a demo by default, change that value; to let visitors switch palettes live, they can use the floating Theme Switcher panel (palette icon, bottom of the screen) — built from ThemeSwitcher and StyleSwitcher in domains/core/presentation/components/, which also toggles Dark Mode and RTL and persists the palette choice to localStorage.
To re-theme a demo, update the token values in _light.scss — every component that references these tokens updates automatically.
?style=styleN query parameter — see Section 6.src/demos/fashion/pages/home/style2/lookbook.tsx (Style 2) and src/demos/fashion/pages/home/style3/editoral-lookbook.tsx (Style 3).src/demos/fashion/pages/home/style1/product-category.tsx (Style 1) and src/demos/fashion/pages/home/style2/product-category-tab.tsx (Style 2).src/demos/beauty/pages/home/style{N}/ — e.g. main-slider-video.tsx (Style 2) or main-slider-half-blur.tsx (Style 3).src/demos/beauty/pages/home/style2/brand-story.tsx.?style=styleN query parameter — see 8.1 and Section 6.?style=styleN query parameter — see 8.1 and Section 6.src/demos/jewelry/pages/home/style3/scroll-storytelling.tsx.Scroll-based animations — pinned sections, scroll-stacking cards, and parallax image reveals — are built with GSAP and ScrollTrigger. Each animated component creates its ScrollTrigger inside a gsap.context() and cleans it up with ctx.revert() on unmount, so animations don't leak between page navigations. To disable or reduce animation on a specific component, open that component's file and either comment out the gsap.context()/useEffect block that registers its ScrollTrigger tween, or replace the tween's values with a static end-state (e.g. set the target element's final opacity/position directly instead of animating to it).
Smooth scrolling is powered by Lenis, synced to GSAP's ticker (gsap.ticker.add()) so ScrollTrigger positions stay accurate. Scroll weight/inertia is controlled by Lenis' lerp value — lower values (around 0.04–0.06) give a slower, heavier scroll feel; higher values feel snappier. Adjust it in src/shared/utils/lenis-instance.ts.
Product and content sliders use Swiper.js. Slide count, spacing, and breakpoints can be adjusted in each slider component's Swiper configuration props.
Text is managed through next-intl with locale-prefixed routes (/en, /ar), so all UI copy is translatable without editing component code. AyanTheme ships with English and Arabic (including full RTL) today; more locales can be added over time.
public/locales/{locale}.json — e.g. public/locales/en.json and public/locales/ar.json.i18n.ts (the routing config imported as @/root/i18n).The following third-party libraries and assets are used in this template. If you replace any included placeholder image, font, icon, or other asset with a third-party resource, make sure you have the appropriate rights or license to use and redistribute that resource. Keep this list accurate when assets are added or replaced.
| Asset | Type | License / Source |
|---|---|---|
| GSAP + ScrollTrigger | Animation library | Free for commercial use under GSAP's standard license (all GSAP tools became free as of April 2025) — gsap.com/licensing |
| Lenis | Smooth scroll library | MIT — github.com/darkroomengineering/lenis |
| Swiper.js | Slider library | MIT — swiperjs.com |
| Framer Motion | Animation library | MIT — framer.com/motion |
| Outfit, Poppins, Playfair Display, Inter, Righteous, Nanum Gothic | Fonts (self-hosted, local .woff2/.woff files under public/assets/fonts/) | SIL Open Font License 1.1 — free for commercial use, including bundling the font files inside a resold template. Sourced from Google Fonts. |
| Lucide | Icon set | ISC License — free for commercial use, including redistribution — lucide.dev/license |
Live demo product & lifestyle photos (preview only, at next.ayantheme.com) | Images (live demo only — not included in the download) | Demo-only imagery |
| Placeholder product & lifestyle photos (included in the download) | Images (included in the download) | Self-made — simple placeholder images with matching pixel dimensions and aspect ratios for the corresponding demo image |
Yes. Each demo runs at its own route (/fashion, /beauty, /jewelry) — see Section 6. If you only need one, you can remove the other two demo folders; nothing else needs to change.
No — AyanTheme, including the customer account panel and Admin Dashboard, is a frontend template with no bundled database or backend service. The included demo login does not validate usernames or passwords; any username and password combination can be used to enter the respective panel. Storefront and dashboard content is served from the included placeholder JSON data. Connect the template to your own API, database, and production authentication system when you're ready.
Yes. The API base URL is set once via the API_URL environment variable (see the table above) and read through Envs.API_URL in src/shared/utils/config.ts. Each domain's data-fetching files — e.g. domains/product/infrastructure/services/product-api.ts, domains/order/infrastructure/services/order.api.ts — build their requests from that base URL, so pointing API_URL at your own backend routes the storefront and Admin Dashboard through it; no per-file URL changes are needed unless your API's endpoint paths differ from the defaults. You should also connect the customer and admin login flows to your own authentication and credential-validation service for production use.
Yes. Customers sign in through /account/sign-in and access the customer account area at /user. Administrators sign in separately through /account-admin/sign-in and access the management dashboard at /admin.
For demonstration purposes, the included login implementation does not validate the entered username and password against a real credential store or authentication service. Any username and password combination can be used to enter the respective panel. For production use, connect both login flows to your own secure authentication and credential-validation system.
Usage rights depend on the license or purchase terms provided by the marketplace or distributor where you obtained the template. Please check the license terms associated with your purchase.
English and Arabic (including full RTL) ship today — see Section 9. More locales can be added following the same pattern.
Not yet — WordPress and Shopify editions are planned as separate, independent items with their own codebases (design-matched, not code-shared). This documentation covers the Next.js edition only.
See Section 8.5.
Before contacting support, please check the sections above and the FAQ — most questions are already answered here.
support@ayantheme.com (primary) or ayantheme@gmail.comSupport requests are typically answered within 1–2 business days.| Version | Date | Notes |
|---|---|---|
| 1.0.0 | September 2026 | Initial release — Fashion, Beauty, and Jewelry demos. |