fashion apparel
Palette: warm cream + ink black + bordeaux.
Type: Fraunces (display) + Manrope (body).
Aesthetic: editorial, sharp edges, lots of whitespace.
Everything you need to customize, configure, and publish your store.
To run the project you need Node.js 18 or higher and npm.
node --version # should say v18.x.x or higher
npm --version
C:\dev\mystore instead of C:\Users\...\Desktop\My Store.npm install (1–3 minutes the first time).npm run dev and your browser opens at http://localhost:3000..njk files. No need to restart anything.
You only work in the src/ folder. The dist/ folder is generated automatically.
fundev-package/
├── package.json ← dependencies and scripts
├── package-lock.json ← exact versions (DO NOT delete)
├── gulpfile.js ← build pipeline
├── README.md ← short read
├── src/ ← YOU WORK HERE
│ ├── assets/
│ │ ├── images/ ← your client images
│ │ ├── js/
│ │ │ ├── main.js
│ │ │ └── modules/ ← logic per feature
│ │ └── scss/
│ │ ├── main.scss ← entry SCSS
│ │ ├── abstracts/ ← variables and mixins
│ │ ├── base/ ← reset, typography, design tokens
│ │ ├── themes/ ← _fashion, _furniture, _electronics
│ │ ├── layout/ ← header, footer, page-hero
│ │ ├── components/ ← buttons, cards, drawer, search
│ │ └── pages/ ← styles per page
│ └── views/
│ ├── *.njk ← one page = one file
│ ├── _layouts/ ← master layout
│ ├── _partials/ ← header, footer, drawers
│ ├── _macros/ ← SVG icons, productCard
│ └── _data/
│ ├── site.json ← ★ global configuration
│ ├── locales.json ← ★ countries presets
│ ├── navigation.json ← ★ menu and footer
│ ├── products.json ← ★ catalog
│ ├── home-content.json ← ★ home editorial copy
│ └── i18n.json ← UI strings dictionary
└── dist/ ← generated by npm run build
| Command | What it does |
|---|---|
npm run dev | Dev server at http://localhost:3000 with auto-reload. |
npm run build | Production build (minified) into dist/ ready to deploy. |
The file src/views/_data/site.json controls name, logo, language, contact, and other global options.
{
"name": "Your Store",
"tagline": "Your slogan",
"lang": "en",
"theme": "fashion", ← "fashion" | "furniture" | "electronics"
"country": "US", ← "US" | "MX" | "CA" | "GB" | "ES" | "AR" | "CO"
"url": "https://yourstore.com",
"brand": {
"logoText": "YourStore",
"logoMark": "✦"
},
"contact": {
"email": "hello@yourstore.com",
"phone": "+1 555 123 4567",
"city": "New York, NY"
},
"license": {
"type": "frontend", ← "frontend" or "premium"
"buyer": "Your Company",
"purchaseDate": "2025-01-15",
"createdBy": "FunDev Studio",
"createdByUrl": "https://fundevstudio.com"
},
"build": {
"version": "1.0.0",
"showThemeSwitcher": true, ← ⚠️ set to false in production
"showPremiumBanner": true ← ⚠️ set to false if you have Premium
}
}
showThemeSwitcher and showPremiumBanner to false so they don't show on your client's live site.
The template adapts automatically to 7 country presets. Set "country" in site.json and the currency, locale, postal code format, free-shipping threshold, and state list update.
| Code | Country | Currency | Free shipping over |
|---|---|---|---|
US | United States | USD ($) | $75 |
MX | México | MXN ($) | $1,500 |
CA | Canada | CAD ($) | $99 |
GB | United Kingdom | GBP (£) | £60 |
ES | Spain | EUR (€) | €70 |
AR | Argentina | ARS ($) | $50,000 |
CO | Colombia | COP ($) | $200,000 |
The presets live in src/views/_data/locales.json. To add a new country, add an entry there with currency, states, postal pattern, and shipping rates.
The template ships with 3 finished aesthetics. To switch between them, edit theme in site.json.
Palette: warm cream + ink black + bordeaux.
Type: Fraunces (display) + Manrope (body).
Aesthetic: editorial, sharp edges, lots of whitespace.
Palette: sand + terracotta + cocoa.
Type: Cormorant Garamond + Outfit.
Aesthetic: warm, organic, soft edges.
Palette: carbon black + gray + neon lime accent.
Type: Unbounded (display) + Manrope + JetBrains Mono.
Aesthetic: tech, dark, high contrast.
When showThemeSwitcher is on, a "Fashion · Furniture · Electronics" picker
appears at the bottom right. On click, not only colors and typography change —
visible products, menu items, categories, hero/editorial/promo copy, and the
top announcement change too. All in the same HTML, no reload.
data-theme-content="path.to.value" — points to a key in home-content.json. JS replaces text, src, or href on the element.data-theme-zone="featured|bestsellers|categories" — marks containers whose children are fully regenerated (product grids, category tiles).showThemeSwitcher: false and the site stays on the chosen theme from
site.json with no way to change it. The switcher is only a demo tool.
Home editorial copy (hero, editorial split, promo banner, etc.) lives in
src/views/_data/home-content.json, organized by theme. Edit that file to
change what the hero, subtitle, or CTAs say without touching HTML.
The main menu per theme lives in navigation.json. Each theme has its own
primary[] with category-specific sections (Women/Men for fashion, Living/Dining
for furniture, Audio/Computers for electronics).
The file src/views/_data/products.json has one object per theme. Each contains categories and items.
{
"id": "fa-001", ← required, unique
"name": "Linen shirt", ← required
"category": "clothing", ← required, must exist in categories
"price": 79, ← required
"comparePrice": 99, ← optional (price before discount)
"image": "https://.../photo.jpg", ← required
"variants": "XS · S · M · L", ← optional
"colors": "Beige · Black · White", ← optional
"badge": "new", ← optional: "new" | "sale" | "exclusive" | "bestseller" | null
"description": "Long product copy…", ← optional, used in /producto.html
"features": ["European linen", "..."], ← optional, bullet list
"sizes": ["XS","S","M","L"], ← optional, override of variants
"colorOptions": [ ← optional, override of colors
{ "name": "Beige", "hex": "#d6c4a8" }
]
}
Only id, name, category, price, and image are required. The detail page adapts to whatever is present.
Put your photos in src/assets/images/ and reference them as "image": "assets/images/photo.jpg". Files in src/assets/ are copied to dist/ on build.
| Page | File | Description |
|---|---|---|
| Home | index.njk | Hero, categories, featured, editorial, promo, benefits. |
| Catalog | catalogo.njk | Filters, sort, grid/list view. Accepts ?category=…. |
| Product detail | producto.njk | Gallery, variants, description, related. Reads ?id=…. |
| Checkout | checkout.njk | Form with validations + sticky summary. |
| Order confirmed | orden-confirmada.njk | Detail of the new order. |
| My account | cuenta.njk | Orders, data, addresses. Protected. |
| Sign in / Register | login.njk / registro.njk | Auth forms. |
| Reset password | recuperar.njk | Simulated form (real in Premium). |
| Favorites | favoritos.njk | Products saved with ❤️. |
| About us | nosotros.njk | Editorial, story, values, stats. |
| Contact | contacto.njk | Form + channels + FAQ. |
| 404 | 404.njk | Error page. |
| Documentation | docs.njk | This page. |
| License | licencia.njk | Template terms of use. |
Each feature lives in its own file in src/assets/js/modules/.
| Module | Purpose | Global API |
|---|---|---|
storage.js | Persistence (localStorage wrapper). | FD.Storage |
locale.js | Country presets, currency formatting, state lists. | FD.Locale |
auth.js | Simulated client-side auth (register, login, profile). | FD.Auth |
cart.js | Cart store. | FD.Cart |
cart-ui.js | Connects cart to DOM (drawer, counters, add-to-cart). | — |
wishlist.js | Persistent favorites. | FD.Wishlist |
api.js | API facade (replaces with fetch in Premium). | FD.Api |
auth-ui.js | Sign in/register/recover forms + header state. | — |
header.js | Sticky with blur on scroll. | — |
search.js | Live search + recents. | — |
catalog.js | Filters, sort, grid/list view. | — |
product-detail.js | PDP hydration, gallery, variants. | — |
checkout.js | Validation + order submission. | — |
account.js | My Account tabs + render of orders/data/addresses. | — |
wishlist-page.js | Renders the favorites page. | — |
announcement.js | Top bar rotator. | — |
theme-content.js | Re-paints header, home, and catalog when the theme changes (demo). | — |
Any exposed module is on window.FD.*. Useful for debugging:
FD.Cart.items() // see current cart
FD.Cart.clear() // empty cart
FD.Auth.currentUser() // see logged-in user
FD.Wishlist.ids() // see favorites
FD.Api.products.list({ category: 'clothing' })
Colors, typography, and geometry are controlled via CSS Custom Properties. Everything that changes between themes lives as a CSS variable.
:root)--fd-color-bg ← site background
--fd-color-fg ← primary text
--fd-color-primary ← brand color
--fd-color-accent ← accent color (CTAs, sales)
--fd-color-surface ← raised surfaces (cards)
--fd-color-border ← borders
--fd-color-muted ← secondary text
--fd-font-display ← title type
--fd-font-body ← body type
--fd-font-mono ← monospace (prices, SKUs)
--fd-radius-sm/md/lg/xl ← border radii
--fd-space-1..10 ← spacing scale (4px → 128px)
Edit src/assets/scss/themes/_fashion.scss (or whichever theme). The whole site reacts automatically.
site.json has showThemeSwitcher: false and showPremiumBanner: false (if you have Premium).npm run build.dist/ folder to your hosting.404.html on errors.dist/ to netlify.com/drop.npm run build, output dir dist.dist/ contents to the gh-pages branch.dist/ contents to public_html/.Depends on the license. The Commercial license allows using the template in paid client projects. See details on the license page.
In the Frontend version, orders are stored in the visitor's browser. No automatic email sending nor admin panel. That requires the Premium plan with backend.
Not in the Frontend version. The payment form validates card with Luhn, but doesn't process real payments. To integrate Stripe / MercadoPago / PayPal you need Premium.
Yes. Create a .njk file in src/views/ that extends _layouts/base.njk and fill the content block. After npm run build, the file shows up automatically in dist/.
Not in the same install. Each theme is a complete visual identity. To sell two unrelated categories, you do two separate installs. If you want a custom theme, we can do it (ask).
The template ships in English by default. You can translate the .njk files and the JSON content to any language. Adjust "lang" in site.json.
Pages are static so yes (after first load). Fonts come from Google Fonts; if you need 100% offline, download them and serve locally.
Open DevTools (F12) → Application → Local Storage → your domain → right click → Clear. Clears cart, users, favorites, and saved orders.