Complete Astro migration - PDPA compliant website

- Migrated all pages from Next.js to Astro
- Added PDPA-compliant Privacy Policy (Thai)
- Added PDPA-compliant Terms & Conditions (Thai)
- Added Cookie Policy with disclosure (Thai)
- Implemented cookie consent banner (client-side)
- Integrated Umami Analytics placeholder
- Blog system with 3 posts
- Optimized Docker configuration for production
- Static site build (184KB, 11 pages)
- Ready for Easypanel deployment

Backup: /Users/kunthawatgreethong/Gitea/dealplustech-backup-nextjs-20260309.tar.gz
This commit is contained in:
Kunthawat Greethong
2026-03-09 18:28:01 +07:00
parent 668f69048f
commit 6402d885f9
6183 changed files with 463899 additions and 1913 deletions

View File

@@ -1,168 +0,0 @@
{
"$ref": "#/definitions/products",
"definitions": {
"products": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"nameEn": {
"type": "string"
},
"slug": {
"type": "string"
},
"description": {
"type": "string"
},
"shortDescription": {
"type": "string"
},
"keywords": {
"type": "array",
"items": {
"type": "string"
}
},
"seoContent": {
"type": "string"
},
"image": {
"type": "string"
},
"specifications": {
"type": "array",
"items": {
"type": "object",
"properties": {
"label": {
"type": "string"
},
"value": {
"type": "string"
},
"unit": {
"type": "string"
}
},
"required": [
"label",
"value"
],
"additionalProperties": false
}
},
"features": {
"type": "array",
"items": {
"type": "string"
}
},
"applications": {
"type": "array",
"items": {
"type": "string"
}
},
"certifications": {
"type": "array",
"items": {
"type": "string"
}
},
"productTables": {
"type": "array",
"items": {
"type": "object",
"properties": {
"tableName": {
"type": "string"
},
"headers": {
"type": "array",
"items": {
"type": "string"
}
},
"rows": {
"type": "array",
"items": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"required": [
"tableName",
"headers",
"rows"
],
"additionalProperties": false
}
},
"faq": {
"type": "array",
"items": {
"type": "object",
"properties": {
"question": {
"type": "string"
},
"answer": {
"type": "string"
}
},
"required": [
"question",
"answer"
],
"additionalProperties": false
}
},
"relatedProductIds": {
"type": "array",
"items": {
"type": "string"
}
},
"schemaData": {
"type": "object",
"properties": {
"brand": {
"type": "string"
},
"manufacturer": {
"type": "string"
},
"material": {
"type": "string"
},
"category": {
"type": "string"
}
},
"additionalProperties": false
},
"$schema": {
"type": "string"
}
},
"required": [
"id",
"name",
"nameEn",
"slug",
"description",
"image"
],
"additionalProperties": false
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}

View File

@@ -162,11 +162,11 @@ declare module 'astro:content' {
};
type DataEntryMap = {
"products": Record<string, {
"blog": Record<string, {
id: string;
body?: string;
collection: "products";
data: InferEntrySchema<"products">;
collection: "blog";
data: any;
rendered?: RenderedContent;
filePath?: string;
}>;
@@ -202,6 +202,6 @@ declare module 'astro:content' {
LiveContentConfig['collections'][C]['loader']
>;
export type ContentConfig = typeof import("../src/content.config.js");
export type ContentConfig = typeof import("../src/content.config.mjs");
export type LiveContentConfig = never;
}