Current state
This commit is contained in:
259
.copilot/categories.md
Normal file
259
.copilot/categories.md
Normal file
@@ -0,0 +1,259 @@
|
||||
Nice, this is a **perfect use-case for Copilot AI Agent** 👍
|
||||
Below is a **clean, copy-paste ready Markdown file** you can put straight into your repo (e.g. `.copilot/categories.md`) and tell Copilot to follow.
|
||||
|
||||
This is written **explicitly for an AI agent**: clear goals, constraints, SQL, Laravel expectations.
|
||||
|
||||
---
|
||||
|
||||
````markdown
|
||||
# SkinBase – Category System (NEW SQL Structure)
|
||||
|
||||
This document defines the **new category & taxonomy system** for SkinBase.
|
||||
Copilot AI Agent must follow this structure strictly and MUST NOT reuse legacy logic.
|
||||
|
||||
---
|
||||
|
||||
## 🎯 Goals
|
||||
|
||||
- SEO-friendly URLs (no IDs in public routes)
|
||||
- Clear separation of content types (Photography, Skins, Wallpapers, etc.)
|
||||
- Unlimited category nesting
|
||||
- Laravel-friendly (Eloquent, migrations, relations)
|
||||
- Ready for sitemap, breadcrumbs, translations
|
||||
|
||||
---
|
||||
|
||||
## 🚫 Legacy System (DO NOT USE)
|
||||
|
||||
The old table `artworks_categories` is deprecated.
|
||||
|
||||
DO NOT:
|
||||
- use `section_id`
|
||||
- use `rootid`
|
||||
- use `num_artworks`
|
||||
- expose IDs in URLs
|
||||
- infer hierarchy from numeric hacks
|
||||
|
||||
---
|
||||
|
||||
## ✅ New Database Structure
|
||||
|
||||
### 1️⃣ content_types
|
||||
|
||||
Top-level sections (URL level 1)
|
||||
|
||||
```sql
|
||||
CREATE TABLE content_types (
|
||||
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
|
||||
name VARCHAR(64) NOT NULL,
|
||||
slug VARCHAR(64) NOT NULL UNIQUE,
|
||||
description TEXT NULL,
|
||||
created_at TIMESTAMP NULL,
|
||||
updated_at TIMESTAMP NULL
|
||||
) ENGINE=InnoDB;
|
||||
````
|
||||
|
||||
Examples:
|
||||
|
||||
* Photography → `photography`
|
||||
* Skins → `skins`
|
||||
* Wallpapers → `wallpapers`
|
||||
|
||||
Used in URLs as:
|
||||
|
||||
```
|
||||
/photography
|
||||
/skins
|
||||
/wallpapers
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 2️⃣ categories
|
||||
|
||||
Hierarchical categories (unlimited depth)
|
||||
|
||||
```sql
|
||||
CREATE TABLE categories (
|
||||
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
|
||||
content_type_id INT UNSIGNED NOT NULL,
|
||||
parent_id INT UNSIGNED NULL,
|
||||
|
||||
name VARCHAR(128) NOT NULL,
|
||||
slug VARCHAR(128) NOT NULL,
|
||||
|
||||
description TEXT NULL,
|
||||
image VARCHAR(255) NULL,
|
||||
|
||||
is_active BOOLEAN DEFAULT TRUE,
|
||||
sort_order INT DEFAULT 0,
|
||||
|
||||
created_at TIMESTAMP NULL,
|
||||
updated_at TIMESTAMP NULL,
|
||||
|
||||
UNIQUE KEY uniq_category_slug (content_type_id, slug),
|
||||
FOREIGN KEY (content_type_id) REFERENCES content_types(id),
|
||||
FOREIGN KEY (parent_id) REFERENCES categories(id) ON DELETE CASCADE
|
||||
) ENGINE=InnoDB;
|
||||
```
|
||||
|
||||
Hierarchy example:
|
||||
|
||||
```
|
||||
Photography
|
||||
├── Abstract
|
||||
├── Comic
|
||||
└── Dark
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 3️⃣ artwork_category (pivot)
|
||||
|
||||
```sql
|
||||
CREATE TABLE artwork_category (
|
||||
artwork_id INT UNSIGNED NOT NULL,
|
||||
category_id INT UNSIGNED NOT NULL,
|
||||
PRIMARY KEY (artwork_id, category_id),
|
||||
FOREIGN KEY (category_id) REFERENCES categories(id) ON DELETE CASCADE
|
||||
) ENGINE=InnoDB;
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🧭 Routing Rules (MANDATORY)
|
||||
|
||||
Public URLs MUST use slugs only.
|
||||
|
||||
### Category pages
|
||||
|
||||
```
|
||||
/{content_type}
|
||||
/{content_type}/{category}
|
||||
/{content_type}/{parent-category}/{category}
|
||||
```
|
||||
|
||||
Examples:
|
||||
|
||||
```
|
||||
/photography
|
||||
/photography/abstract
|
||||
/skins/desktop-shell
|
||||
```
|
||||
|
||||
### Artwork pages
|
||||
|
||||
```
|
||||
/photography/abstract/fresh-red-apple
|
||||
/skins/darkstep/minimal-dark-pro
|
||||
```
|
||||
|
||||
❌ Never expose numeric IDs in URLs.
|
||||
|
||||
---
|
||||
|
||||
## 🧠 Laravel Eloquent Relations
|
||||
|
||||
Copilot MUST generate models with these relations:
|
||||
|
||||
```php
|
||||
ContentType hasMany Categories
|
||||
Category belongsTo ContentType
|
||||
Category hasMany Categories (children)
|
||||
Category belongsTo Category (parent)
|
||||
Artwork belongsToMany Categories
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔍 Querying Logic
|
||||
|
||||
Lookup must be done by slug, not ID.
|
||||
|
||||
Example:
|
||||
|
||||
```php
|
||||
$contentType = ContentType::whereSlug($type)->firstOrFail();
|
||||
$category = Category::whereSlug($slug)
|
||||
->where('content_type_id', $contentType->id)
|
||||
->firstOrFail();
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📈 SEO Rules
|
||||
|
||||
* One canonical URL per category
|
||||
* Breadcrumbs must reflect hierarchy
|
||||
* Pagination via `?page=X`
|
||||
* Filters MUST use query params and be `noindex`
|
||||
|
||||
---
|
||||
|
||||
## 📦 Migration
|
||||
|
||||
Legacy data has already been converted.
|
||||
|
||||
Migration SQL file:
|
||||
|
||||
```
|
||||
/mnt/data/skinbase_categories_migration.sql
|
||||
```
|
||||
|
||||
Copilot must NOT regenerate category data.
|
||||
|
||||
---
|
||||
|
||||
## ❗ Hard Rules for AI Agent
|
||||
|
||||
* DO NOT invent new tables
|
||||
* DO NOT mix legacy and new schema
|
||||
* DO NOT store counters in categories
|
||||
* DO NOT assume only 2 levels of depth
|
||||
* ALWAYS use slugs
|
||||
|
||||
---
|
||||
|
||||
## ✅ Result Expectation
|
||||
|
||||
After integration:
|
||||
|
||||
* SEO-clean URLs
|
||||
* Stable taxonomy
|
||||
* Easy sitemap generation
|
||||
* Future-ready for translations
|
||||
|
||||
END OF SPEC
|
||||
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ✅ How to use this
|
||||
|
||||
1. Save as:
|
||||
```
|
||||
|
||||
.copilot/skinbase-categories.md
|
||||
|
||||
```
|
||||
|
||||
2. In VS Code Copilot Chat:
|
||||
```
|
||||
|
||||
Use .copilot/skinbase-categories.md as the authoritative spec.
|
||||
Integrate category system accordingly.
|
||||
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
If you want next, I can:
|
||||
- ✍️ generate **Laravel migrations**
|
||||
- 🧠 generate **Eloquent models**
|
||||
- 🧭 generate **routes + controllers**
|
||||
- 🔁 generate **301 redirect mapping**
|
||||
- 🗺 generate **XML sitemap logic**
|
||||
|
||||
Just tell me what Copilot should build next 🚀
|
||||
```
|
||||
Reference in New Issue
Block a user