Update skills: add website-creator, mql-developer, ecommerce-astro
Changes: - Add FAL_KEY and GEMINI_API_KEY to .env.example - Update picture-it to use ~/.config/opencode/.env (unified creds) - Remove shodh-memory skill (no longer used) - Remove alphaear-* skills (deprecated) - Remove thai-frontend-dev skill (replaced by website-creator) - Remove theme-factory skill - Add mql-developer skill (MQL5 trading) - Add ecommerce-astro skill (Astro e-commerce) - Add website-creator skill (Next.js + Payload CMS) - Update install script for new skills
This commit is contained in:
452
skills/website-creator/scripts/audit-seo.sh
Executable file
452
skills/website-creator/scripts/audit-seo.sh
Executable file
@@ -0,0 +1,452 @@
|
||||
#!/usr/bin/env bash
|
||||
#===============================================================================
|
||||
# audit-seo.sh - SEO Audit สำหรับ Astro + Payload CMS project
|
||||
#
|
||||
# Usage: ./audit-seo.sh [project-path]
|
||||
#
|
||||
# ตรวจสอบ SEO ของเว็บไซต์:
|
||||
# - Meta tags
|
||||
# - Heading structure
|
||||
# - Sitemap
|
||||
# - Robots.txt
|
||||
# - Open Graph tags
|
||||
# - JSON-LD structured data
|
||||
# - Thai language optimization
|
||||
#
|
||||
# Requirements:
|
||||
# - node.js
|
||||
# - npm (สำหรับ Astro CLI)
|
||||
# - curl
|
||||
#
|
||||
#===============================================================================
|
||||
|
||||
set -e
|
||||
|
||||
# Colors
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
CYAN='\033[0;36m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# Default values
|
||||
PROJECT_PATH="${1:-.}"
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Helper functions
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
log_info() {
|
||||
echo -e "${BLUE}[INFO]${NC} $1"
|
||||
}
|
||||
|
||||
log_success() {
|
||||
echo -e "${GREEN}[PASS]${NC} $1"
|
||||
}
|
||||
|
||||
log_warning() {
|
||||
echo -e "${YELLOW}[WARN]${NC} $1"
|
||||
}
|
||||
|
||||
log_fail() {
|
||||
echo -e "${RED}[FAIL]${NC} $1"
|
||||
}
|
||||
|
||||
print_usage() {
|
||||
cat << EOF
|
||||
Usage: $(basename "$0") [project-path]
|
||||
|
||||
SEO Audit สำหรับ Astro + Payload CMS project
|
||||
|
||||
Arguments:
|
||||
project-path ที่อยู่ project (default: current directory)
|
||||
|
||||
Examples:
|
||||
$(basename "$0")
|
||||
$(basename "$0") /path/to/project
|
||||
|
||||
EOF
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Pre-flight checks
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
check_requirements() {
|
||||
log_info "ตรวจสอบความต้องการของระบบ..."
|
||||
|
||||
if ! command -v node &> /dev/null; then
|
||||
log_fail "node.js ไม่พบ กรุณาติดตั้ง node.js ก่อน"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! command -v curl &> /dev/null; then
|
||||
log_fail "curl ไม่พบ กรุณาติดตั้ง curl ก่อน"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! command -v npx &> /dev/null; then
|
||||
log_fail "npx ไม่พบ กรุณาติดตั้ง npm ก่อน"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
log_success "ความต้องการของระบบผ่าน"
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Check project structure
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
check_project_structure() {
|
||||
echo ""
|
||||
echo "=============================================="
|
||||
echo " 1. Project Structure"
|
||||
echo "=============================================="
|
||||
|
||||
cd "$PROJECT_PATH"
|
||||
|
||||
if [ ! -f "astro.config.mjs" ]; then
|
||||
log_fail "ไม่พบ astro.config.mjs"
|
||||
else
|
||||
log_success "พบ astro.config.mjs"
|
||||
fi
|
||||
|
||||
if [ -d "src/pages" ]; then
|
||||
local page_count=$(find src/pages -name "*.astro" | wc -l)
|
||||
log_success "พบ $page_count pages"
|
||||
else
|
||||
log_fail "ไม่พบ src/pages"
|
||||
fi
|
||||
|
||||
if [ -d "src/layouts" ]; then
|
||||
log_success "พบ layouts directory"
|
||||
else
|
||||
log_warning "ไม่พบ layouts directory"
|
||||
fi
|
||||
|
||||
if [ -d "src/components" ]; then
|
||||
log_success "พบ components directory"
|
||||
else
|
||||
log_warning "ไม่พบ components directory"
|
||||
fi
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Check meta tags
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
check_meta_tags() {
|
||||
echo ""
|
||||
echo "=============================================="
|
||||
echo " 2. Meta Tags"
|
||||
echo "=============================================="
|
||||
|
||||
cd "$PROJECT_PATH"
|
||||
|
||||
local pages_with_title=0
|
||||
local pages_with_desc=0
|
||||
local pages_with_keywords=0
|
||||
local total_pages=0
|
||||
|
||||
for page in src/pages/**/*.astro src/pages/*.astro; do
|
||||
if [ -f "$page" ]; then
|
||||
total_pages=$((total_pages + 1))
|
||||
|
||||
if grep -q '<title>' "$page" || grep -q '<Title' "$page"; then
|
||||
pages_with_title=$((pages_with_title + 1))
|
||||
fi
|
||||
|
||||
if grep -q 'description' "$page" || grep -q 'meta.*name="description"' "$page"; then
|
||||
pages_with_desc=$((pages_with_desc + 1))
|
||||
fi
|
||||
|
||||
if grep -q 'keywords' "$page" || grep -q 'meta.*name="keywords"' "$page"; then
|
||||
pages_with_keywords=$((pages_with_keywords + 1))
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
echo " Pages ที่มี <title>: $pages_with_title / $total_pages"
|
||||
echo " Pages ที่มี description: $pages_with_desc / $total_pages"
|
||||
echo " Pages ที่มี keywords: $pages_with_keywords / $total_pages"
|
||||
|
||||
if [ $pages_with_title -eq $total_pages ] && [ $total_pages -gt 0 ]; then
|
||||
log_success "ทุก page มี title"
|
||||
else
|
||||
log_warning "บาง page ไม่มี title"
|
||||
fi
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Check heading structure
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
check_headings() {
|
||||
echo ""
|
||||
echo "=============================================="
|
||||
echo " 3. Heading Structure"
|
||||
echo "=============================================="
|
||||
|
||||
cd "$PROJECT_PATH"
|
||||
|
||||
local pages_with_h1=0
|
||||
local pages_with_h2=0
|
||||
local total_pages=0
|
||||
|
||||
for page in src/pages/**/*.astro src/pages/*.astro; do
|
||||
if [ -f "$page" ]; then
|
||||
total_pages=$((total_pages + 1))
|
||||
|
||||
if grep -q '<h1' "$page"; then
|
||||
pages_with_h1=$((pages_with_h1 + 1))
|
||||
fi
|
||||
|
||||
if grep -q '<h2' "$page"; then
|
||||
pages_with_h2=$((pages_with_h2 + 1))
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
echo " Pages ที่มี <h1>: $pages_with_h1 / $total_pages"
|
||||
echo " Pages ที่มี <h2>: $pages_with_h2 / $total_pages"
|
||||
|
||||
if [ $pages_with_h1 -eq $total_pages ] && [ $total_pages -gt 0 ]; then
|
||||
log_success "ทุก page มี h1"
|
||||
else
|
||||
log_warning "บาง page ไม่มี h1"
|
||||
fi
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Check sitemap
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
check_sitemap() {
|
||||
echo ""
|
||||
echo "=============================================="
|
||||
echo " 4. Sitemap"
|
||||
echo "=============================================="
|
||||
|
||||
cd "$PROJECT_PATH"
|
||||
|
||||
if [ -f "astro.config.mjs" ] && grep -q 'sitemap' "astro.config.mjs"; then
|
||||
log_success "Astro sitemap integration ถูกตั้งค่า"
|
||||
else
|
||||
log_warning "ไม่พบ Astro sitemap integration"
|
||||
fi
|
||||
|
||||
if [ -f "public/sitemap.xml" ]; then
|
||||
log_success "พบ sitemap.xml"
|
||||
else
|
||||
log_warning "ไม่พบ sitemap.xml (อาจถูกสร้างตอน build)"
|
||||
fi
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Check robots.txt
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
check_robots() {
|
||||
echo ""
|
||||
echo "=============================================="
|
||||
echo " 5. Robots.txt"
|
||||
echo "=============================================="
|
||||
|
||||
cd "$PROJECT_PATH"
|
||||
|
||||
if [ -f "public/robots.txt" ]; then
|
||||
log_success "พบ robots.txt"
|
||||
echo " Content:"
|
||||
cat public/robots.txt | sed 's/^/ /'
|
||||
else
|
||||
log_warning "ไม่พบ robots.txt"
|
||||
fi
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Check Open Graph
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
check_open_graph() {
|
||||
echo ""
|
||||
echo "=============================================="
|
||||
echo " 6. Open Graph Tags"
|
||||
echo "=============================================="
|
||||
|
||||
cd "$PROJECT_PATH"
|
||||
|
||||
local pages_with_og=0
|
||||
local total_pages=0
|
||||
|
||||
for page in src/pages/**/*.astro src/pages/*.astro; do
|
||||
if [ -f "$page" ]; then
|
||||
total_pages=$((total_pages + 1))
|
||||
|
||||
if grep -q 'og:title' "$page" || grep -q 'property="og:' "$page"; then
|
||||
pages_with_og=$((pages_with_og + 1))
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
echo " Pages ที่มี Open Graph tags: $pages_with_og / $total_pages"
|
||||
|
||||
if [ $pages_with_og -gt 0 ]; then
|
||||
log_success "พบ Open Graph tags"
|
||||
else
|
||||
log_warning "ไม่พบ Open Graph tags"
|
||||
fi
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Check Thai language
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
check_thai_language() {
|
||||
echo ""
|
||||
echo "=============================================="
|
||||
echo " 7. Thai Language Optimization"
|
||||
echo "=============================================="
|
||||
|
||||
cd "$PROJECT_PATH"
|
||||
|
||||
if grep -q 'lang="th"' "src/pages"/*.astro 2>/dev/null; then
|
||||
log_success "พบ lang='th' attribute"
|
||||
else
|
||||
log_warning "ไม่พบ lang='th' attribute"
|
||||
fi
|
||||
|
||||
if grep -q 'Kanit\|Noto Sans Thai' "src/styles/global.css" 2>/dev/null; then
|
||||
log_success "พบ Thai font configuration"
|
||||
else
|
||||
log_warning "ไม่พบ Thai font configuration"
|
||||
fi
|
||||
|
||||
if [ -d "src/content" ]; then
|
||||
local md_count=$(find src/content -name "*.md" -o -name "*.mdx" | wc -l)
|
||||
if [ $md_count -gt 0 ]; then
|
||||
log_success "พบ $md_count content files"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Check JSON-LD
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
check_json_ld() {
|
||||
echo ""
|
||||
echo "=============================================="
|
||||
echo " 8. JSON-LD Structured Data"
|
||||
echo "=============================================="
|
||||
|
||||
cd "$PROJECT_PATH"
|
||||
|
||||
local pages_with_jsonld=0
|
||||
local total_pages=0
|
||||
|
||||
for page in src/pages/**/*.astro src/pages/*.astro; do
|
||||
if [ -f "$page" ]; then
|
||||
total_pages=$((total_pages + 1))
|
||||
|
||||
if grep -q 'application/ld+json' "$page" || grep -q 'JSON-LD\|jsonld' "$page"; then
|
||||
pages_with_jsonld=$((pages_with_jsonld + 1))
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
echo " Pages ที่มี JSON-LD: $pages_with_jsonld / $total_pages"
|
||||
|
||||
if [ $pages_with_jsonld -gt 0 ]; then
|
||||
log_success "พบ JSON-LD structured data"
|
||||
else
|
||||
log_warning "ไม่พบ JSON-LD structured data"
|
||||
fi
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Check image optimization
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
check_images() {
|
||||
echo ""
|
||||
echo "=============================================="
|
||||
echo " 9. Image Optimization"
|
||||
echo "=============================================="
|
||||
|
||||
cd "$PROJECT_PATH"
|
||||
|
||||
local images_without_alt=0
|
||||
local total_images=0
|
||||
|
||||
if [ -d "src/assets" ] || [ -d "public/images" ]; then
|
||||
local search_dir="src/assets"
|
||||
[ ! -d "$search_dir" ] && search_dir="public/images"
|
||||
|
||||
for img in $(find "$search_dir" -type f \( -name "*.jpg" -o -name "*.jpeg" -o -name "*.png" -o -name "*.webp" \) 2>/dev/null | head -20); do
|
||||
total_images=$((total_images + 1))
|
||||
done
|
||||
|
||||
echo " พบ $total_images images"
|
||||
log_success "Images ถูกจัดเก็บอย่างถูกต้อง"
|
||||
else
|
||||
log_warning "ไม่พบ images directory"
|
||||
fi
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Summary
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
show_summary() {
|
||||
echo ""
|
||||
echo "=============================================="
|
||||
echo " SEO Audit Summary"
|
||||
echo "=============================================="
|
||||
echo ""
|
||||
echo " Project: $PROJECT_PATH"
|
||||
echo " หากต้องการรายงาน GEO เพิ่มเติม ใช้คำสั่ง:"
|
||||
echo ""
|
||||
echo " /skill seo-geo"
|
||||
echo ""
|
||||
echo " หากต้องการวิเคราะห์ SEO แบบละเอียด ใช้คำสั่ง:"
|
||||
echo ""
|
||||
echo " /skill seo-analyzers"
|
||||
echo ""
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Main
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
main() {
|
||||
echo "=============================================="
|
||||
echo " SEO Audit Tool"
|
||||
echo " Astro + Payload CMS"
|
||||
echo "=============================================="
|
||||
echo ""
|
||||
|
||||
if [ "$1" == "-h" ] || [ "$1" == "--help" ]; then
|
||||
print_usage
|
||||
exit 0
|
||||
fi
|
||||
|
||||
check_requirements
|
||||
check_project_structure
|
||||
check_meta_tags
|
||||
check_headings
|
||||
check_sitemap
|
||||
check_robots
|
||||
check_open_graph
|
||||
check_thai_language
|
||||
check_json_ld
|
||||
check_images
|
||||
show_summary
|
||||
|
||||
echo ""
|
||||
echo "=============================================="
|
||||
log_success "SEO Audit เสร็จสมบูรณ์!"
|
||||
echo "=============================================="
|
||||
}
|
||||
|
||||
main "$@"
|
||||
304
skills/website-creator/scripts/convert-astro.sh
Executable file
304
skills/website-creator/scripts/convert-astro.sh
Executable file
@@ -0,0 +1,304 @@
|
||||
#!/usr/bin/env bash
|
||||
#===============================================================================
|
||||
# convert-astro.sh - แปลงเว็บเก่าเป็น Astro + Payload CMS
|
||||
#
|
||||
# Usage: ./convert-astro.sh [source-path] [project-name]
|
||||
#
|
||||
# รองรับ:
|
||||
# - Astro เวอร์ชั่นเก่า
|
||||
# - Next.js
|
||||
# - Static HTML
|
||||
#
|
||||
# Requirements:
|
||||
# - git
|
||||
# - node.js 20+
|
||||
# - npm
|
||||
#
|
||||
#===============================================================================
|
||||
|
||||
set -e
|
||||
|
||||
# Colors
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m'
|
||||
|
||||
# Default values
|
||||
SOURCE_PATH="${1:-}"
|
||||
PROJECT_NAME="${2:-}"
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Helper functions
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
log_info() {
|
||||
echo -e "${BLUE}[INFO]${NC} $1"
|
||||
}
|
||||
|
||||
log_success() {
|
||||
echo -e "${GREEN}[SUCCESS]${NC} $1"
|
||||
}
|
||||
|
||||
log_warning() {
|
||||
echo -e "${YELLOW}[WARNING]${NC} $1"
|
||||
}
|
||||
|
||||
log_error() {
|
||||
echo -e "${RED}[ERROR]${NC} $1"
|
||||
}
|
||||
|
||||
print_usage() {
|
||||
cat << EOF
|
||||
Usage: $(basename "$0") [source-path] [project-name]
|
||||
|
||||
แปลงเว็บเก่าเป็น Astro + Payload CMS
|
||||
|
||||
Arguments:
|
||||
source-path ที่อยู่เว็บเก่า
|
||||
project-name ชื่อ project ใหม่
|
||||
|
||||
Supported Sources:
|
||||
- Astro เวอร์ชั่นเก่า
|
||||
- Next.js
|
||||
- Static HTML
|
||||
|
||||
Examples:
|
||||
$(basename "$0") /path/to/old-site my-new-site
|
||||
|
||||
EOF
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Detect source type
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
detect_source_type() {
|
||||
log_info "ตรวจสอบประเภทเว็บเก่า..."
|
||||
|
||||
if [ ! -d "$SOURCE_PATH" ]; then
|
||||
log_error "ไม่พบ source path: $SOURCE_PATH"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
cd "$SOURCE_PATH"
|
||||
|
||||
if [ -f "package.json" ]; then
|
||||
if grep -q '"next"' "package.json" 2>/dev/null; then
|
||||
SOURCE_TYPE="nextjs"
|
||||
log_success "ตรวจพบ: Next.js"
|
||||
elif grep -q '"astro"' "package.json" 2>/dev/null; then
|
||||
SOURCE_TYPE="astro"
|
||||
log_success "ตรวจพบ: Astro"
|
||||
elif grep -q '"remix"' "package.json" 2>/dev/null; then
|
||||
SOURCE_TYPE="remix"
|
||||
log_success "ตรวจพบ: Remix"
|
||||
elif grep -q '"nuxt"' "package.json" 2>/dev/null; then
|
||||
SOURCE_TYPE="nuxt"
|
||||
log_success "ตรวจพบ: Nuxt"
|
||||
else
|
||||
SOURCE_TYPE="unknown"
|
||||
log_warning "ไม่สามารถระบุประเภท - จะใช้เป็น static HTML"
|
||||
fi
|
||||
elif [ -f "index.html" ]; then
|
||||
SOURCE_TYPE="static"
|
||||
log_success "ตรวจพบ: Static HTML"
|
||||
else
|
||||
log_error "ไม่พบ package.json หรือ index.html"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Backup source
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
backup_source() {
|
||||
log_info "สำรองข้อมูลเว็บเก่า..."
|
||||
|
||||
BACKUP_DIR="/tmp/backup-$(basename "$SOURCE_PATH")-$(date +%s)"
|
||||
mkdir -p "$BACKUP_DIR"
|
||||
|
||||
cp -r "$SOURCE_PATH" "$BACKUP_DIR/"
|
||||
|
||||
log_success "สำรองข้อมูลที่: $BACKUP_DIR"
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Analyze structure
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
analyze_structure() {
|
||||
log_info "วิเคราะห์โครงสร้างเว็บเก่า..."
|
||||
|
||||
cd "$SOURCE_PATH"
|
||||
|
||||
echo ""
|
||||
echo " โครงสร้างไฟล์:"
|
||||
find . -type f \( -name "*.astro" -o -name "*.tsx" -o -name "*.jsx" -o -name "*.vue" -o -name "*.html" -o -name "*.md" -o -name "*.mdx" \) 2>/dev/null | grep -v node_modules | head -30
|
||||
|
||||
echo ""
|
||||
echo " Package.json scripts:"
|
||||
if [ -f "package.json" ]; then
|
||||
grep -A 10 '"scripts"' "package.json" 2>/dev/null | head -15
|
||||
fi
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Create new Astro project
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
create_new_project() {
|
||||
log_info "สร้าง Astro project ใหม่..."
|
||||
|
||||
NEW_PROJECT_PATH="$(dirname "$SOURCE_PATH")/$PROJECT_NAME"
|
||||
|
||||
if [ -d "$NEW_PROJECT_PATH" ]; then
|
||||
log_warning "Project มีอยู่แล้ว: $NEW_PROJECT_PATH"
|
||||
read -p "ลบและสร้างใหม่? (y/n): " -n 1 -r
|
||||
echo
|
||||
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
||||
rm -rf "$NEW_PROJECT_PATH"
|
||||
else
|
||||
log_info "ใช้ existing project"
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
|
||||
mkdir -p "$NEW_PROJECT_PATH"
|
||||
cd "$NEW_PROJECT_PATH"
|
||||
|
||||
# Create Astro project
|
||||
npm create astro@latest . -- --template minimal --no-install --no-git --typescript strict << EOF
|
||||
y
|
||||
EOF
|
||||
|
||||
log_success "สร้าง Astro project เสร็จสมบูรณ์: $NEW_PROJECT_PATH"
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Copy content
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
copy_content() {
|
||||
log_info "คัดลอก content..."
|
||||
|
||||
cd "$SOURCE_PATH"
|
||||
|
||||
# Copy markdown content
|
||||
if [ -d "src/content" ]; then
|
||||
mkdir -p "$NEW_PROJECT_PATH/src/content/migration"
|
||||
cp -r src/content/* "$NEW_PROJECT_PATH/src/content/migration/"
|
||||
log_success "คัดลอก content จาก src/content"
|
||||
elif [ -d "content" ]; then
|
||||
mkdir -p "$NEW_PROJECT_PATH/src/content/migration"
|
||||
cp -r content/* "$NEW_PROJECT_PATH/src/content/migration/"
|
||||
log_success "คัดลอก content จาก content"
|
||||
fi
|
||||
|
||||
# Copy public assets
|
||||
if [ -d "public" ]; then
|
||||
cp -r public/* "$NEW_PROJECT_PATH/public/" 2>/dev/null || true
|
||||
log_success "คัดลอก public assets"
|
||||
fi
|
||||
|
||||
# Copy pages (needs manual conversion)
|
||||
if [ -d "src/pages" ] || [ -d "pages" ]; then
|
||||
mkdir -p "$NEW_PROJECT_PATH/src/pages/legacy"
|
||||
log_info "Pages ต้องการ manual conversion - เก็บไว้ที่ legacy/"
|
||||
fi
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Create content migration report
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
create_migration_report() {
|
||||
log_info "สร้าง migration report..."
|
||||
|
||||
cd "$SOURCE_PATH"
|
||||
|
||||
local page_count=$(find . -type f \( -name "*.astro" -o -name "*.tsx" -o -name "*.jsx" -o -name "*.html" -o -name "*.md" -o -name "*.mdx" \) 2>/dev/null | grep -v node_modules | wc -l)
|
||||
|
||||
cat > "$NEW_PROJECT_PATH/MIGRATION_REPORT.md" << EOF
|
||||
# Migration Report
|
||||
|
||||
## Source Information
|
||||
- **Type:** $SOURCE_TYPE
|
||||
- **Path:** $SOURCE_PATH
|
||||
- **Backup:** $BACKUP_DIR
|
||||
- **Date:** $(date)
|
||||
|
||||
## Content Statistics
|
||||
- **Total Pages:** $page_count
|
||||
|
||||
## Files to Migrate
|
||||
|
||||
### Pages (Manual Conversion Required)
|
||||
EOF
|
||||
|
||||
# List pages that need conversion
|
||||
if [ -d "src/pages" ]; then
|
||||
find src/pages -type f \( -name "*.astro" -o -name "*.tsx" -o -name "*.jsx" \) 2>/dev/null >> "$NEW_PROJECT_PATH/MIGRATION_REPORT.md"
|
||||
elif [ -d "pages" ]; then
|
||||
find pages -type f \( -name "*.html" -o -name "*.jsx" -o -name "*.tsx" \) 2>/dev/null >> "$NEW_PROJECT_PATH/MIGRATION_REPORT.md"
|
||||
fi
|
||||
|
||||
cat >> "$NEW_PROJECT_PATH/MIGRATION_REPORT.md" << EOF
|
||||
|
||||
### Content (Auto-migrated)
|
||||
EOF
|
||||
|
||||
if [ -d "$NEW_PROJECT_PATH/src/content/migration" ]; then
|
||||
find "$NEW_PROJECT_PATH/src/content/migration" -type f -name "*.md" -o -name "*.mdx" 2>/dev/null >> "$NEW_PROJECT_PATH/MIGRATION_REPORT.md"
|
||||
fi
|
||||
|
||||
log_success "สร้าง migration report: $NEW_PROJECT_PATH/MIGRATION_REPORT.md"
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Main
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
main() {
|
||||
echo "=============================================="
|
||||
echo " Website Migration Tool"
|
||||
echo " แปลงเว็บเก่าเป็น Astro + Payload CMS"
|
||||
echo "=============================================="
|
||||
echo ""
|
||||
|
||||
if [ "$1" == "-h" ] || [ "$1" == "--help" ]; then
|
||||
print_usage
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if [ -z "$SOURCE_PATH" ]; then
|
||||
print_usage
|
||||
echo ""
|
||||
log_error "กรุณาระบุ source path"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
detect_source_type
|
||||
backup_source
|
||||
analyze_structure
|
||||
create_new_project
|
||||
copy_content
|
||||
create_migration_report
|
||||
|
||||
echo ""
|
||||
echo "=============================================="
|
||||
log_success "Migration เริ่มต้นเสร็จสมบูรณ์!"
|
||||
echo "=============================================="
|
||||
echo ""
|
||||
echo "ขั้นตอนถัดไป:"
|
||||
echo " 1. cd $NEW_PROJECT_PATH"
|
||||
echo " 2. npm install"
|
||||
echo " 3. ดู MIGRATION_REPORT.md"
|
||||
echo " 4. ปรับ content และ pages ตาม report"
|
||||
echo " 5. npm run dev"
|
||||
echo ""
|
||||
}
|
||||
|
||||
main "$@"
|
||||
267
skills/website-creator/scripts/deploy.sh
Executable file
267
skills/website-creator/scripts/deploy.sh
Executable file
@@ -0,0 +1,267 @@
|
||||
#!/usr/bin/env bash
|
||||
#===============================================================================
|
||||
# deploy.sh - Deploy Astro + Payload CMS ไปยัง Easypanel
|
||||
#
|
||||
# Usage: ./deploy.sh [project-path] [server] [domain]
|
||||
#
|
||||
# Requirements:
|
||||
# - git
|
||||
# - npm
|
||||
# - easypanel CLI (หรือใช้ web interface)
|
||||
#
|
||||
#===============================================================================
|
||||
|
||||
set -e
|
||||
|
||||
# Colors
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m'
|
||||
|
||||
# Default values
|
||||
PROJECT_PATH="${1:-.}"
|
||||
SERVER="${2:-}"
|
||||
DOMAIN="${3:-}"
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Helper functions
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
log_info() {
|
||||
echo -e "${BLUE}[INFO]${NC} $1"
|
||||
}
|
||||
|
||||
log_success() {
|
||||
echo -e "${GREEN}[SUCCESS]${NC} $1"
|
||||
}
|
||||
|
||||
log_warning() {
|
||||
echo -e "${YELLOW}[WARNING]${NC} $1"
|
||||
}
|
||||
|
||||
log_error() {
|
||||
echo -e "${RED}[ERROR]${NC} $1"
|
||||
}
|
||||
|
||||
print_usage() {
|
||||
cat << EOF
|
||||
Usage: $(basename "$0") [project-path] [server] [domain]
|
||||
|
||||
Deploy Astro + Payload CMS ไปยัง Easypanel
|
||||
|
||||
Arguments:
|
||||
project-path ที่อยู่ project (default: current directory)
|
||||
server ชื่อ easypanel server
|
||||
domain domain ที่จะใช้ (เช่น example.com)
|
||||
|
||||
Examples:
|
||||
$(basename "$0") /path/to/project my-server example.com
|
||||
$(basename "$0") . openclaw-vps techvision.co.th
|
||||
|
||||
EOF
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Pre-flight checks
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
check_requirements() {
|
||||
log_info "ตรวจสอบความต้องการ..."
|
||||
|
||||
if ! command -v git &> /dev/null; then
|
||||
log_error "git ไม่พบ"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! command -v npm &> /dev/null; then
|
||||
log_error "npm ไม่พบ"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
cd "$PROJECT_PATH"
|
||||
|
||||
if [ ! -f "package.json" ]; then
|
||||
log_error "ไม่พบ package.json"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -f "astro.config.mjs" ]; then
|
||||
log_error "ไม่พบ astro.config.mjs"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
log_success "ความต้องการพื้นฐานผ่าน"
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Check git status
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
check_git() {
|
||||
log_info "ตรวจสอบ git..."
|
||||
|
||||
if [ ! -d ".git" ]; then
|
||||
log_warning "ไม่พบ .git directory"
|
||||
log_info "กำลังสร้าง git repo..."
|
||||
git init
|
||||
git add .
|
||||
git commit -m "Initial commit"
|
||||
log_success "สร้าง git repo เสร็จสมบูรณ์"
|
||||
else
|
||||
log_success "พบ git repo"
|
||||
fi
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Build project
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
build_project() {
|
||||
log_info "Build project..."
|
||||
|
||||
cd "$PROJECT_PATH"
|
||||
|
||||
# Install dependencies
|
||||
log_info "ติดตั้ง dependencies..."
|
||||
npm install
|
||||
|
||||
# Build
|
||||
log_info "กำลัง build..."
|
||||
npm run build
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
log_success "Build เสร็จสมบูรณ์"
|
||||
else
|
||||
log_error "Build ล้มเหลว"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Check build output
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
check_build_output() {
|
||||
log_info "ตรวจสอบ build output..."
|
||||
|
||||
cd "$PROJECT_PATH"
|
||||
|
||||
if [ -d "dist" ]; then
|
||||
local file_count=$(find dist -type f | wc -l)
|
||||
local size=$(du -sh dist | cut -f1)
|
||||
log_success "พบ dist/ ($file_count files, $size)"
|
||||
else
|
||||
log_error "ไม่พบ dist/ directory"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Deploy instructions
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
show_deploy_instructions() {
|
||||
echo ""
|
||||
echo "=============================================="
|
||||
echo " Deploy Instructions"
|
||||
echo "=============================================="
|
||||
echo ""
|
||||
echo " Project: $PROJECT_PATH"
|
||||
echo " Server: $SERVER"
|
||||
echo " Domain: $DOMAIN"
|
||||
echo ""
|
||||
echo " ขั้นตอนการ deploy บน Easypanel:"
|
||||
echo ""
|
||||
echo " 1. เปิด Easypanel dashboard"
|
||||
echo " 2. สร้าง project ใหม่"
|
||||
echo " 3. เลือก 'Deploy from Git'"
|
||||
echo " 4. ใส่ git repo URL"
|
||||
echo " 5. ตั้งค่า environment variables:"
|
||||
echo " - PAYLOAD_SECRET"
|
||||
echo " - DATABASE_URL"
|
||||
echo " 6. ตั้งค่า domain: $DOMAIN"
|
||||
echo " 7. Deploy"
|
||||
echo ""
|
||||
echo " หรือใช้ easypanel CLI:"
|
||||
echo ""
|
||||
echo " ep project create --name $PROJECT_NAME --server $SERVER"
|
||||
echo " ep project deploy \$PROJECT_ID --git"
|
||||
echo ""
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Create deploy config
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
create_deploy_config() {
|
||||
log_info "สร้าง deploy config..."
|
||||
|
||||
cd "$PROJECT_PATH"
|
||||
|
||||
mkdir -p .easypanel
|
||||
|
||||
cat > .easypanel/deploy.json << EOF
|
||||
{
|
||||
"name": "$PROJECT_NAME",
|
||||
"server": "$SERVER",
|
||||
"domain": "$DOMAIN",
|
||||
"build": {
|
||||
"command": "npm run build",
|
||||
"output": "dist"
|
||||
},
|
||||
"environment": {
|
||||
"NODE_ENV": "production"
|
||||
},
|
||||
"required_env": [
|
||||
"PAYLOAD_SECRET",
|
||||
"DATABASE_URL"
|
||||
]
|
||||
}
|
||||
EOF
|
||||
|
||||
log_success "สร้าง .easypanel/deploy.json เสร็จสมบูรณ์"
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Main
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
main() {
|
||||
echo "=============================================="
|
||||
echo " Deploy Tool"
|
||||
echo " Astro + Payload CMS -> Easypanel"
|
||||
echo "=============================================="
|
||||
echo ""
|
||||
|
||||
if [ "$1" == "-h" ] || [ "$1" == "--help" ]; then
|
||||
print_usage
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if [ -z "$SERVER" ]; then
|
||||
log_info "ไม่ได้ระบุ server - จะแสดงวิธี deploy"
|
||||
SERVER="<your-server>"
|
||||
fi
|
||||
|
||||
if [ -z "$DOMAIN" ]; then
|
||||
DOMAIN="<your-domain.com>"
|
||||
fi
|
||||
|
||||
PROJECT_NAME=$(basename "$PROJECT_PATH")
|
||||
|
||||
check_requirements
|
||||
check_git
|
||||
build_project
|
||||
check_build_output
|
||||
create_deploy_config
|
||||
show_deploy_instructions
|
||||
|
||||
echo ""
|
||||
echo "=============================================="
|
||||
log_success "พร้อม deploy!"
|
||||
echo "=============================================="
|
||||
}
|
||||
|
||||
main "$@"
|
||||
343
skills/website-creator/scripts/new-project.sh
Executable file
343
skills/website-creator/scripts/new-project.sh
Executable file
@@ -0,0 +1,343 @@
|
||||
#!/usr/bin/env bash
|
||||
#===============================================================================
|
||||
# new-project.sh - สร้าง Astro + Payload CMS project ใหม่จาก Astro Starter Template
|
||||
#
|
||||
# Usage: ./new-project.sh [project-name] [project-path]
|
||||
#
|
||||
# สร้าง Astro project ใหม่โดย:
|
||||
# 1. คัดลอก astro-starter template
|
||||
# 2. ติดตั้ง dependencies
|
||||
# 3. ตั้งค่า environment
|
||||
#
|
||||
# Requirements:
|
||||
# - git
|
||||
# - node.js 20+
|
||||
# - npm
|
||||
#
|
||||
#===============================================================================
|
||||
|
||||
set -e
|
||||
|
||||
# Colors
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# Default values
|
||||
PROJECT_NAME="${1:-}"
|
||||
PROJECT_PATH="${2:-.}"
|
||||
|
||||
# Get skill directory
|
||||
SKILL_DIR="$(dirname "$(dirname "$(readlink -f "$0")")")"
|
||||
TEMPLATE_DIR="$SKILL_DIR/templates/astro-starter"
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Helper functions
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
log_info() {
|
||||
echo -e "${BLUE}[INFO]${NC} $1"
|
||||
}
|
||||
|
||||
log_success() {
|
||||
echo -e "${GREEN}[SUCCESS]${NC} $1"
|
||||
}
|
||||
|
||||
log_warning() {
|
||||
echo -e "${YELLOW}[WARNING]${NC} $1"
|
||||
}
|
||||
|
||||
log_error() {
|
||||
echo -e "${RED}[ERROR]${NC} $1"
|
||||
}
|
||||
|
||||
print_usage() {
|
||||
cat << EOF
|
||||
Usage: $(basename "$0") [project-name] [project-path]
|
||||
|
||||
สร้าง Astro + Payload CMS project ใหม่จาก Astro Starter Template
|
||||
|
||||
Arguments:
|
||||
project-name ชื่อ project (optional)
|
||||
project-path ที่อยู่ project (default: current directory)
|
||||
|
||||
Examples:
|
||||
$(basename "$0") my-website
|
||||
$(basename "$0") my-website /path/to/projects/
|
||||
|
||||
EOF
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Pre-flight checks
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
check_requirements() {
|
||||
log_info "ตรวจสอบความต้องการของระบบ..."
|
||||
|
||||
# Check git
|
||||
if ! command -v git &> /dev/null; then
|
||||
log_error "git ไม่พบ กรุณาติดตั้ง git ก่อน"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check node
|
||||
if ! command -v node &> /dev/null; then
|
||||
log_error "node.js ไม่พบ กรุณาติดตั้ง node.js ก่อน"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
NODE_VERSION=$(node -v | cut -d'v' -f2 | cut -d'.' -f1)
|
||||
if [ "$NODE_VERSION" -lt 20 ]; then
|
||||
log_error "node.js version ต้อง >= 20 (ตอนนี้: $(node -v))"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check npm
|
||||
if ! command -v npm &> /dev/null; then
|
||||
log_error "npm ไม่พบ กรุณาติดตั้ง npm ก่อน"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check template exists
|
||||
if [ ! -d "$TEMPLATE_DIR" ]; then
|
||||
log_error "ไม่พบ Astro Starter Template: $TEMPLATE_DIR"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
log_success "ความต้องการของระบบผ่าน (git, node $(node -v), npm)"
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Create project directory
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
setup_directory() {
|
||||
local actual_project_path="$PROJECT_PATH"
|
||||
|
||||
if [ -n "$PROJECT_NAME" ]; then
|
||||
actual_project_path="$PROJECT_PATH/$PROJECT_NAME"
|
||||
fi
|
||||
|
||||
# Create directory
|
||||
mkdir -p "$actual_project_path"
|
||||
|
||||
# Check if directory is empty
|
||||
if [ "$(ls -A "$actual_project_path" | wc -l)" -gt 0 ]; then
|
||||
log_warning "Directory ไม่ว่าง: $actual_project_path"
|
||||
read -p "ดำเนินต่อ? (y/n): " -n 1 -r
|
||||
echo
|
||||
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
PROJECT_PATH="$actual_project_path"
|
||||
log_info "Project path: $PROJECT_PATH"
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Copy template
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
copy_template() {
|
||||
log_info "คัดลอก Astro Starter Template..."
|
||||
|
||||
# Copy all template files
|
||||
cp -r "$TEMPLATE_DIR/"* "$PROJECT_PATH/"
|
||||
cp -r "$TEMPLATE_DIR/src/collections/access" "$PROJECT_PATH/src/collections/" 2>/dev/null || true
|
||||
|
||||
# Copy consent API if exists
|
||||
if [ -d "$SKILL_DIR/templates/consent/api" ]; then
|
||||
mkdir -p "$PROJECT_PATH/src/pages/api"
|
||||
cp "$SKILL_DIR/templates/consent/api/"* "$PROJECT_PATH/src/pages/api/" 2>/dev/null || true
|
||||
fi
|
||||
|
||||
log_success "คัดลอก template เสร็จสมบูรณ์"
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Copy legal templates
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
copy_legal_templates() {
|
||||
log_info "คัดลอก PDPA templates..."
|
||||
|
||||
mkdir -p "$PROJECT_PATH/src/content/pages"
|
||||
|
||||
if [ -f "$SKILL_DIR/templates/privacy-policy.md" ]; then
|
||||
cp "$SKILL_DIR/templates/privacy-policy.md" "$PROJECT_PATH/src/content/pages/"
|
||||
fi
|
||||
|
||||
if [ -f "$SKILL_DIR/templates/terms-of-service.md" ]; then
|
||||
cp "$SKILL_DIR/templates/terms-of-service.md" "$PROJECT_PATH/src/content/pages/"
|
||||
fi
|
||||
|
||||
log_success "คัดลอก PDPA templates เสร็จสมบูรณ์"
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Install dependencies
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
install_dependencies() {
|
||||
log_info "ติดตั้ง dependencies..."
|
||||
|
||||
cd "$PROJECT_PATH"
|
||||
npm install
|
||||
|
||||
log_success "ติดตั้ง dependencies เสร็จสมบูรณ์"
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Setup environment
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
setup_environment() {
|
||||
log_info "ตั้งค่า environment..."
|
||||
|
||||
cd "$PROJECT_PATH"
|
||||
|
||||
if [ ! -f ".env" ]; then
|
||||
if [ -f ".env.example" ]; then
|
||||
cp .env.example .env
|
||||
log_success "สร้าง .env จาก .env.example"
|
||||
log_warning "กรุณาแก้ไข .env และใส่ DATABASE_URL ที่ถูกต้อง"
|
||||
else
|
||||
cat > .env << 'EOF'
|
||||
# Payload CMS
|
||||
PAYLOAD_SECRET=change-this-secret-key-at-least-32-characters
|
||||
DATABASE_URL=postgresql://user:password@localhost:5432/mydb
|
||||
|
||||
# Server
|
||||
SERVER_URL=http://localhost:4321
|
||||
NODE_ENV=development
|
||||
EOF
|
||||
log_success "สร้าง .env เริ่มต้น"
|
||||
log_warning "กรุณาแก้ไข .env และใส่ DATABASE_URL ที่ถูกต้อง"
|
||||
fi
|
||||
else
|
||||
log_info ".env มีอยู่แล้ว"
|
||||
fi
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Create AI_RULES.md
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
create_ai_rules() {
|
||||
log_info "สร้าง AI_RULES.md..."
|
||||
|
||||
cd "$PROJECT_PATH"
|
||||
|
||||
cat > AI_RULES.md << 'EOF'
|
||||
# AI Rules
|
||||
|
||||
## Tech Stack Overview
|
||||
|
||||
- **Frontend:** Astro เวอร์ชั่นล่าสุด + TypeScript
|
||||
- **Backend/CMS:** Payload CMS 3.0
|
||||
- **Database:** PostgreSQL (via Payload)
|
||||
- **Styling:** Tailwind CSS v4
|
||||
- **Authentication:** Payload built-in auth with role-based access
|
||||
- **Image Handling:** Payload Media collection
|
||||
|
||||
## File Organization
|
||||
|
||||
- **Collections:** Define Payload collections in `src/collections/`
|
||||
- **Pages:** Use Astro file-based routing in `src/pages/`
|
||||
- **Components:** Reusable components in `src/components/`
|
||||
- **Styles:** Global styles in `src/styles/`
|
||||
|
||||
## Never Modify These Files
|
||||
|
||||
- `src/payload-types.ts` - Auto-generated by Payload
|
||||
- `src/migrations/` - Database migration files
|
||||
|
||||
## Thai-First
|
||||
|
||||
- ใช้ Kanit หรือ Noto Sans Thai fonts
|
||||
- Thai typography CSS
|
||||
- Thai structured data (LocalBusiness, Organization)
|
||||
- ภาษาไทยเป็นหลักใน content
|
||||
EOF
|
||||
|
||||
log_success "สร้าง AI_RULES.md เสร็จสมบูรณ์"
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Initialize git
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
init_git() {
|
||||
log_info "เริ่มต้น git..."
|
||||
|
||||
cd "$PROJECT_PATH"
|
||||
|
||||
if [ ! -d ".git" ]; then
|
||||
git init
|
||||
git add .
|
||||
git commit -m "Initial commit: Astro + Payload CMS starter"
|
||||
log_success "เริ่มต้น git เสร็จสมบูรณ์"
|
||||
else
|
||||
log_info "git repo มีอยู่แล้ว"
|
||||
fi
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Show project structure
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
show_structure() {
|
||||
log_info "โครงสร้าง project:"
|
||||
cd "$PROJECT_PATH"
|
||||
echo ""
|
||||
find . -type f \( -name "*.ts" -o -name "*.tsx" -o -name "*.astro" -o -name "*.mjs" -o -name "*.css" -o -name "*.md" -o -name "package.json" \) 2>/dev/null | grep -v node_modules | sort | head -30
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Main
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
main() {
|
||||
echo "=============================================="
|
||||
echo " Astro + Payload CMS Project Creator"
|
||||
echo " Using Astro Starter Template"
|
||||
echo "=============================================="
|
||||
echo ""
|
||||
|
||||
# Parse arguments
|
||||
if [ "$1" == "-h" ] || [ "$1" == "--help" ]; then
|
||||
print_usage
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Run steps
|
||||
check_requirements
|
||||
setup_directory
|
||||
copy_template
|
||||
copy_legal_templates
|
||||
install_dependencies
|
||||
setup_environment
|
||||
create_ai_rules
|
||||
init_git
|
||||
show_structure
|
||||
|
||||
echo ""
|
||||
echo "=============================================="
|
||||
log_success "สร้าง Astro + Payload CMS project เสร็จสมบูรณ์!"
|
||||
echo "=============================================="
|
||||
echo ""
|
||||
echo "ขั้นตอนถัดไป:"
|
||||
echo " 1. cd $PROJECT_PATH"
|
||||
echo " 2. แก้ไข .env (DATABASE_URL, PAYLOAD_SECRET)"
|
||||
echo " 3. npm run db:push (สร้าง database tables)"
|
||||
echo " 4. npm run generate (สร้าง Payload types)"
|
||||
echo " 5. npm run dev"
|
||||
echo " 6. เปิด http://localhost:4321/admin สำหรับ Payload admin"
|
||||
echo ""
|
||||
}
|
||||
|
||||
main "$@"
|
||||
188
skills/website-creator/scripts/preview.sh
Executable file
188
skills/website-creator/scripts/preview.sh
Executable file
@@ -0,0 +1,188 @@
|
||||
#!/usr/bin/env bash
|
||||
#===============================================================================
|
||||
# preview.sh - Preview เว็บไซต์ผ่าน local server
|
||||
#
|
||||
# Usage: ./preview.sh [project-path] [port]
|
||||
#
|
||||
# รัน dev server ที่ 0.0.0.0 เพื่อให้เข้าดูจาก VPS IP ได้
|
||||
#
|
||||
#===============================================================================
|
||||
|
||||
set -e
|
||||
|
||||
# Colors
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m'
|
||||
|
||||
# Default values
|
||||
PROJECT_PATH="${1:-.}"
|
||||
PORT="${2:-4321}"
|
||||
HOST="0.0.0.0"
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Helper functions
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
log_info() {
|
||||
echo -e "${BLUE}[INFO]${NC} $1"
|
||||
}
|
||||
|
||||
log_success() {
|
||||
echo -e "${GREEN}[SUCCESS]${NC} $1"
|
||||
}
|
||||
|
||||
log_error() {
|
||||
echo -e "${RED}[ERROR]${NC} $1"
|
||||
}
|
||||
|
||||
get_ip_address() {
|
||||
# Get the primary IP address of the VPS
|
||||
if command -v hostname &> /dev/null; then
|
||||
hostname -I 2>/dev/null | awk '{print $1}' || echo "unknown"
|
||||
else
|
||||
echo "unknown"
|
||||
fi
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Check project
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
check_project() {
|
||||
log_info "ตรวจสอบ project..."
|
||||
|
||||
if [ ! -d "$PROJECT_PATH" ]; then
|
||||
log_error "Project path ไม่พบ: $PROJECT_PATH"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -f "$PROJECT_PATH/package.json" ]; then
|
||||
log_error "ไม่พบ package.json"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check for Astro or Emdash
|
||||
if ! grep -q "astro" "$PROJECT_PATH/package.json"; then
|
||||
log_error "ไม่ใช่ Astro project"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
log_success "พบ Astro project"
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Install dependencies
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
install_deps() {
|
||||
log_info "ตรวจสอบ dependencies..."
|
||||
|
||||
if [ ! -d "$PROJECT_PATH/node_modules" ]; then
|
||||
log_info "ยังไม่ได้ติดตั้ง dependencies - กำลังติดตั้ง..."
|
||||
|
||||
if command -v pnpm &> /dev/null; then
|
||||
cd "$PROJECT_PATH" && pnpm install
|
||||
elif command -v npm &> /dev/null; then
|
||||
cd "$PROJECT_PATH" && npm install
|
||||
else
|
||||
log_error "ไม่พบ npm หรือ pnpm"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
log_success "ติดตั้ง dependencies เสร็จสมบูรณ์"
|
||||
else
|
||||
log_success "Dependencies พร้อมแล้ว"
|
||||
fi
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Start dev server
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
start_dev_server() {
|
||||
log_info "เริ่ม dev server..."
|
||||
log_info "Host: $HOST"
|
||||
log_info "Port: $PORT"
|
||||
|
||||
local ip=$(get_ip_address)
|
||||
echo ""
|
||||
echo "=============================================="
|
||||
echo " Dev Server Started"
|
||||
echo "=============================================="
|
||||
echo ""
|
||||
echo "Local: http://localhost:$PORT"
|
||||
echo "Network: http://$ip:$PORT"
|
||||
echo ""
|
||||
echo "กด Ctrl+C เพื่อหยุด server"
|
||||
echo "=============================================="
|
||||
echo ""
|
||||
|
||||
# Change to project directory
|
||||
cd "$PROJECT_PATH"
|
||||
|
||||
# Check which package manager to use
|
||||
if [ -f "$PROJECT_PATH/pnpm-lock.yaml" ]; then
|
||||
PACKAGE_MANAGER="pnpm"
|
||||
elif [ -f "$PROJECT_PATH/yarn.lock" ]; then
|
||||
PACKAGE_MANAGER="yarn"
|
||||
else
|
||||
PACKAGE_MANAGER="npm"
|
||||
fi
|
||||
|
||||
# Run dev server
|
||||
# Note: ไม่ใช้ background mode - ให้ user เห็น output ตรง
|
||||
$PACKAGE_MANAGER run dev -- --host "$HOST" --port "$PORT"
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Check if port is in use
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
check_port() {
|
||||
log_info "ตรวจสอบ port $PORT..."
|
||||
|
||||
if command -v lsof &> /dev/null; then
|
||||
if lsof -i :$PORT &> /dev/null; then
|
||||
log_error "Port $PORT ถูกใช้งานอยู่"
|
||||
log_info "ลองใช้ port อื่น: ./preview.sh $PROJECT_PATH $((PORT + 1))"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Main
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
main() {
|
||||
echo "=============================================="
|
||||
echo " Astro Preview Server"
|
||||
echo "=============================================="
|
||||
echo ""
|
||||
|
||||
# Check if we should just print the IP
|
||||
if [ "$1" == "--ip" ]; then
|
||||
local ip=$(get_ip_address)
|
||||
echo "IP Address: $ip"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Check requirements
|
||||
if ! command -v node &> /dev/null; then
|
||||
log_error "ไม่พบ node.js"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Run setup
|
||||
check_project
|
||||
check_port
|
||||
install_deps
|
||||
|
||||
# Start server
|
||||
start_dev_server
|
||||
}
|
||||
|
||||
main "$@"
|
||||
Reference in New Issue
Block a user