A premium, production-ready React 19 + TypeScript ecommerce template built for luxury beauty brands.
AuraSkin delivers a complete shopping experience with sophisticated design, meticulous attention to detail, and code quality that developers can be proud to customize and extend. This isn't a themed skeleton — it's a fully wired, fully populated storefront ready to launch or resell.
Why AuraSkin?
Most ecommerce templates force a trade-off: either the design looks premium and the code is a mess, or the code is clean and the design looks like a generic Bootstrap clone with "dark mode + gold" slapped on top.
AuraSkin refuses that trade-off. It pairs a genuine quiet luxury aesthetic — the kind you'd associate with Chanel or Aesop, not a random Envato template — with production-grade architecture that scales cleanly from a solo portfolio project to a full marketplace deployment.
Every component, every page, and every feature is wired up with realistic luxury cosmetics content. There's no Lorem Ipsum, no "Page Title Here" placeholders, and no dead links. Buyers get a complete, sellable template — not a skeleton they have to finish building themselves.
Design System
A Quiet Luxury Aesthetic
The visual language is deliberately understated: generous whitespace, refined typography, and restraint instead of flash. No aggressive CTAs, no neon gradients, no stock "ecommerce template" clichés. Opening AuraSkin should feel like walking into a high-end boutique, not scrolling through a discount storefront.
| Design Element | Implementation |
|---|---|
| Colors | OKLCH color space exclusively — no flat #000, #fff, or hard grays anywhere. Warm off-white backgrounds with muted gold accents |
| Typography | Playfair Display (headings, weight 600) paired with Lato (body, weight 400) — never substituted, never inconsistent |
| Animations | Four approved, purpose-built animations only — float, float-delayed, slow-zoom, pulse-slow. Every motion is gentle and intentional |
| Borders | Sharp edges throughout — no rounded-* classes anywhere. An architectural, editorial feel instead of the soft-corner sameness of most templates |
| Dark Mode | A full, considered dark mode with inverted luxury values — gold stays gold, cream becomes deep charcoal, contrast stays elegant |
Color Palette
Primary Text oklch(0.15 0.01 20) — Near-black
Background oklch(0.98 0.005 90) — Warm off-white
Accent / Gold oklch(0.65 0.15 75) — Muted gold hover states
Luxury Gold oklch(0.70 0.12 75) — Decorative accents
Luxury Cream oklch(0.97 0.01 85) — Card backgrounds
Luxury Beige oklch(0.88 0.02 80) — Secondary surfaces
Luxury Gray oklch(0.45 0.01 20) — Muted text
Using OKLCH instead of raw hex values means every color relationship stays perceptually consistent — hover states, dark mode inversions, and accent variants all feel like they belong to the same family instead of being guessed by eye.
Features
A Complete Ecommerce Flow, Not Just a Storefront Shell
| Feature | Details |
|---|---|
| Product Catalog | Filter by category, price range, and search. Sort by price, name, or featured. Paginated at 12 products per page |
| Product Detail | Full image gallery, tabbed content (features, benefits, ingredients), and related products |
| Cart | Add, remove, and update quantities with live subtotal calculation. Persisted to localStorage with cross-tab sync |
| Wishlist | One-click favoriting with a dedicated favorites page |
| Checkout | A real 3-step flow — Information → Payment → Review — with a free shipping threshold at $100 and an 8% tax rate baked in |
| Order Confirmation | A polished success page with a generated order number |
Three Fully Realized Product Categories
Every category ships with its own landing page, shop listing, and nested sub-category pages — not just a filtered product grid with a different banner.
- Skincare — Filter by skin concern (anti-aging, hydration, brightening, sensitive). Sub-categories: cleansers, serums, moisturizers, eye care, masks, sunscreen
- Makeup — Filter by finish (matte, satin, dewy, shimmer). Sub-categories: face, eyes, lips, tools
- Fragrance — Filter by type (Eau de Parfum, Eau de Toilette, and more)
11 Auth & Account Pages — Including the Ones Competitors Skip
Most templates ship a sign-in and sign-up page and call it done. AuraSkin covers the entire authentication lifecycle, including the edge cases real products actually need:
Sign in · Sign up · Forgot password · Reset password · Email verification (pending / success) · Resend verification · Session expired · Two-factor authentication · Account locked · Change password · Delete account
Support & Legal, Fully Built Out
- Support: Contact, Shipping info, Returns, FAQ, Track order
- Legal: Privacy policy, Terms of service, Cookie policy, Accessibility
- About: Company, Sustainability story, Press, Contact
A Home Page With 14 Composed Sections
Hero → Features → Shop by Skin Concern → Featured Collections → Bestsellers → How It Works → Ingredient Spotlight → Before/After Results → Testimonials → Press & Awards → Sustainability → Instagram Feed → Newsletter → Final CTA
A home page this fleshed out means buyers aren't stitching together sections themselves — the storytelling arc of a real luxury brand is already there.
Architecture
Monorepo Structure
app/ React 19 + Vite + Tailwind CSS 4
server/ Express 4 + TypeScript (minimal, ready for expansion)
Tech Stack
| Layer | Technology |
|---|---|
| Frontend | React 19, React Router 7, Vite 7, Tailwind CSS 4, TypeScript 5.9 |
| UI Components | Radix UI primitives, Lucide React icons, class-variance-authority |
| Forms | React Hook Form 7, Zod 4 validation |
| State | React Context + useReducer, localStorage persistence, cross-tab sync |
| Backend | Express 4, Helmet, Morgan, CORS, Compression |
| Code Quality | ESLint, Prettier, Husky, lint-staged, commitlint |
Every dependency is current, actively maintained, and chosen for a reason — not a bundle of whatever was trending when the template was first built.
Modular Page Architecture
Pages are composed of co-located section components inside components/partials/[page]/. Want to reorder the home page, drop a section, or add a new one? You're editing one folder, not hunting across a tangled codebase.
components/partials/
├── home/ 14 sections (hero, features, bestsellers, ...)
├── skincare/ landing + shop (filter-panel, products-section)
├── makeup/ landing + shop
├── fragrance/ landing + shop
├── products/ image-gallery, product-tabs, related-products
├── cart/
├── checkout/ stepper, 3 step components
├── favorites/
├── collections/
└── about/
Custom Hooks for Reusable Logic
useFilteredProducts(products, category, filterState) // Search, category, price filters
useSortedProducts(products, sortOption) // Price/name/featured sorting
usePaginatedProducts(products, page, perPage) // Pagination with safe bounds
These hooks decouple filtering, sorting, and pagination from any single page — reuse them anywhere a product list shows up, without duplicating logic.
Code Quality That Developers Will Actually Respect
Type-Safe Forms, Everywhere
Every form ships with a co-located validation file sitting right next to the component:
components/forms/auth/signin/
├── signin-form.tsx React Hook Form component
└── signin-form.validation.ts Zod schema + FormData type
No hunting through a shared validators.ts file to figure out what a form expects — the schema lives right where it's used.
Intelligent State Persistence
Cart and wishlist rely on a battle-tested localStorage pattern, not a fragile ad-hoc implementation:
- Lazy initialization — synchronous read from
localStorageon first render, avoiding React 18 StrictMode hydration races - Every state change persists — no "save" button required, ever
- Cross-tab sync — add an item in Tab A, see it appear in Tab B immediately
- Schema validation — malformed storage entries are silently dropped instead of crashing the app
Nested Routing With Type Guards
// /skincare/:slug handles both sub-categories and skin concerns
if (isSkincareCategory(slug)) { /* show category page */ }
else if (isSkinConcern(slug)) { /* show concern page */ }
One route, two distinct data shapes, resolved safely with type guards instead of stringly-typed conditionals.
Git-Enforced Code Quality
- Pre-commit lint — only lints staged files, never blocks on files you didn't touch
- Conventional commits — enforced via commitlint (
feat,fix,docs,style,refactor)
Code quality here isn't a suggestion in a README — it's enforced automatically before code ever reaches a commit.
Component Library
Shared Components
| Component | Description |
|---|---|
| Navbar | Fixed top bar with mega menu, mobile slide-in drawer, and scroll-aware transparency |
| Footer | Newsletter signup, 4 link columns, Paris contact info, social icons |
| ProductCard | Heart overlay, hover-revealed wishlist/cart row, image zoom |
| FavoriteButton | Three variants: icon (overlay), card (action row), detail (full-width) |
| CustomButton | Link-wrapped navigation button — primary and outline variants |
| CustomInput | Input, textarea, and select with luxury beige border styling |
| CustomPagination | Numbered pagination with ellipsis handling for large page counts |
UI Primitives (shadcn-style)
Button · Select · Checkbox — built on Radix primitives with class-variance-authority theming, so every state (hover, focus, disabled) is themed consistently out of the box.
What's Included
- ✅ 50+ fully wired routes — no dead links, no placeholder pages
- ✅ 40+ page components — every page has real content, not just a heading
- ✅ ~800-line product catalog — real luxury cosmetics data, not Lorem Ipsum
- ✅ Complete checkout flow — from cart to order confirmation
- ✅ 11 auth pages — including the edge cases competitors skip
- ✅ Full dark mode — every component, every page
- ✅ SEO-ready structure — semantic HTML, proper heading hierarchy
- ✅ Responsive design — mobile-first, 1 → 2 → 3/4 column grids
Quick Start
# Install dependencies
npm install
# Start development (frontend + backend)
npm run dev
# → app: http://localhost:5173
# → server: http://localhost:3000
# Build for production
npm run build
# Lint and format
npm run lint
npm run format
Two commands and you're looking at a running storefront — no configuration maze, no missing environment variables to guess at.
Files & Documentation
| Key File | Purpose |
|---|---|
CLAUDE.md |
AI guidance for working in the codebase |
.ai/design-guidelines.md |
Complete luxury design specification |
app/src/App.tsx |
All routes — start here to understand structure |
app/src/index.css |
Theme tokens, typography, animations |
app/src/hooks/useShop.ts |
Filter/sort/paginate hook implementations |
app/src/context/cart-context.tsx |
Cart state management pattern |
app/src/components/shared/navbar.tsx |
Mega menu implementation |
Documentation isn't an afterthought here — including AI-assistant guidance means the codebase is ready to extend with tools like Claude Code from day one.
Who This Is For
- Agencies building a luxury beauty or DTC storefront who don't want to start from a blank Vite config
- Solo developers who want a portfolio piece that looks and reads like a real product, not a tutorial project
- Resellers and template buyers who need something that's genuinely complete — every route wired, every page populated — so it can be customized and shipped, not finished
The Bottom Line
AuraSkin is what happens when a luxury design system and a production-grade React architecture are built together from the start, rather than one being bolted onto the other after the fact. It's not a proof of concept, and it's not a design mockup wearing a codebase — it's a complete, considered, ready-to-customize ecommerce template that respects both the eye of a designer and the standards of a developer who has to live in this code.
Frameworks and libraries 3
Languages and syntaxes 3
Databases 1
Developer workflow 2
Supported browsers
AuraSkin React Skincare Ecommerce Website Template
- From XGen Solutions
Promotional discount ends in 5 days
Use this item in one end product for personal or business projects and client work.
- Quality reviewed by Wrapmarket
- Instant access to downloads
- 14-day refund eligibility
- 6-month support period included