# IndieForge

IndieForge is a frontend-only game asset marketplace demo for indie developers, students, artists, and small studios. It is built with HTML, CSS, and classic vanilla JavaScript. The product catalog, creator profiles, preview artwork, prices, ratings, and popularity scores are fictional local demonstration data.

**Create Worlds. Find Your Assets.**

## Features

- Discover page with featured assets, category counts, predefined popularity examples, free sample listings, and creator profiles.
- Local catalog of 36 assets across 2D art, 3D models, textures, audio, UI kits, animation, game templates, and VFX.
- Search across titles, descriptions, categories, creators, tags, supported engines, and formats.
- Combined filters for category, subcategory, free price, price range, minimum rating, engine, format, license, and tags.
- Sorting by featured, popularity, rating, price, and release date; grid/list display and progressive loading.
- Product detail pages with preview gallery, local creator links, related items, tags, fictional review examples, and demo metadata.
- Quick-view dialogs, recently viewed items, synchronized wishlist and cart counts, and local cart totals.
- Cart preview that requires an explicit checkbox before showing a demo confirmation. It never processes a payment or purchase.
- Creator profiles with calculated asset counts and average sample rating.
- Local creator dashboard with editable display name, avatar, and theme preference.
- Dark, light, and system themes, responsive filter drawer, keyboard search shortcut, modal focus handling, and reduced-motion support.
- Original locally stored SVG artwork; no product data or images are requested from a service.

## Files

```text
indieforge/
├── index.html
├── css/
│   ├── style.css
│   ├── components.css
│   ├── pages.css
│   ├── responsive.css
│   ├── overrides.css
│   └── mobile-fixes.css
├── js/
│   ├── data.js
│   ├── storage.js
│   ├── app.js
│   ├── catalog.js
│   ├── product.js
│   ├── cart.js
│   ├── wishlist.js
│   ├── creator.js
│   └── dashboard.js
├── assets/
│   ├── images/
│   │   ├── products/
│   │   ├── creators/
│   │   └── banners/
│   └── icons/
└── README.md
```

The site is a single-page experience with query-string routes. Examples include `index.html?page=catalog&category=2D%20Assets`, `index.html?page=product&id=p-meadow`, `index.html?page=creator&creator=c-moss`, and `index.html?page=cart`.

## Run locally

Open `index.html` directly in a current browser. No build tools, package manager, server, API, or external product service is needed. All artwork previews use local SVG files.

## Local data and limitations

`js/data.js` is the source for product and creator catalog data. `js/storage.js` validates saved product IDs and persists theme, cart, wishlist, recent items, display preference, and the local demo profile in `localStorage`. Browser storage can be edited or cleared by the user and does not provide authentication or access control.

Every asset, price, review count, rating, popularity score, creator, and review excerpt is fictional. The included artwork is illustrative preview art, not a representation of downloadable source files. There are no real downloads, purchases, payment collection, verified creators, external profiles, email subscriptions, or backend collaboration.

## Add products

Add a row to `rows` in `js/data.js`. Rows provide a product ID, title, category, subcategory, price, creator ID, description, motif, compatibility, a tag array, comma-separated engine and format strings, sample rating and count, popularity score, featured flag, and new flag. The catalog normalizes those values into the product fields used by search and filters. `isFree` is derived from `price === 0`.

Use a category that is listed in `IF.categories`; assign its local preview artwork through `artFor`. Keep the displayed rating, count, license, file-size estimate, and release date clearly understood as fictional demo metadata.

## Add creators

Add a creator object to `IF.creators` with a unique ID, name, specialty, biography, local avatar and banner paths, and sample join date. Product membership is recalculated from the products' `creatorId` values.

## Add preview art

Place locally authored SVG preview files in `assets/images/products/`, creator portraits in `assets/images/creators/`, and banner art in `assets/images/banners/`. Update the mapping in `js/data.js` or a product's preview image path. Keep alt text descriptive, and label previews as illustrative when they are not actual asset contents.

## Future backend options

The current state operations are centralized in `storage.js`. A future version could replace that local adapter with an API layer, add a relational catalog and creator accounts, and implement real purchase, licensing, and download flows. Those services are outside this demo's scope.
