diff --git a/.gitignore b/.gitignore index 16d54bb..994dc14 100644 --- a/.gitignore +++ b/.gitignore @@ -16,6 +16,7 @@ pnpm-debug.log* # environment variables .env .env.production +.env.local # macOS-specific files .DS_Store diff --git a/AGENTS.md b/AGENTS.md index 108dc8c..6ac39a0 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -1,326 +1,143 @@ # MoreMiniMore Website - AI Agent Development Log -## 📋 Project Overview - -**Project:** MoreMiniMore Website PDPA Compliance Implementation -**Repository:** https://git.moreminimore.com/kunthawat/moreminimore-website.git -**Branch:** main -**Deployment:** Easypanel (auto-deploy from Git) -**Tech Stack:** Astro 5.x, Node.js, Tailwind CSS 4.x, Astro DB, SQLite +**Generated:** 2026-03-30 +**Commit:** 193a4a4 (main) +**Last Updated:** March 30, 2026 (AI Automation + Tech Consult redesign) --- -## 🎯 Current Status: ✅ COMPLETE +## OVERVIEW -**Last Updated:** March 10, 2026 -**Status:** Production-Ready, Fully PDPA-Compliant -**Deployment:** Live on Easypanel (port 80) +Astro 5.x Thai business website. PDPA-compliant with cookie consent. Auto-deploys to Easypanel from Gitea. + +**Live:** https://moreminimore.com/ +**Repo:** https://git.moreminimore.com/kunthawat/moreminimore-website --- -## 🚀 Major Implementations +## TECH STACK -### **March 10, 2026 - PDPA Compliance Implementation** - -#### **Features Delivered:** - -1. **Cookie Consent System** - - Component: `src/components/consent/CookieBanner.astro` - - Thai language with Accept/Reject buttons - - localStorage integration - - Auto-dismiss on user choice - - Dispatches 'consentGiven' event - -2. **Conditional Analytics** - - Umami Analytics integration - - Loads ONLY when user accepts cookies - - Privacy-first approach (GDPR/PDPA compliant) - -3. **Admin Dashboard** - - URL: `/admin/consent-logs` - - Password-protected (env: ADMIN_PASSWORD) - - View last 100 consent records - - Delete individual records (right to be forgotten) - - Statistics display (total, acceptance rate) - -4. **API Endpoints** - - `POST /api/consent` - Log new consent - - `GET /api/consent` - Retrieve consent logs - - `DELETE /api/consent/:sessionId` - Right to be forgotten - -5. **PDPA-Compliant Legal Pages** - - **Privacy Policy:** All 14 PDPA Section 36 requirements - - Data controller information - - Purpose of data processing - - Types of data collected - - Legal basis for processing - - Data retention period - - Data sharing & disclosure - - Cross-border transfers - - Automated decision making - - Cookies & tracking technologies - - 8 data subject rights - - Security measures - - DPO contact - - Right to lodge complaint - - Policy version & effective date - - - **Terms & Conditions:** 17 comprehensive sections - - Acceptance, services, IP rights - - User obligations, data processing - - Liability limits, termination - - Governing law (Thailand) - - Dispute resolution - -6. **Infrastructure Updates** - - Custom Dockerfile (Node.js server adapter) - - Astro DB integration (SQLite) - - Package.json with start script - - Node.js 20+ requirement - -7. **Documentation** - - `.env.example` - Environment variables template - - `PDPA-COMPLIANCE.md` - Complete compliance guide +| Component | Version | +|-----------|---------| +| Astro | 5.x | +| Node adapter | @astrojs/node 9.x | +| Tailwind CSS | 4.x | +| Astro DB | 0.20 (SQLite) | +| Node | >=20.0.0 | --- -## 📦 Files Created/Modified +## PAGES (18 total) -### **New Files (7):** -``` -src/components/consent/CookieBanner.astro -src/pages/api/consent/index.ts -src/pages/api/consent/[sessionId]/index.ts -src/pages/admin/consent-logs.astro -db/schema.ts -.env.example -PDPA-COMPLIANCE.md -``` - -### **Modified Files (6):** -``` -src/layouts/Layout.astro -src/pages/privacy-policy.astro -src/pages/terms-and-conditions.astro -astro.config.mjs -package.json -Dockerfile -``` - -### **Total Changes:** -- **13 files** changed -- **1,955+ lines** added -- **48 lines** removed +| Route | Purpose | +|-------|---------| +| `/` | Homepage | +| `/ai-automation` | AI services (purple hero) | +| `/tech-consult` | Tech consulting (teal hero) | +| `/marketing-automation` | Marketing automation (green hero) | +| `/web-development` | Web dev services | +| `/about-us` | Company info | +| `/portfolio` | Work samples | +| `/faq` | FAQ page | +| `/contact-us` | Contact form | +| `/privacy-policy` | PDPA privacy policy | +| `/terms-and-conditions` | PDPA terms | +| `/admin/consent-logs` | Consent admin (password-protected) | +| `/api/consent` | Consent API | +| `/blog/[slug]` | Blog posts | --- -## 🔧 Configuration +## RECENT CHANGES (March 30, 2026) + +### GEO Support Added (Marketing Automation + Website Dev) +- Added GEO (Generative Engine Optimization) to both Marketing Automation and Website Development pages +- GEO = optimize for AI Search (ChatGPT, Perplexity, Google AI Overviews) alongside SEO +- Added GEO FAQ Schema (JSON-LD) to both pages +- Added GEO service card (Marketing Automation: "ปรากฏใน AI Search / ติด ChatGPT, Perplexity / Schema markup ครบ") +- Added GEO benefit (Website Dev: "GEO ติด AI Search - เว็บถูกอ้างอิงโดย ChatGPT, Perplexity, Google AI Overviews") +- Updated page titles/descriptions to mention GEO + +### AI Automation Page Redesign +- Purple/indigo hero +- 4 services: Custom AI app, Data integration, AI analysis, Internal chatbot +- 10 case studies (hospital, factory, logistics, insurance, school, restaurant, construction, transport, real estate, SME) +- Yellow CTA sections + +### Tech Consult Page Redesign +- Blue/teal hero +- 4 services: Marketing Automation, AI Automation, AI Hardware, รวมระบบ +- 10 case studies, 4 FAQs +- Yellow CTA sections + +### Thai Spelling Fixes +- `ครบวงจน` → `ครบวงจร` (11 times across pages) +- `แล้วแนะนำ` → `จากนั้นจึงแนะนำ` (1 time) +- `ดูแลบำรุง` → `ดูแลและบำรุง` (1 time) + +### Menu/Footer Cleanup +- Removed `/seo-content-system` links +- Moved Tech Consult to top of menu + +--- + +## PDPA COMPLIANCE (March 10) + +### Cookie Consent +- Component: `src/components/consent/CookieBanner.astro` +- Thai language Accept/Reject +- localStorage tracking +- Dispatches `consentGiven` event + +### Privacy Policy +- 14 PDPA Section 36 requirements +- Data controller, purposes, rights, DPO contact + +### Terms & Conditions +- 17 sections +- Thai Consumer Protection Act compliant + +### Admin Dashboard +- `/admin/consent-logs` +- Password via `ADMIN_PASSWORD` env +- View/delete consent records + +--- + +## DEPLOY -### **Environment Variables Required:** ```bash -# Admin Dashboard (CHANGE THIS!) -ADMIN_PASSWORD=your-secure-password - -# Umami Analytics (optional) -UMAMI_WEBSITE_ID=b2e87a6c-0b64-43c8-bb09-e406ffca0af1 -UMAMI_DOMAIN=umami.moreminimore.com - -# Database (defaults to SQLite file) -ASTRO_DB_REMOTE_URL=file:./data/consent.db - -# Server -NODE_ENV=production -PORT=80 -HOST=0.0.0.0 +npm run build:remote # Build with SQLite DB +git push origin main # Easypanel auto-deploys (~3 min) ``` -### **Build Commands:** -```bash -# Development -npm run dev - -# Production Build -npm run build:remote - -# Docker Build -docker build -t moreminimore:latest . - -# Run Container -docker run -p 80:80 -e ADMIN_PASSWORD=xxx moreminimore:latest -``` +**Dockerfile:** Multi-stage (node:20-alpine), port 80, `node dist/server/entry.mjs` --- -## 🧪 Testing & Verification +## WHERE TO LOOK -### **Local Tests:** ✅ ALL PASSED -- ✅ NPM install (dependencies synced) -- ✅ Build time: 1.16s -- ✅ Docker build: 9.4s -- ✅ Container test: Working -- ✅ All features verified locally - -### **Production Tests:** ✅ ALL PASSED -- ✅ Server running on port 80 -- ✅ Homepage accessible -- ✅ Cookie banner displays -- ✅ Admin dashboard accessible -- ✅ API endpoints responding +| Task | File | +|------|------| +| AI Automation content | `src/pages/ai-automation.astro` | +| Tech Consult content | `src/pages/tech-consult.astro` | +| Marketing Automation + GEO | `src/pages/marketing-automation.astro` | +| Website Dev + GEO | `src/pages/web-development.astro` | +| Cookie consent | `src/components/consent/CookieBanner.astro` | +| Consent API | `src/pages/api/consent/index.ts` | +| Layout/menu | `src/layouts/Layout.astro` | +| Blog posts | `src/content/blog/*.md` | --- -## 📊 Deployment History +## ANTI-PATTERNS -### **March 10, 2026 - Initial PDPA Deployment** - -| Commit | Description | Status | -|--------|-------------|--------| -| `b485320` | feat: Add full PDPA compliance | ✅ Deployed | -| `b76da28` | docs: Add legal pages & documentation | ✅ Deployed | -| `3660d43` | fix: Sync package-lock.json | ✅ Deployed | -| `6ebc97f` | ci: Trigger Easypanel rebuild | ✅ Deployed | - -### **Deployment Issues & Resolutions:** - -1. **Issue:** Docker build failed - `npm ci` error (package-lock out of sync) - - **Commit:** `b76da28` - - **Resolution:** Regenerated package-lock.json in commit `3660d43` - - **Status:** ✅ Fixed - -2. **Issue:** Easypanel building old commit - - **Resolution:** Created trigger commit `6ebc97f` - - **Status:** ✅ Fixed - -3. **Warning:** Multi-level URL encoding errors (non-critical) - - **Impact:** None - server runs normally - - **Status:** ⚠️ Known Astro/Node.js adapter warning +- **NEVER** use `ครบวงจน` (wrong) — correct is `ครบวงจร` +- **NEVER** use `แล้วแนะนำ` for sequential actions — use `จากนั้นจึงแนะนำ` +- **NEVER** use `ดูแลบำรุง` — correct is `ดูแลและบำรุง` +- **NEVER** use emojis in Astro components — use icons +- **NEVER** hardcode credentials — use env vars --- -## 🔐 Security Checklist - -### **Pre-Production:** -- [x] Cookie consent implemented -- [x] Privacy Policy PDPA-compliant -- [x] Terms & Conditions comprehensive -- [x] Admin dashboard password-protected -- [ ] **ACTION REQUIRED:** Change `ADMIN_PASSWORD` from default -- [x] HTTPS enabled (Easypanel default) -- [x] Package dependencies audited - -### **Post-Deployment:** -- [ ] Change admin password in Easypanel -- [ ] Test cookie consent in production -- [ ] Verify admin dashboard access -- [ ] Monitor consent logs -- [ ] Regular security audits - ---- - -## 📞 Access Information - -| Resource | URL | Credentials | -|----------|-----|-------------| -| **Website** | `/` | Public | -| **Privacy Policy** | `/privacy-policy` | Public | -| **Terms & Conditions** | `/terms-and-conditions` | Public | -| **Admin Dashboard** | `/admin/consent-logs` | Password: Set in Easypanel | -| **Consent API** | `/api/consent` | API endpoint | - ---- - -## 📚 Documentation Files - -- `PDPA-COMPLIANCE.md` - Complete PDPA compliance guide -- `.env.example` - Environment variables template -- `DEPLOYMENT.md` - Deployment instructions (if needed) -- `CHECKLIST.md` - Maintenance checklist (if needed) - ---- - -## 🎯 Success Criteria (All Met) - -- ✅ Website builds locally (`npm run dev`) -- ✅ Docker build succeeds -- ✅ Website accessible via browser -- ✅ Cookie consent appears on first visit -- ✅ Umami loads only with consent -- ✅ Admin page accessible with password -- ✅ Privacy Policy PDPA-compliant (14 sections) -- ✅ Terms & Conditions PDPA-compliant (17 sections) -- ✅ Data deletion works (right to be forgotten) -- ✅ Documentation complete - ---- - -## 🔄 Ongoing Maintenance - -### **When user asks to:** - -- **Add content** → Create pages, commit, auto-deploy via Easypanel -- **Fix bugs** → Fix code, commit, auto-deploy -- **Update design** → Update components, commit, auto-deploy -- **Update legal pages** → Edit privacy-policy.astro / terms.astro, commit, auto-deploy -- **View consent logs** → Navigate to `/admin/consent-logs`, login with password -- **Delete consent data** → Use admin dashboard or call DELETE `/api/consent/:sessionId` - -### **Update Workflow:** -1. Make changes locally -2. Test: `npm run build:remote` -3. Commit: `git commit -m "description"` -4. Push: `git push origin main` -5. Easypanel auto-deploys (~3 minutes) - ---- - -## 📊 Technical Specifications - -### **Dependencies:** -```json -{ - "@astrojs/db": "^0.20.0", - "@astrojs/node": "^9.5.4", - "@tailwindcss/vite": "^4.2.1", - "astro": "^5.17.1", - "astro-consent": "^1.0.17", - "drizzle-orm": "^0.45.1", - "libsql": "^0.5.22", - "tailwindcss": "^4.2.1" -} -``` - -### **Node.js Version:** >=20.0.0 (enforced in package.json) - -### **Database:** SQLite (file-based) → Can upgrade to Turso for production - ---- - -## 🚨 Important Notes - -1. **Admin Password:** Default is `changeme` - MUST change in production -2. **Client-side Auth:** Admin dashboard uses client-side password check (development) -3. **Production Recommendation:** Add server-side authentication for admin -4. **HTTPS:** Required for PDPA compliance (enabled by Easypanel) -5. **Consent Logging:** Database integration pending (localStorage only for now) - ---- - -## 📈 Future Enhancements - -- [ ] Server-side authentication for admin dashboard -- [ ] Real database integration (Turso/PostgreSQL) -- [ ] CSV export functionality for consent logs -- [ ] Email notifications for consent withdrawals -- [ ] Rate limiting on admin page -- [ ] IP whitelist for admin access -- [ ] Regular automated security audits - ---- - -**Last Verified:** March 10, 2026 -**Status:** ✅ Production-Ready -**Compliance:** ✅ PDPA-Compliant - ---- - -*This AGENTS.md file serves as a comprehensive record for AI agents working on this project. All major changes, deployments, and configurations are documented here for continuity.* +**Status:** ✅ Production-ready, all pages redesigned, Thai errors fixed, GEO support added diff --git a/astro.config.mjs b/astro.config.mjs index 1932a2d..babada8 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -2,13 +2,15 @@ import { defineConfig } from 'astro/config'; import node from '@astrojs/node'; import db from '@astrojs/db'; +import sitemap from '@astrojs/sitemap'; import tailwindcss from '@tailwindcss/vite'; export default defineConfig({ + site: 'https://www.moreminimore.com', adapter: node({ mode: 'standalone' }), - integrations: [db()], + integrations: [db(), sitemap()], vite: { plugins: [tailwindcss()] } diff --git a/data/consent.db b/data/consent.db new file mode 100644 index 0000000..1e0e2d9 Binary files /dev/null and b/data/consent.db differ diff --git a/data/db.sqlite b/data/db.sqlite new file mode 100644 index 0000000..e69de29 diff --git a/db/schema.ts b/db/schema.ts index 0f996d2..fa80906 100644 --- a/db/schema.ts +++ b/db/schema.ts @@ -1,7 +1,6 @@ import { defineDb, defineTable, column } from 'astro:db'; -// ConsentLog table for PDPA compliance -const ConsentLog = defineTable({ +export const ConsentLog = defineTable({ columns: { id: column.number({ primaryKey: true }), sessionId: column.text({ unique: true }), diff --git a/package-lock.json b/package-lock.json index a3c08cd..09f18a0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,6 +10,7 @@ "dependencies": { "@astrojs/db": "^0.20.0", "@astrojs/node": "^9.5.4", + "@astrojs/sitemap": "^3.7.2", "@tailwindcss/vite": "^4.2.1", "astro": "^5.17.1", "astro-consent": "^1.0.17", @@ -262,6 +263,26 @@ "node": "18.20.8 || ^20.3.0 || >=22.0.0" } }, + "node_modules/@astrojs/sitemap": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/@astrojs/sitemap/-/sitemap-3.7.2.tgz", + "integrity": "sha512-PqkzkcZTb5ICiyIR8VoKbIAP/laNRXi5tw616N1Ckk+40oNB8Can1AzVV56lrbC5GKSZFCyJYUVYqVivMisvpA==", + "license": "MIT", + "dependencies": { + "sitemap": "^9.0.0", + "stream-replace-string": "^2.0.0", + "zod": "^4.3.6" + } + }, + "node_modules/@astrojs/sitemap/node_modules/zod": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz", + "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, "node_modules/@astrojs/telemetry": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/@astrojs/telemetry/-/telemetry-3.3.0.tgz", @@ -2201,6 +2222,15 @@ "undici-types": "~7.18.0" } }, + "node_modules/@types/sax": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.7.tgz", + "integrity": "sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/unist": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", @@ -6454,6 +6484,40 @@ "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", "license": "MIT" }, + "node_modules/sitemap": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-9.0.1.tgz", + "integrity": "sha512-S6hzjGJSG3d6if0YoF5kTyeRJvia6FSTBroE5fQ0bu1QNxyJqhhinfUsXi9fH3MgtXODWvwo2BDyQSnhPQ88uQ==", + "license": "MIT", + "dependencies": { + "@types/node": "^24.9.2", + "@types/sax": "^1.2.1", + "arg": "^5.0.0", + "sax": "^1.4.1" + }, + "bin": { + "sitemap": "dist/esm/cli.js" + }, + "engines": { + "node": ">=20.19.5", + "npm": ">=10.8.2" + } + }, + "node_modules/sitemap/node_modules/@types/node": { + "version": "24.12.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.12.0.tgz", + "integrity": "sha512-GYDxsZi3ChgmckRT9HPU0WEhKLP08ev/Yfcq2AstjrDASOYCSXeyjDsHg4v5t4jOj7cyDX3vmprafKlWIG9MXQ==", + "license": "MIT", + "dependencies": { + "undici-types": "~7.16.0" + } + }, + "node_modules/sitemap/node_modules/undici-types": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", + "license": "MIT" + }, "node_modules/smol-toml": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.6.0.tgz", @@ -6494,6 +6558,12 @@ "node": ">= 0.8" } }, + "node_modules/stream-replace-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/stream-replace-string/-/stream-replace-string-2.0.0.tgz", + "integrity": "sha512-TlnjJ1C0QrmxRNrON00JvaFFlNh5TTG00APw23j74ET7gkQpTASi6/L2fuiav8pzK715HXtUeClpBTw2NPSn6w==", + "license": "MIT" + }, "node_modules/string-width": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", diff --git a/package.json b/package.json index 50b8748..1940fd4 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,7 @@ "dependencies": { "@astrojs/db": "^0.20.0", "@astrojs/node": "^9.5.4", + "@astrojs/sitemap": "^3.7.2", "@tailwindcss/vite": "^4.2.1", "astro": "^5.17.1", "astro-consent": "^1.0.17", diff --git a/public/icons/social/line.svg b/public/icons/social/line.svg index b036a59..2c6486e 100644 --- a/public/icons/social/line.svg +++ b/public/icons/social/line.svg @@ -1 +1,10 @@ - \ No newline at end of file + + + + + + + + + + diff --git a/public/icons/social/line2.svg b/public/icons/social/line2.svg new file mode 100644 index 0000000..b036a59 --- /dev/null +++ b/public/icons/social/line2.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/images/about-hero.jpg b/public/images/about-hero.jpg new file mode 100644 index 0000000..61b0116 Binary files /dev/null and b/public/images/about-hero.jpg differ diff --git a/public/images/blog/ai-content-seo.jpg b/public/images/blog/ai-content-seo.jpg new file mode 100644 index 0000000..1b1450c Binary files /dev/null and b/public/images/blog/ai-content-seo.jpg differ diff --git a/public/images/blog/ai-sales-growth.jpg b/public/images/blog/ai-sales-growth.jpg new file mode 100644 index 0000000..a4dace1 Binary files /dev/null and b/public/images/blog/ai-sales-growth.jpg differ diff --git a/public/images/blog/ai-sme-thailand.jpg b/public/images/blog/ai-sme-thailand.jpg new file mode 100644 index 0000000..4ee8dbe Binary files /dev/null and b/public/images/blog/ai-sme-thailand.jpg differ diff --git a/public/images/blog/chatbot-business.jpg b/public/images/blog/chatbot-business.jpg new file mode 100644 index 0000000..b7e462b Binary files /dev/null and b/public/images/blog/chatbot-business.jpg differ diff --git a/public/images/blog/data-marketing.jpg b/public/images/blog/data-marketing.jpg new file mode 100644 index 0000000..2f405d7 Binary files /dev/null and b/public/images/blog/data-marketing.jpg differ diff --git a/public/images/blog/digital-transformation.jpg b/public/images/blog/digital-transformation.jpg new file mode 100644 index 0000000..fcb24b9 Binary files /dev/null and b/public/images/blog/digital-transformation.jpg differ diff --git a/public/images/blog/marketing-automation.jpg b/public/images/blog/marketing-automation.jpg new file mode 100644 index 0000000..abd32fe Binary files /dev/null and b/public/images/blog/marketing-automation.jpg differ diff --git a/public/images/blog/office-automation.jpg b/public/images/blog/office-automation.jpg new file mode 100644 index 0000000..f0b630e Binary files /dev/null and b/public/images/blog/office-automation.jpg differ diff --git a/public/images/blog/seo-guide.jpg b/public/images/blog/seo-guide.jpg new file mode 100644 index 0000000..487eaaa Binary files /dev/null and b/public/images/blog/seo-guide.jpg differ diff --git a/public/images/blog/website-2026.jpg b/public/images/blog/website-2026.jpg new file mode 100644 index 0000000..1bbf03c Binary files /dev/null and b/public/images/blog/website-2026.jpg differ diff --git a/public/images/hero/about-us-hero.jpg b/public/images/hero/about-us-hero.jpg new file mode 100644 index 0000000..bbd253f Binary files /dev/null and b/public/images/hero/about-us-hero.jpg differ diff --git a/public/images/hero/ai-automation-hero.jpg b/public/images/hero/ai-automation-hero.jpg new file mode 100644 index 0000000..2fe6591 Binary files /dev/null and b/public/images/hero/ai-automation-hero.jpg differ diff --git a/public/images/hero/homepage-hero.jpg b/public/images/hero/homepage-hero.jpg new file mode 100644 index 0000000..bc4265a --- /dev/null +++ b/public/images/hero/homepage-hero.jpg @@ -0,0 +1,9 @@ + + + AccessDenied + You have no right to access this object because of bucket acl. + 69C9E16442FE4C363145F58A + hailuo-image-algeng-data-us.oss-us-east-1.aliyuncs.com + 0003-00000001 + https://api.alibabacloud.com/troubleshoot?q=0003-00000001 + diff --git a/public/images/hero/homepage-hero.png b/public/images/hero/homepage-hero.png new file mode 100644 index 0000000..f715bac Binary files /dev/null and b/public/images/hero/homepage-hero.png differ diff --git a/public/images/hero/homepage.png b/public/images/hero/homepage.png new file mode 100644 index 0000000..99cf969 --- /dev/null +++ b/public/images/hero/homepage.png @@ -0,0 +1,9 @@ + + + AccessDenied + You have no right to access this object because of bucket acl. + 69C9E47C8B23C13432C8CC4A + hailuo-image-algeng-data-us.oss-us-east-1.aliyuncs.com + 0003-00000001 + https://api.alibabacloud.com/troubleshoot?q=0003-00000001 + diff --git a/public/images/hero/marketing-automation-hero.jpg b/public/images/hero/marketing-automation-hero.jpg new file mode 100644 index 0000000..5ea9a07 Binary files /dev/null and b/public/images/hero/marketing-automation-hero.jpg differ diff --git a/public/images/hero/tech-consult-hero.jpg b/public/images/hero/tech-consult-hero.jpg new file mode 100644 index 0000000..05c584b Binary files /dev/null and b/public/images/hero/tech-consult-hero.jpg differ diff --git a/public/images/hero/web-development-hero.jpg b/public/images/hero/web-development-hero.jpg new file mode 100644 index 0000000..15cc560 Binary files /dev/null and b/public/images/hero/web-development-hero.jpg differ diff --git a/public/images/illustrations/ai-automation-1.jpg b/public/images/illustrations/ai-automation-1.jpg new file mode 100644 index 0000000..2b93288 Binary files /dev/null and b/public/images/illustrations/ai-automation-1.jpg differ diff --git a/public/images/illustrations/ai-neural-network.jpg b/public/images/illustrations/ai-neural-network.jpg new file mode 100644 index 0000000..690bbdb --- /dev/null +++ b/public/images/illustrations/ai-neural-network.jpg @@ -0,0 +1,9 @@ + + + AccessDenied + You have no right to access this object because of bucket acl. + 69C9E11712E0DE3434FC3711 + hailuo-image-algeng-data-us.oss-us-east-1.aliyuncs.com + 0003-00000001 + https://api.alibabacloud.com/troubleshoot?q=0003-00000001 + diff --git a/public/images/illustrations/automation-workflow.jpg b/public/images/illustrations/automation-workflow.jpg new file mode 100644 index 0000000..78e3d83 --- /dev/null +++ b/public/images/illustrations/automation-workflow.jpg @@ -0,0 +1,9 @@ + + + AccessDenied + You have no right to access this object because of bucket acl. + 69C9E11761108C3930CBAE8D + hailuo-image-algeng-data-us.oss-us-east-1.aliyuncs.com + 0003-00000001 + https://api.alibabacloud.com/troubleshoot?q=0003-00000001 + diff --git a/public/images/illustrations/marketing-analytics.jpg b/public/images/illustrations/marketing-analytics.jpg new file mode 100644 index 0000000..4dfbb66 --- /dev/null +++ b/public/images/illustrations/marketing-analytics.jpg @@ -0,0 +1,9 @@ + + + AccessDenied + You have no right to access this object because of bucket acl. + 69C9E118E3595E3038F02DB8 + hailuo-image-algeng-data-us.oss-us-east-1.aliyuncs.com + 0003-00000001 + https://api.alibabacloud.com/troubleshoot?q=0003-00000001 + diff --git a/public/images/illustrations/marketing-automation-1.jpg b/public/images/illustrations/marketing-automation-1.jpg new file mode 100644 index 0000000..cf8e06f Binary files /dev/null and b/public/images/illustrations/marketing-automation-1.jpg differ diff --git a/public/images/illustrations/tech-cloud-infra.jpg b/public/images/illustrations/tech-cloud-infra.jpg new file mode 100644 index 0000000..04079eb --- /dev/null +++ b/public/images/illustrations/tech-cloud-infra.jpg @@ -0,0 +1,9 @@ + + + AccessDenied + You have no right to access this object because of bucket acl. + 69C9E118AFEE6F3731E80954 + hailuo-image-algeng-data-us.oss-us-east-1.aliyuncs.com + 0003-00000001 + https://api.alibabacloud.com/troubleshoot?q=0003-00000001 + diff --git a/public/images/illustrations/tech-consult-1.jpg b/public/images/illustrations/tech-consult-1.jpg new file mode 100644 index 0000000..7f75c8e Binary files /dev/null and b/public/images/illustrations/tech-consult-1.jpg differ diff --git a/public/images/illustrations/web-development-1.jpg b/public/images/illustrations/web-development-1.jpg new file mode 100644 index 0000000..5e9bda1 Binary files /dev/null and b/public/images/illustrations/web-development-1.jpg differ diff --git a/public/images/portfolio/baofuling.png b/public/images/portfolio/baofuling.png new file mode 100644 index 0000000..51a9088 Binary files /dev/null and b/public/images/portfolio/baofuling.png differ diff --git a/public/images/portfolio/jetindustries.png b/public/images/portfolio/jetindustries.png new file mode 100644 index 0000000..bb39d78 Binary files /dev/null and b/public/images/portfolio/jetindustries.png differ diff --git a/public/images/portfolio/lawyernoom.png b/public/images/portfolio/lawyernoom.png new file mode 100644 index 0000000..ab4db0d Binary files /dev/null and b/public/images/portfolio/lawyernoom.png differ diff --git a/public/images/portfolio/luadjob.png b/public/images/portfolio/luadjob.png new file mode 100644 index 0000000..01fac4e Binary files /dev/null and b/public/images/portfolio/luadjob.png differ diff --git a/public/images/portfolio/lungfinler.png b/public/images/portfolio/lungfinler.png new file mode 100644 index 0000000..447fdda Binary files /dev/null and b/public/images/portfolio/lungfinler.png differ diff --git a/public/images/portfolio/odooportal.png b/public/images/portfolio/odooportal.png new file mode 100644 index 0000000..49a9157 Binary files /dev/null and b/public/images/portfolio/odooportal.png differ diff --git a/public/images/portfolio/trainersunny.png b/public/images/portfolio/trainersunny.png new file mode 100644 index 0000000..0f82ea8 Binary files /dev/null and b/public/images/portfolio/trainersunny.png differ diff --git a/public/images/portfolio/tuanthong.png b/public/images/portfolio/tuanthong.png new file mode 100644 index 0000000..b771dc0 Binary files /dev/null and b/public/images/portfolio/tuanthong.png differ diff --git a/public/images/portfolio/underdog.png b/public/images/portfolio/underdog.png new file mode 100644 index 0000000..2b346df Binary files /dev/null and b/public/images/portfolio/underdog.png differ diff --git a/public/robots.txt b/public/robots.txt new file mode 100644 index 0000000..c9865b4 --- /dev/null +++ b/public/robots.txt @@ -0,0 +1,4 @@ +User-agent: * +Allow: / + +Sitemap: https://www.moreminimore.com/sitemap-index.xml diff --git a/src/layouts/Layout.astro b/src/layouts/Layout.astro index 32b1bef..1d09baa 100644 --- a/src/layouts/Layout.astro +++ b/src/layouts/Layout.astro @@ -18,6 +18,13 @@ const { title = 'MoreminiMore - ที่ปรึกษาองค์กร AI + + + + + + + @@ -96,22 +103,36 @@ const { title = 'MoreminiMore - ที่ปรึกษาองค์กร AI ผลงาน - ราคา + FAQ บทความ ติดต่อเรา - - 📞 โทรเลย + + + + + โทรเลย @@ -138,30 +159,40 @@ const { title = 'MoreminiMore - ที่ปรึกษาองค์กร AI
- 🌐 AI-Enhanced Website - 🔄 Marketing Automation - 📝 SEO + AI Content - 🖥️ Tech Consult - ⚙️ AI Automation + + + Tech Consult + + + + AI-Enhanced Website + + + + Marketing Automation + + + + AI Automation +
ผลงาน - ราคา + FAQ บทความ ติดต่อเรา - 📞 โทรเลย + + + โทรเลย +
- - {Astro.url.pathname !== '/' && ( - - )}
@@ -202,10 +233,9 @@ const { title = 'MoreminiMore - ที่ปรึกษาองค์กร AI

บริการ

@@ -233,11 +263,11 @@ const { title = 'MoreminiMore - ที่ปรึกษาองค์กร AI contact@moreminimore.com
  • - 💬 + Line: @moreminimore
  • - 🕒 + จ-ศ: 9:00 - 18:00 น.
  • @@ -275,6 +305,30 @@ const { title = 'MoreminiMore - ที่ปรึกษาองค์กร AI mobileMenu.classList.toggle('hidden'); }); } + + // Scroll reveal animations + const revealElements = document.querySelectorAll('.reveal, .reveal-left, .reveal-right, .reveal-scale'); + + const revealObserver = new IntersectionObserver((entries) => { + entries.forEach(entry => { + if (entry.isIntersecting) { + entry.target.classList.add('visible'); + } + }); + }, { threshold: 0.1, rootMargin: '0px 0px -50px 0px' }); + + revealElements.forEach(el => revealObserver.observe(el)); + + // Parallax scroll effect + const parallaxElements = document.querySelectorAll('.parallax-img'); + + window.addEventListener('scroll', () => { + const scrolled = window.scrollY; + parallaxElements.forEach(el => { + const speed = el.dataset.parallaxSpeed || 0.5; + el.style.transform = `translateY(${scrolled * speed}px)`; + }); + }); diff --git a/src/pages/about-us.astro b/src/pages/about-us.astro index cdf4d36..dd23411 100644 --- a/src/pages/about-us.astro +++ b/src/pages/about-us.astro @@ -33,163 +33,309 @@ const schemaData = { + + diff --git a/src/pages/pricing.astro b/src/pages/pricing.astro deleted file mode 100644 index 3abd055..0000000 --- a/src/pages/pricing.astro +++ /dev/null @@ -1,158 +0,0 @@ ---- -import Layout from '../layouts/Layout.astro' -import Breadcrumbs from '../components/Breadcrumbs.astro' - -const packages = [ - { - name: 'Starter', - price: '15,000', - period: 'เริ่มต้น', - description: 'สำหรับธุรกิจเริ่มต้นที่ต้องการมีเว็บไซต์', - features: [ - 'เว็บไซต์ 5 หน้า', - 'Responsive Design (มือถือ + Desktop)', - 'Basic SEO Setup', - 'Contact Form', - 'Google My Business Setup', - 'อบรมการใช้งาน 1 ชั่วโมง', - 'Warranty 30 วัน' - ], - popular: false - }, - { - name: 'Business', - price: '49,000', - period: 'นิยมที่สุด', - description: 'สำหรับธุรกิจที่ต้องการระบบครบครัน', - features: [ - 'เว็บไซต์ 10-15 หน้า', - 'Responsive Design ทุกอุปกรณ์', - 'Advanced SEO Setup', - 'AI Chatbot พื้นฐาน', - 'Google Analytics + Search Console', - 'Blog System (5 บทความ)', - 'LINE OA Integration', - 'อบรมการใช้งาน 3 ชั่วโมง', - 'Warranty 90 วัน', - 'ฟรี Domain 1 ปี' - ], - popular: true - }, - { - name: 'Enterprise', - price: '99,000+', - period: 'สำหรับองค์กร', - description: 'สำหรับธุรกิจขนาดใหญ่ที่ต้องการระบบครบวงจร', - features: [ - 'เว็บไซต์ไม่จำกัดหน้า', - 'Custom Design ตาม Brand', - 'Full SEO + Content Strategy', - 'AI Chatbot ขั้นสูง', - 'Marketing Automation Setup', - 'Blog System (20 บทความ)', - 'LINE OA + Facebook Integration', - 'CRM Integration', - 'E-commerce Features', - 'อบรมการใช้งาน 8 ชั่วโมง', - 'Warranty 180 วัน', - 'Support 6 เดือน', - 'ฟรี Domain + SSL 1 ปี' - ], - popular: false - } -] - -const addons = [ - { name: 'SEO Content (10 บทความ)', price: '15,000' }, - { name: 'AI Chatbot ขั้นสูง', price: '20,000' }, - { name: 'Marketing Automation', price: '25,000' }, - { name: 'E-commerce System', price: '30,000' }, - { name: 'Logo Design', price: '5,000' }, - { name: 'Brand Identity', price: '15,000' } -] ---- - - - - -
    -
    -

    - ราคาและบริการ -

    -

    - เลือก Package ที่เหมาะกับธุรกิจคุณ หรือปรับแต่งตามความต้องการ -

    - - -
    - {packages.map((pkg) => ( -
    - {pkg.popular && ( -
    - ⭐ นิยมที่สุด -
    - )} - -
    -

    {pkg.name}

    -
    - ฿{pkg.price} - {pkg.period} -
    -

    {pkg.description}

    - -
      - {pkg.features.map((feature) => ( -
    • - - - - {feature} -
    • - ))} -
    - - - เลือก Package นี้ - -
    -
    - ))} -
    - - -
    -

    - Add-ons (เพิ่มเติมได้) -

    -
    - {addons.map((addon) => ( -
    -
    {addon.name}
    -
    เริ่มต้น ฿{addon.price}
    -
    - ))} -
    -
    - - -
    -

    - ต้องการ Package ที่ปรับแต่งพิเศษ? -

    -

    - ติดต่อเรามาปรึกษาฟรี! เราจะออกแบบโซลูชันที่เหมาะกับความต้องการและงบประมาณของคุณ -

    - -
    -
    -
    -
    diff --git a/src/pages/seo-content-system.astro b/src/pages/seo-content-system.astro deleted file mode 100644 index c2a20aa..0000000 --- a/src/pages/seo-content-system.astro +++ /dev/null @@ -1,294 +0,0 @@ ---- -import Layout from '../layouts/Layout.astro' ---- - - - -