---
# System prepended metadata

title: Product Page

---

# Product Page

## Variant Page

**variant_pages**
step 1

| Name               | Type                    | Desc                    |
|:------------------ | ----------------------- |:----------------------- |
| product_variant_id | int                     | index                   |
| title_id           | varchar(255)            | index                   |
| title_en           | varchar(255)            | index                   |
| subtitle_id        | varchar(255)            | index                   |
| subtitle_en        | varchar(255)            | index                   |
| asset_id | int            |          index               |
| slug               | varchar(255)            | index unique            |
| status             | varchar(255)            | draft, active, archived (index)|
| deleted_at         | timestamp with timezone | index                   |

ketika get detail .../products/sticker-bulat

sticker-bulat -> variant_slug_histories
jika ada return ,

```jsonld=
{
    "redirect": true,
    //fe suruh pilih return slug ato url
    "new_slug": "sticker-circle", //get dari variant-pages
    "new_url": "kame.co.id/products/sticker-circle"
}
```
return get detail 
check if count slug histories == 3, editable_slug = false
```json=
{
    ...
    "slug_edit_limit_remaining": 1,
    "editable_slug": true|false
}

```

**variant_slug_histories**
step 1

| Name            | Type                      | 
| --------------- | ------------------------- | 
| variant_page_id | references(variant_pages) | 
| slug        | varchar(255) *unique*             | 



**variant_page_headers**
step 2,3,4
| Name                            | Type                    | Desc                              |
| ------------------------------- | ----------------------- | --------------------------------- |
| variant_page_id                 | int                     | index                             |
| summary_section_title           | jsonb                   | default:{'id':'','en':''} step 2  |
| video_section_title             | jsonb                   | default: {'id': '', en:''} step 3 |
| video_section_video_url         | varchar(255)            | step 3                            |
| implementation_section_title    | jsonb                   | default: {'id': '', en:''} step 4 |
| implementation_section_subtitle | jsonb                   | default: {'id': '', en:''} step 4 |
| deleted_at                      | timestamp with timezone | index                             |

**variant_page_product_summaries**
step 2
| Name            | Type                    | Desc                      |     |
|:--------------- |:----------------------- | ------------------------- | --- |
| variant_page_id | int                     | index                     |     |
| title           | jsonb                   | default: {id: '', en: ''} |     |
| subtitle        | jsonb                   | default: {id: '', en: ''} |     |
| asset_id        | int            |      index                     |     |
| position        | int                     |                           |     |
| cta_name        | jsonb                   | default: {id: '', en: ''} |     |
| cta_url         | varchar(255)            |                           |     |
| deleted_at      | timestamp with timezone | index                     |     |


**variant_page_product_videos**
step 3

| Name            | Type                    | Column 3                   |
| --------------- |:----------------------- | -------------------------- |
| variant_page_id | int                     | index                      |
| title           | jsonb                   | default: {'id': '', en:''} |
| subtitle        | jsonb                   | default: {'id': '', en:''} |
| position        | int                     |                            |
| asset_id        | int            |        index                    |
| deleted_at      | timestamp with timezone | index                      |

**variant_page_implementation_details**
step 4
| Name            | Type                    | Column 3 |
| --------------- |:----------------------- |:-------- |
| variant_page_id | int                     | index    |
| asset_id       | int            |    index      |
| position        | int                     |          |
| deleted_at      | timestamp with timezone | index    |

**variant_page_seos**
step 6

| Name             | Type                    | Column 3                   |
| ---------------- | ----------------------- | -------------------------- |
| variant_page_id  | int                     | index                      |
| title            | jsonb                   | default: {'id': '', en:''} |
| meta_description | jsonb                   | default: {'id': '', en:''} |
| keywords          | jsonb                   | default:[]                 |
| seo_footer       | jsonb                   | default: {'id': '', en:''} |
| deleted_at       | timestamp with timezone | index                     

**variant_page_seo_keywords**

| Name | Type | Column 3 |
| -------- | -------- | -------- |
| variant_page_id     | int     | index     |
| keyword_id | int | index

**variant_page_spec_keys**
step 1
visibility:
- basic show & advance show (1)
- basic hide & advance show (2)
- basic hide & advance hide (3)

| Name            | Type                    | Column 3                   |
| --------------- | ----------------------- | -------------------------- |
| variant_page_id | int                     | index                      |
| spec_key_id     | int                     | index                      |
| label            | jsonb                   | default: {'id': '', en:''} |
| visibility      | int                     | 1,2,3                      |
| position                | int                        |                            |
| deleted_at      | timestamp with timezone | index                      |

**variant_page_spec_values**

| Name                     | Type                    | Desc                       |
| ------------------------ | ----------------------- |:-------------------------- |
| variant_page_spec_key_id | int                     | index                      |
| label                    | jsonb                   | default: {'id': '', en:''} |
| spec_value_id                         |   int                      |     index                       |
| visibility               | int                     | 1,2,3                      |
| position                 | int                     |                            |
| deleted_at               | timestamp with timezone | index                      |

## Category Page
**category_pages**
step 1

| Name        | Type                    | Column 3                        |
| ----------- | ----------------------- | ------------------------------- |
| title_id    | varchar(255)            | index                           |
| title_en    | varchar(255)            | index                           |
| subtitle_id | varchar(255)            | index                           |
| subtitle_en | varchar(255)            | index                           |
| slug        | varchar(255)            | index unique                    |
| asset_id    | varchar(255)            |                                 |
| status      | varchar(255)            | draft, active, archived (index) |
| deleted_at  | timestamp with timezone | index                           |

**category_variant_pages**
step 1

| Name             | Type                    | Column 3                   |
| ---------------- | ----------------------- | -------------------------- |
| category_page_id | int                     | index                      |
| variant_page_id  | int                     | index                      |
| variant_title    | jsonb                   | default: {'id': '', en:''} |
| asset_id | varchar(255)            |                            |
| deleted_at       | timestamp with timezone | index                      |

**category_page_headers**
step 2
| Name                                   | Type                    | Desc                      |
| -------------------------------------- | ----------------------- | ------------------------- |
| category_page_id                       | int                     | index                     |
| implementation_detail_section_title    | jsonb                   | default:{'id':'','en':''} |
| implementation_detail_section_subtitle | jsonb                   | default:{'id':'','en':''} |
| deleted_at                             | timestamp with timezone | index                     |

**category_page_product_images**
step 2

| Name             | Type                    | Column 3 |
| ---------------- | ----------------------- | -------- |
| category_page_id | int                     | index    |
| asset_id        | int            |          |
| position         | int                     |          |
| deleted_at       | timestamp with timezone | index    |

**category_page_seos**
step 3

| Name             | Type                    | Column 3                   |
| ---------------- | ----------------------- | -------------------------- |
| category_page_id | int                     | index                      |
| title            | jsonb                   | default: {'id': '', en:''} |
| meta_description | jsonb                   | default: {'id': '', en:''} |            |
| seo_footer       | jsonb                   | default: {'id': '', en:''} |
| deleted_at       | timestamp with timezone | index                      |

**category_page_seo_keywords**

| Name | Type | Column 3 |
| -------- | -------- | -------- |
| category_page_id     | int     | index     |
| keyword_id | int | index

**keywords**

| Name    | Type         | Column 3     |
| ------- | ------------ |:------------ |
| keyword | varchar(255) | index unique |

**assets**

| Name      | Type   | Desc |
| --------- | ------ | ---- |
| filename  | string |      |
| url       | string |      |
| file_size | int    |      |
| width     | int    |      |
| length    | int    |      |



### notes:
default coloumn
- id
- created_at
- created_by
- updated_at
- updated_by
- deleted_at


### to do:
path product images/icons
[***bucket-name***]/img/products/[***2001-01-21***]

### Seeder Membership