refactor: remove EmDash CMS, hardcode static page content

- Remove EmDash: uninstalled emdash + @emdash-cms/* packages
- Delete src/utils/site-identity.ts (only file importing emdash)
- Delete src/live.config.ts (emdash stub)
- Delete src/content/pages/ (6 MD files: home/about/services/contact/faq/portfolio)
- Remove 'pages' collection from src/content.config.ts
- Hardcode home content as constants in src/pages/index.astro
- Fix duplicate 'megaphone' key in icon-paths.ts (pre-existing bug blocking build)

Home page redesign:
- New hero policy: 'เพิ่มยอดขาย ลดต้นทุน ลดเวลา' (replaces stats claim)
- Remove stats section (no claims until validated)
- 12 problem cards in 4 service buckets (3 each), outline-badge Lucide icons
- New pull quote: 'กำไรที่มากขึ้นของลูกค้า'
- Fix portfolio preview bug (was loading blog collection, now loads portfolio)

About page:
- Sync hero with new policy
- New 'นโยบายของเรา' section in story
- New dark pull-quote band with mission statement

Hero component:
- Remove hard-coded trust strip (50+/40+/5+/100% stats)
- Remove hard-coded secondary CTA
- Replace with named slots so callers can opt in

CLAUDE.md: updated to reflect new architecture (no CMS, static-only)

Verified: npm run build clean (18 pages, 1.74s)
This commit is contained in:
Macky
2026-06-05 14:09:42 +07:00
parent 892c75b7a6
commit 3f1c0061c7
14 changed files with 290 additions and 5145 deletions

4235
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -85,22 +85,11 @@ const titleWords = title.split(' ');
<path d="M5 12h14M12 5l7 7-7 7"/>
</svg>
</a>
<a href="/portfolio" class="btn btn-outline-dark">
ดูผลงานจริง
</a>
<slot name="hero-cta-secondary" />
</div>
)}
<!-- Trust strip -->
<div class="hero-trust" data-animate="fade-in-up">
<span class="trust-item">
<Icon name="award" size={14} class="trust-icon" />
50+ โปรเจกต์สำเร็จ
</span>
<span class="trust-item">· 40+ ลูกค้าที่ไว้วางใจ</span>
<span class="trust-item">· 5+ ปี</span>
<span class="trust-item">· 100% โค้ดด้วยตัวเอง</span>
</div>
<slot name="hero-trust" />
</div>
<!-- Giant Background Typography -->

View File

@@ -57,7 +57,6 @@ export const ICON_PATHS = {
package: '<line x1="16.5" y1="9.4" x2="7.5" y2="4.21"/><path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"/><polyline points="3.27 6.96 12 12.01 20.73 6.96"/><line x1="12" y1="22.08" x2="12" y2="12"/>',
// ===== Marketing / data =====
megaphone: '<path d="m3 11 18-5v12L3 14v-3z"/><path d="M11.6 16.8a3 3 0 1 1-5.8-1.6"/>',
barChart: '<line x1="12" y1="20" x2="12" y2="10"/><line x1="18" y1="20" x2="18" y2="4"/><line x1="6" y1="20" x2="6" y2="16"/>',
pieChart: '<path d="M21.21 15.89A10 10 0 1 1 8 2.83"/><path d="M22 12A10 10 0 0 0 12 2v10z"/>',
users: '<path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M23 21v-2a4 4 0 0 0-3-3.87"/><path d="M16 3.13a4 4 0 0 1 0 7.75"/>',

View File

@@ -1,22 +1,6 @@
import { defineCollection, z } from 'astro:content';
import { glob } from 'astro/loaders';
// =============================================================================
// PAGES — marketing page-level content (hero copy, badges, etc.)
// =============================================================================
const pages = defineCollection({
loader: glob({ pattern: '**/*.{md,mdx}', base: './src/content/pages' }),
schema: z.object({
title: z.string(),
subtitle: z.string().optional(),
badge: z.string().optional(),
hero_image: z.string().optional(),
show_cta: z.boolean().optional().default(true),
cta_text: z.string().optional(),
cta_link: z.string().optional(),
}),
});
// =============================================================================
// SERVICES — service detail pages
// =============================================================================
@@ -96,7 +80,6 @@ const blog = defineCollection({
});
export const collections = {
pages,
services,
portfolio,
faq,

View File

@@ -1,70 +0,0 @@
---
title: เกี่ยวกับ มอร์มินิมอร์
subtitle: บริษัท มอร์มินิมอร์ จำกัด — เราไม่ใช่ Agency ที่ทำเว็บไซต์ออกมาเยอะแล้วลืม เราเป็น Partner ที่นั่งทำงานข้างคุณจนระบบติดและใช้งานได้จริง
badge: เกี่ยวกับเรา
show_cta: false
---
# เกี่ยวกับ มอร์มินิมอร์
## Hero
- **Eyebrow:** เบื้องหลังผู้สร้างระบบ
- **Title (line 1):** ทีมเล็ก ๆ ที่ช่วย
- **Title (line 2, yellow):** SME ไทยขายดีขึ้นด้วย AI
## Story — เริ่มต้นจากปัญหาของลูกค้า ไม่ใช่จากเทคโนโลยี
1. **ก่อตั้งปี 2020** จากประสบการณ์ตรงที่เห็น SME ไทยเสียเงินหลายแสนไปกับเว็บไซต์ที่ "สวยแต่ไม่มีคนเข้า" และ AI tools ที่ "ว้าวแต่ใช้ไม่เป็น" เราเลยตั้งใจว่าจะทำให้ต่าง
2. **5 ปีที่ผ่านมา เราทำงานกับลูกค้า 40+ ราย** — ตั้งแต่ร้านค้าออนไลน์หน้าร้านเล็ก ๆ ไปจนถึงโรงงานฉีดพลาสติก 40 ปี สำนักงานกฎหมาย และแบรนด์สินค้าแมส
3. **ความต่างของเรา** เราเขียนโค้ดเอง ไม่ใช่เอาไป Outsource เราตอบแชตเอง ไม่ใช่ให้ Bot ตอบลูกค้า เราวางแผนเอง ไม่ใช่ใช้ Template เดียวกับทุกคน
**Inline stats:**
- 40+ ลูกค้าที่กลับมาใช้บริการซ้ำ
- 50+ โปรเจกต์ที่ส่งมอบ
- 5+ ปีของการทำงานหนัก
- 100% โค้ดโดยทีมมอร์มินิมอร์ — ไม่ Outsource
## Values — 4 สิ่งที่เราไม่เคยเปลี่ยน
### 🎯 เข้าใจธุรกิจก่อนเขียนโค้ด
> 30 นาทีแรกของทุกโปรเจกต์คือการถาม ไม่ใช่การ present เราถามจนเข้าใจว่าคุณขายให้ใคร กำไรเท่าไหร่ ปวดหัวตรงไหน แล้วค่อยแนะนำ solution
### 🤝 เป็น Partner ไม่ใช่ Vendor
> เราแชร์ progress ทุกสัปดาห์ผ่าน LINE Group เดียวกับที่ลูกค้าใช้ คุณเห็นทุก decision ไม่มี hidden cost ไม่มี "อันนี้เพิ่มเงินนะ" ตอนใกล้ deliver
### ⏱️ Deliver ตรงเวลา หรือบอกล่วงหน้า
> เราไม่สัญญา deadline แบบเลื่อนได้ ถ้าจะติด เราจะบอกก่อน 7 วัน ไม่ใช่บอกตอนส่งงาน เคสไหนที่เคยส่งช้า เราคืนเงิน Pro-rata
### 💚 ดูแลหลังส่งมอบ
> เว็บไซต์ที่ส่งแล้วทิ้งเป็นเว็บตาย เราเลยมีแพ็คเกจดูแลรายเดือนเริ่ม 2,000 บาท รวมอัปเดตเนื้อหา ปรับ SEO แก้บั๊ก ตอบคำถามผ่าน LINE — ไม่ทิ้งคุณหลังจบโปรเจกต์
## Process — วิธีที่เราทำงานกับคุณ (4 ขั้น โปร่งใสทุกข้อ)
### 01 · ปรึกษาฟรี (3060 นาที)
> เราคุยกับเจ้าของธุรกิจตัวจริง ไม่ใช่เซลล์ ไม่ใช่ Marketing Manager ที่มาจาก Agency อีกเจ้า ฟัง pain points เป้าหมาย budget แล้วให้คำแนะนำเบื้องต้นฟรี ไม่ผูก commitment
### 02 · วางแผน (1 สัปดาห์)
> วิเคราะห์เชิงลึก ดูคู่แข่ง ส่ง Proposal เป็นเอกสาร ไม่ใช่ "PM มาเล่าให้ฟัง" — คุณอ่าน ถามคำถาม แก้ไข scope ได้ก่อนเซ็น
### 03 · ดำเนินการ (Agile)
> พัฒนาแบบ Sprint ส่ง demo ให้ทดสอบทุก 714 วัน เห็นงานจริง ไม่ใช่ "เดี๋ยวส่งทีเดียวตอนจบ" เจอบั๊ก แจ้งได้ทันที
### 04 · สนับสนุน (ต่อเนื่อง)
> ส่งมอบงาน + อบรมทีม + มอบคู่มือ ติดตามผลทุกเดือน แนะนำสิ่งที่ควรปรับปรุง ต่อยอด หรือยกเลิก
## Trust / Social Proof (optional — needs testimonials collection)
- **Badge:** เสียงจากลูกค้า
- **Title:** ลูกค้าพูดถึงเราว่าอย่างไร
⚠️ **NOTE:** ตอนนี้ seed.json ไม่มี testimonials collection — ถ้าจะใช้ section นี้ต้องเพิ่ม collection ใหม่ แนะนำ:
- เพิ่ม `testimonials` collection (fields: name, company, role, quote, photo, rating)
- เก็บ 35 รีวิวจริง (ถ้ามี LINE chat screenshot ก็ใช้ได้)
- ถ้ายังไม่มี ให้ **ข้าม section นี้** ไปก่อน แล้วใช้ Pull Quote แทน
## Final CTA
- **Title:** อยากรู้ว่าธุรกิจคุณเหมาะกับอะไร?
- **Subtitle:** ปรึกษาฟรี 30 นาที ไม่มี script sales ไม่มี upsell จะบอกตรง ๆ ว่าทำได้หรือไม่ควรทำ
- **Buttons:** นัดคุยตอนนี้ → /contact · โทร 080-995-5945

View File

@@ -1,125 +0,0 @@
---
title: ติดต่อเรา
subtitle: เลือกช่องทางที่คุณสะดวก — คนจริง ๆ ตอบกลับภายใน 2 ชั่วโมง ไม่ใช่ Bot
badge: 30 นาที · ไม่มีค่าใช้จ่าย · ไม่มี commitment
show_cta: false
---
# ติดต่อเรา
## Hero
- **Eyebrow:** ทางที่เร็วที่สุด
- **Title (line 1):** คุยกับ **คนจริง ๆ** ไม่ใช่ Bot
- **Title (line 2, yellow):** ตอบกลับภายใน 2 ชั่วโมง
- **Subtitle:** เลือกช่องทางที่คุณสะดวก — LINE, โทร, Email หรือฟอร์ม — เราจะถาม 5 คำถาม แล้วบอกคุณได้เลยว่าควรเริ่มจากตรงไหน
## Quick Channel Picker (4 cards, above the fold)
### 💬 LINE Official
- **Best for:** คนที่อยากคุยเร็ว ๆ แบบเป็นกันเอง
- **Response time:** ตอบใน 30 นาที (เวลาทำการ)
- **CTA:** ทักเลย → https://line.me/ti/p/~@539hdlul
### 📞 โทรศัพท์
- **Best for:** คนที่อยากคุยยาว ๆ 510 นาที ถามตอบสด
- **Response time:** รับสายทันที หรือโทรกลับภายใน 2 ชม.
- **CTA:** 080-995-5945
### 📧 Email
- **Best for:** คนที่อยากส่งรายละเอียดโปรเจกต์ + ไฟล์แนบ
- **Response time:** ตอบภายใน 1 วันทำการ
- **CTA:** contact@moreminimore.com
### 🗓️ นัด Zoom
- **Best for:** คนที่อยู่ต่างจังหวัด/ต่างประเทศ
- **Response time:** นัดล่วงหน้า 13 วัน
- **CTA:** เลือกวันเวลา → /contact#booking
## Contact Info (left column of form)
📞 **โทรศัพท์** · 080-995-5945
> โทรคุยสดได้เลย จ-ศ 09:00-18:00
📧 **อีเมล** · contact@moreminimore.com
> เหมาะกับส่งรายละเอียดโปรเจกต์ + ไฟล์แนบ
💬 **LINE** · @moreminimore
> เร็วที่สุด ตอบใน 30 นาที (เวลาทำการ)
📍 **ออฟฟิศ** · 53 หมู่ 1 ต.บ้านแพ้ว อ.บ้านแพ้ว สมุทรสาคร 74120
> นัดเจอล่วงหน้า สะดวกกว่าเดินเข้ามาเฉย ๆ
🕐 **เวลาทำการ** · จ-ศ 09:00-18:00 น.
> นอกเวลา? ทัก LINE ทิ้งไว้ได้ ตอบเช้าวันถัดไป
## Contact Form (right column)
- **Section title:** ส่งข้อความถึงเรา
- **Subtext:** กรอก 4 ช่อง ใช้เวลา 60 วินาที — เราจะตอบกลับภายใน 2 ชั่วโมง (เวลาทำการ)
**Form fields:**
1. **ชื่อ-นามสกุล*** (text, required) — Placeholder: "สมชาย ใจดี"
2. **อีเมล*** (email, required) — Placeholder: "example@yourcompany.com"
3. **เบอร์โทรศัพท์** (tel, optional) — Placeholder: "080-xxx-xxxx" — Hint: (ใส่ช่องนี้ถ้าอยากให้โทรกลับ)
4. **บริการที่สนใจ** (select):
- 🌐 AI-Enhanced Website (เว็บ + Chatbot + SEO)
- ⚙️ AI Automation (Workflow + Chatbot)
- 📈 Online Marketing Automation (Email + LINE + Facebook)
- 🔍 SEO + AI Content System
- 🖥️ Tech Consult (Server / Data Pipeline)
- 💼 Audit เว็บไซต์เดิมฟรี 30 นาที
- ❓ ยังไม่แน่ใจ — ช่วยแนะนำ
- อื่น ๆ
5. **งบประมาณโดยประมาณ** (select — เพิ่มใหม่):
- ต่ำกว่า 20,000 บาท
- 20,00050,000 บาท
- 50,000150,000 บาท
- 150,000500,000 บาท
- 500,000 บาทขึ้นไป
- ยังไม่ได้กำหนด
6. **รายละเอียดโปรเจกต์*** (textarea, required) — Placeholder: "เล่าสั้น ๆ ว่าธุรกิจคุณทำอะไร ปวดหัวเรื่องอะไร อยากได้ผลลัพธ์แบบไหน (13 บรรทัดพอ)"
**Submit:** "ส่งข้อความ →" with helper text "ไม่มี spam · ไม่มีขายของ · เข้า inbox เราโดยตรง"
**Post-submit success:** "✅ ส่งแล้ว! เราจะตอบกลับภายใน 2 ชั่วโมง (ในเวลาทำการ) ถ้าเร่งด่วน ทัก LINE @moreminimore ครับ"
## What Happens Next — 3 ขั้นตอนถัดไป
### 1⃣ ตอบกลับภายใน 2 ชั่วโมง
> คนจริง (ไม่ใช่ Bot) จะตอบ — ถามคำถามเพิ่ม 23 ข้อ เพื่อเข้าใจปัญหาคุณ
### 2⃣ นัดปรึกษาฟรี 30 นาที (ถ้าตรงกัน)
> คุยผ่าน Zoom / โทร / นัดเจอที่ออฟฟิศ (กรุงเทพ / สมุทรสาคร) — ไม่มี script sales
### 3⃣ ส่ง Proposal (ภายใน 35 วันหลังคุย)
> เอกสาร PDF ที่ระบุ scope, timeline, ราคา — ไม่ชอบตรงไหนคุยกันแก้ได้
**Closing:** ถ้าไม่ตรง → เราจะบอกตรง ๆ ว่า "ไม่เหมาะ" และแนะนำทางเลือกอื่น
## FAQ Mini — 4 คำถามที่คนถามก่อนกดส่งฟอร์ม
**คุยกัน 30 นาทีแล้วจะถูกบังคับซื้อไหม?**
> ไม่ คุยแล้วคุณไม่ชอบก็ไม่เป็นไร ไม่มี follow-up ไม่มีขายของเพิ่ม
**ถ้าส่งฟอร์มไปแล้วเงียบ ทำยังไง?**
> ทัก LINE @moreminimore ตรง ๆ จะเร็วกว่า — หรือโทร 080-995-5945
**คุยช่วงไหนได้บ้าง?**
> จันทร์-ศุกร์ 09:00-18:00 ปกติ ถ้าคุณต่างจังหวัด/ต่างประเทศ นัดนอกเวลาได้ บอกล่วงหน้า 12 วัน
**ต้องเตรียมอะไรไปคุยไหม?**
> ไม่ต้องเตรียมอะไรเลย แค่บอกธุรกิจคุณทำอะไร ปวดหัวเรื่องอะไร งบประมาณเท่าไหร่
## Map / Location
- **Title:** **มาเจอกัน** ที่ออฟฟิศได้
- **Body:** 53 หมู่ 1 ต.บ้านแพ้ว อ.บ้านแพ้ว สมุทรสาคร 74120 — นัดล่วงหน้าอย่างน้อย 1 วัน เราจะเตรียมกาแฟ + ขนมไว้ให้
- **Map:** Google Maps iframe (lazy load)
## Final Note
- **Title:** หรือจะ **อ่านก่อน** ก็ได้
- **Links:** ดูบริการทั้งหมด → /services · ดูผลงาน → /portfolio · ดู FAQ → /faq
- **Reassurance:** ไม่มี commitment ไม่มี pressure ไม่มีใครตาม

View File

@@ -1,106 +0,0 @@
---
title: คำถามที่พบบ่อย
subtitle: 30+ คำถามที่ลูกค้าถามบ่อยที่สุด — ถ้าไม่เจอคำตอบ กดปุ่มด้านล่างถามได้เลย
badge: FAQ
show_cta: false
---
# คำถามที่พบบ่อย
## Hero
- **Eyebrow:** คำถามจริงจากลูกค้าจริง
- **Title (line 1):** คำถามที่
- **Title (line 2, yellow):** ลูกค้าถามบ่อยที่สุด
- **Subtitle:** เรารวบรวมจากแชต LINE จริง ๆ ไม่ใช่แต่งขึ้นเอง
## 20 Q&A — organized by category
### 💼 บริการ (Service Overview)
**Q1: มอร์มินิมอร์ทำอะไรบ้าง?**
> A: 4 บริการหลัก — เว็บไซต์ + AI Chatbot, AI & Workflow Automation, SEO + AI Content, และ Tech Consult (Server, Data Pipeline) ลูกค้า 80% เริ่มจากเว็บไซต์ก่อน แล้วค่อยเพิ่มบริการอื่นทีหลัง
**Q2: รับงานแบบไหน? เลือกได้ไหม?**
> A: เลือกได้ทุกอย่าง บางลูกค้ามาขอแค่ Chatbot บางคนมาขอทำ SEO อย่างเดียว ไม่มี minimum commitment ไม่มี "ต้องซื้อครบแพ็ค"
**Q3: เหมาะกับธุรกิจแบบไหน?**
> A: เหมาะกับ SME ไทยที่มียอดขาย 100,000 บาทขึ้นไปต่อเดือน (ถ้ายังไม่ถึง อาจจะยังไม่คุ้ม) — เรามีลูกค้าตั้งแต่ร้านค้าออนไลน์เล็ก ๆ ไปจนถึงโรงงาน 40 ปี
**Q4: เคยทำในอุตสาหกรรมของเราไหม?**
> A: ทำมาแล้วหลากหลาย เช่น โรงงาน, สำนักงานกฎหมาย, คลินิก, ร้านค้าออนไลน์, สถาบันสอน, สินค้าแมส ถ้าคุณอยากเห็นตัวอย่างในอุตสาหกรรมเดียวกัน → ทัก LINE บอกอุตสาหกรรมมา เราจะหาให้ดู
### 💰 ราคา (Pricing)
**Q5: ราคาเริ่มต้นเท่าไหร่?**
> A: Landing Page เริ่ม 15,000 บาท · เว็บไซต์ธุรกิจ 35,00080,000 บาท · ระบบ Automation 50,000 บาทขึ้นไป · SEO รายเดือน 8,00025,000 บาท
**Q6: มีแพ็คเกจสำเร็จรูปไหม?**
> A: มี — Starter, Business, Enterprise (ดูรายละเอียดที่ /pricing) แต่ถ้าไม่ตรงกับที่คุณต้องการ เราปรับให้ได้ทุกอย่าง
**Q7: จ่ายเงินยังไง? ผ่อนได้ไหม?**
> A: โอนธนาคาร / บัตรเครดิต (36 งวด มีดอกเบี้ย) โปรเจกต์ใหญ่แบ่งจ่าย 3 งวด: 30% ตอนเซ็น, 40% ตอนส่ง demo, 30% ตอนส่งมอบ
**Q8: มี Hidden cost ไหม?**
> A: ไม่มี ทุกอย่างระบุในสัญญา ถ้าจะมีค่าใช้จ่ายเพิ่ม (เช่น ซื้อ Domain, SSL, ค่า API) เราจะบอกล่วงหน้าก่อนตัดสินใจ
### ⏱️ ระยะเวลา (Timeline)
**Q9: ใช้เวลาทำเว็บไซต์นานแค่ไหน?**
> A: Landing Page 12 สัปดาห์ · เว็บไซต์ธุรกิจ 24 สัปดาห์ · Web Application / E-commerce 48 สัปดาห์
**Q10: SEO เห็นผลเมื่อไหร่?**
> A: ขึ้นกับความยากของคีย์เวิร์ด + สถานะเว็บเดิม — เฉลี่ย 36 เดือนถึงหน้า 1 Google บางคีย์เวิร์ดติดใน 12 เดือน บางคีย์เวิร์ดใช้เวลา 912 เดือน
**Q11: ถ้าเร่งด่วนได้ไหม?**
> A: ได้ — Rush Service (+30% ของราคาปกติ) เร่งได้เร็วขึ้น 50% เช่น ปกติ 4 สัปดาห์ → Rush 2 สัปดาห์ ต้องบอกล่วงหน้าอย่างน้อย 7 วัน
**Q12: แล้วทำไม่ทันเวลาจะเป็นยังไง?**
> A: ถ้าเราบอกว่าจะทันแล้วไม่ทัน (เป็นความผิดของเรา ไม่ใช่เพราะลูกค้าเพิ่ม scope) → คืนเงิน Pro-rata ตามจำนวนวันที่เกิน เคยมีเคสคืนเงิน 2 ครั้งใน 5 ปี
### 🤖 AI & เทคนิค (Tech & AI)
**Q13: AI Chatbot ตอบลูกค้าได้จริงไหม ไม่ใช่ Bot โง่ ๆ?**
> A: Chatbot ของเราเทรนด้วยข้อมูลธุรกิจจริง (สินค้า, ราคา, FAQ) ไม่ใช่ ChatGPT ทั่วไป ลูกค้า 90%+ ของเราบอกว่าลูกค้าทัก LINE มาแล้วแยกไม่ออกว่าเป็นคนหรือ Bot
**Q14: ต้องมีความรู้เทคนิคไหมถึงจะใช้งานได้?**
> A: ไม่ต้อง — เราอบรมทีมคุณให้ใช้งานเป็น (อัปเดต content, ดู report, แก้ Chatbot flow) หลังอบรมทีมคุณจะใช้งานได้เอง
**Q15: ข้อมูลลูกค้าปลอดภัยไหม? (PDPA)**
> A: ปลอดภัย — ข้อมูลเก็บบน Server ในไทย/สิงคโปร์, เข้ารหัส HTTPS, มี PDPA consent form, ลูกค้าสามารถขอลบข้อมูลได้ ดู Privacy Policy เต็มที่ /privacy
**Q16: ใช้ AI ตัวไหน? OpenAI หรือเปล่า?**
> A: เราเลือก AI ตามงาน — OpenAI / Anthropic / Google Gemini / Self-hosted LLM ขึ้นกับว่าลูกค้าต้องการ Privacy ระดับไหน, งบเท่าไหร่, และ context เป็นภาษาอะไร
### 🛠️ หลังการขาย (Support & Warranty)
**Q17: มีการรับประกันไหม?**
> A: รับประกัน 30 วันหลังส่งมอบ — ถ้าเจอบั๊กจากการพัฒนา (ไม่ใช่การเพิ่ม feature ใหม่) แก้ฟรีไม่จำกัดครั้ง
**Q18: หลังส่งงานแล้ว support ยังไง?**
> A: 3 ช่องทาง — LINE Official (ตอบใน 2 ชม. เวลาทำการ), Email, โทรศัพท์กรณีเร่งด่วน ลูกค้าเว็บไซต์ได้แก้ content ฟรีตลอดอายุ Server
**Q19: มีแพ็คเกจดูแลรายเดือนไหม?**
> A: มี — 2,000 บาท/เดือน (Maintenance) · 5,000 บาท/เดือน (Maintenance + แก้ content ไม่จำกัด) · 8,000 บาท/เดือน (ทั้งหมด + ปรับ SEO)
**Q20: ถ้าไม่พอใจผลงานจะเป็นยังไง?**
> A: ก่อนเซ็นสัญญาเราจะส่ง Proposal + Wireframe ให้ approve ก่อน — ถ้าตอนส่งงานจริงไม่ตรงตามที่ตกลง แก้ฟรีจนกว่าจะตรง
## เรื่องอื่น ๆ ที่ลูกค้าถามบ่อย
- โฮสติ้ง · โดเมน · SSL · ใบเสนอราคา · ใบกำกับภาษี
- สัญญา · NDA · ลิขสิทธิ์งาน
- ทีมงาน · ขนาดทีม · ที่ตั้งบริษัท
- ตัวอย่างงาน · ขอดูเว็บจริง · นัดคุยนอกสถานที่
## ไม่เจอคำตอบ? ถามตรง ๆ เลย
- 💬 **LINE** · @moreminimore · ตอบใน 30 นาที (เวลาทำการ)
- 📞 **โทร** · 080-995-5945 · จ-ศ 09:00-18:00
- 📧 **Email** · contact@moreminimore.com · ตอบภายใน 1 วัน
## Final CTA
- **Title:** พร้อมคุยรายละเอียด?
- **Subtitle:** นัดปรึกษาฟรี 30 นาที ผ่าน Zoom หรือนัดเจอที่ออฟฟิศ (กรุงเทพ/สมุทรสาคร)
- **Buttons:** นัดปรึกษา → /contact · ทัก LINE ตอนนี้ → https://line.me/ti/p/~@539hdlul

View File

@@ -1,92 +0,0 @@
---
title: เปลี่ยนธุรกิจของคุณ ด้วย AI และเทคโนโลยีสมัยใหม่
subtitle: รับทำเว็บไซต์ SEO AI Chatbot สำหรับธุรกิจไทย — เพิ่มยอดขาย ลดต้นทุน ด้วยเทคโนโลยีล้ำสมัย
badge: AI AGENCY ในประเทศไทย
show_cta: true
cta_text: เริ่มปรึกษาฟรี
cta_link: /contact
---
# เปลี่ยนธุรกิจของคุณ ด้วย AI และเทคโนโลยีสมัยใหม่
## Hero
- **Eyebrow:** สำหรับ SME ไทยที่อยากขายดีขึ้นด้วย AI
- **Title (line 1):** เว็บไซต์ที่ **ขายได้** ไม่ใช่แค่สวย
- **Title (line 2, yellow):** ระบบ AI ที่ **ทำงานแทน** คน
- **Subtitle:** เราออกแบบเว็บไซต์ + AI Chatbot + Marketing Automation ให้ธุรกิจไทย เพิ่มยอดขายเฉลี่ย **24 เท่า** ภายใน 6 เดือน ด้วยงบที่จับต้องได้ เริ่มต้น 15,000 บาท
- **Trust strip:** ⭐ 50+ โปรเจกต์สำเร็จ · 40+ ลูกค้าที่ไว้วางใจ · 5+ ปี · 100% โค้ดด้วยตัวเอง
- **Primary CTA:** เริ่มปรึกษาฟรี → /contact
- **Secondary CTA:** ดูผลงานจริง → /portfolio
## Stats (dark band, oversized numbers)
- **50+** · โปรเจกต์ที่ส่งมอบจริง
- **40+** · ลูกค้า SME ที่กลับมาใช้บริการซ้ำ
- **5+** · ปีของการลงมือทำ ไม่ใช่แค่พูด
- **24/7** · AI Chatbot ที่เราสร้างทำงานให้ลูกค้า
## Problem — คุณกำลังเจอแบบนี้อยู่ใช่ไหม?
1. 😩 **ลูกค้าทัก LINE เข้ามา แต่ตอบไม่ทัน** — ยอดหายก่อนที่คุณจะเห็น
> ทีมเซลล์ 12 คน ตอบแชตไม่ไหว ลูกค้ารอ 5 นาทีแล้วไปซื้อที่อื่น
2. 📉 **ลงโฆษณา แต่ยอดขายไม่ขยับ** — เงินหายไปกับคลิกที่ไม่มีคุณภาพ
> ไม่มีระบบ Lead ไม่มี Funnel ไม่รู้ว่าใครซื้อ ใครแค่ทักมาถามเล่น
3. 🌐 **เว็บไซต์มีอยู่ แต่ไม่มีใครเจอใน Google** — เสียเงินฟรีทุกเดือน
> อันดับหน้า 5 ไม่มีใครเปิด ขณะที่คู่แข่งติดหน้าแรกจาก SEO อย่างเดียว
**Closing line (yellow):** ทุกปัญหาข้างต้นแก้ได้ด้วยระบบเดียว — ดูว่าเราทำยังไง
## Services — 4 mega-services
### 🌐 AI-Enhanced Website
- **Tag:** ลูกค้า 80% เริ่มที่นี่
- **Hook:** เว็บไซต์ที่โหลดไว 2 วินาที · SEO ติดหน้าแรก Google · ฝัง AI Chatbot ตอบลูกค้า 24/7
- **3 micro-benefits:** โหลดเร็ว 2 วินาที · โครงสร้าง SEO · มี AI Chatbot
- **Link:** /services/webdev
### ⚙️ AI Automation & Marketing
- **Tag:** เพิ่มยอดขาย ลดงานซ้ำ
- **Hook:** ให้ AI ทำงานซ้ำๆ แทนทีม ลูกค้าได้รับข้อความที่ใช่ ผ่านช่องทางที่ชอบ
- **3 micro-benefits:** Workflow Automation · Marketing Automation · เชื่อม CRM/ERP/E-commerce
- **Link:** /services/automation
### 🧠 SEO + AI Content System
- **Tag:** ติดอันดับ Google เฉลี่ย 3 เดือน
- **Hook:** คอนเทนต์ที่ Google และลูกค้าชอบพร้อมกัน — เราวิจัย Keyword เขียนด้วย AI แล้วตรวจด้วยคน
- **3 micro-benefits:** Keyword Research · AI Content + Human Edit · Backlink & Tracking
- **Link:** /services/marketing
### 🖥️ Tech Infrastructure Consult
- **Tag:** สำหรับทีมที่อยากปรับระบบหลังบ้าน
- **Hook:** ที่ปรึกษา Server, Data Pipeline และเครื่องมือ Tech ที่เหมาะกับธุรกิจ
- **3 micro-benefits:** Server & Cloud Setup · Data Pipeline · Tech Selection
- **Link:** /services/ai-consult
**Bottom CTA:** ดูบริการทั้งหมดพร้อมราคา → /services
## Pull Quote
> "เราไม่ได้ขายเว็บไซต์ — เราสร้างระบบที่ทำเงินให้ธุรกิจคุณ"
> — มอร์มินิมอร์, ปรัชญาการทำงาน
## Portfolio Preview
- **Badge:** ผลงานจริง · ไม่ใช่ Mockup
- **Title:** ลูกค้าจริง ผลลัพธ์จริง
- **Description:** 9 โปรเจกต์ที่เราภาคภูมิใจ — ตั้งแต่ร้านค้าออนไลน์ ไปจนถึงโรงงานฉีดพลาสติก
- **CTA:** ดูผลงานทั้งหมด → /portfolio
## Blog Preview
- **Badge:** ความรู้ฟรี · อัปเดตทุกเดือน
- **Title:** เรียนรู้ก่อนใครก่อนลงทุน
- **Description:** บทความสั้น ๆ ที่อ่านจบใน 5 นาที เน้นลงมือทำ ไม่ใช่ทฤษฎี
- **CTA:** บทความทั้งหมด → /blog
## Final CTA
- **Title:** พร้อมเปลี่ยนธุรกิจของคุณ?
- **Subtitle:** ปรึกษาฟรี 30 นาที — เราจะถามคำถาม 5 ข้อ แล้วบอกคุณได้เลยว่าควรเริ่มจากตรงไหน
- **Buttons:** นัดคุย 30 นาที → /contact · ทัก LINE: @moreminimore
- **Reassurance:** ไม่มี commitment · ไม่มี script sales · พูดตรง ๆ ว่าทำได้หรือทำไม่ได้

View File

@@ -1,83 +0,0 @@
---
title: ผลงาน
subtitle: ลูกค้าจริง ผลลัพธ์จริง — 9 โปรเจกต์ที่เราภาคภูมิใจ
badge: 9 โปรเจกต์ · 5 อุตสาหกรรม
show_cta: false
---
# ผลงาน
## Hero
- **Eyebrow:** เห็นจริง ไม่ใช่ Mockup
- **Title (line 1):** เราส่งมอบให้ใคร
- **Title (line 2, yellow):** มาบ้างแล้วบ้าง
- **Subtitle:** โปรเจกต์จริง ลูกค้าจริง เว็บไซต์จริงที่ใช้งานอยู่ทุกวันนี้ — คลิกเข้าไปดูได้เลย
- **Stats strip:** 🏭 โรงงาน · 💊 สินค้าอุปโภค · ⚖️ สำนักงานกฎหมาย · 📚 สถาบันสอน · 🛒 E-commerce
## Industry Filter (sticky)
- ทั้งหมด (9)
- 🏭 โรงงาน (1)
- 💊 สินค้าอุปโภค (2)
- ⚖️ สำนักงานกฎหมาย (1)
- 📚 สถาบัน / การศึกษา (2)
- 📈 ที่ปรึกษาธุรกิจ (1)
- 🎨 Digital Agency (1)
- 🛒 E-commerce (1)
## Portfolio Grid — 9 projects
### 1. Lungfinler · Digital Agency
- **What we did:** พัฒนาเว็บไซต์ portfolio + เชื่อม LINE OA ตอบลูกค้าอัตโนมัติ
- **Result:** Lead เพิ่มขึ้น 3 เท่าใน 2 เดือนหลังเปิดเว็บ
### 2. Jet Industries · โรงงาน 40 ปี
- **What we did:** ออกแบบเว็บ B2B + SEO เทคนิค + Multi-language (TH/EN/JP)
- **Result:** ลูกค้าจากญี่ปุ่นและออสเตรเลียติดต่อเข้ามา 58 ราย/เดือน
### 3. สำนักงานกฎหมาย ตถาตา · ทนายความ
- **What we did:** เว็บไซต์มาตรฐาน + SEO คีย์เวิร์ด "ทนายความ" ในจังหวัด
- **Result:** ติดหน้า 1 Google ใน 4 เดือน ลูกค้าโทรเข้ามา 10+ ราย/เดือน
### 4. Underdog Marketing · Marketing Agency
- **What we did:** พัฒนา Blog + Newsletter system
- **Result:** สมัครสมาชิก 1,200+ คนใน 6 เดือน
### 5. Baofuling Shop · E-commerce ครีมบัวหิมะ
- **What we did:** ร้านค้าออนไลน์ + AI Chatbot แนะนำสินค้า
- **Result:** Conversion rate 3.2% (สูงกว่าค่าเฉลี่ยอุตสาหกรรมความงาม 2 เท่า)
### 6. เทรนเนอร์ซันนี่ · Personal Brand
- **What we did:** เว็บ Personal Brand + Course landing page + Email automation
- **Result:** Course launch แรกทำรายได้ 280,000 บาท ใน 7 วัน
### 7. เลือดจระเข้วานิไทย · E-commerce สินค้าสุขภาพ
- **What we did:** ร้านค้าออนไลน์ + LINE OA + แชทบอทตอบคำถามสินค้า
- **Result:** ลดเวลาตอบแชต 70% ทีมเซลล์โฟกัสการปิดดีลได้เต็มที่
### 8. ทวนทอง 99 · E-commerce สมุนไพรไทย
- **What we did:** เว็บไซต์ + ระบบสั่งซื้อ + ผูก Facebook Pixel
- **Result:** ROAS โฆษณาเฉลี่ย 4.8 เท่า
### 9. Odoo Portal · ตัวแทนจำหน่าย ERP
- **What we did:** เว็บ Landing Page + Lead form + CRM integration
- **Result:** Lead-to-customer 12% (สูงกว่าค่าเฉลี่ย SaaS 46% เกือบ 3 เท่า)
## ดีลที่เราเลือก — เราเลือกโปรเจกต์ที่ทำ ไม่ใช่ทุกงานที่มา เรารับ
### 1. ธุรกิจที่พร้อมจริง ๆ
> เราคุยกับเจ้าของธุรกิจก่อน ถ้าเป้าหมายยังไม่ชัด เราจะแนะนำให้รอก่อน ดีกว่าเสียเงินแล้วไม่ได้ผล
### 2. งบประมาณที่สมเหตุสมผล
> เราไม่ได้ถูกที่สุด แต่ก็ไม่ได้แพงที่สุด ถ้าใครบอก "งบ 5,000 ทำเว็บได้ไหม" — เราแนะนำให้ไปฟรีแลนซ์ก่อน
### 3. ลูกค้าที่ฟัง
> เราทำงานกับลูกค้าที่พร้อมฟังคำแนะนำ ไม่ใช่ลูกค้าที่บอก "ทำตามนี้เป๊ะ ๆ" แล้วผิดคาดทุกที
## Final CTA
- **Title:** อยากเป็น **ผลงานชิ้นต่อไป** ของเรา?
- **Subtitle:** ถ้าธุรกิจคุณพร้อม เราพร้อม — คุยกันก่อน 30 นาที แล้วตัดสินใจเอง
- **Buttons:** เริ่มโปรเจกต์ของคุณ → /contact · ดูบริการที่เราทำ → /services
- **Reassurance:** ไม่มี script · ไม่มี pressure · ตรงไปตรงมา

View File

@@ -1,82 +0,0 @@
---
title: บริการ
subtitle: ครบจบในที่เดียว — โซลูชัน AI สำหรับธุรกิจไทย
badge: บริการ 4 ด้าน · เริ่มต้น 15,000 บาท
show_cta: false
---
# บริการ
## Hero
- **Eyebrow:** เลือกเฉพาะที่คุณต้องการ หรือให้เราวางแผนให้ทั้งระบบ
- **Title (line 1):** โซลูชัน AI **4 ด้าน**
- **Title (line 2, yellow):** ที่คุณเลือกได้ตามงบ
- **Subtitle:** เราแยกบริการออกเป็น 4 กลุ่มใหญ่ — เว็บไซต์, AI Automation, SEO+Content และ Tech Consult — เพื่อให้ SME ไทยเลือกได้ว่าวันนี้ต้องการแก้ปัญหาอะไร
- **Trust strip:** เริ่มงานได้ใน 7 วัน · ส่งมอบตรงเวลา หรือคืนเงิน Pro-rata · ไม่ผูกสัญญารายปี
## Decision Table — เลือกบริการที่ใช่ใน 30 วินาที
| คุณกำลังเจอ | เริ่มที่ | คาดเห็นผลใน |
|---|---|---|
| ยังไม่มีเว็บไซต์ หรือเว็บเก่าโหลดช้า | 🌐 **AI-Enhanced Website** | 24 สัปดาห์ |
| ทีมเซลล์ตอบแชตไม่ทัน ลูกค้าหายตอนกลางคืน | ⚙️ **AI Automation** | 13 เดือน |
| ลงโฆษณาเยอะ แต่ยอดขายไม่โต | 📈 **Online Marketing Automation** | 13 เดือน |
| อยากติดหน้าแรก Google แต่ไม่รู้จะเริ่มยังไง | 🔍 **SEO + AI Content** | 36 เดือน |
| ไม่อยากจ้างทีม IT ประจำ แต่อยากมี Server/ระบบหลังบ้าน | 🖥️ **Tech Consult** | 26 สัปดาห์ |
| มีเว็บอยู่แล้ว แต่ขายไม่ได้ | 🔄 **เริ่มจาก Audit ฟรี 30 นาที** | 1 สัปดาห์ |
**Closing:** ถ้ายังไม่แน่ใจ → กดปุ่ม "ปรึกษาฟรี" ด้านล่าง เราจะถาม 5 คำถามแล้วบอกคำตอบเอง
## Category 1: 🏢 Technology Consult (ลดต้นทุนและเวลา)
- **Tag:** ENTERPRISE SOLUTIONS · ลูกค้า 30% เริ่มที่นี่
- **Heading:** **ลดต้นทุนและเวลา** ด้วยระบบ Automation
- **Description:** สำหรับ SME ที่มี process ซ้ำ ๆ ในองค์กร เช่น ตอบแชต, ประมวลผลออร์เดอร์, จัดการ inventory
### 🤖 Automation Consult
- เริ่มต้น **35,000 บาท** — ดูรายละเอียดที่ /services/automation
- Workflow Automation · System Integration · Custom Application
### 🧠 AI Consult
- เริ่มต้น **25,000 บาท** — ดูรายละเอียดที่ /services/ai-consult
- AI Strategy & Roadmap · AI Chatbot · AI Audit
**USP:** 🎁 ลูกค้า Technology Consult ได้ **Server ฟรี** สำหรับ App และ AI (ใช้งานปกติ)
## Category 2: 📈 Growth & Marketing (เพิ่มยอดขาย)
- **Tag:** GROWTH & MARKETING · ลูกค้า 70% เริ่มที่นี่
- **Heading:** **เพิ่มยอดขาย** ด้วย Marketing ที่วัดผลได้
### 🌐 Website Development
- เริ่มต้น **15,000 บาท** — ดูรายละเอียดที่ /services/webdev
### 📈 Online Marketing Automation
- เริ่มต้น **20,000 บาท** / เดือน — ดูรายละเอียดที่ /services/marketing
### 🔍 SEO + AI Content System
- เริ่มต้น **8,000 บาท** / เดือน
**USP:** 🎁 ลูกค้า Website ได้ **แก้ไขเนื้อหาฟรีตลอดอายุ Server**
## Add-ons (ไม่บังคับซื้อแพ็ค)
- 💌 **Email Marketing** — ส่งครั้งละ 50 บาท/อีเมล
- 📊 **GA4 + Search Console Setup** — 3,000 บาท
- 🎨 **Logo / Branding** — 8,000 บาท
- 📸 **Product Photography** — นัดวันถ่าย คิดตามชิ้น
- 🛒 **E-commerce Migration** — เริ่ม 10,000 บาท
- 🌐 **Multi-language (EN/TH/CN)** — เพิ่ม 5,000 บาท/ภาษา
## Pricing Tiers
- **เริ่มต้น** · 15,00035,000 บาท · Landing Page + AI Chatbot
- **ธุรกิจ** · 50,000150,000 บาท · เว็บไซต์เต็มรูป + SEO 3 เดือน
- **องค์กร** · 200,000 บาทขึ้นไป · ระบบครบวงจร + Automation
## Final CTA
- **Title:** ยังไม่รู้ว่าจะเริ่มจากตรงไหน?
- **Subtitle:** Audit ฟรี 30 นาที — เราจะถาม 5 คำถาม แล้วบอกว่าคุณควรลงทุนกับอะไรก่อน ไม่มี upsell ไม่มี commitment
- **Buttons:** นัดคุยเลย → /contact · ทัก LINE: @moreminimore

View File

@@ -1,5 +0,0 @@
// live.config.ts — kept as a stub so Astro's runtime can import it,
// but no live collections are registered (we use markdown only via content.config.ts).
const collections = {};
export { collections };
export default { collections };

View File

@@ -11,8 +11,8 @@ import Icon from '../components/Icon.astro';
<PageHero
badge="เกี่ยวกับเรา"
title="ทีมเล็ก ๆ ที่ช่วย SME ไทย ขายดีขึ้นด้วย AI"
subtitle="บริษัท มอร์มินิมอร์ จำกัด — เราไม่ใช่ Agency ที่ทำเว็บไซต์ออกมาเยอะแล้วลืม เราเป็น Partner ที่นั่งทำงานข้างคุณจนระบบติดและใช้งานได้จริง"
title="เพิ่มยอดขาย ลดต้นทุน ลดเวลา — ให้ธุรกิจคุณ"
subtitle="บริษัท มอร์มินิมอร์ จำกัด — นโยบายของเราคือสร้างระบบที่ทำให้ลูกค้ามีกำไรมากขึ้น ไม่ใช่ทำเว็บไซต์ออกมาเยอะแล้วลืม เราเป็น Partner ที่นั่งทำงานข้างคุณจนระบบติดและใช้งานได้จริง"
/>
<!-- STORY SECTION -->
@@ -20,17 +20,17 @@ import Icon from '../components/Icon.astro';
<div class="container">
<div class="story-grid">
<div class="story-content">
<span class="section-badge">เรื่องราวของเรา</span>
<span class="section-badge">นโยบายของเรา</span>
<h2 class="section-title">
ิ่มต้นจาก <span class="highlight">ปัญหาของลูกค้า</span> ไม่ใช่จากเทคโนโลยี
ิ่ม<span class="highlight">ยอดขาย</span> · ลด<span class="highlight">ต้นทุน</span> · ลด<span class="highlight">เวลา</span>
</h2>
<p class="story-text">
<strong>ก่อตั้งปี 2020</strong> จากประสบการณ์ตรงที่เห็น SME ไทยเสียเงินหลายแสนไปกับเว็บไซต์ที่ "สวยแต่ไม่มีคนเข้า" และ AI tools ที่ "ว้าวแต่ใช้ไม่เป็น" เราเลยตั้งใจว่าจะทำให้ต่าง
<strong>นโยบายของเราชัดเจน</strong> — ทุกระบบที่ส่งมอบต้องตอบคำถามเดียวให้ได้: "ลูกค้ามีกำไรเพิ่มขึ้นจริงไหม" ไม่ใช่แค่ส่งงานตามสัญญา
</p>
<p class="story-text">
<strong>5 ปีที่ผ่านมา เราทำงานกับลูกค้า 40+ ราย</strong> — ตั้งแต่ร้านค้าออนไลน์หน้าร้านเล็ก ๆ ไปจนถึงโรงงานฉีดพลาสติก 40 ปี สำนักงานกฎหมาย และแบรนด์สินค้าแมส
<strong>ก่อตั้งปี 2020</strong> จากประสบการณ์ตรงที่เห็น SME ไทยเสียเงินหลายแสนไปกับเว็บไซต์ที่ "สวยแต่ไม่มีคนเข้า" และ AI tools ที่ "ว้าวแต่ใช้ไม่เป็น" เราเลยตั้งใจว่าจะทำให้ต่าง
</p>
<p class="story-text">
@@ -108,6 +108,18 @@ import Icon from '../components/Icon.astro';
</div>
</section>
<!-- PULL QUOTE — black band, mission statement -->
<section class="section section-dark-quote reveal">
<div class="container">
<blockquote class="pull-quote">
<p class="quote-text">
"เป้าหมายของเราคือ <span class="highlight">กำไรที่มากขึ้นของลูกค้า</span>"
</p>
<cite class="quote-author">— มอร์มินิมอร์, ปณิธานการทำงาน</cite>
</blockquote>
</div>
</section>
<!-- PROCESS SECTION (4 steps, white) -->
<section class="section process-section">
<div class="container">
@@ -319,6 +331,35 @@ import Icon from '../components/Icon.astro';
line-height: 1.6;
}
/* PULL QUOTE (dark band) */
.section-dark-quote {
background: var(--color-black);
padding: 100px 0;
}
.section-dark-quote .pull-quote {
text-align: center;
max-width: 1000px;
margin: 0 auto;
}
.section-dark-quote .quote-text {
font-family: var(--font-display);
font-size: clamp(28px, 4.5vw, 56px);
font-weight: 800;
line-height: 1.3;
color: var(--color-white);
margin-bottom: 24px;
}
.section-dark-quote .quote-text .highlight {
color: var(--color-primary);
}
.section-dark-quote .quote-author {
font-style: normal;
font-size: 14px;
color: var(--color-gray-400);
text-transform: uppercase;
letter-spacing: 2px;
}
/* CTA */
.cta-content { text-align: center; max-width: 700px; margin: 0 auto; }
.cta-title {

View File

@@ -5,16 +5,20 @@ import Footer from '../components/Footer.astro';
import Icon from '../components/Icon.astro';
import Hero from '../components/Hero.astro';
import { getCollection } from 'astro:content';
import { render } from 'astro:content';
import ServiceCard from '../components/ServiceCard.astro';
import PortfolioCard from '../components/PortfolioCard.astro';
const pages = await getCollection('pages');
const home = pages.find(p => p.slug === 'home');
const { Content } = home ? await render(home) : { Content: null };
// Hardcoded home page copy (previously in src/content/pages/home.md, now inlined)
const homeContent = {
badge: 'AI AGENCY ในประเทศไทย',
title: 'เพิ่มยอดขาย ลดต้นทุน ลดเวลา — ให้ธุรกิจของคุณ',
subtitle:
'นโยบายของเราคือสร้างระบบที่ทำให้ลูกค้ามีกำไรมากขึ้น — ด้วยเว็บไซต์ SEO AI Chatbot และ Marketing Automation ที่ออกแบบมาเพื่อ SME ไทยโดยเฉพาะ',
};
const services = await getCollection('services');
const blogPosts = await getCollection('blog');
const sortedPosts = blogPosts.sort((a, b) => b.data.date.valueOf() - a.data.date.valueOf());
const portfolio = await getCollection('portfolio');
const featuredPortfolio = portfolio.slice(0, 4);
// 4 mega-services (use existing service collection filtered)
const allServices = services.slice(0, 4);
@@ -24,42 +28,130 @@ const serviceImages: Record<string, string> = {
'marketing': '/images/services/marketing.jpg',
'webdev': '/images/services/webdev.jpg',
};
// 12 problem cards grouped by 4 service buckets (3 per bucket).
// Each card: serviceBucket, icon (Lucide), title, description, result.
const problemCards = [
// 🏢 Website — load/SEO/visibility
{
bucket: 'website',
icon: 'globe',
title: 'เว็บไซต์โหลดช้า ลูกค้าปิดก่อนเห็นสินค้า',
description: 'หน้าเว็บใช้เวลาโหลดเกิน 5 วินาที ลูกค้า 53% ปิดทิ้งทันที',
result: '→ เสียโอกาสขายตั้งแต่วินาทีแรก',
},
{
bucket: 'website',
icon: 'search',
title: 'อยู่หน้า 5 ของ Google หรือหายไปเลย',
description: 'ลูกค้าค้นหาแล้วไม่เจอเว็บคุณ เจอแต่คู่แข่ง',
result: '→ ต้องจ่ายค่าโฆษณาเพิ่มทุกเดือน',
},
{
bucket: 'website',
icon: 'shoppingCart',
title: 'เว็บมีอยู่ แต่ลูกค้าซื้อไม่ได้',
description: '<27>อร์มไม่ส่ง ตะกร้าค้าง ชำระเงินไม่ผ่าน',
result: '→ ยอดขายตกทั้งที่คนเข้าเว็บเยอะ',
},
// ⚙️ AI Automation — operations / efficiency
{
bucket: 'automation',
icon: 'message',
title: 'ทีมเซลล์ตอบแชตไม่ทัน ลูกค้าหายตอนกลางคืน',
description: 'ทีม 12 คนตอบไม่ไหว ลูกค้ารอ 5 นาทีแล้วไปซื้อที่อื่น',
result: '→ ยอดหายโดยไม่มีใครรู้ตัว',
},
{
bucket: 'automation',
icon: 'clipboard',
title: 'งานซ้ำ ๆ ใช้เวลาคนเป็นชั่วโมงทุกวัน',
description: 'คีย์ข้อมูล ทำใบเสนอราคา อัปเดตสต็อก ทุกอย่างทำมือ',
result: '→ ต้นทุนค่าแรงสูงขึ้นโดยไม่จำเป็น',
},
{
bucket: 'automation',
icon: 'cog',
title: 'ระบบแยกกัน ไม่คุยกัน',
description: 'CRM · ERP · ระบบบัญชี · หน้าร้าน ต่างคนต่างอยู่',
result: '→ ตัดสินใจช้า เพราะข้อมูลไม่เชื่อม',
},
// 📈 SEO + Content — traffic / leads
{
bucket: 'marketing',
icon: 'trendingDown',
title: 'ลงโฆษณา แต่ยอดขายไม่ขยับ',
description: 'คลิกเยอะ แต่ไม่มีใครซื้อ — ไม่มี Funnel ไม่มี Lead scoring',
result: '→ เงินหายไปกับคลิกที่ไม่มีคุณภาพ',
},
{
bucket: 'marketing',
icon: 'pen',
title: 'เขียนคอนเทนต์เองไม่ทัน',
description: 'อยากโพสต์สม่ำเสมอ แต่ทีมไม่มีเวลา',
result: '→ คอนเทนต์หยุดชะงัก ลูกค้าลืม',
},
{
bucket: 'marketing',
icon: 'megaphone',
title: 'ไม่รู้ว่าใครซื้อ ใครแค่ทักมาถามเล่น',
description: 'ไม่มีระบบติดตาม ไม่มี CRM ไม่มี Report',
result: '→ ลงทุนการตลาดแบบเดา',
},
// 🖥️ Tech Consult — infrastructure / scale
{
bucket: 'tech',
icon: 'server',
title: 'ไม่อยากจ้างทีม IT แต่ต้องมี Server',
description: 'ระบบหลังบ้านต้องทำงาน แต่จ้างประจำแพงเกิน',
result: '→ ต้นทุนคงที่สูงโดยไม่คุ้ม',
},
{
bucket: 'tech',
icon: 'shield',
title: 'กังวลเรื่อง PDPA / ข้อมูลรั่วไหล',
description: 'เก็บข้อมูลลูกค้าแต่ไม่รู้ว่าปลอดภัยแค่ไหน',
result: '→ เสี่ยงถูกฟ้องร้อง ถูกปรับ',
},
{
bucket: 'tech',
icon: 'monitor',
title: 'อยากใช้ AI แต่ไม่รู้จะเริ่มยังไง',
description: 'มี ChatGPT ใช้ แต่เอามาทำงานจริงในธุรกิจไม่เป็น',
result: '→ เสียโอกาสที่ AI จะช่วยลดงานได้',
},
];
const bucketLabels: Record<string, string> = {
website: 'Website',
automation: 'AI Automation',
marketing: 'SEO + Content',
tech: 'Tech Consult',
};
// Pre-group problem cards by bucket (4 groups, in canonical service order)
const problemGroupOrder = ['website', 'automation', 'marketing', 'tech'] as const;
const problemGroups = problemGroupOrder.map((bucket) => ({
bucket,
label: bucketLabels[bucket],
cards: problemCards.filter((c) => c.bucket === bucket),
}));
---
<Base title="MoreminiMore - รับทำเว็บไซต์ SEO AI Chatbot">
<Navigation />
<Hero
badge={home?.data.badge}
title={home?.data.title}
subtitle={home?.data.subtitle}
/>
badge={homeContent.badge}
title={homeContent.title}
subtitle={homeContent.subtitle}
>
<a slot="hero-cta-secondary" href="/portfolio" class="btn btn-outline-dark">
ดูผลงานจริง
</a>
</Hero>
<!-- STATS SECTION — yellow band (counters animate on view) -->
<section class="section section-stats reveal">
<div class="container">
<div class="stats-grid">
<div class="stat-item">
<span class="stat-number counter" data-from="0">50+</span>
<span class="stat-label">โปรเจกต์สำเร็จ</span>
</div>
<div class="stat-item">
<span class="stat-number counter" data-from="0">40+</span>
<span class="stat-label">ลูกค้าที่ไว้วางใจ</span>
</div>
<div class="stat-item">
<span class="stat-number counter" data-from="0">5+</span>
<span class="stat-label">ปีประสบการณ์</span>
</div>
<div class="stat-item">
<span class="stat-number counter" data-from="0">24/7</span>
<span class="stat-label">ให้บริการ</span>
</div>
</div>
</div>
</section>
<!-- PROBLEM SECTION — light, 3 cards (stagger-children) -->
<!-- PROBLEM SECTION — 12 pain cards, 3 per service bucket (light) -->
<section class="section section-soft">
<div class="container">
<div class="section-header reveal">
@@ -67,34 +159,28 @@ const serviceImages: Record<string, string> = {
<h2 class="section-title">
คุณกำลังเจอ <span class="highlight">แบบนี้อยู่</span> ใช่ไหม?
</h2>
<p class="section-desc">12 ปัญหาที่แบ่งตามบริการของเรา เลือกดูได้เลยว่าตรงกับคุณข้อไหน</p>
</div>
<div class="problem-grid stagger-children">
<div class="problem-card">
<div class="problem-icon">
<Icon name="message" />
{problemGroups.map((group) => (
<div class="problem-group reveal">
<h3 class="problem-group-title">
<span class="problem-group-tag">{group.label}</span>
</h3>
<div class="problem-grid">
{group.cards.map((card) => (
<div class="problem-card">
<div class="problem-icon-badge">
<Icon name={card.icon} size={28} color="dark" />
</div>
<h4 class="problem-title">{card.title}</h4>
<p class="problem-desc">{card.description}</p>
<span class="problem-result">{card.result}</span>
</div>
))}
</div>
<h3 class="problem-title">ลูกค้าทัก LINE เข้ามา แต่ตอบไม่ทัน</h3>
<p class="problem-desc">ทีมเซลล์ 12 คน ตอบแชตไม่ไหว ลูกค้ารอ 5 นาทีแล้วไปซื้อที่อื่น</p>
<span class="problem-result">→ ยอดหายก่อนที่คุณจะเห็น</span>
</div>
<div class="problem-card">
<div class="problem-icon">
<Icon name="trendingDown" />
</div>
<h3 class="problem-title">ลงโฆษณา แต่ยอดขายไม่ขยับ</h3>
<p class="problem-desc">ไม่มีระบบ Lead ไม่มี Funnel ไม่รู้ว่าใครซื้อ ใครแค่ทักมาถามเล่น</p>
<span class="problem-result">→ เงินหายไปกับคลิกที่ไม่มีคุณภาพ</span>
</div>
<div class="problem-card">
<div class="problem-icon">
<Icon name="globe" />
</div>
<h3 class="problem-title">เว็บไซต์มีอยู่ แต่ไม่มีใครเจอใน Google</h3>
<p class="problem-desc">อันดับหน้า 5 ไม่มีใครเปิด ขณะที่คู่แข่งติดหน้าแรกจาก SEO อย่างเดียว</p>
<span class="problem-result">→ เสียเงินฟรีทุกเดือน</span>
</div>
</div>
))}
<p class="problem-closing reveal">
<span class="highlight">ทุกปัญหาข้างต้นแก้ได้ด้วยระบบเดียว</span> — ดูว่าเราทำยังไง
@@ -139,14 +225,14 @@ const serviceImages: Record<string, string> = {
<div class="container">
<blockquote class="pull-quote">
<p class="quote-text">
"เราไม่ได้ขายเว็บไซต์ — เราสร้างระบบที่<span class="highlight">ทำเงินให้ธุรกิจคุณ</span>"
"เป้าหมายของเราคือ <span class="highlight">กำไรที่มากขึ้นของลูกค้า</span>"
</p>
<cite class="quote-author">— มอร์มินิมอร์, ปรัชญาการทำงาน</cite>
<cite class="quote-author">— มอร์มินิมอร์, ปณิธานการทำงาน</cite>
</blockquote>
</div>
</section>
<!-- PORTFOLIO PREVIEW — 3 latest on soft -->
<!-- PORTFOLIO PREVIEW — 4 featured on soft -->
<section class="section section-soft">
<div class="container">
<div class="section-header reveal">
@@ -154,45 +240,27 @@ const serviceImages: Record<string, string> = {
<h2 class="section-title">
ลูกค้าจริง <span class="highlight">ผลลัพธ์จริง</span>
</h2>
<p class="section-desc">9 โปรเจกต์ที่เราภาคภูมิใจ — ตั้งแต่ร้านค้าออนไลน์ ไปจนถึงโรงงานฉีดพลาสติก</p>
<p class="section-desc">ตัวอย่างผลงานที่เราภาคภูมิใจ — คลิกดูเว็บจริงได้เลย</p>
</div>
<div class="blog-editorial reveal">
{sortedPosts[0] && (
<a href={`/blog/${sortedPosts[0].id}`} class="blog-featured">
<div class="blog-image">
<img src={sortedPosts[0].data.image} alt={sortedPosts[0].data.title} loading="lazy" />
<span class="blog-badge">บทความล่าสุด</span>
</div>
<div class="blog-content">
<span class="blog-category">{sortedPosts[0].data.category}</span>
<h3 class="blog-title">{sortedPosts[0].data.title}</h3>
<p class="blog-excerpt">{sortedPosts[0].data.excerpt}</p>
<span class="read-more">อ่านต่อ →</span>
</div>
</a>
)}
<div class="blog-sidebar">
{sortedPosts.slice(1, 4).map((post) => (
<a href={`/blog/${post.id}`} class="blog-card-mini">
<div class="blog-card-image">
<img src={post.data.image} alt={post.data.title} loading="lazy" />
</div>
<div class="blog-card-content">
<span class="blog-category-small">{post.data.category}</span>
<h4 class="blog-title-small">{post.data.title}</h4>
<span class="blog-date-small">
{new Date(post.data.date).toLocaleDateString('th-TH', { month: 'short', day: 'numeric' })}
</span>
</div>
</a>
))}
</div>
<div class="portfolio-preview-grid stagger-children">
{featuredPortfolio.map((item) => (
<PortfolioCard
name={item.data.name}
url={item.data.url}
category={item.data.category}
category_label={item.data.category_label}
industry={item.data.industry}
thumbnail={item.data.thumbnail}
description={item.data.description}
what_we_did={item.data.what_we_did}
result={item.data.result}
/>
))}
</div>
<div class="section-cta">
<a href="/blog" class="btn btn-dark btn-lg">บทความทั้งหมด →</a>
<a href="/portfolio" class="btn btn-dark btn-lg">ดูผลงานทั้งหมด →</a>
</div>
</div>
</section>
@@ -223,39 +291,6 @@ const serviceImages: Record<string, string> = {
</Base>
<style>
/* ============================================
STATS — yellow band
============================================ */
.section-stats {
background: var(--color-primary);
padding: 60px 0;
}
.stats-grid {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 32px;
}
.stat-item {
text-align: center;
}
.stat-number {
display: block;
font-family: var(--font-display);
font-size: clamp(48px, 7vw, 80px);
font-weight: 900;
color: var(--color-black);
line-height: 1;
}
.stat-label {
display: block;
font-size: 14px;
color: rgba(0, 0, 0, 0.7);
margin-top: 8px;
text-transform: uppercase;
letter-spacing: 1px;
font-weight: 600;
}
/* ============================================
SECTION HEADER (light)
============================================ */
@@ -305,49 +340,96 @@ const serviceImages: Record<string, string> = {
}
/* ============================================
PROBLEM CARDS
PROBLEM CARDS — 12 cards, 3 per service bucket
============================================ */
.section-soft { background: var(--color-bg-alt); }
.problem-group {
margin-bottom: 56px;
}
.problem-group:last-of-type {
margin-bottom: 0;
}
.problem-group-title {
display: flex;
align-items: center;
gap: 12px;
margin-bottom: 20px;
}
.problem-group-tag {
display: inline-block;
font-family: var(--font-display);
font-size: 13px;
font-weight: 800;
text-transform: uppercase;
letter-spacing: 1.5px;
color: var(--color-black);
background: var(--color-primary);
padding: 6px 14px;
border-radius: var(--radius-sm);
}
.problem-group-title::after {
content: '';
flex: 1;
height: 2px;
background: var(--color-primary);
opacity: 0.4;
}
.problem-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 24px;
gap: 20px;
}
.problem-card {
background: var(--color-white);
border: 1px solid var(--color-gray-200);
border-radius: var(--radius-xl);
padding: 32px;
padding: 28px 24px;
transition: all 0.3s ease;
display: flex;
flex-direction: column;
}
.problem-card:hover {
transform: translateY(-4px);
box-shadow: var(--shadow-md);
border-color: var(--color-primary);
}
.problem-icon { margin-bottom: 16px; }
.problem-icon-badge {
width: 56px;
height: 56px;
border-radius: 50%;
background: var(--color-primary);
border: 2px solid var(--color-black);
display: flex;
align-items: center;
justify-content: center;
margin-bottom: 16px;
}
.problem-title {
font-family: var(--font-display);
font-size: 20px;
font-size: 17px;
font-weight: 800;
color: var(--color-black);
margin-bottom: 12px;
margin-bottom: 10px;
line-height: 1.35;
}
.problem-desc {
font-size: 15px;
font-size: 14px;
color: var(--color-gray-600);
line-height: 1.6;
margin-bottom: 16px;
margin-bottom: 14px;
flex: 1;
}
.problem-result {
display: block;
font-size: 14px;
font-size: 13px;
font-weight: 700;
color: var(--color-primary-dark);
}
.problem-closing {
text-align: center;
margin-top: 40px;
margin-top: 48px;
font-size: 18px;
color: var(--color-gray-700);
}
@@ -454,12 +536,12 @@ const serviceImages: Record<string, string> = {
}
.section-dark-quote .pull-quote {
text-align: center;
max-width: 900px;
max-width: 1000px;
margin: 0 auto;
}
.quote-text {
font-family: var(--font-display);
font-size: clamp(28px, 4vw, 48px);
font-size: clamp(28px, 4.5vw, 56px);
font-weight: 800;
line-height: 1.3;
color: var(--color-white);
@@ -477,170 +559,39 @@ const serviceImages: Record<string, string> = {
}
/* ============================================
BLOG EDITORIAL PREVIEW
PORTFOLIO PREVIEW GRID — 2x2 on desktop
============================================ */
.blog-editorial {
.portfolio-preview-grid {
display: grid;
grid-template-columns: 1.5fr 1fr;
grid-template-columns: repeat(2, 1fr);
gap: 24px;
}
.blog-featured {
display: flex;
flex-direction: column;
background: var(--color-white);
border: 1px solid var(--color-gray-200);
border-radius: var(--radius-xl);
overflow: hidden;
transition: all 0.3s ease;
}
.blog-featured:hover {
transform: translateY(-4px);
box-shadow: var(--shadow-md);
border-color: var(--color-primary);
}
.blog-featured .blog-image {
position: relative;
aspect-ratio: 16/10;
overflow: hidden;
}
.blog-featured .blog-image img {
width: 100%;
height: 100%;
object-fit: cover;
}
.blog-badge {
position: absolute;
top: 16px;
left: 16px;
background: var(--color-primary);
color: var(--color-black);
padding: 6px 14px;
border-radius: var(--radius-sm);
font-size: 11px;
font-weight: 700;
text-transform: uppercase;
}
.blog-featured .blog-content {
padding: 32px;
}
.blog-category {
display: inline-block;
background: var(--color-bg-soft);
color: var(--color-gray-600);
padding: 4px 12px;
border-radius: var(--radius-sm);
font-size: 11px;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 1px;
margin-bottom: 12px;
}
.blog-title {
font-family: var(--font-display);
font-size: 22px;
font-weight: 800;
color: var(--color-black);
margin-bottom: 12px;
line-height: 1.3;
}
.blog-excerpt {
font-size: 14px;
color: var(--color-gray-600);
line-height: 1.6;
margin-bottom: 16px;
}
.read-more {
font-size: 14px;
font-weight: 700;
color: var(--color-black);
text-transform: uppercase;
letter-spacing: 1px;
}
.blog-sidebar {
display: flex;
flex-direction: column;
gap: 16px;
}
.blog-card-mini {
display: flex;
gap: 16px;
padding: 12px;
background: var(--color-white);
border: 1px solid var(--color-gray-200);
border-radius: var(--radius-lg);
transition: all 0.3s ease;
}
.blog-card-mini:hover {
transform: translateX(4px);
border-color: var(--color-primary);
}
.blog-card-image {
width: 80px;
height: 80px;
flex-shrink: 0;
border-radius: var(--radius-md);
overflow: hidden;
background: var(--color-bg-soft);
}
.blog-card-image img {
width: 100%;
height: 100%;
object-fit: cover;
}
.blog-card-content {
display: flex;
flex-direction: column;
justify-content: center;
}
.blog-category-small {
font-size: 10px;
color: var(--color-gray-500);
text-transform: uppercase;
letter-spacing: 1px;
font-weight: 700;
}
.blog-title-small {
font-size: 14px;
font-weight: 700;
color: var(--color-black);
line-height: 1.3;
margin: 4px 0;
}
.blog-date-small {
font-size: 11px;
color: var(--color-gray-500);
}
/* ============================================
FINAL CTA (yellow)
FINAL CTA
============================================ */
.section-yellow { background: var(--color-primary); }
.cta-section .cta-content {
text-align: center;
max-width: 700px;
margin: 0 auto;
}
.cta-section .cta-title {
.cta-content { text-align: center; max-width: 700px; margin: 0 auto; }
.cta-title {
font-family: var(--font-display);
font-size: clamp(28px, 4vw, 48px);
font-size: clamp(28px, 4vw, 44px);
font-weight: 900;
color: var(--color-black);
margin-bottom: 16px;
}
.cta-section .cta-desc {
.cta-desc {
font-size: 18px;
color: rgba(0, 0, 0, 0.7);
margin-bottom: 32px;
line-height: 1.6;
}
.cta-section .cta-actions {
.cta-actions {
display: flex;
gap: 16px;
justify-content: center;
flex-wrap: wrap;
margin-bottom: 24px;
}
.cta-section .cta-reassurance {
.cta-reassurance {
margin-top: 24px;
font-size: 14px;
color: rgba(0, 0, 0, 0.6);
}
@@ -649,13 +600,13 @@ const serviceImages: Record<string, string> = {
RESPONSIVE
============================================ */
@media (max-width: 1024px) {
.stats-grid { grid-template-columns: repeat(2, 1fr); }
.problem-grid { grid-template-columns: 1fr; }
.problem-grid { grid-template-columns: repeat(2, 1fr); }
.services-mega-grid { grid-template-columns: 1fr; }
.blog-editorial { grid-template-columns: 1fr; }
.portfolio-preview-grid { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 640px) {
.stats-grid { grid-template-columns: 1fr 1fr; gap: 24px; }
.problem-grid { grid-template-columns: 1fr; }
.portfolio-preview-grid { grid-template-columns: 1fr; }
.cta-actions { flex-direction: column; }
.cta-actions .btn { width: 100%; justify-content: center; }
}

View File

@@ -1,26 +0,0 @@
import { getEmDashCollection } from "emdash";
import type { CollectionEntry } from "astro:content";
export function resolveBlogSiteIdentity(entry: CollectionEntry<"blog">) {
return {
title: entry.data.title,
description: entry.data.excerpt,
image: entry.data.image,
};
}
export function getReadingTime(content: string): string {
const wordsPerMinute = 200;
const words = content.split(/\s+/).length;
const minutes = Math.ceil(words / wordsPerMinute);
return `${minutes} นาที`;
}
export async function getBlogPosts() {
const { entries } = await getEmDashCollection("blog");
return entries.sort((a, b) => {
const dateA = new Date(a.data.date || 0).getTime();
const dateB = new Date(b.data.date || 0).getTime();
return dateB - dateA;
});
}