diff --git a/.emdash/seed.json b/.emdash/seed.json
new file mode 100644
index 0000000..7449540
--- /dev/null
+++ b/.emdash/seed.json
@@ -0,0 +1,578 @@
+{
+ "version": "1",
+ "collections": [
+ {
+ "slug": "pages",
+ "label": "Pages",
+ "fields": [
+ { "slug": "title", "type": "string", "label": "Title" },
+ { "slug": "subtitle", "type": "string", "label": "Subtitle" },
+ { "slug": "badge", "type": "string", "label": "Badge" },
+ { "slug": "hero_image", "type": "image", "label": "Hero Image" },
+ { "slug": "theme", "type": "select", "label": "Theme", "options": ["yellow", "accent"] },
+ { "slug": "show_cta", "type": "boolean", "label": "Show CTA" },
+ { "slug": "cta_text", "type": "string", "label": "CTA Text" },
+ { "slug": "cta_link", "type": "string", "label": "CTA Link" },
+ { "slug": "variant", "type": "select", "label": "Hero Variant", "options": ["split", "centered", "text_only", "floating_cards"] },
+ { "slug": "size", "type": "select", "label": "Hero Size", "options": ["full", "compact"] }
+ ]
+ },
+ {
+ "slug": "services",
+ "label": "Services",
+ "fields": [
+ { "slug": "title", "type": "string", "label": "Title" },
+ { "slug": "subtitle", "type": "string", "label": "Subtitle" },
+ { "slug": "badge", "type": "string", "label": "Badge" },
+ { "slug": "hero_image", "type": "image", "label": "Hero Image" },
+ { "slug": "content", "type": "portableText", "label": "Content" },
+ {
+ "slug": "features",
+ "type": "repeater",
+ "label": "Features",
+ "fields": [
+ { "slug": "icon", "type": "string", "label": "Icon" },
+ { "slug": "feature_title", "type": "string", "label": "Title" },
+ { "slug": "description", "type": "string", "label": "Description" }
+ ]
+ }
+ ]
+ },
+ {
+ "slug": "portfolio",
+ "label": "Portfolio",
+ "fields": [
+ { "slug": "name", "type": "string", "label": "Name" },
+ { "slug": "url", "type": "url", "label": "URL" },
+ { "slug": "category", "type": "select", "label": "Category", "options": ["webdev", "ecommerce", "marketing"] },
+ { "slug": "category_label", "type": "string", "label": "Category Label" },
+ { "slug": "thumbnail", "type": "image", "label": "Thumbnail" },
+ { "slug": "description", "type": "text", "label": "Description" },
+ {
+ "slug": "services",
+ "type": "repeater",
+ "label": "Services",
+ "fields": [
+ { "slug": "service_name", "type": "string", "label": "Name" }
+ ]
+ }
+ ]
+ },
+ {
+ "slug": "blog",
+ "label": "Blog",
+ "fields": [
+ { "slug": "title", "type": "string", "label": "Title" },
+ { "slug": "excerpt", "type": "string", "label": "Excerpt" },
+ { "slug": "image", "type": "image", "label": "Image" },
+ { "slug": "date", "type": "datetime", "label": "Date" },
+ { "slug": "category", "type": "string", "label": "Category" },
+ { "slug": "content", "type": "portableText", "label": "Content" }
+ ]
+ },
+ {
+ "slug": "faq",
+ "label": "FAQ",
+ "fields": [
+ { "slug": "category", "type": "string", "label": "Category" },
+ { "slug": "question", "type": "string", "label": "Question" },
+ { "slug": "answer", "type": "text", "label": "Answer" }
+ ]
+ },
+ {
+ "slug": "settings",
+ "label": "Site Settings",
+ "fields": [
+ { "slug": "site_name", "type": "string", "label": "Site Name" },
+ { "slug": "email", "type": "string", "label": "Contact Email" },
+ { "slug": "phone", "type": "string", "label": "Contact Phone" },
+ { "slug": "address", "type": "text", "label": "Address" },
+ { "slug": "facebook", "type": "url", "label": "Facebook URL" },
+ { "slug": "line", "type": "url", "label": "LINE URL" },
+ { "slug": "linkedin", "type": "url", "label": "LinkedIn URL" }
+ ]
+ }
+ ],
+ "content": {
+ "pages": [
+ {
+ "id": "page-home",
+ "slug": "home",
+ "data": {
+ "title": "เปลี่ยนธุรกิจของคุณ ด้วย AI และเทคโนโลยีสมัยใหม่",
+ "subtitle": "รับทำเว็บไซต์ SEO AI Chatbot สำหรับธุรกิจไทย
เพิ่มยอดขาย ลดต้นทุน ด้วยเทคโนโลยีล้ำสมัย",
+ "badge": "ดิจิทัลเอเจนซี่ในประเทศไทย",
+ "hero_image": "/images/hero/hero.jpg",
+ "theme": "yellow",
+ "variant": "split",
+ "size": "full",
+ "show_cta": true,
+ "cta_text": "เริ่มต้นวันนี้",
+ "cta_link": "/contact"
+ }
+ },
+ {
+ "id": "page-about",
+ "slug": "about",
+ "data": {
+ "title": "เกี่ยวกับ มอร์มินิมอร์",
+ "subtitle": "บริษัท มอร์มินิมอร์ จำกัด
รับทำเว็บไซต์ SEO AI Chatbot สำหรับธุรกิจไทย",
+ "badge": "เกี่ยวกับเรา",
+ "hero_image": "/images/hero/about.jpg",
+ "theme": "yellow",
+ "variant": "centered",
+ "size": "compact",
+ "show_cta": false
+ }
+ },
+ {
+ "id": "page-portfolio",
+ "slug": "portfolio",
+ "data": {
+ "title": "ผลงานของเรา",
+ "subtitle": "รวมผลงานพัฒนาเว็บไซต์และโปรเจกต์ที่เราภาคภูมิใจ",
+ "badge": "พอร์ตโฟลิโอ",
+ "hero_image": "/images/hero/hero.jpg",
+ "theme": "yellow",
+ "variant": "text-only",
+ "size": "compact",
+ "show_cta": false
+ }
+ },
+ {
+ "id": "page-contact",
+ "slug": "contact",
+ "data": {
+ "title": "พูดคุยกับเรา วันนี้เลย!",
+ "subtitle": "พร้อมให้คำปรึกษาและช่วยเหลือคุณ
ปรึกษาฟรี ไม่มีค่าใช้จ่าย",
+ "badge": "ติดต่อเรา",
+ "hero_image": "/images/hero/contact.jpg",
+ "theme": "yellow",
+ "variant": "text-only",
+ "size": "compact",
+ "show_cta": false
+ }
+ },
+ {
+ "id": "page-faq",
+ "slug": "faq",
+ "data": {
+ "title": "คำถามที่พบบ่อย",
+ "subtitle": "หาคำตอบสำหรับคำถามที่พบบ่อยเกี่ยวกับบริการของเรา",
+ "badge": "FAQ",
+ "hero_image": "/images/hero/tech-consult.jpg",
+ "theme": "yellow",
+ "variant": "centered",
+ "size": "compact",
+ "show_cta": false
+ }
+ },
+ {
+ "id": "page-privacy",
+ "slug": "privacy",
+ "data": {
+ "title": "นโยบายความเป็นส่วนตัว",
+ "subtitle": "มีผลบังคับใช้วันที่ 5 พฤษภาคม 2569",
+ "badge": "กฎหมาย",
+ "hero_image": "/images/hero/ai-automation.jpg",
+ "theme": "yellow",
+ "variant": "text-only",
+ "size": "compact",
+ "show_cta": false
+ }
+ },
+ {
+ "id": "page-terms",
+ "slug": "terms",
+ "data": {
+ "title": "เงื่อนไขการให้บริการ",
+ "subtitle": "มีผลบังคับใช้วันที่ 5 พฤษภาคม 2569",
+ "badge": "กฎหมาย",
+ "hero_image": "/images/hero/marketing-automation.jpg",
+ "theme": "yellow",
+ "variant": "text-only",
+ "size": "compact",
+ "show_cta": false
+ }
+ }
+ ],
+ "services": [
+ {
+ "id": "service-webdev",
+ "slug": "webdev",
+ "data": {
+ "title": "พัฒนาเว็บไซต์",
+ "subtitle": "สร้างเว็บไซต์ที่ทันสมัย รวดเร็ว และตอบสนองความต้องการของลูกค้าของคุณ ด้วยเทคโนโลยีล่าสุดและ design ที่สวยงาม",
+ "badge": "บริการ",
+ "hero_image": "/images/hero/web-development-hero.jpg",
+ "feature1_icon": "⚡",
+ "feature1_title": "เร็วสุดใน class",
+ "feature1_desc": "โหลดเร็ว เพิ่ม conversion และ SEO ranking",
+ "feature2_icon": "📱",
+ "feature2_title": "Responsive ทุก device",
+ "feature2_desc": "แสดงผลได้ดีบน mobile tablet และ desktop",
+ "feature3_icon": "🎨",
+ "feature3_title": "Design สวยงาม",
+ "feature3_desc": "ออกแบบ UI/UX ที่ดึงดูดและใช้งานง่าย",
+ "feature4_icon": "🔒",
+ "feature4_title": "ปลอดภัย",
+ "feature4_desc": "Security ระดับสูง ป้องกันการโจมตี",
+ "feature5_icon": "🔍",
+ "feature5_title": "SEO Optimized",
+ "feature5_desc": "ออกแบบมาเพื่อให้ Google ชอบ",
+ "feature6_icon": "📊",
+ "feature6_title": "Analytics ในตัว",
+ "feature6_desc": "ติดตามผู้เข้าชมและวัดผลได้"
+ }
+ },
+ {
+ "id": "service-marketing",
+ "slug": "marketing",
+ "data": {
+ "title": "Marketing Automation",
+ "subtitle": "เพิ่มประสิทธิภาพการตลาดและลดต้นทุนด้วยระบบอัตโนมัติ ประหยัดเวลา เพิ่ม conversion วัดผลได้",
+ "badge": "บริการ",
+ "hero_image": "/images/hero/marketing-automation-hero.jpg",
+ "feature1_icon": "📧",
+ "feature1_title": "Email Automation",
+ "feature1_desc": "ส่ง email อัตโนมัติเมื่อ trigger ตรงกับเงื่อนไขที่กำหนด",
+ "feature2_icon": "💬",
+ "feature2_title": "Chatbot Integration",
+ "feature2_desc": "เชื่อมต่อ chatbot กับระบบ CRM เพื่อเก็บข้อมูลลูกค้า",
+ "feature3_icon": "📱",
+ "feature3_title": "SMS/Line Automation",
+ "feature3_desc": "ส่ง SMS หรือ LINE message อัตโนมัติตาม timeline",
+ "feature4_icon": "📊",
+ "feature4_title": "Analytics Dashboard",
+ "feature4_desc": "ติดตามผลแคมเปญและวัด ROI ได้แบบ real-time",
+ "feature5_icon": "🎯",
+ "feature5_title": "Lead Scoring",
+ "feature5_desc": "ให้คะแนน leads ตามพฤติกรรมเพื่อจัดลำดับความสำคัญ",
+ "feature6_icon": "🔄",
+ "feature6_title": "Workflow Automation",
+ "feature6_desc": "สร้าง workflow อัตโนมัติสำหรับงานที่ทำซ้ำๆ"
+ }
+ },
+ {
+ "id": "service-ai",
+ "slug": "ai",
+ "data": {
+ "title": "AI Automation",
+ "subtitle": "นำ AI มาใช้เพื่อเพิ่มยอดขายและปรับปรุงการให้บริการลูกค้า เพิ่มประสิทธิภาพ ลดต้นทุน ด้วยเทคโนโลยีล้ำสมัย",
+ "badge": "บริการ",
+ "hero_image": "/images/hero/ai-automation-hero.jpg",
+ "feature1_icon": "🤖",
+ "feature1_title": "AI Chatbot",
+ "feature1_desc": "Chatbot ที่ใช้ AI ตอบคำถามลูกค้าได้ 24/7 รองรับภาษาไทย",
+ "feature2_icon": "💬",
+ "feature2_title": "AI Customer Service",
+ "feature2_desc": "ระบบตอบคำถามอัตโนมัติด้วย AI ที่เข้าใจบริบท",
+ "feature3_icon": "📝",
+ "feature3_title": "AI Content Generation",
+ "feature3_desc": "สร้าง content อัตโนมัติด้วย AI ที่ SEO friendly",
+ "feature4_icon": "📧",
+ "feature4_title": "AI Email Marketing",
+ "feature4_desc": "ส่ง email ที่ personalized ด้วย AI ที่วิเคราะห์พฤติกรรม",
+ "feature5_icon": "📊",
+ "feature5_title": "AI Sales Prediction",
+ "feature5_desc": "ทำนายยอดขายและวางแผนการตลาดด้วย AI",
+ "feature6_icon": "🎯",
+ "feature6_title": "AI Lead Scoring",
+ "feature6_desc": "ให้คะแนน leads อัตโนมัติด้วย AI ที่เรียนรู้จากข้อมูล"
+ }
+ },
+ {
+ "id": "service-consult",
+ "slug": "consult",
+ "data": {
+ "title": "Tech Consult",
+ "subtitle": "ให้คำปรึกษาด้านเทคโนโลยีเพื่อธุรกิจของคุณ วางแผน ออกแบบ และ implement ระบบที่เหมาะสม",
+ "badge": "บริการ",
+ "hero_image": "/images/hero/tech-consult-hero.jpg",
+ "feature1_icon": "🔍",
+ "feature1_title": "Digital Audit",
+ "feature1_desc": "วิเคราะห์สถานะดิจิทัลปัจจุบันของธุรกิจคุณอย่างละเอียด",
+ "feature2_icon": "📋",
+ "feature2_title": "Digital Strategy",
+ "feature2_desc": "วางแผน digital transformation ที่เหมาะกับเป้าหมายธุรกิจ",
+ "feature3_icon": "🛠️",
+ "feature3_title": "Technology Selection",
+ "feature3_desc": "แนะนำเทคโนโลยีที่เหมาะสมกับ budget และความต้องการ",
+ "feature4_icon": "📐",
+ "feature4_title": "System Architecture",
+ "feature4_desc": "ออกแบบระบบที่ scalable และ maintainable",
+ "feature5_icon": "🔧",
+ "feature5_title": "Implementation Support",
+ "feature5_desc": "ดูแลและให้คำปรึกษาตลอดการ implement",
+ "feature6_icon": "📈",
+ "feature6_title": "Performance Optimization",
+ "feature6_desc": "ปรับปรุงประสิทธิภาพระบบให้ดีขึ้นอย่างต่อเนื่อง"
+ }
+ }
+ ],
+ "portfolio": [
+ {
+ "id": "portfolio-001",
+ "slug": "lungfinler",
+ "data": {
+ "name": "Lungfinler",
+ "url": "https://lungfinler.com",
+ "category": "webdev",
+ "category_label": "พัฒนาเว็บไซต์",
+ "thumbnail": "/images/portfolio/lungfinler.png",
+ "description": "Digital Agency - บริการด้านการสร้างแบรนด์ กราฟิกดีไซน์ และถ่ายภาพสินค้าคุณภาพสูง"
+ }
+ },
+ {
+ "id": "portfolio-002",
+ "slug": "jetindustries",
+ "data": {
+ "name": "Jet Industries",
+ "url": "https://jetindustries.co.th",
+ "category": "webdev",
+ "category_label": "พัฒนาเว็บไซต์",
+ "thumbnail": "/images/portfolio/jetindustries.png",
+ "description": "ผู้ผลิตพลาสติกฉีดขึ้นรูปอย่างแม่นยำ (Precision Plastic Injection Molding) มีประสบการณ์กว่า 40 ปี"
+ }
+ },
+ {
+ "id": "portfolio-003",
+ "slug": "lawyernoom",
+ "data": {
+ "name": "สำนักงานกฎหมาย ตถาตา",
+ "url": "https://lawyernoom.com",
+ "category": "webdev",
+ "category_label": "พัฒนาเว็บไซต์",
+ "thumbnail": "/images/portfolio/lawyernoom.png",
+ "description": "สำนักงานกฎหมายโดย ทนายความ คมสัน ศรีวนิชย์ - บริการด้านคดีความ คดีแพ่ง คดีอาญา"
+ }
+ },
+ {
+ "id": "portfolio-004",
+ "slug": "underdog",
+ "data": {
+ "name": "Underdog Marketing",
+ "url": "https://underdog.run",
+ "category": "webdev",
+ "category_label": "พัฒนาเว็บไซต์",
+ "thumbnail": "/images/portfolio/underdog.png",
+ "description": "บล็อกการตลาดและการขายสไตล์ ลุยไม่ยั้ง โดย บุ้ง ดีดติ่งหู"
+ }
+ },
+ {
+ "id": "portfolio-005",
+ "slug": "baofuling",
+ "data": {
+ "name": "Baofuling Shop",
+ "url": "https://baofulingshop.com",
+ "category": "ecommerce",
+ "category_label": "อีคอมเมิร์ซ",
+ "thumbnail": "/images/portfolio/baofuling.png",
+ "description": "ร้านค้าออนไลน์ครีมบัวหิมะและผลิตภัณฑ์ความงามจีน"
+ }
+ },
+ {
+ "id": "portfolio-006",
+ "slug": "trainersunny",
+ "data": {
+ "name": "เทรนเนอร์ซันนี่",
+ "url": "https://trainersunny.com",
+ "category": "webdev",
+ "category_label": "พัฒนาเว็บไซต์",
+ "thumbnail": "/images/portfolio/trainersunny.png",
+ "description": "ผู้เชี่ยวชาญด้านการพัฒนาบุคลากรและ Soft Skill"
+ }
+ },
+ {
+ "id": "portfolio-007",
+ "slug": "luadjob",
+ "data": {
+ "name": "เลือดจระเข้วานิไทย",
+ "url": "https://เลือดจระเข้วานิไทย.com",
+ "category": "ecommerce",
+ "category_label": "อีคอมเมิร์ซ",
+ "thumbnail": "/images/portfolio/luadjob.png",
+ "description": "ตัวแทนจำหน่ายเลือดจระเข้วานิไทยอย่างเป็นทางการ"
+ }
+ },
+ {
+ "id": "portfolio-008",
+ "slug": "tuanthong",
+ "data": {
+ "name": "ทวนทอง 99",
+ "url": "https://tuanthong99.com",
+ "category": "ecommerce",
+ "category_label": "อีคอมเมิร์ซ",
+ "thumbnail": "/images/portfolio/tuanthong.png",
+ "description": "ร้านค้าออนไลน์สมุนไพรไทยคุณภาพสูง"
+ }
+ },
+ {
+ "id": "portfolio-009",
+ "slug": "odooportal",
+ "data": {
+ "name": "Odoo Portal",
+ "url": "https://odooportal.com",
+ "category": "marketing",
+ "category_label": "ที่ปรึกษาการตลาด",
+ "thumbnail": "/images/portfolio/odooportal.png",
+ "description": "ตัวแทนจำหน่าย Odoo อย่างเป็นทางการในประเทศไทย"
+ }
+ }
+ ],
+ "faq": [
+ {
+ "id": "faq-001",
+ "slug": "service-001",
+ "data": { "category": "บริการ", "category_icon": "🎯", "question": "MoreminiMore ให้บริการอะไรบ้าง?", "answer": "เราให้บริการ 4 ประเภทหลัก: พัฒนาเว็บไซต์, Marketing Automation, AI Automation และ Tech Consult สำหรับธุรกิจไทย" }
+ },
+ {
+ "id": "faq-002",
+ "slug": "service-002",
+ "data": { "category": "บริการ", "category_icon": "🎯", "question": "สามารถสั่งทำเว็บไซต์เฉพาะประเภทได้ไหม?", "answer": "ได้ เราสามารถพัฒนาเว็บไซต์ได้ทุกประเภท ไม่ว่าจะเป็นเว็บบริษัท เว็บขายของ เว็บ Landing Page หรือระบบ Web Application" }
+ },
+ {
+ "id": "faq-003",
+ "slug": "service-003",
+ "data": { "category": "บริการ", "category_icon": "🎯", "question": "AI Chatbot สามารถทำอะไรได้บ้าง?", "answer": "AI Chatbot ของเราสามารถตอบคำถามลูกค้า รับออร์เดอร์ นัดหมาย และเชื่อมต่อกับระบบ CRM หรือร้านค้าออนไลน์ได้" }
+ },
+ {
+ "id": "faq-004",
+ "slug": "price-001",
+ "data": { "category": "ราคา", "category_icon": "💰", "question": "ราคาเริ่มต้นของการทำเว็บไซต์เท่าไหร่?", "answer": "ราคาเริ่มต้นอยู่ที่ 15,000 บาท ขึ้นอยู่กับความซับซ้อนและฟีเจอร์ที่ต้องการ เราจะประเมินและเสนอราคาหลังจากการปรึกษาฟรี" }
+ },
+ {
+ "id": "faq-005",
+ "slug": "price-002",
+ "data": { "category": "ราคา", "category_icon": "💰", "question": "มีราคาแพ็คเกจหรือไม่?", "answer": "มี เรามีแพ็คเกจสำหรับธุรกิจที่ต้องการเริ่มต้นอย่างง่ายๆ และแพ็คเกจสำหรับธุรกิจที่ต้องการระบบครบวงจร สามารถเลือกได้ตามความต้องการ" }
+ },
+ {
+ "id": "faq-006",
+ "slug": "price-003",
+ "data": { "category": "ราคา", "category_icon": "💰", "question": "ชำระเงินอย่างไร?", "answer": "รองรับการชำระเงินผ่านโอนเงินธนาคาร หรือผ่อนชำระผ่านบัตรเครดิต 3-6 งวด (มีดอกเบี้ย)" }
+ },
+ {
+ "id": "faq-007",
+ "slug": "time-001",
+ "data": { "category": "ระยะเวลา", "category_icon": "⏱️", "question": "ใช้เวลาพัฒนานานเท่าไหร่?", "answer": "ขึ้นอยู่กับความซับซ้อน Landing Page ใช้เวลา 1-2 สัปดาห์ เว็บไซต์ขนาดกลาง 2-4 สัปดาห์ ระบบ Web Application 4-8 สัปดาห์" }
+ },
+ {
+ "id": "faq-008",
+ "slug": "time-002",
+ "data": { "category": "ระยะเวลา", "category_icon": "⏱️", "question": "ถ้าต้องการด่วนได้ไหม?", "answer": "ได้ เรามีบริการด่วนพิเศษ (เพิ่มค่าใช้จ่าย 30%) สามารถส่งมอบงานได้เร็วขึ้น 50%" }
+ },
+ {
+ "id": "faq-009",
+ "slug": "support-001",
+ "data": { "category": "หลังการขาย", "category_icon": "💬", "question": "มีการรับประกันหรือไม่?", "answer": "เรารับประกันงาน 30 วันหลังส่งมอบ หากมีปัญหาจากการพัฒนา เราจะแก้ไขให้ฟรี" }
+ },
+ {
+ "id": "faq-010",
+ "slug": "support-002",
+ "data": { "category": "หลังการขาย", "category_icon": "💬", "question": "มีบริการดูแลหลังการขายไหม?", "answer": "มี เรามีแพ็คเกจดูแลรายเดือนเริ่มต้นที่ 2,000 บาท/เดือน รวมการอัพเดทเนื้อหา ปรับปรุงความปลอดภัย และ Backup" }
+ }
+ ],
+ "blog": [
+ {
+ "id": "post-001",
+ "slug": "5-ways-ai-increase-sales",
+ "data": {
+ "title": "5 วิธีใช้ AI เพิ่มยอดขายให้ธุรกิจของคุณ",
+ "excerpt": "ค้นพบ 5 วิธีที่ AI สามารถช่วยเพิ่มยอดขายให้ธุรกิจ SMEs ไทย พร้อมตัวอย่างและแนวทางการนำไปใช้จริง",
+ "image": "/images/blog/5-ways-ai-increase-sales.jpg",
+ "date": "2026-03-11",
+ "category": "AI Business",
+ "content": {
+ "type": "doc",
+ "content": [
+ { "type": "heading", "attrs": { "level": 2 }, "content": [{ "type": "text", "text": "วิธีที่ 1: ใช้ AI วิเคราะห์ลูกค้าและแนะนำสินค้าที่ตรงใจ" }] },
+ { "type": "paragraph", "content": [{ "type": "text", "text": "หนึ่งในความสามารถที่ทรงพลังที่สุดของ AI คือการวิเคราะห์ข้อมูลลูกค้าและค้นหารูปแบบที่มนุษย์อาจมองไม่เห็น AI สามารถวิเคราะห์ว่าลูกค้าแต่ละคนชอบสินค้าประเภทไหน ซื้อในช่วงเวลาไหน และมีพฤติกรรมการซื้ออย่างไร" }] },
+ { "type": "heading", "attrs": { "level": 2 }, "content": [{ "type": "text", "text": "วิธีที่ 2: ใช้ Chatbot ดูแลลูกค้าตลอด 24 ชั่วโมง" }] },
+ { "type": "paragraph", "content": [{ "type": "text", "text": "ลูกค้าจำนวนมากต้องการได้รับคำตอบทันที ไม่ว่าจะกี่โมง แต่การจ้างพนักงานทำงาน 24 ชั่วโมงนั้นมีค่าใช้จ่ายสูง Chatbot ที่ใช้ AI สามารถตอบคำถามลูกค้าได้ตลอดเวลา โดยไม่ต้องเสียค่าล่วงเวลา" }] },
+ { "type": "heading", "attrs": { "level": 2 }, "content": [{ "type": "text", "text": "วิธีที่ 3: ใช้ AI ส่งข้อความการตลาดในเวลาที่เหมาะสม" }] },
+ { "type": "paragraph", "content": [{ "type": "text", "text": "การส่งข้อความการตลาดไม่ใช่แค่การส่งออกไปเท่านั้น แต่ต้องส่งในเวลาที่ลูกค้ามีโอกาสอ่านและตอบสนองมากที่สุด AI สามารถวิเคราะห์ว่าลูกค้าแต่ละคนมีช่วงเวลาไหนที่เปิดอ่านข้อความบ่อยที่สุด และส่งในเวลานั้น" }] },
+ { "type": "heading", "attrs": { "level": 2 }, "content": [{ "type": "text", "text": "วิธีที่ 4: ใช้ AI สร้างเนื้อหาการตลาด" }] },
+ { "type": "paragraph", "content": [{ "type": "text", "text": "เนื้อหาการตลาดที่ดีเป็นหัวใจสำคัญในการดึงดูดลูกค้า แต่การสร้างเนื้อหาที่มีคุณภาพตลอดเวลาต้องใช้เวลาและทรัพยากรมาก AI สามารถช่วยสร้างเนื้อหาได้เร็วขึ้น ไม่ว่าจะเป็นโพสต์เฟซบุ๊ก คำบรรยายสินค้า อีเมลการตลาด หรือบทความบล็อก" }] },
+ { "type": "heading", "attrs": { "level": 2 }, "content": [{ "type": "text", "text": "วิธีที่ 5: ใช้ AI ทำนายแนวโน้มและวางแผนสินค้า" }] },
+ { "type": "paragraph", "content": [{ "type": "text", "text": "การมีสินค้าคงคลงเป็นสิ่งจำเป็นสำหรับธุรกิจค้าปลีก แต่การมีสินค้ามากเกินไปก็เป็นปัญหา AI สามารถวิเคราะห์ข้อมูลยอดขายในอดีต ฤดูกาล และปัจจัยอื่นๆ เพื่อทำนายว่าควรสั่งสินค้าเท่าไหร่ในแต่ละช่วง" }] }
+ ]
+ }
+ }
+ },
+ {
+ "id": "post-002",
+ "slug": "ai-content-google-love",
+ "data": {
+ "title": "วิธีสร้าง Content ด้วย AI ที่ Google รัก",
+ "excerpt": "เรียนรู้วิธีการใช้ AI ช่วยสร้างเนื้อหาการตลาดที่มีคุณภาพและได้รับการจัดอันดับดีจาก Google พร้อมเทคนิคและตัวอย่างจริง",
+ "image": "/images/blog/ai-content-google-love.jpg",
+ "date": "2026-03-10",
+ "category": "AI Content",
+ "content": {
+ "type": "doc",
+ "content": [
+ { "type": "heading", "attrs": { "level": 2 }, "content": [{ "type": "text", "text": "ทำไม AI Content ต้องมีคุณภาพ" }] },
+ { "type": "paragraph", "content": [{ "type": "text", "text": "Google มีอัลกอริทึมที่ฉลาดมาก สามารถแยกแยะได้ว่าเนื้อหาที่สร้างโดย AI มีคุณภาพหรือไม่ เนื้อหาที่ไม่มีคุณค่า สร้างขึ้นแค่เพื่อใส่คีย์เวิร์ด จะถูกลงโทษและไม่ติดอันดับ" }] },
+ { "type": "heading", "attrs": { "level": 2 }, "content": [{ "type": "text", "text": "วิธีใช้ AI สร้างเนื้อหาที่ดี" }] },
+ { "type": "paragraph", "content": [{ "type": "text", "text": "ใช้ AI เป็นผู้ช่วย ไม่ใช่ผู้เขียนทั้งหมด วิธีที่ดีที่สุดคือใช้ AI ช่วยในบางส่วน เช่น รวบรวมข้อมูล สร้างโครงสร้าง หรือเขียน draft แล้วนำมาปรับแก้ด้วยมนุษย์" }] }
+ ]
+ }
+ }
+ },
+ {
+ "id": "post-003",
+ "slug": "ai-for-sme-thailand",
+ "data": {
+ "title": "AI สำหรับ SME ไทย: คู่มือฉบับสมบูรณ์",
+ "excerpt": "การใช้ AI สำหรับธุรกิจ SME ไทยเพื่อเพิ่มขีดความสามารถในการแข่งขัน พร้อมแนวทางปฏิบัติจริง",
+ "image": "/images/blog/ai-for-sme-thailand.jpg",
+ "date": "2026-03-08",
+ "category": "AI Business",
+ "content": {
+ "type": "doc",
+ "content": [
+ { "type": "heading", "attrs": { "level": 2 }, "content": [{ "type": "text", "text": "ทำไม SME ต้องใช้ AI" }] },
+ { "type": "paragraph", "content": [{ "type": "text", "text": "AI ไม่ใช่เทคโนโลยีสำหรับบริษัทใหญ่เท่านั้น ธุรกิจ SME สามารถเริ่มใช้ประโยชน์จาก AI ได้ง่ายๆ ด้วยเครื่องมือที่เข้าถึงได้" }] }
+ ]
+ }
+ }
+ },
+ {
+ "id": "post-004",
+ "slug": "digital-transformation-guide",
+ "data": {
+ "title": "คู่มือ Digital Transformation ฉบับสมบูรณ์",
+ "excerpt": "การ transform ธุรกิจของคุณสู่ดิจิทัลอย่างครบวงจร ตั้งแต่การวางแผนจนถึงการ Implement",
+ "image": "/images/blog/digital-transformation.jpg",
+ "date": "2026-03-05",
+ "category": "Business",
+ "content": {
+ "type": "doc",
+ "content": [
+ { "type": "heading", "attrs": { "level": 2 }, "content": [{ "type": "text", "text": "Digital Transformation คืออะไร" }] },
+ { "type": "paragraph", "content": [{ "type": "text", "text": "Digital Transformation คือการนำเทคโนโลยีดิจิทัลมาใช้ในทุกด้านของธุรกิจ เพื่อเพิ่มประสิทธิภาพและสร้างคุณค่าใหม่ให้กับลูกค้า" }] }
+ ]
+ }
+ }
+ },
+ {
+ "id": "post-005",
+ "slug": "marketing-automation-guide",
+ "data": {
+ "title": "Marketing Automation: คู่มือเริ่มต้น",
+ "excerpt": "เรียนรู้พื้นฐานของ Marketing Automation และวิธีเริ่มต้นใช้งานสำหรับธุรกิจของคุณ",
+ "image": "/images/blog/marketing-automation-guide.jpg",
+ "date": "2026-03-01",
+ "category": "Marketing",
+ "content": {
+ "type": "doc",
+ "content": [
+ { "type": "heading", "attrs": { "level": 2 }, "content": [{ "type": "text", "text": "Marketing Automation คืออะไร" }] },
+ { "type": "paragraph", "content": [{ "type": "text", "text": "Marketing Automation คือการใช้ซอฟต์แวร์เพื่อ automate การตลาดซ้ำๆ เช่น การส่งอีเมล การโพสต์โซเชียลมีเดีย และการวิเคราะห์ข้อมูล" }] }
+ ]
+ }
+ }
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/.omc/project-memory.json b/.omc/project-memory.json
index 6234b5e..6119ca7 100644
--- a/.omc/project-memory.json
+++ b/.omc/project-memory.json
@@ -1,6 +1,6 @@
{
"version": "1.0.0",
- "lastScanned": 1777964900860,
+ "lastScanned": 1779069605402,
"projectRoot": "/Users/kunthawatgreethong/Gitea/moreminimore-emdash/moreminimore-site",
"techStack": {
"languages": [
@@ -26,13 +26,23 @@
"name": "astro",
"version": "6.2.2",
"category": "fullstack"
+ },
+ {
+ "name": "react",
+ "version": "19.2.5",
+ "category": "frontend"
+ },
+ {
+ "name": "react-dom",
+ "version": "19.2.5",
+ "category": "frontend"
}
],
"packageManager": "npm",
"runtime": "Node.js 22.12.0"
},
"build": {
- "buildCommand": "pkill -f \"node.*entry.mjs\" 2>/dev/null; sleep 1; npm run build 2>&1 | tail -10",
+ "buildCommand": "npm run build",
"testCommand": null,
"lintCommand": null,
"devCommand": "npm run dev",
@@ -45,7 +55,7 @@
},
"conventions": {
"namingStyle": null,
- "importStyle": null,
+ "importStyle": "ES modules",
"testPattern": null,
"fileOrganization": "type-based"
},
@@ -63,9 +73,10 @@
"dist": {
"path": "dist",
"purpose": "Distribution/build output",
- "fileCount": 3,
- "lastAccessed": 1777964900843,
+ "fileCount": 4,
+ "lastAccessed": 1779069605371,
"keyFiles": [
+ "config.yml",
"favicon.ico",
"favicon.svg",
"index.html"
@@ -74,191 +85,115 @@
"public": {
"path": "public",
"purpose": "Public files",
- "fileCount": 2,
- "lastAccessed": 1777964900843,
+ "fileCount": 3,
+ "lastAccessed": 1779069605375,
"keyFiles": [
+ "config.yml",
"favicon.ico",
"favicon.svg"
]
},
+ "seed": {
+ "path": "seed",
+ "purpose": null,
+ "fileCount": 1,
+ "lastAccessed": 1779069605376,
+ "keyFiles": [
+ "seed.json"
+ ]
+ },
"src": {
"path": "src",
"purpose": "Source code",
+ "fileCount": 1,
+ "lastAccessed": 1779069605376,
+ "keyFiles": [
+ "content.config.ts"
+ ]
+ },
+ "uploads": {
+ "path": "uploads",
+ "purpose": null,
"fileCount": 0,
- "lastAccessed": 1777964900843,
+ "lastAccessed": 1779069605376,
"keyFiles": []
},
"src/components": {
"path": "src/components",
"purpose": "UI components",
- "fileCount": 2,
- "lastAccessed": 1777964900844,
+ "fileCount": 7,
+ "lastAccessed": 1779069605377,
"keyFiles": [
+ "BlogCard.astro",
"Footer.astro",
- "Navigation.astro"
+ "Hero.astro"
+ ]
+ },
+ "src/data": {
+ "path": "src/data",
+ "purpose": "Data files",
+ "fileCount": 1,
+ "lastAccessed": 1779069605377,
+ "keyFiles": [
+ "portfolio.ts"
]
},
"src/pages": {
"path": "src/pages",
"purpose": "Page components",
"fileCount": 7,
- "lastAccessed": 1777964900844,
+ "lastAccessed": 1779069605378,
"keyFiles": [
"about.astro",
"contact.astro",
"faq.astro"
]
+ },
+ "src/utils": {
+ "path": "src/utils",
+ "purpose": "Utility functions",
+ "fileCount": 1,
+ "lastAccessed": 1779069605378,
+ "keyFiles": [
+ "site-identity.ts"
+ ]
}
},
"hotPaths": [
{
- "path": "src/pages/services/webdev.astro",
- "accessCount": 15,
- "lastAccessed": 1777995299269,
- "type": "file"
+ "path": "src/pages",
+ "accessCount": 1,
+ "lastAccessed": 1779069626755,
+ "type": "directory"
},
{
- "path": "src/pages/contact.astro",
- "accessCount": 13,
- "lastAccessed": 1778035753279,
- "type": "file"
- },
- {
- "path": "src/pages/services/marketing.astro",
- "accessCount": 12,
- "lastAccessed": 1777995302629,
- "type": "file"
- },
- {
- "path": "src/pages/services/ai.astro",
- "accessCount": 12,
- "lastAccessed": 1777995305997,
- "type": "file"
- },
- {
- "path": "src/pages/services/consult.astro",
- "accessCount": 12,
- "lastAccessed": 1777995309322,
- "type": "file"
- },
- {
- "path": "src/components/Hero.astro",
- "accessCount": 10,
- "lastAccessed": 1777990559849,
- "type": "file"
- },
- {
- "path": "src/pages/portfolio.astro",
- "accessCount": 10,
- "lastAccessed": 1777995338202,
- "type": "file"
- },
- {
- "path": "src/pages/faq.astro",
- "accessCount": 10,
- "lastAccessed": 1778035785098,
- "type": "file"
- },
- {
- "path": "src/pages/blog/index.astro",
- "accessCount": 9,
- "lastAccessed": 1777990683296,
+ "path": "src/pages/terms.astro",
+ "accessCount": 1,
+ "lastAccessed": 1779069632645,
"type": "file"
},
{
"path": "src/pages/privacy.astro",
- "accessCount": 8,
- "lastAccessed": 1778035781772,
- "type": "file"
- },
- {
- "path": "src/pages/index.astro",
- "accessCount": 7,
- "lastAccessed": 1777990666698,
- "type": "file"
- },
- {
- "path": "src/pages/terms.astro",
- "accessCount": 7,
- "lastAccessed": 1778035778435,
- "type": "file"
- },
- {
- "path": "src/components/Footer.astro",
- "accessCount": 6,
- "lastAccessed": 1778035958612,
- "type": "file"
- },
- {
- "path": "src/components/Navigation.astro",
- "accessCount": 5,
- "lastAccessed": 1778035955274,
- "type": "file"
- },
- {
- "path": "src/pages/blog/[slug].astro",
- "accessCount": 4,
- "lastAccessed": 1777984290050,
- "type": "file"
- },
- {
- "path": "src/pages/about.astro",
- "accessCount": 4,
- "lastAccessed": 1777990670077,
- "type": "file"
- },
- {
- "path": "src/layouts/Base.astro",
- "accessCount": 4,
- "lastAccessed": 1778036775836,
- "type": "file"
- },
- {
- "path": "src/styles/global.css",
- "accessCount": 3,
- "lastAccessed": 1777972416964,
- "type": "file"
- },
- {
- "path": "src/pages/services",
- "accessCount": 2,
- "lastAccessed": 1777995178143,
- "type": "directory"
- },
- {
- "path": "astro.config.mjs",
- "accessCount": 2,
- "lastAccessed": 1778036187649,
- "type": "file"
- },
- {
- "path": "src/pages",
"accessCount": 1,
- "lastAccessed": 1777995189679,
- "type": "directory"
- },
- {
- "path": "src",
- "accessCount": 1,
- "lastAccessed": 1778035760907,
- "type": "directory"
- },
- {
- "path": "src/live.config.ts",
- "accessCount": 1,
- "lastAccessed": 1778036198221,
+ "lastAccessed": 1779069632748,
"type": "file"
},
{
- "path": "seed/seed.json",
+ "path": "src/pages/faq.astro",
"accessCount": 1,
- "lastAccessed": 1778036244021,
+ "lastAccessed": 1779069632766,
"type": "file"
},
{
- "path": "src/utils/site-identity.ts",
+ "path": "src/pages/contact.astro",
"accessCount": 1,
- "lastAccessed": 1778036594901,
+ "lastAccessed": 1779069632802,
+ "type": "file"
+ },
+ {
+ "path": "src/pages/portfolio.astro",
+ "accessCount": 1,
+ "lastAccessed": 1779069632820,
"type": "file"
}
],
diff --git a/.omc/sessions/94834f07-4375-45f9-b0d8-3e7a91395e8f.json b/.omc/sessions/94834f07-4375-45f9-b0d8-3e7a91395e8f.json
new file mode 100644
index 0000000..d2a45b9
--- /dev/null
+++ b/.omc/sessions/94834f07-4375-45f9-b0d8-3e7a91395e8f.json
@@ -0,0 +1,8 @@
+{
+ "session_id": "94834f07-4375-45f9-b0d8-3e7a91395e8f",
+ "ended_at": "2026-05-07T04:05:46.804Z",
+ "reason": "prompt_input_exit",
+ "agents_spawned": 15,
+ "agents_completed": 14,
+ "modes_used": []
+}
\ No newline at end of file
diff --git a/.omc/sessions/e5f480d6-2b75-4bfe-b154-b1e53e34e0a3.json b/.omc/sessions/e5f480d6-2b75-4bfe-b154-b1e53e34e0a3.json
new file mode 100644
index 0000000..514ce4a
--- /dev/null
+++ b/.omc/sessions/e5f480d6-2b75-4bfe-b154-b1e53e34e0a3.json
@@ -0,0 +1,8 @@
+{
+ "session_id": "e5f480d6-2b75-4bfe-b154-b1e53e34e0a3",
+ "ended_at": "2026-05-14T02:42:09.203Z",
+ "reason": "prompt_input_exit",
+ "agents_spawned": 0,
+ "agents_completed": 0,
+ "modes_used": []
+}
\ No newline at end of file
diff --git a/.omc/state/agent-replay-94834f07-4375-45f9-b0d8-3e7a91395e8f.jsonl b/.omc/state/agent-replay-94834f07-4375-45f9-b0d8-3e7a91395e8f.jsonl
deleted file mode 100644
index 46564ba..0000000
--- a/.omc/state/agent-replay-94834f07-4375-45f9-b0d8-3e7a91395e8f.jsonl
+++ /dev/null
@@ -1,95 +0,0 @@
-{"t":0,"agent":"ade9261","agent_type":"fork","event":"agent_start","parent_mode":"none"}
-{"t":0,"agent":"a4b5aad","agent_type":"fork","event":"agent_start","parent_mode":"none"}
-{"t":0,"agent":"a104ef8","agent_type":"fork","event":"agent_start","parent_mode":"none"}
-{"t":0,"agent":"a4c6388","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"adc93f5","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"a8606b2","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"af35d14","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"a261e73","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"acef11f","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"a571fa7","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"a297250","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"a124be4","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"a131297","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"ae0fc7a","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"ac40e63","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"aa0080c","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"aad1a0a","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"afce4e2","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"a7e6113","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"a0590f1","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"a6f3810","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"a255c75","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"a4a30a2","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"a165902","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"a8859ee","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"a11a614","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"a9cb2dd","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"a8a58ba","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"a8d86e8","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"a01fdbd","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"aebaf8e","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"a6b5bfa","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"a316247","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"a12a161","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"a8f7b2c","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"ade9261","agent_type":"fork","event":"agent_stop","success":true,"duration_ms":656345}
-{"t":0,"agent":"a678073","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"a741600","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"ab2b460","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"ad7cf0f","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"a4b5aad","agent_type":"fork","event":"agent_stop","success":true,"duration_ms":738755}
-{"t":0,"agent":"ab374a5","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"a007485","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"a994226","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"a55deb4","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"ad24b40","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"a89f2ae","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"a1e2f4c","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"a34d6ab","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"a989a9d","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"a104ef8","agent_type":"fork","event":"agent_stop","success":true,"duration_ms":1115685}
-{"t":0,"agent":"a98f0bd","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"aba2ef2","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"a2a7ceb","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"a034dc2","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"a4cc262","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"a5b9932","agent_type":"fork","event":"agent_start","parent_mode":"none"}
-{"t":0,"agent":"a105a90","agent_type":"fork","event":"agent_start","parent_mode":"none"}
-{"t":0,"agent":"a56af70","agent_type":"fork","event":"agent_start","parent_mode":"none"}
-{"t":0,"agent":"a427839","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"a49dd76","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"a4bda0e","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"a9970b5","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"a8da033","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"a1f3b1b","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"a9ba877","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"aa0d819","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"a79f02d","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"ad3b81c","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"aca8182","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"aed8490","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"a5b9932","agent_type":"fork","event":"agent_stop","success":true,"duration_ms":204749}
-{"t":0,"agent":"a81f94e","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"a105a90","agent_type":"fork","event":"agent_stop","success":true,"duration_ms":214097}
-{"t":0,"agent":"a4dfee9","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"a99405e","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"af606f8","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"a8de9bc","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"aa7b9c6","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"aed75f8","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"ae3a10e","agent_type":"Explore","event":"agent_start","parent_mode":"none"}
-{"t":0,"agent":"a56af70","agent_type":"fork","event":"agent_stop","success":true,"duration_ms":357026}
-{"t":0,"agent":"ae9660b","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"ae3a10e","agent_type":"Explore","event":"agent_stop","success":true,"duration_ms":52349}
-{"t":0,"agent":"a0702f4","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"a7b8d11","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"ae38803","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"ac8967a","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"a74f381","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"a8c023c","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"a106f58","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"ae7178f","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"aacfce0","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"a55df33","agent_type":"unknown","event":"agent_stop","success":true}
-{"t":0,"agent":"ad63ce0","agent_type":"unknown","event":"agent_stop","success":true}
diff --git a/.omc/state/agent-replay-e564571a-2c3e-4064-a3bb-d2ba1fb5c94e.jsonl b/.omc/state/agent-replay-e564571a-2c3e-4064-a3bb-d2ba1fb5c94e.jsonl
new file mode 100644
index 0000000..d7b4f20
--- /dev/null
+++ b/.omc/state/agent-replay-e564571a-2c3e-4064-a3bb-d2ba1fb5c94e.jsonl
@@ -0,0 +1,37 @@
+{"t":0,"agent":"a52ff9b","agent_type":"verification","event":"agent_start","parent_mode":"none"}
+{"t":0,"agent":"ab1174d","agent_type":"unknown","event":"agent_stop","success":true}
+{"t":0,"agent":"a326c52","agent_type":"unknown","event":"agent_stop","success":true}
+{"t":0,"agent":"a32446a","agent_type":"unknown","event":"agent_stop","success":true}
+{"t":0,"agent":"a52ff9b","agent_type":"verification","event":"agent_stop","success":true,"duration_ms":112580}
+{"t":0,"agent":"a4424f0","agent_type":"unknown","event":"agent_stop","success":true}
+{"t":0,"agent":"a4e64c4","agent_type":"unknown","event":"agent_stop","success":true}
+{"t":0,"agent":"a2c932d","agent_type":"unknown","event":"agent_stop","success":true}
+{"t":0,"agent":"a2e9f82","agent_type":"unknown","event":"agent_stop","success":true}
+{"t":0,"agent":"a8fb1c6","agent_type":"unknown","event":"agent_stop","success":true}
+{"t":0,"agent":"a8a29cb","agent_type":"unknown","event":"agent_stop","success":true}
+{"t":0,"agent":"a4f35b2","agent_type":"unknown","event":"agent_stop","success":true}
+{"t":0,"agent":"a719f1d","agent_type":"unknown","event":"agent_stop","success":true}
+{"t":0,"agent":"a13a58e","agent_type":"unknown","event":"agent_stop","success":true}
+{"t":0,"agent":"ad43c53","agent_type":"unknown","event":"agent_stop","success":true}
+{"t":0,"agent":"a751239","agent_type":"unknown","event":"agent_stop","success":true}
+{"t":0,"agent":"a9abb1a","agent_type":"unknown","event":"agent_stop","success":true}
+{"t":0,"agent":"a1e9a14","agent_type":"unknown","event":"agent_stop","success":true}
+{"t":0,"agent":"a3e3c98","agent_type":"unknown","event":"agent_stop","success":true}
+{"t":0,"agent":"adbcc19","agent_type":"unknown","event":"agent_stop","success":true}
+{"t":0,"agent":"a84e570","agent_type":"unknown","event":"agent_stop","success":true}
+{"t":0,"agent":"a4ea252","agent_type":"unknown","event":"agent_stop","success":true}
+{"t":0,"agent":"a8762a8","agent_type":"unknown","event":"agent_stop","success":true}
+{"t":0,"agent":"a097b1b","agent_type":"unknown","event":"agent_stop","success":true}
+{"t":0,"agent":"ae95a8d","agent_type":"unknown","event":"agent_stop","success":true}
+{"t":0,"agent":"abf1ace","agent_type":"unknown","event":"agent_stop","success":true}
+{"t":0,"agent":"a83c72d","agent_type":"unknown","event":"agent_stop","success":true}
+{"t":0,"agent":"a3e4b31","agent_type":"unknown","event":"agent_stop","success":true}
+{"t":0,"agent":"a750dca","agent_type":"unknown","event":"agent_stop","success":true}
+{"t":0,"agent":"a0e9097","agent_type":"unknown","event":"agent_stop","success":true}
+{"t":0,"agent":"acb1af1","agent_type":"unknown","event":"agent_stop","success":true}
+{"t":0,"agent":"ae8e570","agent_type":"unknown","event":"agent_stop","success":true}
+{"t":0,"agent":"af853e9","agent_type":"unknown","event":"agent_stop","success":true}
+{"t":0,"agent":"acaf2d6","agent_type":"unknown","event":"agent_stop","success":true}
+{"t":0,"agent":"a283fe1","agent_type":"unknown","event":"agent_stop","success":true}
+{"t":0,"agent":"af732d5","agent_type":"unknown","event":"agent_stop","success":true}
+{"t":0,"agent":"a30c404","agent_type":"unknown","event":"agent_stop","success":true}
diff --git a/.omc/state/checkpoints/checkpoint-2026-05-06T03-07-52-974Z.json b/.omc/state/checkpoints/checkpoint-2026-05-06T03-07-52-974Z.json
new file mode 100644
index 0000000..bbf8edd
--- /dev/null
+++ b/.omc/state/checkpoints/checkpoint-2026-05-06T03-07-52-974Z.json
@@ -0,0 +1,16 @@
+{
+ "created_at": "2026-05-06T03:07:52.973Z",
+ "trigger": "auto",
+ "active_modes": {},
+ "todo_summary": {
+ "pending": 0,
+ "in_progress": 0,
+ "completed": 0
+ },
+ "wisdom_exported": false,
+ "background_jobs": {
+ "active": [],
+ "recent": [],
+ "stats": null
+ }
+}
\ No newline at end of file
diff --git a/.omc/state/checkpoints/checkpoint-2026-05-06T03-10-31-066Z.json b/.omc/state/checkpoints/checkpoint-2026-05-06T03-10-31-066Z.json
new file mode 100644
index 0000000..552228b
--- /dev/null
+++ b/.omc/state/checkpoints/checkpoint-2026-05-06T03-10-31-066Z.json
@@ -0,0 +1,16 @@
+{
+ "created_at": "2026-05-06T03:10:31.065Z",
+ "trigger": "auto",
+ "active_modes": {},
+ "todo_summary": {
+ "pending": 0,
+ "in_progress": 0,
+ "completed": 0
+ },
+ "wisdom_exported": false,
+ "background_jobs": {
+ "active": [],
+ "recent": [],
+ "stats": null
+ }
+}
\ No newline at end of file
diff --git a/.omc/state/checkpoints/checkpoint-2026-05-06T04-26-08-868Z.json b/.omc/state/checkpoints/checkpoint-2026-05-06T04-26-08-868Z.json
new file mode 100644
index 0000000..c8b4b5b
--- /dev/null
+++ b/.omc/state/checkpoints/checkpoint-2026-05-06T04-26-08-868Z.json
@@ -0,0 +1,16 @@
+{
+ "created_at": "2026-05-06T04:26:08.867Z",
+ "trigger": "auto",
+ "active_modes": {},
+ "todo_summary": {
+ "pending": 0,
+ "in_progress": 0,
+ "completed": 0
+ },
+ "wisdom_exported": false,
+ "background_jobs": {
+ "active": [],
+ "recent": [],
+ "stats": null
+ }
+}
\ No newline at end of file
diff --git a/.omc/state/checkpoints/checkpoint-2026-05-06T04-40-11-215Z.json b/.omc/state/checkpoints/checkpoint-2026-05-06T04-40-11-215Z.json
new file mode 100644
index 0000000..4e86c24
--- /dev/null
+++ b/.omc/state/checkpoints/checkpoint-2026-05-06T04-40-11-215Z.json
@@ -0,0 +1,16 @@
+{
+ "created_at": "2026-05-06T04:40:11.214Z",
+ "trigger": "auto",
+ "active_modes": {},
+ "todo_summary": {
+ "pending": 0,
+ "in_progress": 0,
+ "completed": 0
+ },
+ "wisdom_exported": false,
+ "background_jobs": {
+ "active": [],
+ "recent": [],
+ "stats": null
+ }
+}
\ No newline at end of file
diff --git a/.omc/state/checkpoints/checkpoint-2026-05-06T06-48-58-221Z.json b/.omc/state/checkpoints/checkpoint-2026-05-06T06-48-58-221Z.json
new file mode 100644
index 0000000..e41d118
--- /dev/null
+++ b/.omc/state/checkpoints/checkpoint-2026-05-06T06-48-58-221Z.json
@@ -0,0 +1,16 @@
+{
+ "created_at": "2026-05-06T06:48:58.220Z",
+ "trigger": "auto",
+ "active_modes": {},
+ "todo_summary": {
+ "pending": 0,
+ "in_progress": 0,
+ "completed": 0
+ },
+ "wisdom_exported": false,
+ "background_jobs": {
+ "active": [],
+ "recent": [],
+ "stats": null
+ }
+}
\ No newline at end of file
diff --git a/.omc/state/checkpoints/checkpoint-2026-05-06T11-19-04-928Z.json b/.omc/state/checkpoints/checkpoint-2026-05-06T11-19-04-928Z.json
new file mode 100644
index 0000000..695ccf4
--- /dev/null
+++ b/.omc/state/checkpoints/checkpoint-2026-05-06T11-19-04-928Z.json
@@ -0,0 +1,16 @@
+{
+ "created_at": "2026-05-06T11:19:04.927Z",
+ "trigger": "auto",
+ "active_modes": {},
+ "todo_summary": {
+ "pending": 0,
+ "in_progress": 0,
+ "completed": 0
+ },
+ "wisdom_exported": false,
+ "background_jobs": {
+ "active": [],
+ "recent": [],
+ "stats": null
+ }
+}
\ No newline at end of file
diff --git a/.omc/state/checkpoints/checkpoint-2026-05-07T03-07-55-333Z.json b/.omc/state/checkpoints/checkpoint-2026-05-07T03-07-55-333Z.json
new file mode 100644
index 0000000..0eb8fc5
--- /dev/null
+++ b/.omc/state/checkpoints/checkpoint-2026-05-07T03-07-55-333Z.json
@@ -0,0 +1,16 @@
+{
+ "created_at": "2026-05-07T03:07:55.332Z",
+ "trigger": "auto",
+ "active_modes": {},
+ "todo_summary": {
+ "pending": 0,
+ "in_progress": 0,
+ "completed": 0
+ },
+ "wisdom_exported": false,
+ "background_jobs": {
+ "active": [],
+ "recent": [],
+ "stats": null
+ }
+}
\ No newline at end of file
diff --git a/.omc/state/checkpoints/checkpoint-2026-05-16T04-47-41-599Z.json b/.omc/state/checkpoints/checkpoint-2026-05-16T04-47-41-599Z.json
new file mode 100644
index 0000000..636f9d2
--- /dev/null
+++ b/.omc/state/checkpoints/checkpoint-2026-05-16T04-47-41-599Z.json
@@ -0,0 +1,16 @@
+{
+ "created_at": "2026-05-16T04:47:41.597Z",
+ "trigger": "auto",
+ "active_modes": {},
+ "todo_summary": {
+ "pending": 0,
+ "in_progress": 0,
+ "completed": 0
+ },
+ "wisdom_exported": false,
+ "background_jobs": {
+ "active": [],
+ "recent": [],
+ "stats": null
+ }
+}
\ No newline at end of file
diff --git a/.omc/state/checkpoints/checkpoint-2026-05-16T04-52-02-990Z.json b/.omc/state/checkpoints/checkpoint-2026-05-16T04-52-02-990Z.json
new file mode 100644
index 0000000..abe402a
--- /dev/null
+++ b/.omc/state/checkpoints/checkpoint-2026-05-16T04-52-02-990Z.json
@@ -0,0 +1,16 @@
+{
+ "created_at": "2026-05-16T04:52:02.989Z",
+ "trigger": "auto",
+ "active_modes": {},
+ "todo_summary": {
+ "pending": 0,
+ "in_progress": 0,
+ "completed": 0
+ },
+ "wisdom_exported": false,
+ "background_jobs": {
+ "active": [],
+ "recent": [],
+ "stats": null
+ }
+}
\ No newline at end of file
diff --git a/.omc/state/checkpoints/checkpoint-2026-05-16T04-57-33-690Z.json b/.omc/state/checkpoints/checkpoint-2026-05-16T04-57-33-690Z.json
new file mode 100644
index 0000000..9cb94eb
--- /dev/null
+++ b/.omc/state/checkpoints/checkpoint-2026-05-16T04-57-33-690Z.json
@@ -0,0 +1,16 @@
+{
+ "created_at": "2026-05-16T04:57:33.689Z",
+ "trigger": "auto",
+ "active_modes": {},
+ "todo_summary": {
+ "pending": 0,
+ "in_progress": 0,
+ "completed": 0
+ },
+ "wisdom_exported": false,
+ "background_jobs": {
+ "active": [],
+ "recent": [],
+ "stats": null
+ }
+}
\ No newline at end of file
diff --git a/.omc/state/checkpoints/checkpoint-2026-05-16T05-10-05-736Z.json b/.omc/state/checkpoints/checkpoint-2026-05-16T05-10-05-736Z.json
new file mode 100644
index 0000000..7507281
--- /dev/null
+++ b/.omc/state/checkpoints/checkpoint-2026-05-16T05-10-05-736Z.json
@@ -0,0 +1,16 @@
+{
+ "created_at": "2026-05-16T05:10:05.734Z",
+ "trigger": "auto",
+ "active_modes": {},
+ "todo_summary": {
+ "pending": 0,
+ "in_progress": 0,
+ "completed": 0
+ },
+ "wisdom_exported": false,
+ "background_jobs": {
+ "active": [],
+ "recent": [],
+ "stats": null
+ }
+}
\ No newline at end of file
diff --git a/.omc/state/checkpoints/checkpoint-2026-05-18T01-59-16-903Z.json b/.omc/state/checkpoints/checkpoint-2026-05-18T01-59-16-903Z.json
new file mode 100644
index 0000000..63de41b
--- /dev/null
+++ b/.omc/state/checkpoints/checkpoint-2026-05-18T01-59-16-903Z.json
@@ -0,0 +1,16 @@
+{
+ "created_at": "2026-05-18T01:59:16.902Z",
+ "trigger": "auto",
+ "active_modes": {},
+ "todo_summary": {
+ "pending": 0,
+ "in_progress": 0,
+ "completed": 0
+ },
+ "wisdom_exported": false,
+ "background_jobs": {
+ "active": [],
+ "recent": [],
+ "stats": null
+ }
+}
\ No newline at end of file
diff --git a/.omc/state/last-tool-error.json b/.omc/state/last-tool-error.json
index c68810e..dfcb1a1 100644
--- a/.omc/state/last-tool-error.json
+++ b/.omc/state/last-tool-error.json
@@ -1,7 +1,7 @@
{
- "tool_name": "Write",
- "tool_input_preview": "{\"file_path\":\"/Users/kunthawatgleethong/Gitea/moreminimore-emdash/moreminimore-site/src/utils/site-identity.ts\",\"content\":\"import { emdash } from \\\"emdash/astro\\\";\\nimport type { CollectionEntry } fro...",
- "error": "EACCES: permission denied, mkdir '/Users/kunthawatgleethong'",
- "timestamp": "2026-05-06T03:03:02.581Z",
+ "tool_name": "Read",
+ "tool_input_preview": "{\"file_path\":\"/Users/kunthawatgreethong/.openclaude/projects/-Users-kunthawat-gith-Gitea-moreminimore-emdash/memory/private/redesign-2026-05-13.md\"}",
+ "error": "File does not exist. Note: your current working directory is /Users/kunthawatgreethong/Gitea/moreminimore-emdash/moreminimore-site.",
+ "timestamp": "2026-05-16T09:37:19.453Z",
"retry_count": 1
}
\ No newline at end of file
diff --git a/.omc/state/mission-state.json b/.omc/state/mission-state.json
index 5743f0a..be5a150 100644
--- a/.omc/state/mission-state.json
+++ b/.omc/state/mission-state.json
@@ -1,231 +1,331 @@
{
- "updatedAt": "2026-05-06T02:55:08.166Z",
+ "updatedAt": "2026-05-18T02:00:05.002Z",
"missions": [
{
- "id": "session:94834f07-4375-45f9-b0d8-3e7a91395e8f:none",
+ "id": "session:e564571a-2c3e-4064-a3bb-d2ba1fb5c94e:none",
"source": "session",
"name": "none",
"objective": "Session mission",
- "createdAt": "2026-05-05T06:50:59.238Z",
- "updatedAt": "2026-05-06T02:55:08.166Z",
+ "createdAt": "2026-05-16T02:09:52.147Z",
+ "updatedAt": "2026-05-18T02:00:05.002Z",
"status": "done",
- "workerCount": 7,
+ "workerCount": 1,
"taskCounts": {
- "total": 7,
+ "total": 1,
"pending": 0,
"blocked": 0,
"inProgress": 0,
- "completed": 7,
+ "completed": 1,
"failed": 0
},
"agents": [
{
- "name": "fork:ade9261",
- "role": "fork",
- "ownership": "ade926181d79f7e22",
+ "name": "verification:a52ff9b",
+ "role": "verification",
+ "ownership": "a52ff9b6cf94795c4",
"status": "done",
"currentStep": null,
"latestUpdate": "completed",
"completedSummary": null,
- "updatedAt": "2026-05-06T02:55:08.166Z"
- },
- {
- "name": "fork:a4b5aad",
- "role": "fork",
- "ownership": "a4b5aad918d840cff",
- "status": "done",
- "currentStep": null,
- "latestUpdate": "completed",
- "completedSummary": null,
- "updatedAt": "2026-05-05T07:03:18.034Z"
- },
- {
- "name": "fork:a104ef8",
- "role": "fork",
- "ownership": "a104ef8dcedc591ee",
- "status": "done",
- "currentStep": null,
- "latestUpdate": "completed",
- "completedSummary": null,
- "updatedAt": "2026-05-05T07:09:34.992Z"
- },
- {
- "name": "fork:a5b9932",
- "role": "fork",
- "ownership": "a5b99323f956d7d4b",
- "status": "done",
- "currentStep": null,
- "latestUpdate": "completed",
- "completedSummary": null,
- "updatedAt": "2026-05-05T12:29:50.254Z"
- },
- {
- "name": "fork:a105a90",
- "role": "fork",
- "ownership": "a105a90f66e16a0fe",
- "status": "done",
- "currentStep": null,
- "latestUpdate": "completed",
- "completedSummary": null,
- "updatedAt": "2026-05-05T12:29:59.631Z"
- },
- {
- "name": "fork:a56af70",
- "role": "fork",
- "ownership": "a56af702c99ca12f9",
- "status": "done",
- "currentStep": null,
- "latestUpdate": "completed",
- "completedSummary": null,
- "updatedAt": "2026-05-05T12:32:22.586Z"
- },
- {
- "name": "Explore:ae3a10e",
- "role": "Explore",
- "ownership": "ae3a10eff79730260",
- "status": "done",
- "currentStep": null,
- "latestUpdate": "completed",
- "completedSummary": null,
- "updatedAt": "2026-05-05T12:32:59.412Z"
+ "updatedAt": "2026-05-18T02:00:05.002Z"
}
],
"timeline": [
{
- "id": "session-stop:aa7b9c61b8d8fa05e:2026-05-05T12:31:57.422Z",
- "at": "2026-05-05T12:31:57.422Z",
- "kind": "completion",
- "agent": "fork:ade9261",
- "detail": "completed",
- "sourceKey": "session-stop:aa7b9c61b8d8fa05e"
- },
- {
- "id": "session-stop:aed75f8c5b76a5a06:2026-05-05T12:32:02.929Z",
- "at": "2026-05-05T12:32:02.929Z",
- "kind": "completion",
- "agent": "fork:ade9261",
- "detail": "completed",
- "sourceKey": "session-stop:aed75f8c5b76a5a06"
- },
- {
- "id": "session-start:ae3a10eff79730260:2026-05-05T12:32:07.063Z",
- "at": "2026-05-05T12:32:07.063Z",
+ "id": "session-start:a52ff9b6cf94795c4:2026-05-16T02:09:52.147Z",
+ "at": "2026-05-16T02:09:52.147Z",
"kind": "update",
- "agent": "Explore:ae3a10e",
- "detail": "started Explore:ae3a10e",
- "sourceKey": "session-start:ae3a10eff79730260"
+ "agent": "verification:a52ff9b",
+ "detail": "started verification:a52ff9b",
+ "sourceKey": "session-start:a52ff9b6cf94795c4"
},
{
- "id": "session-stop:a56af702c99ca12f9:2026-05-05T12:32:22.586Z",
- "at": "2026-05-05T12:32:22.586Z",
+ "id": "session-stop:ab1174d3ce0e6376a:2026-05-16T02:10:26.984Z",
+ "at": "2026-05-16T02:10:26.984Z",
"kind": "completion",
- "agent": "fork:a56af70",
+ "agent": "verification:a52ff9b",
"detail": "completed",
- "sourceKey": "session-stop:a56af702c99ca12f9"
+ "sourceKey": "session-stop:ab1174d3ce0e6376a"
},
{
- "id": "session-stop:ae9660bca33bb7788:2026-05-05T12:32:45.962Z",
- "at": "2026-05-05T12:32:45.962Z",
+ "id": "session-stop:a326c52dfaacc2663:2026-05-16T02:11:05.215Z",
+ "at": "2026-05-16T02:11:05.215Z",
"kind": "completion",
- "agent": "fork:ade9261",
+ "agent": "verification:a52ff9b",
"detail": "completed",
- "sourceKey": "session-stop:ae9660bca33bb7788"
+ "sourceKey": "session-stop:a326c52dfaacc2663"
},
{
- "id": "session-stop:ae3a10eff79730260:2026-05-05T12:32:59.412Z",
- "at": "2026-05-05T12:32:59.412Z",
+ "id": "session-stop:a32446a1150ab0b9a:2026-05-16T02:11:40.694Z",
+ "at": "2026-05-16T02:11:40.694Z",
"kind": "completion",
- "agent": "Explore:ae3a10e",
+ "agent": "verification:a52ff9b",
"detail": "completed",
- "sourceKey": "session-stop:ae3a10eff79730260"
+ "sourceKey": "session-stop:a32446a1150ab0b9a"
},
{
- "id": "session-stop:a0702f4cc61206062:2026-05-05T12:33:26.229Z",
- "at": "2026-05-05T12:33:26.229Z",
+ "id": "session-stop:a52ff9b6cf94795c4:2026-05-16T02:11:44.727Z",
+ "at": "2026-05-16T02:11:44.727Z",
"kind": "completion",
- "agent": "fork:ade9261",
+ "agent": "verification:a52ff9b",
"detail": "completed",
- "sourceKey": "session-stop:a0702f4cc61206062"
+ "sourceKey": "session-stop:a52ff9b6cf94795c4"
},
{
- "id": "session-stop:a7b8d11ec5adbf4dd:2026-05-05T12:34:01.769Z",
- "at": "2026-05-05T12:34:01.769Z",
+ "id": "session-stop:a4424f0af5bcdfbb7:2026-05-16T02:12:32.776Z",
+ "at": "2026-05-16T02:12:32.776Z",
"kind": "completion",
- "agent": "fork:ade9261",
+ "agent": "verification:a52ff9b",
"detail": "completed",
- "sourceKey": "session-stop:a7b8d11ec5adbf4dd"
+ "sourceKey": "session-stop:a4424f0af5bcdfbb7"
},
{
- "id": "session-stop:ae38803ce1dae768c:2026-05-05T12:34:57.078Z",
- "at": "2026-05-05T12:34:57.078Z",
+ "id": "session-stop:a4e64c457512e19a0:2026-05-16T03:44:04.372Z",
+ "at": "2026-05-16T03:44:04.372Z",
"kind": "completion",
- "agent": "fork:ade9261",
+ "agent": "verification:a52ff9b",
"detail": "completed",
- "sourceKey": "session-stop:ae38803ce1dae768c"
+ "sourceKey": "session-stop:a4e64c457512e19a0"
},
{
- "id": "session-stop:ac8967a5f624630b2:2026-05-05T13:12:36.634Z",
- "at": "2026-05-05T13:12:36.634Z",
+ "id": "session-stop:a2c932d87c4d902c4:2026-05-16T03:46:03.749Z",
+ "at": "2026-05-16T03:46:03.749Z",
"kind": "completion",
- "agent": "fork:ade9261",
+ "agent": "verification:a52ff9b",
"detail": "completed",
- "sourceKey": "session-stop:ac8967a5f624630b2"
+ "sourceKey": "session-stop:a2c932d87c4d902c4"
},
{
- "id": "session-stop:a74f3816c08a6f716:2026-05-05T13:21:12.812Z",
- "at": "2026-05-05T13:21:12.812Z",
+ "id": "session-stop:a2e9f825aee21bb1d:2026-05-16T03:50:56.609Z",
+ "at": "2026-05-16T03:50:56.609Z",
"kind": "completion",
- "agent": "fork:ade9261",
+ "agent": "verification:a52ff9b",
"detail": "completed",
- "sourceKey": "session-stop:a74f3816c08a6f716"
+ "sourceKey": "session-stop:a2e9f825aee21bb1d"
},
{
- "id": "session-stop:a8c023c9a30c271a0:2026-05-05T14:19:49.676Z",
- "at": "2026-05-05T14:19:49.676Z",
+ "id": "session-stop:a8fb1c6790f526ace:2026-05-16T04:44:36.486Z",
+ "at": "2026-05-16T04:44:36.486Z",
"kind": "completion",
- "agent": "fork:ade9261",
+ "agent": "verification:a52ff9b",
"detail": "completed",
- "sourceKey": "session-stop:a8c023c9a30c271a0"
+ "sourceKey": "session-stop:a8fb1c6790f526ace"
},
{
- "id": "session-stop:a106f58695dd12bb4:2026-05-05T15:37:58.942Z",
- "at": "2026-05-05T15:37:58.942Z",
+ "id": "session-stop:a8a29cb24b3982a84:2026-05-16T04:48:05.848Z",
+ "at": "2026-05-16T04:48:05.848Z",
"kind": "completion",
- "agent": "fork:ade9261",
+ "agent": "verification:a52ff9b",
"detail": "completed",
- "sourceKey": "session-stop:a106f58695dd12bb4"
+ "sourceKey": "session-stop:a8a29cb24b3982a84"
},
{
- "id": "session-stop:ae7178f1d50a672fe:2026-05-06T02:26:35.999Z",
- "at": "2026-05-06T02:26:35.999Z",
+ "id": "session-stop:a4f35b214ca428a48:2026-05-16T04:52:38.351Z",
+ "at": "2026-05-16T04:52:38.351Z",
"kind": "completion",
- "agent": "fork:ade9261",
+ "agent": "verification:a52ff9b",
"detail": "completed",
- "sourceKey": "session-stop:ae7178f1d50a672fe"
+ "sourceKey": "session-stop:a4f35b214ca428a48"
},
{
- "id": "session-stop:aacfce063672189e4:2026-05-06T02:51:18.289Z",
- "at": "2026-05-06T02:51:18.289Z",
+ "id": "session-stop:a719f1de7ab6a0fb0:2026-05-16T04:57:57.367Z",
+ "at": "2026-05-16T04:57:57.367Z",
"kind": "completion",
- "agent": "fork:ade9261",
+ "agent": "verification:a52ff9b",
"detail": "completed",
- "sourceKey": "session-stop:aacfce063672189e4"
+ "sourceKey": "session-stop:a719f1de7ab6a0fb0"
},
{
- "id": "session-stop:a55df33c9fc0b4fd3:2026-05-06T02:53:34.397Z",
- "at": "2026-05-06T02:53:34.397Z",
+ "id": "session-stop:a13a58ec501ffc2b3:2026-05-16T05:10:32.559Z",
+ "at": "2026-05-16T05:10:32.559Z",
"kind": "completion",
- "agent": "fork:ade9261",
+ "agent": "verification:a52ff9b",
"detail": "completed",
- "sourceKey": "session-stop:a55df33c9fc0b4fd3"
+ "sourceKey": "session-stop:a13a58ec501ffc2b3"
},
{
- "id": "session-stop:ad63ce0e956a53a8d:2026-05-06T02:55:08.166Z",
- "at": "2026-05-06T02:55:08.166Z",
+ "id": "session-stop:ad43c537c8c993dc6:2026-05-16T05:11:56.308Z",
+ "at": "2026-05-16T05:11:56.308Z",
"kind": "completion",
- "agent": "fork:ade9261",
+ "agent": "verification:a52ff9b",
"detail": "completed",
- "sourceKey": "session-stop:ad63ce0e956a53a8d"
+ "sourceKey": "session-stop:ad43c537c8c993dc6"
+ },
+ {
+ "id": "session-stop:a7512397a57893c73:2026-05-16T05:20:51.866Z",
+ "at": "2026-05-16T05:20:51.866Z",
+ "kind": "completion",
+ "agent": "verification:a52ff9b",
+ "detail": "completed",
+ "sourceKey": "session-stop:a7512397a57893c73"
+ },
+ {
+ "id": "session-stop:a9abb1a7ba9bc3b0f:2026-05-16T06:11:49.823Z",
+ "at": "2026-05-16T06:11:49.823Z",
+ "kind": "completion",
+ "agent": "verification:a52ff9b",
+ "detail": "completed",
+ "sourceKey": "session-stop:a9abb1a7ba9bc3b0f"
+ },
+ {
+ "id": "session-stop:a1e9a14b490e8f03c:2026-05-16T06:12:27.391Z",
+ "at": "2026-05-16T06:12:27.391Z",
+ "kind": "completion",
+ "agent": "verification:a52ff9b",
+ "detail": "completed",
+ "sourceKey": "session-stop:a1e9a14b490e8f03c"
+ },
+ {
+ "id": "session-stop:a3e3c98cf768d8aa0:2026-05-16T06:12:59.980Z",
+ "at": "2026-05-16T06:12:59.980Z",
+ "kind": "completion",
+ "agent": "verification:a52ff9b",
+ "detail": "completed",
+ "sourceKey": "session-stop:a3e3c98cf768d8aa0"
+ },
+ {
+ "id": "session-stop:adbcc195235331236:2026-05-16T06:15:45.894Z",
+ "at": "2026-05-16T06:15:45.894Z",
+ "kind": "completion",
+ "agent": "verification:a52ff9b",
+ "detail": "completed",
+ "sourceKey": "session-stop:adbcc195235331236"
+ },
+ {
+ "id": "session-stop:a84e570ccb7854adb:2026-05-16T06:34:42.994Z",
+ "at": "2026-05-16T06:34:42.994Z",
+ "kind": "completion",
+ "agent": "verification:a52ff9b",
+ "detail": "completed",
+ "sourceKey": "session-stop:a84e570ccb7854adb"
+ },
+ {
+ "id": "session-stop:a4ea252627eab107b:2026-05-16T06:40:17.399Z",
+ "at": "2026-05-16T06:40:17.399Z",
+ "kind": "completion",
+ "agent": "verification:a52ff9b",
+ "detail": "completed",
+ "sourceKey": "session-stop:a4ea252627eab107b"
+ },
+ {
+ "id": "session-stop:a8762a81d3925b3c0:2026-05-16T06:45:23.942Z",
+ "at": "2026-05-16T06:45:23.942Z",
+ "kind": "completion",
+ "agent": "verification:a52ff9b",
+ "detail": "completed",
+ "sourceKey": "session-stop:a8762a81d3925b3c0"
+ },
+ {
+ "id": "session-stop:a097b1be116b4a6da:2026-05-16T07:33:01.473Z",
+ "at": "2026-05-16T07:33:01.473Z",
+ "kind": "completion",
+ "agent": "verification:a52ff9b",
+ "detail": "completed",
+ "sourceKey": "session-stop:a097b1be116b4a6da"
+ },
+ {
+ "id": "session-stop:ae95a8dd07cb77b4f:2026-05-16T07:37:15.058Z",
+ "at": "2026-05-16T07:37:15.058Z",
+ "kind": "completion",
+ "agent": "verification:a52ff9b",
+ "detail": "completed",
+ "sourceKey": "session-stop:ae95a8dd07cb77b4f"
+ },
+ {
+ "id": "session-stop:abf1acec7a6b7c672:2026-05-16T07:41:57.877Z",
+ "at": "2026-05-16T07:41:57.877Z",
+ "kind": "completion",
+ "agent": "verification:a52ff9b",
+ "detail": "completed",
+ "sourceKey": "session-stop:abf1acec7a6b7c672"
+ },
+ {
+ "id": "session-stop:a83c72d7cb732f30a:2026-05-16T08:00:50.958Z",
+ "at": "2026-05-16T08:00:50.958Z",
+ "kind": "completion",
+ "agent": "verification:a52ff9b",
+ "detail": "completed",
+ "sourceKey": "session-stop:a83c72d7cb732f30a"
+ },
+ {
+ "id": "session-stop:a3e4b31964d5865f7:2026-05-16T08:02:01.794Z",
+ "at": "2026-05-16T08:02:01.794Z",
+ "kind": "completion",
+ "agent": "verification:a52ff9b",
+ "detail": "completed",
+ "sourceKey": "session-stop:a3e4b31964d5865f7"
+ },
+ {
+ "id": "session-stop:a750dca8b7d4d9bb0:2026-05-16T08:13:02.231Z",
+ "at": "2026-05-16T08:13:02.231Z",
+ "kind": "completion",
+ "agent": "verification:a52ff9b",
+ "detail": "completed",
+ "sourceKey": "session-stop:a750dca8b7d4d9bb0"
+ },
+ {
+ "id": "session-stop:a0e90972e5385031c:2026-05-16T08:47:33.581Z",
+ "at": "2026-05-16T08:47:33.581Z",
+ "kind": "completion",
+ "agent": "verification:a52ff9b",
+ "detail": "completed",
+ "sourceKey": "session-stop:a0e90972e5385031c"
+ },
+ {
+ "id": "session-stop:acb1af1db3cee786f:2026-05-16T08:53:57.581Z",
+ "at": "2026-05-16T08:53:57.581Z",
+ "kind": "completion",
+ "agent": "verification:a52ff9b",
+ "detail": "completed",
+ "sourceKey": "session-stop:acb1af1db3cee786f"
+ },
+ {
+ "id": "session-stop:ae8e570fc783ce7da:2026-05-16T09:02:19.043Z",
+ "at": "2026-05-16T09:02:19.043Z",
+ "kind": "completion",
+ "agent": "verification:a52ff9b",
+ "detail": "completed",
+ "sourceKey": "session-stop:ae8e570fc783ce7da"
+ },
+ {
+ "id": "session-stop:af853e9569fe63346:2026-05-16T09:38:01.968Z",
+ "at": "2026-05-16T09:38:01.968Z",
+ "kind": "completion",
+ "agent": "verification:a52ff9b",
+ "detail": "completed",
+ "sourceKey": "session-stop:af853e9569fe63346"
+ },
+ {
+ "id": "session-stop:acaf2d63b8969c2b4:2026-05-17T01:59:59.881Z",
+ "at": "2026-05-17T01:59:59.881Z",
+ "kind": "completion",
+ "agent": "verification:a52ff9b",
+ "detail": "completed",
+ "sourceKey": "session-stop:acaf2d63b8969c2b4"
+ },
+ {
+ "id": "session-stop:a283fe1f1198a1755:2026-05-17T03:21:31.300Z",
+ "at": "2026-05-17T03:21:31.300Z",
+ "kind": "completion",
+ "agent": "verification:a52ff9b",
+ "detail": "completed",
+ "sourceKey": "session-stop:a283fe1f1198a1755"
+ },
+ {
+ "id": "session-stop:af732d50454684b9c:2026-05-17T03:43:23.370Z",
+ "at": "2026-05-17T03:43:23.370Z",
+ "kind": "completion",
+ "agent": "verification:a52ff9b",
+ "detail": "completed",
+ "sourceKey": "session-stop:af732d50454684b9c"
+ },
+ {
+ "id": "session-stop:a30c4047709401e71:2026-05-18T02:00:05.002Z",
+ "at": "2026-05-18T02:00:05.002Z",
+ "kind": "completion",
+ "agent": "verification:a52ff9b",
+ "detail": "completed",
+ "sourceKey": "session-stop:a30c4047709401e71"
}
]
}
diff --git a/.omc/state/sessions/e564571a-2c3e-4064-a3bb-d2ba1fb5c94e/session-started.json b/.omc/state/sessions/e564571a-2c3e-4064-a3bb-d2ba1fb5c94e/session-started.json
new file mode 100644
index 0000000..4adc205
--- /dev/null
+++ b/.omc/state/sessions/e564571a-2c3e-4064-a3bb-d2ba1fb5c94e/session-started.json
@@ -0,0 +1,6 @@
+{
+ "session_id": "e564571a-2c3e-4064-a3bb-d2ba1fb5c94e",
+ "started_at": "2026-05-18T02:00:05.364Z",
+ "cwd": "/Users/kunthawatgreethong/Gitea/moreminimore-emdash/moreminimore-site",
+ "pid": 83099
+}
\ No newline at end of file
diff --git a/.omc/state/subagent-tracking.json b/.omc/state/subagent-tracking.json
index 5c74049..8dbeb98 100644
--- a/.omc/state/subagent-tracking.json
+++ b/.omc/state/subagent-tracking.json
@@ -1,71 +1,17 @@
{
"agents": [
{
- "agent_id": "ade926181d79f7e22",
- "agent_type": "fork",
- "started_at": "2026-05-05T06:50:59.238Z",
+ "agent_id": "a52ff9b6cf94795c4",
+ "agent_type": "verification",
+ "started_at": "2026-05-16T02:09:52.147Z",
"parent_mode": "none",
"status": "completed",
- "completed_at": "2026-05-05T07:01:55.583Z",
- "duration_ms": 656345
- },
- {
- "agent_id": "a4b5aad918d840cff",
- "agent_type": "fork",
- "started_at": "2026-05-05T06:50:59.279Z",
- "parent_mode": "none",
- "status": "completed",
- "completed_at": "2026-05-05T07:03:18.034Z",
- "duration_ms": 738755
- },
- {
- "agent_id": "a104ef8dcedc591ee",
- "agent_type": "fork",
- "started_at": "2026-05-05T06:50:59.307Z",
- "parent_mode": "none",
- "status": "completed",
- "completed_at": "2026-05-05T07:09:34.992Z",
- "duration_ms": 1115685
- },
- {
- "agent_id": "a5b99323f956d7d4b",
- "agent_type": "fork",
- "started_at": "2026-05-05T12:26:25.505Z",
- "parent_mode": "none",
- "status": "completed",
- "completed_at": "2026-05-05T12:29:50.254Z",
- "duration_ms": 204749
- },
- {
- "agent_id": "a105a90f66e16a0fe",
- "agent_type": "fork",
- "started_at": "2026-05-05T12:26:25.534Z",
- "parent_mode": "none",
- "status": "completed",
- "completed_at": "2026-05-05T12:29:59.631Z",
- "duration_ms": 214097
- },
- {
- "agent_id": "a56af702c99ca12f9",
- "agent_type": "fork",
- "started_at": "2026-05-05T12:26:25.560Z",
- "parent_mode": "none",
- "status": "completed",
- "completed_at": "2026-05-05T12:32:22.586Z",
- "duration_ms": 357026
- },
- {
- "agent_id": "ae3a10eff79730260",
- "agent_type": "Explore",
- "started_at": "2026-05-05T12:32:07.063Z",
- "parent_mode": "none",
- "status": "completed",
- "completed_at": "2026-05-05T12:32:59.412Z",
- "duration_ms": 52349
+ "completed_at": "2026-05-16T02:11:44.727Z",
+ "duration_ms": 112580
}
],
- "total_spawned": 3,
- "total_completed": 7,
+ "total_spawned": 1,
+ "total_completed": 1,
"total_failed": 0,
- "last_updated": "2026-05-06T02:55:08.267Z"
+ "last_updated": "2026-05-18T02:00:05.104Z"
}
\ No newline at end of file
diff --git a/astro.config.mjs b/astro.config.mjs
index 51b7541..62a6d88 100644
--- a/astro.config.mjs
+++ b/astro.config.mjs
@@ -1,20 +1,27 @@
// @ts-check
import { defineConfig } from 'astro/config';
-import node from "@astrojs/node";
import react from "@astrojs/react";
+import mdx from "@astrojs/mdx";
+import node from "@astrojs/node";
import emdash, { local } from "emdash/astro";
import { sqlite } from "emdash/db";
export default defineConfig({
output: "server",
- adapter: node({ mode: "standalone" }),
- image: { layout: "constrained", responsiveStyles: true },
+ adapter: node({
+ mode: 'standalone'
+ }),
integrations: [
react(),
+ mdx(),
emdash({
database: sqlite({ url: "file:./data.db" }),
- storage: local({ directory: "./uploads", baseUrl: "/_emdash/api/media/file" }),
+ storage: local({
+ directory: "./uploads",
+ baseUrl: "/_emdash/api/media/file",
+ }),
}),
],
- devToolbar: { enabled: false },
+ image: { layout: "constrained", responsiveStyles: true },
+ devToolbar: { enabled: true },
});
\ No newline at end of file
diff --git a/count-cols.cjs b/count-cols.cjs
new file mode 100644
index 0000000..31ab589
--- /dev/null
+++ b/count-cols.cjs
@@ -0,0 +1,19 @@
+const seed = require('./seed/seed.json');
+const Database = require('better-sqlite3');
+const db = new Database('./data.db');
+
+const cols = ['title','subtitle','badge','hero_image',
+ 'feature1_icon','feature1_title','feature1_desc',
+ 'feature2_icon','feature2_title','feature2_desc',
+ 'feature3_icon','feature3_title','feature3_desc',
+ 'feature4_icon','feature4_title','feature4_desc',
+ 'feature5_icon','feature5_title','feature5_desc',
+ 'feature6_icon','feature6_title','feature6_desc'];
+
+const placeholders = cols.map(() => '?').join(', ');
+const sql = `INSERT OR REPLACE INTO ec_services (id, slug, status, ${cols.join(', ')}, created_at, updated_at, published_at) VALUES (?, ?, 'published', ${placeholders}, datetime('now'), datetime('now'), datetime('now'))`;
+
+console.log('Columns:', 3 + cols.length); // id, slug, status + cols
+console.log('SQL placeholders:', (sql.match(/\?/g) || []).length);
+
+db.close();
\ No newline at end of file
diff --git a/data.db b/data.db
index ce1b2bc..0089665 100644
Binary files a/data.db and b/data.db differ
diff --git a/data.db-shm b/data.db-shm
new file mode 100644
index 0000000..fe9ac28
Binary files /dev/null and b/data.db-shm differ
diff --git a/data.db-wal b/data.db-wal
new file mode 100644
index 0000000..e69de29
diff --git a/emdash-env.d.ts b/emdash-env.d.ts
index abb2626..68f6cdc 100644
--- a/emdash-env.d.ts
+++ b/emdash-env.d.ts
@@ -5,11 +5,15 @@
import type { ContentBylineCredit, PortableTextBlock } from "emdash";
-export interface Page {
+export interface Blog {
id: string;
slug: string | null;
status: string;
- title: string;
+ title?: string;
+ excerpt?: string;
+ image?: { id: string; src?: string; alt?: string; width?: number; height?: number; provider?: string; previewUrl?: string; meta?: Record };
+ date?: string;
+ category?: string;
content?: PortableTextBlock[];
createdAt: Date;
updatedAt: Date;
@@ -17,14 +21,83 @@ export interface Page {
bylines?: ContentBylineCredit[];
}
-export interface Post {
+export interface Faq {
id: string;
slug: string | null;
status: string;
- title: string;
- featured_image?: { id: string; src?: string; alt?: string; width?: number; height?: number };
+ category?: string;
+ question?: string;
+ answer?: string;
+ createdAt: Date;
+ updatedAt: Date;
+ publishedAt: Date | null;
+ bylines?: ContentBylineCredit[];
+}
+
+export interface Page {
+ id: string;
+ slug: string | null;
+ status: string;
+ title?: string;
+ subtitle?: string;
+ badge?: string;
+ hero_image?: { id: string; src?: string; alt?: string; width?: number; height?: number; provider?: string; previewUrl?: string; meta?: Record };
+ theme?: string;
+ show_cta?: boolean;
+ cta_text?: string;
+ cta_link?: string;
+ variant?: string;
+ size?: string;
+ createdAt: Date;
+ updatedAt: Date;
+ publishedAt: Date | null;
+ bylines?: ContentBylineCredit[];
+}
+
+export interface Portfolio {
+ id: string;
+ slug: string | null;
+ status: string;
+ name?: string;
+ url?: string;
+ category?: string;
+ category_label?: string;
+ thumbnail?: { id: string; src?: string; alt?: string; width?: number; height?: number; provider?: string; previewUrl?: string; meta?: Record };
+ description?: string;
+ services?: unknown;
+ createdAt: Date;
+ updatedAt: Date;
+ publishedAt: Date | null;
+ bylines?: ContentBylineCredit[];
+}
+
+export interface Service {
+ id: string;
+ slug: string | null;
+ status: string;
+ title?: string;
+ subtitle?: string;
+ badge?: string;
+ hero_image?: { id: string; src?: string; alt?: string; width?: number; height?: number; provider?: string; previewUrl?: string; meta?: Record };
content?: PortableTextBlock[];
- excerpt?: string;
+ features?: unknown;
+ createdAt: Date;
+ updatedAt: Date;
+ publishedAt: Date | null;
+ bylines?: ContentBylineCredit[];
+}
+
+export interface Setting {
+ id: string;
+ slug: string | null;
+ status: string;
+ site_name?: string;
+ email?: string;
+ phone?: string;
+ address?: string;
+ facebook?: string;
+ line?: string;
+ linkedin?: string;
createdAt: Date;
updatedAt: Date;
publishedAt: Date | null;
@@ -33,7 +106,11 @@ export interface Post {
declare module "emdash" {
interface EmDashCollections {
+ blog: Blog;
+ faq: Faq;
pages: Page;
- posts: Post;
+ portfolio: Portfolio;
+ services: Service;
+ settings: Setting;
}
}
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index 6d70ea6..82ceb4e 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -8,10 +8,11 @@
"name": "moreminimore-site",
"version": "0.0.1",
"dependencies": {
- "@astrojs/node": "^10.0.6",
- "@astrojs/react": "^5.0.4",
+ "@astrojs/mdx": "^5.0.6",
+ "@astrojs/node": "^10.1.1",
+ "@astrojs/react": "^5.0.5",
"astro": "^6.2.2",
- "emdash": "^0.9.0",
+ "emdash": "^0.12.0",
"react": "^19.2.5",
"react-dom": "^19.2.5"
},
@@ -26,22 +27,22 @@
"license": "MIT"
},
"node_modules/@astrojs/internal-helpers": {
- "version": "0.9.0",
- "resolved": "https://registry.npmjs.org/@astrojs/internal-helpers/-/internal-helpers-0.9.0.tgz",
- "integrity": "sha512-GdYkzR26re8izmyYlBqf4z2s7zNngmWLFuxw0UKiPNqHraZGS6GKWIwSHgS22RDlu2ePFJ8bzmpBcUszut/SDg==",
+ "version": "0.9.1",
+ "resolved": "https://registry.npmjs.org/@astrojs/internal-helpers/-/internal-helpers-0.9.1.tgz",
+ "integrity": "sha512-1pWuARqYom/TzuU3+0ZugsTrKlUydWKuULmDqSMTuonY+9IRDUEGKX/8PXQ1nBxRq3w85uGtd9q9SXfqEldMIQ==",
"license": "MIT",
"dependencies": {
"picomatch": "^4.0.4"
}
},
"node_modules/@astrojs/markdown-remark": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-7.1.1.tgz",
- "integrity": "sha512-C6e9BnLGlbdv6bV8MYGeHpHxsUHrCrB4OuRLqi5LI7oiBVcBcqfUN06zpwFQdHgV48QCCrMmLpyqBr7VqC+swA==",
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-7.1.2.tgz",
+ "integrity": "sha512-caXZ4Dc2St2dW8luEg22GlP0gupLdztCTQE4EzZOxW1pqWXz9mbeJEuHUkgDYcKWW8tjIHkydYDhWLVoxJ327Q==",
"license": "MIT",
"dependencies": {
- "@astrojs/internal-helpers": "0.9.0",
- "@astrojs/prism": "4.0.1",
+ "@astrojs/internal-helpers": "0.9.1",
+ "@astrojs/prism": "4.0.2",
"github-slugger": "^2.0.0",
"hast-util-from-html": "^2.0.3",
"hast-util-to-text": "^4.0.2",
@@ -63,24 +64,51 @@
"vfile": "^6.0.3"
}
},
- "node_modules/@astrojs/node": {
- "version": "10.0.6",
- "resolved": "https://registry.npmjs.org/@astrojs/node/-/node-10.0.6.tgz",
- "integrity": "sha512-e8JmaP4sGxqvdei14kmBzhAqgd5/L5MTExW3Hks5DOt9LDvGzlsFZwnXVXzWPVjW/PErl7t9uLg7xWhCqfkSrA==",
+ "node_modules/@astrojs/mdx": {
+ "version": "5.0.6",
+ "resolved": "https://registry.npmjs.org/@astrojs/mdx/-/mdx-5.0.6.tgz",
+ "integrity": "sha512-4dKe0ZMmqujofPNDHahzClkwinn9f8jHPcaXcgdGvPAlboD2mjzkUCofli2cBnxYAkdfhC6d50gBJ8i/cH8gHw==",
"license": "MIT",
"dependencies": {
- "@astrojs/internal-helpers": "0.9.0",
- "send": "^1.2.1",
- "server-destroy": "^1.0.1"
+ "@astrojs/markdown-remark": "7.1.2",
+ "@mdx-js/mdx": "^3.1.1",
+ "acorn": "^8.16.0",
+ "es-module-lexer": "^2.0.0",
+ "estree-util-visit": "^2.0.0",
+ "hast-util-to-html": "^9.0.5",
+ "piccolore": "^0.1.3",
+ "rehype-raw": "^7.0.0",
+ "remark-gfm": "^4.0.1",
+ "remark-smartypants": "^3.0.2",
+ "source-map": "^0.7.6",
+ "unist-util-visit": "^5.1.0",
+ "vfile": "^6.0.3"
+ },
+ "engines": {
+ "node": ">=22.12.0"
},
"peerDependencies": {
"astro": "^6.0.0"
}
},
+ "node_modules/@astrojs/node": {
+ "version": "10.1.1",
+ "resolved": "https://registry.npmjs.org/@astrojs/node/-/node-10.1.1.tgz",
+ "integrity": "sha512-kCRbxconkgPpY4vR0GS7exovWEiCbxXLarsp+JeKixyDNf+fKN6v7jXDL8KdQgrzjhy131Kvl+GGGX8jGd8adA==",
+ "license": "MIT",
+ "dependencies": {
+ "@astrojs/internal-helpers": "0.9.1",
+ "send": "^1.2.1",
+ "server-destroy": "^1.0.1"
+ },
+ "peerDependencies": {
+ "astro": "^6.3.0"
+ }
+ },
"node_modules/@astrojs/prism": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/@astrojs/prism/-/prism-4.0.1.tgz",
- "integrity": "sha512-nksZQVjlferuWzhPsBpQ1JE5XuKAf1id1/9Hj4a9KG4+ofrlzxUUwX4YGQF/SuDiuiGKEnzopGOt38F3AnVWsQ==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@astrojs/prism/-/prism-4.0.2.tgz",
+ "integrity": "sha512-KTivpmnz6lDsC6o9H4+DNm2SrE/GHzw8cNAvEJwAvUT+eoaEnn/4NtbDNfRRaxaJHdp15gf+tfHAWiXR4wB3BA==",
"license": "MIT",
"dependencies": {
"prismjs": "^1.30.0"
@@ -90,12 +118,12 @@
}
},
"node_modules/@astrojs/react": {
- "version": "5.0.4",
- "resolved": "https://registry.npmjs.org/@astrojs/react/-/react-5.0.4.tgz",
- "integrity": "sha512-yDNE4VnKOzCjH9dCBi7pT4F6kpI3M9TkS+uxnCB0sGIS6t5vKonOY+Hs/UUnSajJGT5jeBRfpI9IQp+r/n1fBA==",
+ "version": "5.0.5",
+ "resolved": "https://registry.npmjs.org/@astrojs/react/-/react-5.0.5.tgz",
+ "integrity": "sha512-5jSFDqWqLdEyp7CEVD66A7AQEEuwLkCGR25NJ4FR5EjziZQqZTGc7hJOFZ97qb98BiU6vElrS70R8iI+HhufGQ==",
"license": "MIT",
"dependencies": {
- "@astrojs/internal-helpers": "0.9.0",
+ "@astrojs/internal-helpers": "0.9.1",
"@vitejs/plugin-react": "^5.2.0",
"devalue": "^5.6.4",
"ultrahtml": "^1.6.0",
@@ -112,13 +140,12 @@
}
},
"node_modules/@astrojs/telemetry": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/@astrojs/telemetry/-/telemetry-3.3.1.tgz",
- "integrity": "sha512-7fcIxXS9J4ls5tr8b3ww9rbAIz2+HrhNJYZdkAhhB4za/I5IZ/60g+Bs8q7zwG0tOIZfNB4JWhVJ1Qkl/OrNCw==",
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/@astrojs/telemetry/-/telemetry-3.3.2.tgz",
+ "integrity": "sha512-j8DNruA8ors99Al39RYZPJK4DC1bKkoNm93mAMuBhY9TCNC4R8n1q7ovFnJ5qhGh5Lsh7pa1gpQVpYpsJPeTHQ==",
"license": "MIT",
"dependencies": {
"ci-info": "^4.4.0",
- "dlv": "^1.1.3",
"dset": "^3.1.4",
"is-docker": "^4.0.0",
"is-wsl": "^3.1.1",
@@ -618,16 +645,16 @@
}
},
"node_modules/@emdash-cms/admin": {
- "version": "0.9.0",
- "resolved": "https://registry.npmjs.org/@emdash-cms/admin/-/admin-0.9.0.tgz",
- "integrity": "sha512-8fWW8RJHpJpfJSu2qejLtIXvFKAZCpZRBUf/qrtTngrzIboCerLWnYGJln+A1pn3o3S3e0KC9iU7qtJtLUyvjQ==",
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/@emdash-cms/admin/-/admin-0.12.0.tgz",
+ "integrity": "sha512-ms1hkEpCmo2hedgq10mnGGTTMoTT/2dp8aY+Sa789zPVhqGZfKL3gMERmFqECzYG0CdG/iDOlUNtVtHZBwBASw==",
"license": "MIT",
"dependencies": {
"@cloudflare/kumo": "^1.16.0",
"@dnd-kit/core": "^6.3.1",
"@dnd-kit/sortable": "^10.0.0",
"@dnd-kit/utilities": "^3.2.2",
- "@emdash-cms/blocks": "0.9.0",
+ "@emdash-cms/blocks": "0.12.0",
"@floating-ui/react": "^0.27.16",
"@lingui/core": "^5.9.4",
"@lingui/react": "^5.9.4",
@@ -643,6 +670,10 @@
"@tiptap/extension-link": "^3.20.0",
"@tiptap/extension-node-range": "^3.20.0",
"@tiptap/extension-placeholder": "^3.20.0",
+ "@tiptap/extension-table": "^3.20.0",
+ "@tiptap/extension-table-cell": "^3.20.0",
+ "@tiptap/extension-table-header": "^3.20.0",
+ "@tiptap/extension-table-row": "^3.20.0",
"@tiptap/extension-text-align": "^3.20.0",
"@tiptap/extension-typography": "^3.20.0",
"@tiptap/extension-underline": "^3.20.0",
@@ -662,9 +693,9 @@
}
},
"node_modules/@emdash-cms/auth": {
- "version": "0.9.0",
- "resolved": "https://registry.npmjs.org/@emdash-cms/auth/-/auth-0.9.0.tgz",
- "integrity": "sha512-f8QNUrCYfs3coWchoHH56rjGJ3p+9E7EANT8tLTbOtiq0+IfthywRMj65+mZ6Y9DV6yHR4hXmiby6dvy87KNqA==",
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/@emdash-cms/auth/-/auth-0.12.0.tgz",
+ "integrity": "sha512-HR5OTQo51KKBshHQcPHbSOypVfjroMtOjm5nxLlQcONQ8eG4lfq90N5ptZV0iICWTofNDnmc3ur4Bq1pgDDQwQ==",
"license": "MIT",
"dependencies": {
"@oslojs/crypto": "^1.0.1",
@@ -684,9 +715,9 @@
}
},
"node_modules/@emdash-cms/blocks": {
- "version": "0.9.0",
- "resolved": "https://registry.npmjs.org/@emdash-cms/blocks/-/blocks-0.9.0.tgz",
- "integrity": "sha512-sAda97cluUgL7z+3U7TV2LcrvtDGnwYKXhTu7KwudelS+z6XdqhyYqzbS0xVnLCgD7zFHUvO5+dDfzTsFVwiQQ==",
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/@emdash-cms/blocks/-/blocks-0.12.0.tgz",
+ "integrity": "sha512-JEJ2mcAwf9fHjuXKVxRxi0lvAXEGCq1D2KSBWMR1FENnLz0CjHhR48qL8QzcDOLn75H4ixTkjeN+twKBqT+fDw==",
"license": "MIT",
"dependencies": {
"@cloudflare/kumo": "^1.10.0",
@@ -701,15 +732,21 @@
}
},
"node_modules/@emdash-cms/gutenberg-to-portable-text": {
- "version": "0.9.0",
- "resolved": "https://registry.npmjs.org/@emdash-cms/gutenberg-to-portable-text/-/gutenberg-to-portable-text-0.9.0.tgz",
- "integrity": "sha512-W5f83AVE4SDZNF3b1js74C0xFNerqv3WsI07ouet6KciWSQHv5Kp4zN/yVrrOv8PUERefyMoklrbCznMB+jIsQ==",
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/@emdash-cms/gutenberg-to-portable-text/-/gutenberg-to-portable-text-0.12.0.tgz",
+ "integrity": "sha512-n3EX4QurfxDPEZ9RDxEtj543pYIv+kydYdicgzoxMUFjdZVQdZ6IHBKt898ZfqO0cmrKauSTVWhZ0pkYELwxrg==",
"license": "MIT",
"dependencies": {
"@wordpress/block-serialization-default-parser": "^5.13.0",
"parse5": "^7.2.1"
}
},
+ "node_modules/@emdash-cms/plugin-types": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/@emdash-cms/plugin-types/-/plugin-types-0.0.1.tgz",
+ "integrity": "sha512-0fEQBhD8iB4p6Zd4RsigoSDpZd06z9kHitT3k3AJk29K/A+MhpXapscYg+dgS91cMRrrO0kB/pV8xC7VTQ6jXQ==",
+ "license": "MIT"
+ },
"node_modules/@emnapi/runtime": {
"version": "1.10.0",
"resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz",
@@ -1986,6 +2023,52 @@
}
}
},
+ "node_modules/@mdx-js/mdx": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-3.1.1.tgz",
+ "integrity": "sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree": "^1.0.0",
+ "@types/estree-jsx": "^1.0.0",
+ "@types/hast": "^3.0.0",
+ "@types/mdx": "^2.0.0",
+ "acorn": "^8.0.0",
+ "collapse-white-space": "^2.0.0",
+ "devlop": "^1.0.0",
+ "estree-util-is-identifier-name": "^3.0.0",
+ "estree-util-scope": "^1.0.0",
+ "estree-walker": "^3.0.0",
+ "hast-util-to-jsx-runtime": "^2.0.0",
+ "markdown-extensions": "^2.0.0",
+ "recma-build-jsx": "^1.0.0",
+ "recma-jsx": "^1.0.0",
+ "recma-stringify": "^1.0.0",
+ "rehype-recma": "^1.0.0",
+ "remark-mdx": "^3.0.0",
+ "remark-parse": "^11.0.0",
+ "remark-rehype": "^11.0.0",
+ "source-map": "^0.7.0",
+ "unified": "^11.0.0",
+ "unist-util-position-from-estree": "^2.0.0",
+ "unist-util-stringify-position": "^4.0.0",
+ "unist-util-visit": "^5.0.0",
+ "vfile": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/@mdx-js/mdx/node_modules/estree-walker": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz",
+ "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree": "^1.0.0"
+ }
+ },
"node_modules/@messageformat/parser": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/@messageformat/parser/-/parser-5.1.1.tgz",
@@ -2782,48 +2865,48 @@
}
},
"node_modules/@tiptap/core": {
- "version": "3.22.5",
- "resolved": "https://registry.npmjs.org/@tiptap/core/-/core-3.22.5.tgz",
- "integrity": "sha512-L1lhWz6ujGny8LduTJ7MBWYhzigwOvfUJUrJ7IzOJSuy3+OAzisdGDD1GV7LEO/hU0Hr2Mkm1wajRIHExvS9HQ==",
+ "version": "3.23.4",
+ "resolved": "https://registry.npmjs.org/@tiptap/core/-/core-3.23.4.tgz",
+ "integrity": "sha512-ni2LWE52bVeSt3L2HVBSmbBw+elc32ATej9C68EyKzN/8vR5ILxFn6RCdDTKm4asmwZyq2jys12dKmBdWMr9QA==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/pm": "3.22.5"
+ "@tiptap/pm": "3.23.4"
}
},
"node_modules/@tiptap/extension-blockquote": {
- "version": "3.22.5",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-blockquote/-/extension-blockquote-3.22.5.tgz",
- "integrity": "sha512-ajyP5W8fG5Hrru47T/eF3xMKOpNvWofgNJqBTeNuGl02sYxsy9a4EunyFxudsaZP9WW3VOD4SaIWr5+MqpbnOQ==",
+ "version": "3.23.4",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-blockquote/-/extension-blockquote-3.23.4.tgz",
+ "integrity": "sha512-7YjSibNlPcy9eGK+tHt5G/Njr7nPxl+rZ3rCC6TwtLIRLSHPnoGDsfFOgTPkXxaQcE1a/VQwemnYfWc3kdIjDQ==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/core": "3.22.5"
+ "@tiptap/core": "3.23.4"
}
},
"node_modules/@tiptap/extension-bold": {
- "version": "3.22.5",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-bold/-/extension-bold-3.22.5.tgz",
- "integrity": "sha512-l/uDtpJISiFFyfctvnODNWBN/XPZI1jVZRacTRDDnSn8+x6KQ7G2qgFYueU7KvVJGDFVT39Iio56mcFRG/Pozg==",
+ "version": "3.23.4",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-bold/-/extension-bold-3.23.4.tgz",
+ "integrity": "sha512-3L9tnZ12i+98u5df2nV2zGu/sc3rhI87E3ocn1YYAO8PJUAgZnMwdet8JawCrS1uut5sRKlxo3SXEmdNfRVm/w==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/core": "3.22.5"
+ "@tiptap/core": "3.23.4"
}
},
"node_modules/@tiptap/extension-bubble-menu": {
- "version": "3.22.5",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-bubble-menu/-/extension-bubble-menu-3.22.5.tgz",
- "integrity": "sha512-yrNlFQQJY5MmhBpmD8tnmaSmyUQrEvgyPKa3bzVeWEhDSG1CW4A0ZSMx3hrA9yFO0HWfw3IJmvSCycEZQBalpQ==",
+ "version": "3.23.4",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-bubble-menu/-/extension-bubble-menu-3.23.4.tgz",
+ "integrity": "sha512-EPTpL/IFp/aTGZErBq/Mc3dKznj6G/qNEkVYWjueOn1oKApyT0P6WVHGvu/vpMdErhzmoGDuFPPGVS6T8Upx2Q==",
"license": "MIT",
"optional": true,
"dependencies": {
@@ -2834,67 +2917,67 @@
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/core": "3.22.5",
- "@tiptap/pm": "3.22.5"
+ "@tiptap/core": "3.23.4",
+ "@tiptap/pm": "3.23.4"
}
},
"node_modules/@tiptap/extension-bullet-list": {
- "version": "3.22.5",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-bullet-list/-/extension-bullet-list-3.22.5.tgz",
- "integrity": "sha512-cf54fG9AybU8NgPMv1TOcoqAkELeRc/VpnSCt/rIJZphWQx9nsFmrtkrlCatrIcCaGtNZYwlHlMnC5LVVMu0uA==",
+ "version": "3.23.4",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-bullet-list/-/extension-bullet-list-3.23.4.tgz",
+ "integrity": "sha512-mXB2KZOz1R+E6VNTZ3vzdAk7ZDGKjPmsJEZIQg1B5qRycTKg49/rCCkLA2QnqAwX6BzS3mLLH1RWE2W0oXD7vg==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/extension-list": "3.22.5"
+ "@tiptap/extension-list": "3.23.4"
}
},
"node_modules/@tiptap/extension-character-count": {
- "version": "3.22.5",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-character-count/-/extension-character-count-3.22.5.tgz",
- "integrity": "sha512-+5sfRKmDr9/4+EtmM+kI0fuSZa5gb3rLyQjElGY0MPr9y2ieQSw6r1PCMN8dXXKzEg5jTXzw003L2hK1H6LoFw==",
+ "version": "3.23.4",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-character-count/-/extension-character-count-3.23.4.tgz",
+ "integrity": "sha512-oxaTE6iDBa+/Ftq95vMP6rTOynJSJ7sEZybBnmb1zn63+jpiz6ovDrY6Ox7uA8avvGdBOnh6uUUjGIymA4iiTg==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/extensions": "3.22.5"
+ "@tiptap/extensions": "3.23.4"
}
},
"node_modules/@tiptap/extension-code": {
- "version": "3.22.5",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-code/-/extension-code-3.22.5.tgz",
- "integrity": "sha512-mwDNOJC9rYbDu/JcqrN4dbUQRklJU8Fuk2raxD/IvFw9qUIcPCmxQ2XT9UTKmZz/Ju7Kdy72fss6XpgWv6gLAQ==",
+ "version": "3.23.4",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-code/-/extension-code-3.23.4.tgz",
+ "integrity": "sha512-C0TeRipMycUEBnV+Mzx6eLp/yZb6Vi/waP3Tkb0lO5/ikg7LWLB7AlmMunjIXEUcR/pJHID/aEh5PfJFpysUDg==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/core": "3.22.5"
+ "@tiptap/core": "3.23.4"
}
},
"node_modules/@tiptap/extension-code-block": {
- "version": "3.22.5",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-code-block/-/extension-code-block-3.22.5.tgz",
- "integrity": "sha512-d123kCfLdJTi4fue1m0+TNFztDkmIRSZGZmGu6H9KqwG5Q7IzjT9o8lzRsz+pXxYqHvqgYmXoEpM6srbzXx/Ag==",
+ "version": "3.23.4",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-code-block/-/extension-code-block-3.23.4.tgz",
+ "integrity": "sha512-UEU1w/85CSNKktbhESnIRmtjKcH7DeschReZA8err1wAnYLTKzid5ucnJSJ25iRg2V5Fnuws5gnPT5CVgdfXCQ==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/core": "3.22.5",
- "@tiptap/pm": "3.22.5"
+ "@tiptap/core": "3.23.4",
+ "@tiptap/pm": "3.23.4"
}
},
"node_modules/@tiptap/extension-collaboration": {
- "version": "3.22.5",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-collaboration/-/extension-collaboration-3.22.5.tgz",
- "integrity": "sha512-3rax34HKSo8L5ihv5iGxISNBUIdVP0Fq9O6T/mq4kQOLhVhNbqwr9I/lWOvaz24nPE7u5Vkz0Ii3zWGlzxyPPA==",
+ "version": "3.23.4",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-collaboration/-/extension-collaboration-3.23.4.tgz",
+ "integrity": "sha512-28TJFayxCk7J9TmHBG4+8lVAz6YgyjN0RqzZueVeimWxSEgnTDGlkfHx6Ho5tOuyLwDa6SMBhN/6Q0iUMdnwMQ==",
"license": "MIT",
"peer": true,
"funding": {
@@ -2902,29 +2985,29 @@
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/core": "3.22.5",
- "@tiptap/pm": "3.22.5",
+ "@tiptap/core": "3.23.4",
+ "@tiptap/pm": "3.23.4",
"@tiptap/y-tiptap": "^3.0.2",
"yjs": "^13"
}
},
"node_modules/@tiptap/extension-document": {
- "version": "3.22.5",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-document/-/extension-document-3.22.5.tgz",
- "integrity": "sha512-8NJERd+pCtvSuEP4C4WMGYmRRCV12ePZL7bC+QUdFlbdXg+kNZS0zZ7hh879tYA0Kidbi8rWWD1Tx+H2ezkmMw==",
+ "version": "3.23.4",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-document/-/extension-document-3.23.4.tgz",
+ "integrity": "sha512-YC4G6VkxT629rlqUTwD6XvOpxjvghn7fxrK4RbyKVJY2C6E1vgmX0won1Ast6v+qTE6iONOMS6f6VyPxSGjg4w==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/core": "3.22.5"
+ "@tiptap/core": "3.23.4"
}
},
"node_modules/@tiptap/extension-drag-handle": {
- "version": "3.22.5",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-drag-handle/-/extension-drag-handle-3.22.5.tgz",
- "integrity": "sha512-ClpgtNJZTUctQDB64KAZjhowZUK3QwFCiYJBXMg/fk9YzYHZ1L9qjzjqUcHiCsbQN9ILNZY1q9CQkce1LzKlrQ==",
+ "version": "3.23.4",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-drag-handle/-/extension-drag-handle-3.23.4.tgz",
+ "integrity": "sha512-ia027RBIdZIA9YBzt7Yuc4fGFAgdbxbVhrPqiDDJIN41IVsbb1PSQHDp8NVit50BNH1XVeAEB/E6WA/QLBoOgw==",
"license": "MIT",
"dependencies": {
"@floating-ui/dom": "^1.6.13"
@@ -2934,47 +3017,47 @@
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/core": "3.22.5",
- "@tiptap/extension-collaboration": "3.22.5",
- "@tiptap/extension-node-range": "3.22.5",
- "@tiptap/pm": "3.22.5",
+ "@tiptap/core": "3.23.4",
+ "@tiptap/extension-collaboration": "3.23.4",
+ "@tiptap/extension-node-range": "3.23.4",
+ "@tiptap/pm": "3.23.4",
"@tiptap/y-tiptap": "^3.0.2"
}
},
"node_modules/@tiptap/extension-drag-handle-react": {
- "version": "3.22.5",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-drag-handle-react/-/extension-drag-handle-react-3.22.5.tgz",
- "integrity": "sha512-DAjwBdh6SSYr+c7lDA8D3SQrpGooO2qdOGkU83oIYgGrV0mAjiNhTa1/+S1J+rfBACiakhFn0rC+mELcECAnYQ==",
+ "version": "3.23.4",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-drag-handle-react/-/extension-drag-handle-react-3.23.4.tgz",
+ "integrity": "sha512-/enO9HmUgkXACRa0FxETkQeBrnv2WDoAHAXQ0LL25yIV7YW5tWIwXgDBpPd8G7YEk9R05XhFq1tN6NmU0JYIAA==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/extension-drag-handle": "3.22.5",
- "@tiptap/pm": "3.22.5",
- "@tiptap/react": "3.22.5",
+ "@tiptap/extension-drag-handle": "3.23.4",
+ "@tiptap/pm": "3.23.4",
+ "@tiptap/react": "3.23.4",
"react": "^16.8 || ^17 || ^18 || ^19",
"react-dom": "^16.8 || ^17 || ^18 || ^19"
}
},
"node_modules/@tiptap/extension-dropcursor": {
- "version": "3.22.5",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-dropcursor/-/extension-dropcursor-3.22.5.tgz",
- "integrity": "sha512-Mp40DaFrY3sEUVtFqmxrR0BmU4G3k8GCYYNGqNa9OqWv7BrcFDC03V2n3okESDKt4MKkzhQQmypq+ouLy8dLfA==",
+ "version": "3.23.4",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-dropcursor/-/extension-dropcursor-3.23.4.tgz",
+ "integrity": "sha512-ujJQUIENk0RwVFCh5g/TOSEv1a7Pnam/cjHmSUqHWUNZkYS9aOqjm+JfURJPCinRS2oHvo3AARul5mkKgDJYcA==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/extensions": "3.22.5"
+ "@tiptap/extensions": "3.23.4"
}
},
"node_modules/@tiptap/extension-floating-menu": {
- "version": "3.22.5",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-floating-menu/-/extension-floating-menu-3.22.5.tgz",
- "integrity": "sha512-dhem4sTPhyQgQ+pFp2Oud4k4FSQz9PVMgeQAC9288SmGwxBkJNveDAw6sKTMrumqDvwkJrtslXIupq9TZYQnzg==",
+ "version": "3.23.4",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-floating-menu/-/extension-floating-menu-3.23.4.tgz",
+ "integrity": "sha512-eAc72bKM26yIPx0jsU8qdjE71vFNVu5R9jGbdItBMFc0SPLS4qY8g+8RJ+iWoLwbcSEpgooLS9D9sLfdAU+Tvw==",
"license": "MIT",
"optional": true,
"funding": {
@@ -2983,295 +3066,348 @@
},
"peerDependencies": {
"@floating-ui/dom": "^1.0.0",
- "@tiptap/core": "3.22.5",
- "@tiptap/pm": "3.22.5"
+ "@tiptap/core": "3.23.4",
+ "@tiptap/pm": "3.23.4"
}
},
"node_modules/@tiptap/extension-focus": {
- "version": "3.22.5",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-focus/-/extension-focus-3.22.5.tgz",
- "integrity": "sha512-jvC70QAORx+CwIJExhKlAV7eWT8tAyyGVxyUVLgklmErN3oJAilcMD/r7jTlou3sZMBIrZ+fxFzMSCcoPuGjBg==",
+ "version": "3.23.4",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-focus/-/extension-focus-3.23.4.tgz",
+ "integrity": "sha512-KwdH88ckBffeRWWwkDX5BmWqEfA6JGjDOvbeNJUeNg+4dFIOxczTmZ12MIw1Kk2LAISvA1PJ5gOu5pDqE9TfMA==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/extensions": "3.22.5"
+ "@tiptap/extensions": "3.23.4"
}
},
"node_modules/@tiptap/extension-gapcursor": {
- "version": "3.22.5",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-gapcursor/-/extension-gapcursor-3.22.5.tgz",
- "integrity": "sha512-4WkMu7qqjbsm8hCQS+8X+la1wjriN0SKoRdvpfKH33qM50MB34tYJuGLAO+y7TTh4MMMco3AZCKPBL5JVMqNIg==",
+ "version": "3.23.4",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-gapcursor/-/extension-gapcursor-3.23.4.tgz",
+ "integrity": "sha512-RuyvOlIGP6UpVOc0Lw0L63jKLtYM49CNhPV2OMSfwwwbBZ3pJGos2/SqpYg71d3sn+qpsAopS4Pfr8iPZog73A==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/extensions": "3.22.5"
+ "@tiptap/extensions": "3.23.4"
}
},
"node_modules/@tiptap/extension-hard-break": {
- "version": "3.22.5",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-hard-break/-/extension-hard-break-3.22.5.tgz",
- "integrity": "sha512-n0R2mUVYZU2AVbJhg/WcY9+zx690wVwvsItHJf0DrYbf1tCYHx+PRHUt/AoXk6u8BSmnkb8/FDziS8m3mjfpSg==",
+ "version": "3.23.4",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-hard-break/-/extension-hard-break-3.23.4.tgz",
+ "integrity": "sha512-ODlpZCi7n136BH9luM09EFL8Pg+bbRCd0tzCQM5BKMXRkLitYZA8Gl/f5DLmGJ50wzFsDPXK2Br2g9UvZK7COg==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/core": "3.22.5"
+ "@tiptap/core": "3.23.4"
}
},
"node_modules/@tiptap/extension-heading": {
- "version": "3.22.5",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-heading/-/extension-heading-3.22.5.tgz",
- "integrity": "sha512-hjyEG4947PAhMBfP1G6B0QAh6+y9mp2C5BQmNjprA05/lQzDAT7KFZzNh8ZVp3ol6aICKq/N1gFOW9Dc/9FUOw==",
+ "version": "3.23.4",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-heading/-/extension-heading-3.23.4.tgz",
+ "integrity": "sha512-8W9Hqi0J69Xbqg08nPf4xRMJXMccaKFAgUE1tvy5PAWJSQxOMwkKQXgZXxwe+80sOMUnV8qveBqUy/ODMPgAxQ==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/core": "3.22.5"
+ "@tiptap/core": "3.23.4"
}
},
"node_modules/@tiptap/extension-horizontal-rule": {
- "version": "3.22.5",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-horizontal-rule/-/extension-horizontal-rule-3.22.5.tgz",
- "integrity": "sha512-vUV0/ugIbXOc8SJib0h8UMhgcqZXWu/dkEhlswZN4VVven1o5enkfxEiDw+OyIJHi5rUkrdhsQ/KTxG/Xb7X8A==",
+ "version": "3.23.4",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-horizontal-rule/-/extension-horizontal-rule-3.23.4.tgz",
+ "integrity": "sha512-EA4kK8ywZ4dQNOdxeZbplmDDs5T5LjMgHpqxRwukj9wwKiILOK5E3fcKm1fCKh9Q02w96jax6YVccHwmgJP3sQ==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/core": "3.22.5",
- "@tiptap/pm": "3.22.5"
+ "@tiptap/core": "3.23.4",
+ "@tiptap/pm": "3.23.4"
}
},
"node_modules/@tiptap/extension-image": {
- "version": "3.22.5",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-image/-/extension-image-3.22.5.tgz",
- "integrity": "sha512-ezMzA6w6UsPesQp6fxTQojI/IkGJLmkwR/VGTimva7sudP3HdSW8k3SGBkjfvp0L2xqUrC/l4nWOchu01A/xtQ==",
+ "version": "3.23.4",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-image/-/extension-image-3.23.4.tgz",
+ "integrity": "sha512-qandp5HLRl+n8D61+LCT67qtb1uSKffyEGD0fVTkg/RfbyFsJvCDFbjVEoiIG8JOx8O5DehgrDCvS35QOWgr2A==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/core": "3.22.5"
+ "@tiptap/core": "3.23.4"
}
},
"node_modules/@tiptap/extension-italic": {
- "version": "3.22.5",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-italic/-/extension-italic-3.22.5.tgz",
- "integrity": "sha512-4T8baSiLkeIymTgEwirxDFt5YgYofkP3m1+MGYdGy2HKcOK+1vpvlPhEO1X5qtZngtJW5S4+njKjinRg52A4PA==",
+ "version": "3.23.4",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-italic/-/extension-italic-3.23.4.tgz",
+ "integrity": "sha512-jUAHi+HZlg47BzgVIy6y/UH5vev7vPQ95jddhB5K3hC122kvWFMXlken7UOnqzbxNcHs2+4Oi/ZJirYMpT4P5w==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/core": "3.22.5"
+ "@tiptap/core": "3.23.4"
}
},
"node_modules/@tiptap/extension-link": {
- "version": "3.22.5",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-link/-/extension-link-3.22.5.tgz",
- "integrity": "sha512-d671MvF3GPKoS2OVxjIlQ7hIE7MS3hREdR+d4cvnnoiLLD+ZJ6KgDnxmWqF0a1s4qxLWK2KxKRSOIfYGE31QWQ==",
+ "version": "3.23.4",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-link/-/extension-link-3.23.4.tgz",
+ "integrity": "sha512-XjxltY7MomwfTs6jmN6Bw5bb/upb34lpyqv2RiXppFTK25Br7ipksRjUpWpB4/csZeg30qwrLGVKxCol38ffrw==",
"license": "MIT",
"dependencies": {
- "linkifyjs": "^4.3.2"
+ "linkifyjs": "^4.3.3"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/core": "3.22.5",
- "@tiptap/pm": "3.22.5"
+ "@tiptap/core": "3.23.4",
+ "@tiptap/pm": "3.23.4"
}
},
"node_modules/@tiptap/extension-list": {
- "version": "3.22.5",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-list/-/extension-list-3.22.5.tgz",
- "integrity": "sha512-cVO3ZHCgxAWZ4zrFSs81FO2nyCk1wb2EHkpLpW98FzbJLkN9rDkazhW99P3HRWy/CvUldOT+8ecI1YrQtBojMg==",
+ "version": "3.23.4",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-list/-/extension-list-3.23.4.tgz",
+ "integrity": "sha512-yuauDm6qW/7q+ZO0YJBKQEGdnUm6DDTJM8AMp9bMZrT4jRf/zyUtNcZ91QEfFvBcyVuI+10PIOXtNPevhQ741Q==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/core": "3.22.5",
- "@tiptap/pm": "3.22.5"
+ "@tiptap/core": "3.23.4",
+ "@tiptap/pm": "3.23.4"
}
},
"node_modules/@tiptap/extension-list-item": {
- "version": "3.22.5",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-list-item/-/extension-list-item-3.22.5.tgz",
- "integrity": "sha512-W7uTmyKLhlsvuTPLv+8WwnsY+mlikBFIoLSvVcBaFt4MwpsZ+DeB6KQg02Y7tbtaAnG7rXu9Fvw2QORh2P728A==",
+ "version": "3.23.4",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-list-item/-/extension-list-item-3.23.4.tgz",
+ "integrity": "sha512-Q/JXosShD5oyDwukE6igdrZD2lb0ZgyoQTHYchk0pzU4frClFbn3RI1wKP+XeqKLhdO6KH2WZ9rERGH7PtDi7Q==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/extension-list": "3.22.5"
+ "@tiptap/extension-list": "3.23.4"
}
},
"node_modules/@tiptap/extension-list-keymap": {
- "version": "3.22.5",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-list-keymap/-/extension-list-keymap-3.22.5.tgz",
- "integrity": "sha512-cGUnxJ0y515e1bVHNjUmbx7oWHoEon59w6BA5N2KwV9iW2mZZchlTX4yxJSOX+ixeVRChsa7YwC3Z1jUZ6AMEg==",
+ "version": "3.23.4",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-list-keymap/-/extension-list-keymap-3.23.4.tgz",
+ "integrity": "sha512-9FezifCfuoc0o+5K6l4QNOOfelqxnDGg/f9oL1D/LFZPC54bPxpWWft9QCWOqyqZgyLCLjbCjciAlbgkrFUmmw==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/extension-list": "3.22.5"
+ "@tiptap/extension-list": "3.23.4"
}
},
"node_modules/@tiptap/extension-node-range": {
- "version": "3.22.5",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-node-range/-/extension-node-range-3.22.5.tgz",
- "integrity": "sha512-1C00Dur+8KNjcKcI6nuYY4RFOrp/1YUFR04Wj0VZVc8L8l4jCXS+JY+aYtTwKjxcXIH3UzplfwoRZj9thn98pg==",
+ "version": "3.23.4",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-node-range/-/extension-node-range-3.23.4.tgz",
+ "integrity": "sha512-wmJrIT2Ng4TP4HniA0+WCNtqL09ZBZYd9bSnyDfZiz5phEcnqfCTBGpPXiA+jTjxZp/ZrJPFTjgQPevNQIAa9g==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/core": "3.22.5",
- "@tiptap/pm": "3.22.5"
+ "@tiptap/core": "3.23.4",
+ "@tiptap/pm": "3.23.4"
}
},
"node_modules/@tiptap/extension-ordered-list": {
- "version": "3.22.5",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-ordered-list/-/extension-ordered-list-3.22.5.tgz",
- "integrity": "sha512-OXdh4k4CNrukwiSdWdEQ49uvgnqvR0Z9aNSP4HI5/kZQ/Te1NtRtYCpUrzWyO/7CtjcCisXHti0o9C/TV8YMbQ==",
+ "version": "3.23.4",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-ordered-list/-/extension-ordered-list-3.23.4.tgz",
+ "integrity": "sha512-+3ofyssYnOTa1+nFWEmCAY1ngn8nAV1xo25JnNNC87NMU9WkSgr93jB7/uUJP0uui1C2dBLlaup3XXm108yarw==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/extension-list": "3.22.5"
+ "@tiptap/extension-list": "3.23.4"
}
},
"node_modules/@tiptap/extension-paragraph": {
- "version": "3.22.5",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-paragraph/-/extension-paragraph-3.22.5.tgz",
- "integrity": "sha512-52KCto4+XKpnBWpIufspWLyq4UWxAWC72ANPdGuIhbi72NRTabiTbTVN40uwGSPkyakeESG0/vKdWJCVvB4f0g==",
+ "version": "3.23.4",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-paragraph/-/extension-paragraph-3.23.4.tgz",
+ "integrity": "sha512-KbhXjCFzWphvFn5VU7E4dtmYDm+bssI1i0+CnXPWCXkjdaaX88ck68Xp1fKz8/bbI/CqlgiNDO/3TvqgtZ6woQ==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/core": "3.22.5"
+ "@tiptap/core": "3.23.4"
}
},
"node_modules/@tiptap/extension-placeholder": {
- "version": "3.22.5",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-placeholder/-/extension-placeholder-3.22.5.tgz",
- "integrity": "sha512-MZAohQ3FCS763BkhGXgaWRya6WruZjwRwEAkXP8vkxbERzl2OJRjniS4uXCWzAlRb3ttE103SnY7LMdM8FvsXw==",
+ "version": "3.23.4",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-placeholder/-/extension-placeholder-3.23.4.tgz",
+ "integrity": "sha512-yHtAZkFR9M2AQmCi555w4ns1BBCqwRyYDYMtd10DBvqPX7T3TmGerPdUfI6sLr74GxnZ5zHOnOYdwAbeG5JzNw==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/extensions": "3.22.5"
+ "@tiptap/extensions": "3.23.4"
}
},
"node_modules/@tiptap/extension-strike": {
- "version": "3.22.5",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-strike/-/extension-strike-3.22.5.tgz",
- "integrity": "sha512-42WrrFK5gOom/0znH85x12Mw5IQ/6O6DWdyUWoRIrNA/qJpuHtU8oVU+bIgU2tuomMGHruRjIzgBQv5sBjEtww==",
+ "version": "3.23.4",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-strike/-/extension-strike-3.23.4.tgz",
+ "integrity": "sha512-Vnq5vW801zPbu1LtKeA5k4R241jY+hRjXeijYwIPxy15KzIiipY12518HiCf6/8kkRbMxgOfdYg9X4BRV3HV3g==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/core": "3.22.5"
+ "@tiptap/core": "3.23.4"
+ }
+ },
+ "node_modules/@tiptap/extension-table": {
+ "version": "3.23.4",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-table/-/extension-table-3.23.4.tgz",
+ "integrity": "sha512-TRh6JMTRYXCWpwavGt3aAHH2f51ZzkhurfW3XvrURG3It8MvfuuY1xB1xba1ss5c0QLWlrKx6GVaSXrUCdFLlg==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/ueberdosis"
+ },
+ "peerDependencies": {
+ "@tiptap/core": "3.23.4",
+ "@tiptap/pm": "3.23.4"
+ }
+ },
+ "node_modules/@tiptap/extension-table-cell": {
+ "version": "3.23.4",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-table-cell/-/extension-table-cell-3.23.4.tgz",
+ "integrity": "sha512-GmLLF9w7ExXhieshDnwC2U4kE8EM3TliDnHYX7uXOnSptWqASku6hOFw0f1AT5MDJog9NPzRo+adGVRHS9kjTQ==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/ueberdosis"
+ },
+ "peerDependencies": {
+ "@tiptap/extension-table": "3.23.4"
+ }
+ },
+ "node_modules/@tiptap/extension-table-header": {
+ "version": "3.23.4",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-table-header/-/extension-table-header-3.23.4.tgz",
+ "integrity": "sha512-5IXIHjpCpuZ06SmOoVsnK4VoOhd/G6yLiDtP3Azcf+KUI5539ryWE9I9EAqgalV2HcJMMYX9MQpl5WReHRGETw==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/ueberdosis"
+ },
+ "peerDependencies": {
+ "@tiptap/extension-table": "3.23.4"
+ }
+ },
+ "node_modules/@tiptap/extension-table-row": {
+ "version": "3.23.4",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-table-row/-/extension-table-row-3.23.4.tgz",
+ "integrity": "sha512-kqQt0I4cm2E+NNLpZ5rtox53Vgzyy19ZczvJ66Ao6BZkXXKqYXSRJc4q0jGNPX8hHhvHBpHmffcz5hdT/1XtNQ==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/ueberdosis"
+ },
+ "peerDependencies": {
+ "@tiptap/extension-table": "3.23.4"
}
},
"node_modules/@tiptap/extension-text": {
- "version": "3.22.5",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-text/-/extension-text-3.22.5.tgz",
- "integrity": "sha512-bzpDOdAEo1JeoVZDIyV0oY0jGXkEG+AzF70SzHoRSjOvFDtKWunyXf9eO1OnOr2/fmMcckT2qwUBNBMQplWBzw==",
+ "version": "3.23.4",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-text/-/extension-text-3.23.4.tgz",
+ "integrity": "sha512-q9kxver/MR18p66aWZHSPycnr9hcBFyVGeGj8gf+BQCzn5hpvtSYTfLvk1nq8GFhygdQ9/e3f7B5ovrm/jnpvw==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/core": "3.22.5"
+ "@tiptap/core": "3.23.4"
}
},
"node_modules/@tiptap/extension-text-align": {
- "version": "3.22.5",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-text-align/-/extension-text-align-3.22.5.tgz",
- "integrity": "sha512-LNUinhsZJC+/Vm7ugtghSjqlO64FQuww8oJkHq54Oh135fJ+kY2yBRakYFeH0P0gl4VPJH13AUetLF696CM2UQ==",
+ "version": "3.23.4",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-text-align/-/extension-text-align-3.23.4.tgz",
+ "integrity": "sha512-A3WVhAs6YFlkfa7hNgps21QLfitNZyWFBBepQusX35sz6BlaHSy9GVrTR/JjGwGIxhNoqU2SGApvf2xTuX89gQ==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/core": "3.22.5"
+ "@tiptap/core": "3.23.4"
}
},
"node_modules/@tiptap/extension-typography": {
- "version": "3.22.5",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-typography/-/extension-typography-3.22.5.tgz",
- "integrity": "sha512-FbBoo7hZNV2q/wa0yL2hVyVjmn0OEA5vzzSep0ExFdOjmPYe+5Us1bsf0G3lutYS9rQfgQrcXBvcGJozU+Agyg==",
+ "version": "3.23.4",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-typography/-/extension-typography-3.23.4.tgz",
+ "integrity": "sha512-G6FMEzSvbOoGnmBiaBWaK2r4yT0kv/cNKy3T//Rb27KOwibcfPqhjKBWnd+LqpXG1P66QZSM45XlWDhTzYpeIQ==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/core": "3.22.5"
+ "@tiptap/core": "3.23.4"
}
},
"node_modules/@tiptap/extension-underline": {
- "version": "3.22.5",
- "resolved": "https://registry.npmjs.org/@tiptap/extension-underline/-/extension-underline-3.22.5.tgz",
- "integrity": "sha512-9ut09rJD0iEbS6sk7yd2j6IwuFDLTNmDEGTDLodvqAfi+bq7ddsTDv0YviXoZaA9sdHAdTEVr2ITy2m6WK5jpA==",
+ "version": "3.23.4",
+ "resolved": "https://registry.npmjs.org/@tiptap/extension-underline/-/extension-underline-3.23.4.tgz",
+ "integrity": "sha512-F1ocPT10LV+seky25R1TMCRdc/Iof99jLcDSYDGr6mNEDY4ct2RvOeSM8aDdYq6CkH+vXt3i3JDeRwV23KzswQ==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/core": "3.22.5"
+ "@tiptap/core": "3.23.4"
}
},
"node_modules/@tiptap/extensions": {
- "version": "3.22.5",
- "resolved": "https://registry.npmjs.org/@tiptap/extensions/-/extensions-3.22.5.tgz",
- "integrity": "sha512-Ifg4MzKCj3uRqe3ieTwYnomu2y4p7EXr2avVSKZYfh12i2dyWe2Gkn1KuZDREANVE+gHqFlQjJRYzhJFwzSCrg==",
+ "version": "3.23.4",
+ "resolved": "https://registry.npmjs.org/@tiptap/extensions/-/extensions-3.23.4.tgz",
+ "integrity": "sha512-SlGPXauW8iKWG7wwuwC/0y/smLImp0h6GBIGgNnTBgIP/ThXQnjLMSZH0mW/REO87dQxkku01V3ARRywi+juhg==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/core": "3.22.5",
- "@tiptap/pm": "3.22.5"
+ "@tiptap/core": "3.23.4",
+ "@tiptap/pm": "3.23.4"
}
},
"node_modules/@tiptap/pm": {
- "version": "3.22.5",
- "resolved": "https://registry.npmjs.org/@tiptap/pm/-/pm-3.22.5.tgz",
- "integrity": "sha512-Cr9Mv4igxvI2tKMiahw48sZxva3PfDzypErH8IB82N+9qa9n9ygVMt0BOaDg53hLKxEEVeYr2S/wCcJIVFgBTw==",
+ "version": "3.23.4",
+ "resolved": "https://registry.npmjs.org/@tiptap/pm/-/pm-3.23.4.tgz",
+ "integrity": "sha512-+C5ngcoza47n3MjtjVBqBEBICPC0McdbwzJ+X6SSCviCLoqnSYanv5mIX9HWG0Q4fJ4BkdNM3VibZUxQaTbKyQ==",
"license": "MIT",
"dependencies": {
"prosemirror-changeset": "^2.3.0",
@@ -3293,9 +3429,9 @@
}
},
"node_modules/@tiptap/react": {
- "version": "3.22.5",
- "resolved": "https://registry.npmjs.org/@tiptap/react/-/react-3.22.5.tgz",
- "integrity": "sha512-36WHEs+vPmB//V1ff7Ujcnpz7Ey5g8lhpI/0+hoanSbdiPMTQ7qZVWwMovIkMKDlqWVp2fxBgeYM1861jyFzTw==",
+ "version": "3.23.4",
+ "resolved": "https://registry.npmjs.org/@tiptap/react/-/react-3.23.4.tgz",
+ "integrity": "sha512-mb5aIY9PuLreOVLExqs+8BAI20I/8+jCUBfEIqheuFY2GRRuBiwczejSlYuADfVDBbPVN5uPw4UMADCaH5wueQ==",
"license": "MIT",
"dependencies": {
"@types/use-sync-external-store": "^0.0.6",
@@ -3307,12 +3443,12 @@
"url": "https://github.com/sponsors/ueberdosis"
},
"optionalDependencies": {
- "@tiptap/extension-bubble-menu": "^3.22.5",
- "@tiptap/extension-floating-menu": "^3.22.5"
+ "@tiptap/extension-bubble-menu": "^3.23.4",
+ "@tiptap/extension-floating-menu": "^3.23.4"
},
"peerDependencies": {
- "@tiptap/core": "3.22.5",
- "@tiptap/pm": "3.22.5",
+ "@tiptap/core": "3.23.4",
+ "@tiptap/pm": "3.23.4",
"@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0",
"@types/react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0",
"react": "^17.0.0 || ^18.0.0 || ^19.0.0",
@@ -3320,35 +3456,35 @@
}
},
"node_modules/@tiptap/starter-kit": {
- "version": "3.22.5",
- "resolved": "https://registry.npmjs.org/@tiptap/starter-kit/-/starter-kit-3.22.5.tgz",
- "integrity": "sha512-LZ/LYbwH6rnDi5DnRyagkuNsYAVyhM+yJvvz+ZuYA0JkPiTXJV86J5PWSKew8M0gVfMHcNVtKjfQCvViFCeIgw==",
+ "version": "3.23.4",
+ "resolved": "https://registry.npmjs.org/@tiptap/starter-kit/-/starter-kit-3.23.4.tgz",
+ "integrity": "sha512-3VhU+NO6/ec9DMj/5Ej0nzARSq42cXnqW+QHCmTL3FNXkXQz+tw1KlfruT5GGJ3M0RssjWjRC0a39N/4S3qxeA==",
"license": "MIT",
"dependencies": {
- "@tiptap/core": "^3.22.5",
- "@tiptap/extension-blockquote": "^3.22.5",
- "@tiptap/extension-bold": "^3.22.5",
- "@tiptap/extension-bullet-list": "^3.22.5",
- "@tiptap/extension-code": "^3.22.5",
- "@tiptap/extension-code-block": "^3.22.5",
- "@tiptap/extension-document": "^3.22.5",
- "@tiptap/extension-dropcursor": "^3.22.5",
- "@tiptap/extension-gapcursor": "^3.22.5",
- "@tiptap/extension-hard-break": "^3.22.5",
- "@tiptap/extension-heading": "^3.22.5",
- "@tiptap/extension-horizontal-rule": "^3.22.5",
- "@tiptap/extension-italic": "^3.22.5",
- "@tiptap/extension-link": "^3.22.5",
- "@tiptap/extension-list": "^3.22.5",
- "@tiptap/extension-list-item": "^3.22.5",
- "@tiptap/extension-list-keymap": "^3.22.5",
- "@tiptap/extension-ordered-list": "^3.22.5",
- "@tiptap/extension-paragraph": "^3.22.5",
- "@tiptap/extension-strike": "^3.22.5",
- "@tiptap/extension-text": "^3.22.5",
- "@tiptap/extension-underline": "^3.22.5",
- "@tiptap/extensions": "^3.22.5",
- "@tiptap/pm": "^3.22.5"
+ "@tiptap/core": "^3.23.4",
+ "@tiptap/extension-blockquote": "^3.23.4",
+ "@tiptap/extension-bold": "^3.23.4",
+ "@tiptap/extension-bullet-list": "^3.23.4",
+ "@tiptap/extension-code": "^3.23.4",
+ "@tiptap/extension-code-block": "^3.23.4",
+ "@tiptap/extension-document": "^3.23.4",
+ "@tiptap/extension-dropcursor": "^3.23.4",
+ "@tiptap/extension-gapcursor": "^3.23.4",
+ "@tiptap/extension-hard-break": "^3.23.4",
+ "@tiptap/extension-heading": "^3.23.4",
+ "@tiptap/extension-horizontal-rule": "^3.23.4",
+ "@tiptap/extension-italic": "^3.23.4",
+ "@tiptap/extension-link": "^3.23.4",
+ "@tiptap/extension-list": "^3.23.4",
+ "@tiptap/extension-list-item": "^3.23.4",
+ "@tiptap/extension-list-keymap": "^3.23.4",
+ "@tiptap/extension-ordered-list": "^3.23.4",
+ "@tiptap/extension-paragraph": "^3.23.4",
+ "@tiptap/extension-strike": "^3.23.4",
+ "@tiptap/extension-text": "^3.23.4",
+ "@tiptap/extension-underline": "^3.23.4",
+ "@tiptap/extensions": "^3.23.4",
+ "@tiptap/pm": "^3.23.4"
},
"funding": {
"type": "github",
@@ -3356,17 +3492,17 @@
}
},
"node_modules/@tiptap/suggestion": {
- "version": "3.22.5",
- "resolved": "https://registry.npmjs.org/@tiptap/suggestion/-/suggestion-3.22.5.tgz",
- "integrity": "sha512-Uv79Ht/o4mx1GWIT65jeQTE67LMrA+K7d8p51XOe9PJw0H0fS3iCdeMJ8tAo3h6QrMJFejdsB7z8jJL9UbAnhA==",
+ "version": "3.23.4",
+ "resolved": "https://registry.npmjs.org/@tiptap/suggestion/-/suggestion-3.23.4.tgz",
+ "integrity": "sha512-KvrHKQcGpEKPPuetH2N4K21kA7hc31n5WDzw3FM+fNpMKdJOToYoNZzS9rmuBBHmNZ9wyK2sWmzi09enmv6wbg==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/core": "3.22.5",
- "@tiptap/pm": "3.22.5"
+ "@tiptap/core": "3.23.4",
+ "@tiptap/pm": "3.23.4"
}
},
"node_modules/@tiptap/y-tiptap": {
@@ -3446,6 +3582,15 @@
"integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
"license": "MIT"
},
+ "node_modules/@types/estree-jsx": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz",
+ "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree": "*"
+ }
+ },
"node_modules/@types/hast": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz",
@@ -3464,6 +3609,12 @@
"@types/unist": "*"
}
},
+ "node_modules/@types/mdx": {
+ "version": "2.0.13",
+ "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.13.tgz",
+ "integrity": "sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==",
+ "license": "MIT"
+ },
"node_modules/@types/ms": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz",
@@ -3480,13 +3631,13 @@
}
},
"node_modules/@types/node": {
- "version": "25.6.0",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-25.6.0.tgz",
- "integrity": "sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ==",
+ "version": "25.9.0",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-25.9.0.tgz",
+ "integrity": "sha512-AOQwYUNolgy3VosiRqXrACUXTN8nJUtPl7FJXMqZVyxiiCLhQuG3jXKvCS1ALr+Y2OmZhzzLVlYPEqJaiqkaJQ==",
"license": "MIT",
"optional": true,
"dependencies": {
- "undici-types": "~7.19.0"
+ "undici-types": ">=7.24.0 <7.24.7"
}
},
"node_modules/@types/react": {
@@ -3574,9 +3725,9 @@
}
},
"node_modules/@wordpress/block-serialization-default-parser": {
- "version": "5.45.0",
- "resolved": "https://registry.npmjs.org/@wordpress/block-serialization-default-parser/-/block-serialization-default-parser-5.45.0.tgz",
- "integrity": "sha512-48Pj6o9iDGf7fCprXoXD8nvDgBigrQ6uZEb+VMrcvabn59ymKHzx/Ex9O3mpp7Ft2NMJRGpO3w0mNocoDfCksA==",
+ "version": "5.46.0",
+ "resolved": "https://registry.npmjs.org/@wordpress/block-serialization-default-parser/-/block-serialization-default-parser-5.46.0.tgz",
+ "integrity": "sha512-j9AWXtuBbjntWWapDTZVyLmRVYOA1me3lqR+ugkN54HvNiyQaDw0tt6JfJYGFTWhJ8peU90G2TO+IiFf6YDKQQ==",
"license": "GPL-2.0-or-later",
"engines": {
"node": ">=18.12.0",
@@ -3596,6 +3747,27 @@
"node": ">= 0.6"
}
},
+ "node_modules/acorn": {
+ "version": "8.16.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz",
+ "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==",
+ "license": "MIT",
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/acorn-jsx": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+ "license": "MIT",
+ "peerDependencies": {
+ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ }
+ },
"node_modules/ajv": {
"version": "8.20.0",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz",
@@ -3690,16 +3862,25 @@
"url": "https://github.com/sponsors/wooorm"
}
},
+ "node_modules/astring": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/astring/-/astring-1.9.0.tgz",
+ "integrity": "sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==",
+ "license": "MIT",
+ "bin": {
+ "astring": "bin/astring"
+ }
+ },
"node_modules/astro": {
- "version": "6.2.2",
- "resolved": "https://registry.npmjs.org/astro/-/astro-6.2.2.tgz",
- "integrity": "sha512-zkne2lZU+iTZPBK8F4gbMfrw5f11bT4VXiBxcdFHcPvYyH+Hox7V1sZu97RDpvwmHi+wQ0efKv89KY5744a0jQ==",
+ "version": "6.3.5",
+ "resolved": "https://registry.npmjs.org/astro/-/astro-6.3.5.tgz",
+ "integrity": "sha512-gU+4KedkbTuVgz7YoVAN+9Ftnq0GaYwejxK2NbqDzB0M9dWd0f3kXZBuaM9hzbchRFoRAJfJjFtdX9LK6Ir7ZA==",
"license": "MIT",
"dependencies": {
"@astrojs/compiler": "^4.0.0",
- "@astrojs/internal-helpers": "0.9.0",
- "@astrojs/markdown-remark": "7.1.1",
- "@astrojs/telemetry": "3.3.1",
+ "@astrojs/internal-helpers": "0.9.1",
+ "@astrojs/markdown-remark": "7.1.2",
+ "@astrojs/telemetry": "3.3.2",
"@capsizecss/unpack": "^4.0.0",
"@clack/prompts": "^1.1.0",
"@oslojs/encoding": "^1.1.0",
@@ -3854,9 +4035,9 @@
}
},
"node_modules/better-sqlite3": {
- "version": "12.9.0",
- "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-12.9.0.tgz",
- "integrity": "sha512-wqUv4Gm3toFpHDQmaKD4QhZm3g1DjUBI0yzS4UBl6lElUmXFYdTQmmEDpAFa5o8FiFiymURypEnfVHzILKaxqQ==",
+ "version": "12.10.0",
+ "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-12.10.0.tgz",
+ "integrity": "sha512-CyzaZRQKyHkB2ZInfTTl2nvT33EbDpjkLEbE8/Zck3Ll6O0qqvuGdrJ45HgtH+HykRg88ITY3AdreBGN70aBSQ==",
"hasInstallScript": true,
"license": "MIT",
"dependencies": {
@@ -3864,7 +4045,7 @@
"prebuild-install": "^7.1.1"
},
"engines": {
- "node": "20.x || 22.x || 23.x || 24.x || 25.x"
+ "node": "20.x || 22.x || 23.x || 24.x || 25.x || 26.x"
}
},
"node_modules/bindings": {
@@ -4078,6 +4259,16 @@
"url": "https://github.com/sponsors/wooorm"
}
},
+ "node_modules/character-reference-invalid": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz",
+ "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/chokidar": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz",
@@ -4144,6 +4335,16 @@
"node": ">=6"
}
},
+ "node_modules/collapse-white-space": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-2.1.0.tgz",
+ "integrity": "sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/comma-separated-tokens": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz",
@@ -4388,9 +4589,9 @@
}
},
"node_modules/date-fns": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz",
- "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==",
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.2.1.tgz",
+ "integrity": "sha512-37RhSdxaG1suen6VDCza6rNrQfooyQh57HFVPwQGEq2QWliVLzPQZ8Oa017weOu+HZCnzI7N3Pf/wyoBKfEqrA==",
"license": "MIT",
"funding": {
"type": "github",
@@ -4403,6 +4604,12 @@
"integrity": "sha512-hTIP/z+t+qKwBDcmmsnmjWTduxCg+5KfdqWQvb2X/8C9+knYY6epN/pfxdDuyVlSVeFz0sM5eEfwIUQ70U4ckg==",
"license": "MIT"
},
+ "node_modules/dayjs": {
+ "version": "1.11.20",
+ "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.20.tgz",
+ "integrity": "sha512-YbwwqR/uYpeoP4pu043q+LTDLFBLApUP6VxRihdfNTqu4ubqMlGDLd6ErXhEgsyvY0K6nCs7nggYumAN+9uEuQ==",
+ "license": "MIT"
+ },
"node_modules/debug": {
"version": "4.4.3",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
@@ -4533,12 +4740,6 @@
"node": ">=0.3.1"
}
},
- "node_modules/dlv": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
- "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
- "license": "MIT"
- },
"node_modules/dom-serializer": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",
@@ -4593,9 +4794,9 @@
}
},
"node_modules/dompurify": {
- "version": "3.4.2",
- "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.4.2.tgz",
- "integrity": "sha512-lHeS9SA/IKeIFFyYciHBr2n0v1VMPlSj843HdLOwjb2OxNwdq9Xykxqhk+FE42MzAdHvInbAolSE4mhahPpjXA==",
+ "version": "3.4.5",
+ "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.4.5.tgz",
+ "integrity": "sha512-OrwIBKsdNSVEeubdJ1HBv/wNENRM9ytAVCv7YXt//A3vPdVMNuACRqK9mXCGCBW2ln7BT/A4X0jXHo2Gu89miA==",
"license": "(MPL-2.0 OR Apache-2.0)",
"optionalDependencies": {
"@types/trusted-types": "^2.0.7"
@@ -4667,14 +4868,15 @@
"license": "ISC"
},
"node_modules/emdash": {
- "version": "0.9.0",
- "resolved": "https://registry.npmjs.org/emdash/-/emdash-0.9.0.tgz",
- "integrity": "sha512-GsNKpWPIkidjby4wTnFB+jcf8iswhejZVeMjNkZ9pl+YCfl12sSGC7BqPXmqXL6VoPJ0BiLqacFWya0yC0oHHg==",
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/emdash/-/emdash-0.12.0.tgz",
+ "integrity": "sha512-LsCq7HeR8xHJ6CLJh/NSOKWgP8N+HXR6VRz+TmLdgbOtA/thnXstHw95BCvF3wiDrcwjbL9FQPJIB/fjLFFY0Q==",
"license": "MIT",
"dependencies": {
- "@emdash-cms/admin": "0.9.0",
- "@emdash-cms/auth": "0.9.0",
- "@emdash-cms/gutenberg-to-portable-text": "0.9.0",
+ "@emdash-cms/admin": "0.12.0",
+ "@emdash-cms/auth": "0.12.0",
+ "@emdash-cms/gutenberg-to-portable-text": "0.12.0",
+ "@emdash-cms/plugin-types": "0.0.1",
"@floating-ui/react": "^0.27.16",
"@modelcontextprotocol/sdk": "^1.26.0",
"@oslojs/crypto": "^1.0.1",
@@ -4722,7 +4924,7 @@
},
"peerDependencies": {
"@astrojs/react": ">=5.0.0-beta.0",
- "@emdash-cms/auth-atproto": ">=0.2.1",
+ "@emdash-cms/auth-atproto": ">=0.2.5",
"astro": ">=6.0.0-beta.0",
"react": ">=18.0.0",
"react-dom": ">=18.0.0"
@@ -4799,6 +5001,38 @@
"node": ">= 0.4"
}
},
+ "node_modules/esast-util-from-estree": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/esast-util-from-estree/-/esast-util-from-estree-2.0.0.tgz",
+ "integrity": "sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree-jsx": "^1.0.0",
+ "devlop": "^1.0.0",
+ "estree-util-visit": "^2.0.0",
+ "unist-util-position-from-estree": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/esast-util-from-js": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/esast-util-from-js/-/esast-util-from-js-2.0.1.tgz",
+ "integrity": "sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree-jsx": "^1.0.0",
+ "acorn": "^8.0.0",
+ "esast-util-from-estree": "^2.0.0",
+ "vfile-message": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
"node_modules/esbuild": {
"version": "0.27.7",
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.7.tgz",
@@ -4867,6 +5101,97 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/estree-util-attach-comments": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/estree-util-attach-comments/-/estree-util-attach-comments-3.0.0.tgz",
+ "integrity": "sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree": "^1.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/estree-util-build-jsx": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/estree-util-build-jsx/-/estree-util-build-jsx-3.0.1.tgz",
+ "integrity": "sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree-jsx": "^1.0.0",
+ "devlop": "^1.0.0",
+ "estree-util-is-identifier-name": "^3.0.0",
+ "estree-walker": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/estree-util-build-jsx/node_modules/estree-walker": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz",
+ "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree": "^1.0.0"
+ }
+ },
+ "node_modules/estree-util-is-identifier-name": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz",
+ "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==",
+ "license": "MIT",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/estree-util-scope": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/estree-util-scope/-/estree-util-scope-1.0.0.tgz",
+ "integrity": "sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree": "^1.0.0",
+ "devlop": "^1.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/estree-util-to-js": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/estree-util-to-js/-/estree-util-to-js-2.0.0.tgz",
+ "integrity": "sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree-jsx": "^1.0.0",
+ "astring": "^1.8.0",
+ "source-map": "^0.7.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/estree-util-visit": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-2.0.0.tgz",
+ "integrity": "sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree-jsx": "^1.0.0",
+ "@types/unist": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
"node_modules/estree-walker": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
@@ -4962,12 +5287,12 @@
}
},
"node_modules/express-rate-limit": {
- "version": "8.5.0",
- "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-8.5.0.tgz",
- "integrity": "sha512-XKhFohWaSBdVJNTi5TaHziqnPkv04I9UQV6q1Wy7Ui6GGQZVW12ojDFwqer14EvCXxjvPG0CyWXx7cAXpALB4Q==",
+ "version": "8.5.2",
+ "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-8.5.2.tgz",
+ "integrity": "sha512-5Kb34ipNX694DH48vN9irak1Qx30nb0PLYHXfJgw4YEjiC3ZEmZJhwOp+VfiCYwFzvFTdB9QkArYS5kXa2cx2A==",
"license": "MIT",
"dependencies": {
- "ip-address": "10.1.0"
+ "ip-address": "^10.2.0"
},
"engines": {
"node": ">= 16"
@@ -5170,13 +5495,13 @@
}
},
"node_modules/framer-motion": {
- "version": "12.38.0",
- "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.38.0.tgz",
- "integrity": "sha512-rFYkY/pigbcswl1XQSb7q424kSTQ8q6eAC+YUsSKooHQYuLdzdHjrt6uxUC+PRAO++q5IS7+TamgIw1AphxR+g==",
+ "version": "12.39.0",
+ "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.39.0.tgz",
+ "integrity": "sha512-+vnLfzrv0MzjLzNl+nvNvR7jdg3q4cxxjz/YvzfifHl0TREtL00cs1RoMTxs+1PzLiEqZGV6gYsBY0oEAYZ24w==",
"license": "MIT",
"dependencies": {
- "motion-dom": "^12.38.0",
- "motion-utils": "^12.36.0",
+ "motion-dom": "^12.39.0",
+ "motion-utils": "^12.39.0",
"tslib": "^2.4.0"
},
"peerDependencies": {
@@ -5449,6 +5774,34 @@
"url": "https://opencollective.com/unified"
}
},
+ "node_modules/hast-util-to-estree": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-3.1.3.tgz",
+ "integrity": "sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree": "^1.0.0",
+ "@types/estree-jsx": "^1.0.0",
+ "@types/hast": "^3.0.0",
+ "comma-separated-tokens": "^2.0.0",
+ "devlop": "^1.0.0",
+ "estree-util-attach-comments": "^3.0.0",
+ "estree-util-is-identifier-name": "^3.0.0",
+ "hast-util-whitespace": "^3.0.0",
+ "mdast-util-mdx-expression": "^2.0.0",
+ "mdast-util-mdx-jsx": "^3.0.0",
+ "mdast-util-mdxjs-esm": "^2.0.0",
+ "property-information": "^7.0.0",
+ "space-separated-tokens": "^2.0.0",
+ "style-to-js": "^1.0.0",
+ "unist-util-position": "^5.0.0",
+ "zwitch": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
"node_modules/hast-util-to-html": {
"version": "9.0.5",
"resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz",
@@ -5472,6 +5825,33 @@
"url": "https://opencollective.com/unified"
}
},
+ "node_modules/hast-util-to-jsx-runtime": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.6.tgz",
+ "integrity": "sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree": "^1.0.0",
+ "@types/hast": "^3.0.0",
+ "@types/unist": "^3.0.0",
+ "comma-separated-tokens": "^2.0.0",
+ "devlop": "^1.0.0",
+ "estree-util-is-identifier-name": "^3.0.0",
+ "hast-util-whitespace": "^3.0.0",
+ "mdast-util-mdx-expression": "^2.0.0",
+ "mdast-util-mdx-jsx": "^3.0.0",
+ "mdast-util-mdxjs-esm": "^2.0.0",
+ "property-information": "^7.0.0",
+ "space-separated-tokens": "^2.0.0",
+ "style-to-js": "^1.0.0",
+ "unist-util-position": "^5.0.0",
+ "vfile-message": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
"node_modules/hast-util-to-parse5": {
"version": "8.0.1",
"resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.1.tgz",
@@ -5538,9 +5918,9 @@
}
},
"node_modules/hono": {
- "version": "4.12.17",
- "resolved": "https://registry.npmjs.org/hono/-/hono-4.12.17.tgz",
- "integrity": "sha512-FbJJNb/XgX7YW0hX/V8w5oYLztKEsRLykCMZWt1WdLtsfjzMvmoqWBA4H4t5norinq8/rh20oiZYr+WSl4UzAQ==",
+ "version": "4.12.19",
+ "resolved": "https://registry.npmjs.org/hono/-/hono-4.12.19.tgz",
+ "integrity": "sha512-xa3eYXYXx68XTT4hZ7dRzsXBhaq85ToSrlUJNoR0gwz/1Ap/CNwX47wfvV7pc/xWhjKVVkLT7zBJy8chhNguqQ==",
"license": "MIT",
"engines": {
"node": ">=16.9.0"
@@ -5679,10 +6059,16 @@
"integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
"license": "ISC"
},
+ "node_modules/inline-style-parser": {
+ "version": "0.2.7",
+ "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.7.tgz",
+ "integrity": "sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==",
+ "license": "MIT"
+ },
"node_modules/ip-address": {
- "version": "10.1.0",
- "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.1.0.tgz",
- "integrity": "sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==",
+ "version": "10.2.0",
+ "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.2.0.tgz",
+ "integrity": "sha512-/+S6j4E9AHvW9SWMSEY9Xfy66O5PWvVEJ08O0y5JGyEKQpojb0K0GKpz/v5HJ/G0vi3D2sjGK78119oXZeE0qA==",
"license": "MIT",
"engines": {
"node": ">= 12"
@@ -5706,6 +6092,40 @@
"url": "https://github.com/sponsors/brc-dd"
}
},
+ "node_modules/is-alphabetical": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz",
+ "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/is-alphanumerical": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz",
+ "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==",
+ "license": "MIT",
+ "dependencies": {
+ "is-alphabetical": "^2.0.0",
+ "is-decimal": "^2.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/is-decimal": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz",
+ "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/is-docker": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/is-docker/-/is-docker-4.0.0.tgz",
@@ -5721,6 +6141,16 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/is-hexadecimal": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz",
+ "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/is-inside-container": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz",
@@ -5919,6 +6349,15 @@
"node": ">=14.0.0"
}
},
+ "node_modules/launder": {
+ "version": "1.7.1",
+ "resolved": "https://registry.npmjs.org/launder/-/launder-1.7.1.tgz",
+ "integrity": "sha512-mU6WRz5EusL9ZZuiZ5SO4Y6C0P9PAUR9iwdb6bzj4KDihm28DiHFw+/yk9DBH4f+Pv1wuzQ4e2jV3oQ7mkIqvw==",
+ "license": "MIT",
+ "dependencies": {
+ "dayjs": "^1.11.7"
+ }
+ },
"node_modules/layerr": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/layerr/-/layerr-3.0.0.tgz",
@@ -5989,9 +6428,9 @@
}
},
"node_modules/linkifyjs": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/linkifyjs/-/linkifyjs-4.3.2.tgz",
- "integrity": "sha512-NT1CJtq3hHIreOianA8aSXn6Cw0JzYOuDQbOrSPe7gqFnCpKP++MQe3ODgO3oh2GJFORkAAdqredOa60z63GbA==",
+ "version": "4.3.3",
+ "resolved": "https://registry.npmjs.org/linkifyjs/-/linkifyjs-4.3.3.tgz",
+ "integrity": "sha512-P8aEP5U/D1/IlTY2OeYsErdwh9bGuLE30NcXtKEjgdHcahveQoQwM2yZNsioQHsWFz0P7KKudisbrzCgR0sDHg==",
"license": "MIT"
},
"node_modules/longest-streak": {
@@ -6033,6 +6472,18 @@
"source-map-js": "^1.2.1"
}
},
+ "node_modules/markdown-extensions": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-2.0.0.tgz",
+ "integrity": "sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/markdown-table": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz",
@@ -6220,6 +6671,83 @@
"url": "https://opencollective.com/unified"
}
},
+ "node_modules/mdast-util-mdx": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-3.0.0.tgz",
+ "integrity": "sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==",
+ "license": "MIT",
+ "dependencies": {
+ "mdast-util-from-markdown": "^2.0.0",
+ "mdast-util-mdx-expression": "^2.0.0",
+ "mdast-util-mdx-jsx": "^3.0.0",
+ "mdast-util-mdxjs-esm": "^2.0.0",
+ "mdast-util-to-markdown": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-mdx-expression": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz",
+ "integrity": "sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree-jsx": "^1.0.0",
+ "@types/hast": "^3.0.0",
+ "@types/mdast": "^4.0.0",
+ "devlop": "^1.0.0",
+ "mdast-util-from-markdown": "^2.0.0",
+ "mdast-util-to-markdown": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-mdx-jsx": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.2.0.tgz",
+ "integrity": "sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree-jsx": "^1.0.0",
+ "@types/hast": "^3.0.0",
+ "@types/mdast": "^4.0.0",
+ "@types/unist": "^3.0.0",
+ "ccount": "^2.0.0",
+ "devlop": "^1.1.0",
+ "mdast-util-from-markdown": "^2.0.0",
+ "mdast-util-to-markdown": "^2.0.0",
+ "parse-entities": "^4.0.0",
+ "stringify-entities": "^4.0.0",
+ "unist-util-stringify-position": "^4.0.0",
+ "vfile-message": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-mdxjs-esm": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz",
+ "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree-jsx": "^1.0.0",
+ "@types/hast": "^3.0.0",
+ "@types/mdast": "^4.0.0",
+ "devlop": "^1.0.0",
+ "mdast-util-from-markdown": "^2.0.0",
+ "mdast-util-to-markdown": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
"node_modules/mdast-util-phrasing": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz",
@@ -6506,6 +7034,108 @@
"url": "https://opencollective.com/unified"
}
},
+ "node_modules/micromark-extension-mdx-expression": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.1.tgz",
+ "integrity": "sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree": "^1.0.0",
+ "devlop": "^1.0.0",
+ "micromark-factory-mdx-expression": "^2.0.0",
+ "micromark-factory-space": "^2.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-events-to-acorn": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-extension-mdx-jsx": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.2.tgz",
+ "integrity": "sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree": "^1.0.0",
+ "devlop": "^1.0.0",
+ "estree-util-is-identifier-name": "^3.0.0",
+ "micromark-factory-mdx-expression": "^2.0.0",
+ "micromark-factory-space": "^2.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-events-to-acorn": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0",
+ "vfile-message": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-extension-mdx-md": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-extension-mdx-md/-/micromark-extension-mdx-md-2.0.0.tgz",
+ "integrity": "sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==",
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-types": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-extension-mdxjs": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs/-/micromark-extension-mdxjs-3.0.0.tgz",
+ "integrity": "sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==",
+ "license": "MIT",
+ "dependencies": {
+ "acorn": "^8.0.0",
+ "acorn-jsx": "^5.0.0",
+ "micromark-extension-mdx-expression": "^3.0.0",
+ "micromark-extension-mdx-jsx": "^3.0.0",
+ "micromark-extension-mdx-md": "^2.0.0",
+ "micromark-extension-mdxjs-esm": "^3.0.0",
+ "micromark-util-combine-extensions": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-extension-mdxjs-esm": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-3.0.0.tgz",
+ "integrity": "sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree": "^1.0.0",
+ "devlop": "^1.0.0",
+ "micromark-core-commonmark": "^2.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-events-to-acorn": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0",
+ "unist-util-position-from-estree": "^2.0.0",
+ "vfile-message": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
"node_modules/micromark-factory-destination": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz",
@@ -6549,6 +7179,33 @@
"micromark-util-types": "^2.0.0"
}
},
+ "node_modules/micromark-factory-mdx-expression": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.3.tgz",
+ "integrity": "sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree": "^1.0.0",
+ "devlop": "^1.0.0",
+ "micromark-factory-space": "^2.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-events-to-acorn": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0",
+ "unist-util-position-from-estree": "^2.0.0",
+ "vfile-message": "^4.0.0"
+ }
+ },
"node_modules/micromark-factory-space": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz",
@@ -6750,6 +7407,31 @@
],
"license": "MIT"
},
+ "node_modules/micromark-util-events-to-acorn": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-2.0.3.tgz",
+ "integrity": "sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree": "^1.0.0",
+ "@types/unist": "^3.0.0",
+ "devlop": "^1.0.0",
+ "estree-util-visit": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0",
+ "vfile-message": "^4.0.0"
+ }
+ },
"node_modules/micromark-util-html-tag-name": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz",
@@ -6962,12 +7644,12 @@
"license": "BSD-3-Clause"
},
"node_modules/motion": {
- "version": "12.38.0",
- "resolved": "https://registry.npmjs.org/motion/-/motion-12.38.0.tgz",
- "integrity": "sha512-uYfXzeHlgThchzwz5Te47dlv5JOUC7OB4rjJ/7XTUgtBZD8CchMN8qEJ4ZVsUmTyYA44zjV0fBwsiktRuFnn+w==",
+ "version": "12.39.0",
+ "resolved": "https://registry.npmjs.org/motion/-/motion-12.39.0.tgz",
+ "integrity": "sha512-H4a+Ze+a9j+/NTla5ezfb/g9vmIOxC+viDj++NGDZyTZkdRKjiOz3kSv6TalRWM8ZmD2y/CfC6TkQc97ybyqSA==",
"license": "MIT",
"dependencies": {
- "framer-motion": "^12.38.0",
+ "framer-motion": "^12.39.0",
"tslib": "^2.4.0"
},
"peerDependencies": {
@@ -6988,18 +7670,18 @@
}
},
"node_modules/motion-dom": {
- "version": "12.38.0",
- "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.38.0.tgz",
- "integrity": "sha512-pdkHLD8QYRp8VfiNLb8xIBJis1byQ9gPT3Jnh2jqfFtAsWUA3dEepDlsWe/xMpO8McV+VdpKVcp+E+TGJEtOoA==",
+ "version": "12.39.0",
+ "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.39.0.tgz",
+ "integrity": "sha512-Xn7aAcGDhco/JZTXOub64UmaYn73C6J1Po7Fk+8EvkJsNGTqfhon6UJY53vJKXW5v5Zl8HrYsVxv6oPXeGoGLQ==",
"license": "MIT",
"dependencies": {
- "motion-utils": "^12.36.0"
+ "motion-utils": "^12.39.0"
}
},
"node_modules/motion-utils": {
- "version": "12.36.0",
- "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.36.0.tgz",
- "integrity": "sha512-eHWisygbiwVvf6PZ1vhaHCLamvkSbPIeAYxWUuL3a2PD/TROgE7FvfHWTIH4vMl798QLfMw15nRqIaRDXTlYRg==",
+ "version": "12.39.0",
+ "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.39.0.tgz",
+ "integrity": "sha512-8nadJAJjTtqRkmRF36FoJTrywK9nnFmnPwnSMyxaOCU7GDjN9RTMJIxx9De8ErM+vpPhMccr/6fo5WciyQLnMQ==",
"license": "MIT"
},
"node_modules/mrmime": {
@@ -7073,9 +7755,9 @@
}
},
"node_modules/node-abi": {
- "version": "3.91.0",
- "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.91.0.tgz",
- "integrity": "sha512-B+S7X/GS3Un6wMICtnsNjQD7oSpVBQrZftHE6GZ1Fe9/k3XOOoqbM5DZZ0GO4x3YiSCQfrM28yj1ppplwgIsfg==",
+ "version": "3.92.0",
+ "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.92.0.tgz",
+ "integrity": "sha512-KdHvFWZjEKDf0cakgFjebl371GPsISX2oZHcuyKqM7DtogIsHrqKeLTo8wBHxaXRAQlY2PsPlZmfo+9ZCxEREQ==",
"license": "MIT",
"dependencies": {
"semver": "^7.3.5"
@@ -7310,6 +7992,31 @@
"integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==",
"license": "(MIT AND Zlib)"
},
+ "node_modules/parse-entities": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz",
+ "integrity": "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^2.0.0",
+ "character-entities-legacy": "^3.0.0",
+ "character-reference-invalid": "^2.0.0",
+ "decode-named-character-reference": "^1.0.0",
+ "is-alphanumerical": "^2.0.0",
+ "is-decimal": "^2.0.0",
+ "is-hexadecimal": "^2.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/parse-entities/node_modules/@types/unist": {
+ "version": "2.0.11",
+ "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz",
+ "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==",
+ "license": "MIT"
+ },
"node_modules/parse-latin": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/parse-latin/-/parse-latin-7.0.0.tgz",
@@ -7375,15 +8082,15 @@
}
},
"node_modules/pg": {
- "version": "8.20.0",
- "resolved": "https://registry.npmjs.org/pg/-/pg-8.20.0.tgz",
- "integrity": "sha512-ldhMxz2r8fl/6QkXnBD3CR9/xg694oT6DZQ2s6c/RI28OjtSOpxnPrUCGOBJ46RCUxcWdx3p6kw/xnDHjKvaRA==",
+ "version": "8.21.0",
+ "resolved": "https://registry.npmjs.org/pg/-/pg-8.21.0.tgz",
+ "integrity": "sha512-AUP1EYJuHraQGsVoCQVIcM7TEJVGtDzxWtGFZd8rds9d+CCXlU5Js1rYgfLNvxy9iJrpHjGrRjoi/3BT9fRyiA==",
"license": "MIT",
"optional": true,
"dependencies": {
- "pg-connection-string": "^2.12.0",
- "pg-pool": "^3.13.0",
- "pg-protocol": "^1.13.0",
+ "pg-connection-string": "^2.13.0",
+ "pg-pool": "^3.14.0",
+ "pg-protocol": "^1.14.0",
"pg-types": "2.2.0",
"pgpass": "1.0.5"
},
@@ -7391,7 +8098,7 @@
"node": ">= 16.0.0"
},
"optionalDependencies": {
- "pg-cloudflare": "^1.3.0"
+ "pg-cloudflare": "^1.4.0"
},
"peerDependencies": {
"pg-native": ">=3.0.1"
@@ -7403,16 +8110,16 @@
}
},
"node_modules/pg-cloudflare": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.3.0.tgz",
- "integrity": "sha512-6lswVVSztmHiRtD6I8hw4qP/nDm1EJbKMRhf3HCYaqud7frGysPv7FYJ5noZQdhQtN2xJnimfMtvQq21pdbzyQ==",
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.4.0.tgz",
+ "integrity": "sha512-Vo7z/6rrQYxpNRylp4Tlob2elzbh+N/MOQbxFVWCxS7oEx6jF53GTJFxK2WWpKuBRkmiin4Mt+xofFDjx09R0A==",
"license": "MIT",
"optional": true
},
"node_modules/pg-connection-string": {
- "version": "2.12.0",
- "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.12.0.tgz",
- "integrity": "sha512-U7qg+bpswf3Cs5xLzRqbXbQl85ng0mfSV/J0nnA31MCLgvEaAo7CIhmeyrmJpOr7o+zm0rXK+hNnT5l9RHkCkQ==",
+ "version": "2.13.0",
+ "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.13.0.tgz",
+ "integrity": "sha512-EMnU9E2fSULdsbErBbMaXJvFeD9B4+nPcM3f+4lsiCR0BHLPrLVjv3DbyM2hgQQviKJaTWIRRTjKjWlHg3p2ig==",
"license": "MIT",
"optional": true
},
@@ -7427,9 +8134,9 @@
}
},
"node_modules/pg-pool": {
- "version": "3.13.0",
- "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.13.0.tgz",
- "integrity": "sha512-gB+R+Xud1gLFuRD/QgOIgGOBE2KCQPaPwkzBBGC9oG69pHTkhQeIuejVIk3/cnDyX39av2AxomQiyPT13WKHQA==",
+ "version": "3.14.0",
+ "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.14.0.tgz",
+ "integrity": "sha512-gKtPkFdQPU3DksooVLi9LsjZxrsBUZIpa+7aVx+LV5pNh0KzP4Zleud2po+ConrxbuXGBJ6Hfer6hdgpIBpBaw==",
"license": "MIT",
"optional": true,
"peerDependencies": {
@@ -7437,9 +8144,9 @@
}
},
"node_modules/pg-protocol": {
- "version": "1.13.0",
- "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.13.0.tgz",
- "integrity": "sha512-zzdvXfS6v89r6v7OcFCHfHlyG/wvry1ALxZo4LqgUoy7W9xhBDMaqOuMiF3qEV45VqsN6rdlcehHrfDtlCPc8w==",
+ "version": "1.14.0",
+ "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.14.0.tgz",
+ "integrity": "sha512-n5taZ1kO3s9ngDTVxsEznOqCyToTgz0FLuPq0B33COy5pPpuWJpY3/2oRBVETuOgzdqRXfWpM9HIhp2LBBT1BA==",
"license": "MIT",
"optional": true
},
@@ -7693,9 +8400,9 @@
}
},
"node_modules/prosemirror-model": {
- "version": "1.25.4",
- "resolved": "https://registry.npmjs.org/prosemirror-model/-/prosemirror-model-1.25.4.tgz",
- "integrity": "sha512-PIM7E43PBxKce8OQeezAs9j4TP+5yDpZVbuurd1h5phUxEKIu+G2a+EUZzIC5nS1mJktDJWzbqS23n1tsAf5QA==",
+ "version": "1.25.7",
+ "resolved": "https://registry.npmjs.org/prosemirror-model/-/prosemirror-model-1.25.7.tgz",
+ "integrity": "sha512-A79aN8QEFUwI6cax8Yq4Rpcx1TJZ3Kagn+ii7qLo4/V8H3mMiHrhFyhTyHHvpSnOgMPpWiDGSwM3etwrxE50ug==",
"license": "MIT",
"dependencies": {
"orderedmap": "^2.0.0"
@@ -7780,9 +8487,9 @@
}
},
"node_modules/qs": {
- "version": "6.15.1",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.1.tgz",
- "integrity": "sha512-6YHEFRL9mfgcAvql/XhwTvf5jKcOiiupt2FiJxHkiX1z4j7WL8J/jRHYLluORvc1XxB5rV20KoeK00gVJamspg==",
+ "version": "6.15.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.2.tgz",
+ "integrity": "sha512-Rzq0KEyX/w/tEybncDgdkZrJgVUsUMk3xjh3t5bv3S1HTAtg+uOYt72+ZfwiQwKdysThkTBdL/rTi6HDmX9Ddw==",
"license": "BSD-3-Clause",
"dependencies": {
"side-channel": "^1.1.0"
@@ -7931,6 +8638,73 @@
"url": "https://paulmillr.com/funding/"
}
},
+ "node_modules/recma-build-jsx": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/recma-build-jsx/-/recma-build-jsx-1.0.0.tgz",
+ "integrity": "sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree": "^1.0.0",
+ "estree-util-build-jsx": "^3.0.0",
+ "vfile": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/recma-jsx": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/recma-jsx/-/recma-jsx-1.0.1.tgz",
+ "integrity": "sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w==",
+ "license": "MIT",
+ "dependencies": {
+ "acorn-jsx": "^5.0.0",
+ "estree-util-to-js": "^2.0.0",
+ "recma-parse": "^1.0.0",
+ "recma-stringify": "^1.0.0",
+ "unified": "^11.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ },
+ "peerDependencies": {
+ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/recma-parse": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/recma-parse/-/recma-parse-1.0.0.tgz",
+ "integrity": "sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree": "^1.0.0",
+ "esast-util-from-js": "^2.0.0",
+ "unified": "^11.0.0",
+ "vfile": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/recma-stringify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/recma-stringify/-/recma-stringify-1.0.0.tgz",
+ "integrity": "sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree": "^1.0.0",
+ "estree-util-to-js": "^2.0.0",
+ "unified": "^11.0.0",
+ "vfile": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
"node_modules/regex": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/regex/-/regex-6.1.0.tgz",
@@ -8001,6 +8775,21 @@
"url": "https://opencollective.com/unified"
}
},
+ "node_modules/rehype-recma": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/rehype-recma/-/rehype-recma-1.0.0.tgz",
+ "integrity": "sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree": "^1.0.0",
+ "@types/hast": "^3.0.0",
+ "hast-util-to-estree": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
"node_modules/rehype-stringify": {
"version": "10.0.1",
"resolved": "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-10.0.1.tgz",
@@ -8034,6 +8823,20 @@
"url": "https://opencollective.com/unified"
}
},
+ "node_modules/remark-mdx": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.1.1.tgz",
+ "integrity": "sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg==",
+ "license": "MIT",
+ "dependencies": {
+ "mdast-util-mdx": "^3.0.0",
+ "micromark-extension-mdxjs": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
"node_modules/remark-parse": {
"version": "11.0.0",
"resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz",
@@ -8107,9 +8910,9 @@
}
},
"node_modules/reselect": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/reselect/-/reselect-5.1.1.tgz",
- "integrity": "sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==",
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/reselect/-/reselect-5.2.0.tgz",
+ "integrity": "sha512-AgZ3UOZm3YndfrJ4OYjgrT7bmCm/1iqkjvEfH/oYjzh6PD2qw4QuT3jjnXIrpdt4MTpMXclMT3lXbmRY+XRakw==",
"license": "MIT"
},
"node_modules/resolve-pkg-maps": {
@@ -8275,15 +9078,16 @@
"license": "MIT"
},
"node_modules/sanitize-html": {
- "version": "2.17.3",
- "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-2.17.3.tgz",
- "integrity": "sha512-Kn4srCAo2+wZyvCNKCSyB2g8RQ8IkX/gQs2uqoSRNu5t9I2qvUyAVvRDiFUVAiX3N3PNuwStY0eNr+ooBHVWEg==",
+ "version": "2.17.4",
+ "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-2.17.4.tgz",
+ "integrity": "sha512-2HW7v2ol/uAM7sX4hbD8Z59OGWmAPrvjL8E71UWlBcj6m+kcF6ilQBLny+cIgY214QJeJT5tQuxKKqX0SQqjGQ==",
"license": "MIT",
"dependencies": {
"deepmerge": "^4.2.2",
"escape-string-regexp": "^4.0.0",
"htmlparser2": "^10.1.0",
"is-plain-object": "^5.0.0",
+ "launder": "^1.7.1",
"parse-srcset": "^1.0.2",
"postcss": "^8.3.11"
}
@@ -8625,6 +9429,15 @@
"url": "https://github.com/sponsors/cyyynthia"
}
},
+ "node_modules/source-map": {
+ "version": "0.7.6",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz",
+ "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==",
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">= 12"
+ }
+ },
"node_modules/source-map-js": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
@@ -8695,6 +9508,24 @@
"node": ">=0.10.0"
}
},
+ "node_modules/style-to-js": {
+ "version": "1.1.21",
+ "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.21.tgz",
+ "integrity": "sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==",
+ "license": "MIT",
+ "dependencies": {
+ "style-to-object": "1.0.14"
+ }
+ },
+ "node_modules/style-to-object": {
+ "version": "1.0.14",
+ "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.14.tgz",
+ "integrity": "sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==",
+ "license": "MIT",
+ "dependencies": {
+ "inline-style-parser": "0.2.7"
+ }
+ },
"node_modules/svgo": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/svgo/-/svgo-4.0.1.tgz",
@@ -8727,9 +9558,9 @@
"license": "MIT"
},
"node_modules/tailwind-merge": {
- "version": "3.5.0",
- "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.5.0.tgz",
- "integrity": "sha512-I8K9wewnVDkL1NTGoqWmVEIlUcB9gFriAEkXkfCjX5ib8ezGxtR3xD7iZIxrfArjEsH7F1CHD4RFUtxefdqV/A==",
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.6.0.tgz",
+ "integrity": "sha512-uxL7qAVQriqRQPAyK3pj66VqskWqoZ37PW94jwOTwNfq/z9oyu1V+eqrZqtR2+fCiXdYOZe/Modt8GtvqNzu+w==",
"license": "MIT",
"funding": {
"type": "github",
@@ -8864,17 +9695,34 @@
}
},
"node_modules/type-is": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz",
- "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.1.0.tgz",
+ "integrity": "sha512-faYHw0anBbc/kWF3zFTEnxSFOAGUX9GFbOBthvDdLsIlEoWOFOtS0zgCiQYwIskL9iGXZL3kAXD8OoZ4GmMATA==",
"license": "MIT",
"dependencies": {
- "content-type": "^1.0.5",
+ "content-type": "^2.0.0",
"media-typer": "^1.1.0",
"mime-types": "^3.0.0"
},
"engines": {
- "node": ">= 0.6"
+ "node": ">= 18"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
+ }
+ },
+ "node_modules/type-is/node_modules/content-type": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.0.0.tgz",
+ "integrity": "sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
}
},
"node_modules/ufo": {
@@ -8908,9 +9756,9 @@
"license": "MIT"
},
"node_modules/undici-types": {
- "version": "7.19.2",
- "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.19.2.tgz",
- "integrity": "sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg==",
+ "version": "7.24.6",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.24.6.tgz",
+ "integrity": "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==",
"license": "MIT",
"optional": true
},
@@ -8998,6 +9846,19 @@
"url": "https://opencollective.com/unified"
}
},
+ "node_modules/unist-util-position-from-estree": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/unist-util-position-from-estree/-/unist-util-position-from-estree-2.0.0.tgz",
+ "integrity": "sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
"node_modules/unist-util-remove-position": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz",
@@ -9427,9 +10288,9 @@
"license": "ISC"
},
"node_modules/ws": {
- "version": "8.20.0",
- "resolved": "https://registry.npmjs.org/ws/-/ws-8.20.0.tgz",
- "integrity": "sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==",
+ "version": "8.20.1",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.20.1.tgz",
+ "integrity": "sha512-It4dO0K5v//JtTXuPkfEOaI3uUN87iYPnqo/ZzqCoG3g8uhA66QUMs/SrM0YK7/NAu+r4LMh/9dq2A7k+rHs+w==",
"license": "MIT",
"optional": true,
"engines": {
diff --git a/package.json b/package.json
index dd76d8a..ba40339 100644
--- a/package.json
+++ b/package.json
@@ -12,10 +12,11 @@
"astro": "astro"
},
"dependencies": {
- "@astrojs/node": "^10.0.6",
- "@astrojs/react": "^5.0.4",
+ "@astrojs/mdx": "^5.0.6",
+ "@astrojs/node": "^10.1.1",
+ "@astrojs/react": "^5.0.5",
"astro": "^6.2.2",
- "emdash": "^0.9.0",
+ "emdash": "^0.12.0",
"react": "^19.2.5",
"react-dom": "^19.2.5"
}
diff --git a/public/images/services/ai-consult.jpg b/public/images/services/ai-consult.jpg
new file mode 100644
index 0000000..2baae7b
Binary files /dev/null and b/public/images/services/ai-consult.jpg differ
diff --git a/public/images/services/automation.jpg b/public/images/services/automation.jpg
new file mode 100644
index 0000000..2cfac39
Binary files /dev/null and b/public/images/services/automation.jpg differ
diff --git a/public/images/services/default.jpg b/public/images/services/default.jpg
new file mode 100644
index 0000000..2cfac39
Binary files /dev/null and b/public/images/services/default.jpg differ
diff --git a/public/images/services/marketing.jpg b/public/images/services/marketing.jpg
new file mode 100644
index 0000000..50178ac
Binary files /dev/null and b/public/images/services/marketing.jpg differ
diff --git a/public/images/services/webdev.jpg b/public/images/services/webdev.jpg
new file mode 100644
index 0000000..7eef437
Binary files /dev/null and b/public/images/services/webdev.jpg differ
diff --git a/seed-all.cjs b/seed-all.cjs
new file mode 100644
index 0000000..e150ccf
--- /dev/null
+++ b/seed-all.cjs
@@ -0,0 +1,52 @@
+const seed = require('./seed/seed.json');
+const Database = require('better-sqlite3');
+const db = new Database('./data.db');
+
+// Helper to get current timestamp
+const now = new Date().toISOString();
+
+// 1. Seed Pages
+const insertPage = db.prepare(`
+ INSERT OR REPLACE INTO ec_pages (id, slug, status, locale, title, subtitle, badge, hero_image, theme, show_cta, cta_text, cta_link, variant, size, created_at, updated_at, published_at)
+ VALUES (?, ?, 'published', 'th', ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
+`);
+(seed.content?.pages || []).forEach(p => {
+ insertPage.run(p.id, p.slug, p.data.title, p.data.subtitle, p.data.badge, p.data.hero_image, p.data.theme, p.data.show_cta ? 1 : 0, p.data.cta_text, p.data.cta_link, p.data.variant, p.data.size, now, now, now);
+});
+console.log('Pages seeded:', db.prepare('SELECT COUNT(*) as c FROM ec_pages').get().c);
+
+// 2. Seed Portfolio
+const insertPortfolio = db.prepare(`
+ INSERT OR REPLACE INTO ec_portfolio (id, slug, status, locale, name, url, category, category_label, thumbnail, description, created_at, updated_at, published_at)
+ VALUES (?, ?, 'published', 'th', ?, ?, ?, ?, ?, ?, ?, ?, ?)
+`);
+(seed.content?.portfolio || []).forEach((p, i) => {
+ const pid = p.id || `portfolio-${String(i + 1).padStart(3, '0')}`;
+ insertPortfolio.run(pid, p.slug, p.data.name, p.data.url, p.data.category, p.data.category_label, p.data.thumbnail, p.data.description, now, now, now);
+});
+console.log('Portfolio seeded:', db.prepare('SELECT COUNT(*) as c FROM ec_portfolio').get().c);
+
+// 3. Seed Blog
+const insertBlog = db.prepare(`
+ INSERT OR REPLACE INTO ec_blog (id, slug, status, locale, title, excerpt, image, date, category, content, created_at, updated_at, published_at)
+ VALUES (?, ?, 'published', 'th', ?, ?, ?, ?, ?, ?, ?, ?, ?)
+`);
+(seed.content?.blog || []).forEach((p, i) => {
+ const bid = p.id || `blog-${String(i + 1).padStart(3, '0')}`;
+ insertBlog.run(bid, p.slug, p.data.title, p.data.excerpt, p.data.image, p.data.date, p.data.category, JSON.stringify(p.data.content), now, now, now);
+});
+console.log('Blog seeded:', db.prepare('SELECT COUNT(*) as c FROM ec_blog').get().c);
+
+// 4. Seed FAQ
+const insertFaq = db.prepare(`
+ INSERT OR REPLACE INTO ec_faq (id, slug, status, locale, category, question, answer, created_at, updated_at)
+ VALUES (?, ?, 'published', 'th', ?, ?, ?, ?, ?)
+`);
+(seed.content?.faq || []).forEach((p, i) => {
+ const fid = p.id || `faq-${String(i + 1).padStart(3, '0')}`;
+ insertFaq.run(fid, p.slug || fid, p.data.category, p.data.question, p.data.answer, now, now);
+});
+console.log('FAQ seeded:', db.prepare('SELECT COUNT(*) as c FROM ec_faq').get().c);
+
+db.close();
+console.log('All seeding complete!');
\ No newline at end of file
diff --git a/seed-db.cjs b/seed-db.cjs
new file mode 100644
index 0000000..e6dc310
--- /dev/null
+++ b/seed-db.cjs
@@ -0,0 +1,14 @@
+const seed = require('./seed/seed.json');
+const Database = require('better-sqlite3');
+const db = new Database('./data.db');
+
+// Only seed pages for now
+const insertPage = db.prepare(
+ "INSERT OR REPLACE INTO ec_pages (id, slug, status, title, subtitle, badge, hero_image, theme, show_cta, cta_text, cta_link, variant, size, created_at, updated_at, published_at) VALUES (?, ?, 'published', ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, datetime('now'), datetime('now'), datetime('now'))"
+);
+(seed.content?.pages || []).forEach(p => {
+ insertPage.run(p.id, p.slug, p.data.title, p.data.subtitle, p.data.badge, p.data.hero_image, p.data.theme, p.data.show_cta ? 1 : 0, p.data.cta_text, p.data.cta_link, p.data.variant, p.data.size);
+});
+console.log('Pages:', db.prepare('SELECT COUNT(*) as c FROM ec_pages').get().c);
+db.close();
+console.log('Done');
\ No newline at end of file
diff --git a/seed-services.cjs b/seed-services.cjs
new file mode 100644
index 0000000..8333520
--- /dev/null
+++ b/seed-services.cjs
@@ -0,0 +1,26 @@
+const seed = require('./seed/seed.json');
+const Database = require('better-sqlite3');
+const db = new Database('./data.db');
+
+const cols = ['title','subtitle','badge','category','objective','hero_image',
+ 'usp_free_server','usp_content_edit',
+ 'feature1_icon','feature1_title','feature1_desc',
+ 'feature2_icon','feature2_title','feature2_desc',
+ 'feature3_icon','feature3_title','feature3_desc',
+ 'feature4_icon','feature4_title','feature4_desc',
+ 'feature5_icon','feature5_title','feature5_desc',
+ 'feature6_icon','feature6_title','feature6_desc'];
+
+const placeholders = cols.map(() => '?').join(', ');
+const sql = `INSERT OR REPLACE INTO ec_services (id, slug, status, ${cols.join(', ')}, created_at, updated_at, published_at) VALUES (?, ?, 'published', ${placeholders}, datetime('now'), datetime('now'), datetime('now'))`;
+
+const insertService = db.prepare(sql);
+
+(seed.content?.services || []).forEach(s => {
+ const vals = [s.id, s.slug];
+ cols.forEach(c => vals.push(s.data[c] ?? null));
+ insertService.run(...vals);
+});
+console.log('Services:', db.prepare('SELECT COUNT(*) as c FROM ec_services').get().c);
+db.close();
+console.log('Done');
\ No newline at end of file
diff --git a/seed/seed.json b/seed/seed.json
index 0156924..a1cb54c 100644
--- a/seed/seed.json
+++ b/seed/seed.json
@@ -1,85 +1,598 @@
{
+ "version": "1",
"collections": [
{
- "name": "pages",
+ "slug": "pages",
"label": "Pages",
"fields": [
- { "name": "title", "type": "string", "label": "Title" },
- { "name": "subtitle", "type": "string", "label": "Subtitle" },
- { "name": "badge", "type": "string", "label": "Badge" },
- { "name": "heroImage", "type": "image", "label": "Hero Image" },
- { "name": "theme", "type": "select", "label": "Theme", "options": ["yellow", "accent"] },
- { "name": "showCTA", "type": "boolean", "label": "Show CTA" },
- { "name": "ctaText", "type": "string", "label": "CTA Text" },
- { "name": "ctaLink", "type": "string", "label": "CTA Link" },
- { "name": "variant", "type": "select", "label": "Hero Variant", "options": ["split", "centered", "text-only", "floating-cards"] },
- { "name": "size", "type": "select", "label": "Hero Size", "options": ["full", "compact"] }
+ { "slug": "title", "type": "string", "label": "Title" },
+ { "slug": "subtitle", "type": "string", "label": "Subtitle" },
+ { "slug": "badge", "type": "string", "label": "Badge" },
+ { "slug": "hero_image", "type": "image", "label": "Hero Image" },
+ { "slug": "theme", "type": "select", "label": "Theme", "options": ["yellow", "accent"] },
+ { "slug": "show_cta", "type": "boolean", "label": "Show CTA" },
+ { "slug": "cta_text", "type": "string", "label": "CTA Text" },
+ { "slug": "cta_link", "type": "string", "label": "CTA Link" },
+ { "slug": "variant", "type": "select", "label": "Hero Variant", "options": ["split", "centered", "text_only", "floating_cards"] },
+ { "slug": "size", "type": "select", "label": "Hero Size", "options": ["full", "compact"] }
]
},
{
- "name": "services",
+ "slug": "services",
"label": "Services",
"fields": [
- { "name": "title", "type": "string", "label": "Title" },
- { "name": "subtitle", "type": "string", "label": "Subtitle" },
- { "name": "badge", "type": "string", "label": "Badge" },
- { "name": "heroImage", "type": "image", "label": "Hero Image" },
- { "name": "content", "type": "richtext", "label": "Content" },
- { "name": "features", "type": "array", "label": "Features", "fields": [
- { "name": "icon", "type": "string", "label": "Icon" },
- { "name": "title", "type": "string", "label": "Title" },
- { "name": "description", "type": "string", "label": "Description" }
- ]}
+ { "slug": "title", "type": "string", "label": "Title" },
+ { "slug": "subtitle", "type": "string", "label": "Subtitle" },
+ { "slug": "badge", "type": "string", "label": "Badge" },
+ { "slug": "category", "type": "select", "label": "Category", "options": ["tech-consult", "marketing-consult"] },
+ { "slug": "objective", "type": "string", "label": "Objective (Headline)" },
+ { "slug": "hero_image", "type": "image", "label": "Hero Image" },
+ { "slug": "usp_free_server", "type": "string", "label": "USP: Free Server Description" },
+ { "slug": "usp_content_edit", "type": "string", "label": "USP: Free Content Edit Description" },
+ { "slug": "content", "type": "portableText", "label": "Content" },
+ {
+ "slug": "features",
+ "type": "repeater",
+ "label": "Features",
+ "fields": [
+ { "slug": "icon", "type": "string", "label": "Icon" },
+ { "slug": "feature_title", "type": "string", "label": "Title" },
+ { "slug": "description", "type": "string", "label": "Description" }
+ ]
+ }
]
},
{
- "name": "portfolio",
+ "slug": "portfolio",
"label": "Portfolio",
"fields": [
- { "name": "name", "type": "string", "label": "Name" },
- { "name": "url", "type": "string", "label": "URL" },
- { "name": "category", "type": "select", "label": "Category", "options": ["webdev", "ecommerce", "marketing"] },
- { "name": "categoryLabel", "type": "string", "label": "Category Label" },
- { "name": "thumbnail", "type": "image", "label": "Thumbnail" },
- { "name": "description", "type": "string", "label": "Description" },
- { "name": "services", "type": "array", "label": "Services", "fields": [
- { "name": "name", "type": "string", "label": "Name" }
- ]}
+ { "slug": "name", "type": "string", "label": "Name" },
+ { "slug": "url", "type": "url", "label": "URL" },
+ { "slug": "category", "type": "select", "label": "Category", "options": ["webdev", "ecommerce", "marketing"] },
+ { "slug": "category_label", "type": "string", "label": "Category Label" },
+ { "slug": "thumbnail", "type": "image", "label": "Thumbnail" },
+ { "slug": "description", "type": "text", "label": "Description" },
+ {
+ "slug": "services",
+ "type": "repeater",
+ "label": "Services",
+ "fields": [
+ { "slug": "service_name", "type": "string", "label": "Name" }
+ ]
+ }
]
},
{
- "name": "blog",
+ "slug": "blog",
"label": "Blog",
"fields": [
- { "name": "title", "type": "string", "label": "Title" },
- { "name": "excerpt", "type": "string", "label": "Excerpt" },
- { "name": "image", "type": "image", "label": "Image" },
- { "name": "date", "type": "date", "label": "Date" },
- { "name": "category", "type": "string", "label": "Category" },
- { "name": "content", "type": "richtext", "label": "Content" }
+ { "slug": "title", "type": "string", "label": "Title" },
+ { "slug": "excerpt", "type": "string", "label": "Excerpt" },
+ { "slug": "image", "type": "image", "label": "Image" },
+ { "slug": "date", "type": "datetime", "label": "Date" },
+ { "slug": "category", "type": "string", "label": "Category" },
+ { "slug": "content", "type": "portableText", "label": "Content" }
]
},
{
- "name": "faq",
+ "slug": "faq",
"label": "FAQ",
"fields": [
- { "name": "category", "type": "string", "label": "Category" },
- { "name": "question", "type": "string", "label": "Question" },
- { "name": "answer", "type": "string", "label": "Answer" }
+ { "slug": "category", "type": "string", "label": "Category" },
+ { "slug": "question", "type": "string", "label": "Question" },
+ { "slug": "answer", "type": "text", "label": "Answer" }
]
},
{
- "name": "settings",
+ "slug": "settings",
"label": "Site Settings",
"fields": [
- { "name": "siteName", "type": "string", "label": "Site Name" },
- { "name": "email", "type": "string", "label": "Contact Email" },
- { "name": "phone", "type": "string", "label": "Contact Phone" },
- { "name": "address", "type": "string", "label": "Address" },
- { "name": "facebook", "type": "string", "label": "Facebook URL" },
- { "name": "line", "type": "string", "label": "LINE URL" },
- { "name": "linkedin", "type": "string", "label": "LinkedIn URL" }
+ { "slug": "site_name", "type": "string", "label": "Site Name" },
+ { "slug": "email", "type": "string", "label": "Contact Email" },
+ { "slug": "phone", "type": "string", "label": "Contact Phone" },
+ { "slug": "address", "type": "text", "label": "Address" },
+ { "slug": "facebook", "type": "url", "label": "Facebook URL" },
+ { "slug": "line", "type": "url", "label": "LINE URL" },
+ { "slug": "linkedin", "type": "url", "label": "LinkedIn URL" }
]
}
- ]
+ ],
+ "content": {
+ "pages": [
+ {
+ "id": "page-home",
+ "slug": "home",
+ "data": {
+ "title": "เปลี่ยนธุรกิจของคุณ ด้วย AI และเทคโนโลยีสมัยใหม่",
+ "subtitle": "รับทำเว็บไซต์ SEO AI Chatbot สำหรับธุรกิจไทย
เพิ่มยอดขาย ลดต้นทุน ด้วยเทคโนโลยีล้ำสมัย",
+ "badge": "ดิจิทัลเอเจนซี่ในประเทศไทย",
+ "hero_image": "/images/hero/hero.jpg",
+ "theme": "yellow",
+ "variant": "split",
+ "size": "full",
+ "show_cta": true,
+ "cta_text": "เริ่มต้นวันนี้",
+ "cta_link": "/contact"
+ }
+ },
+ {
+ "id": "page-about",
+ "slug": "about",
+ "data": {
+ "title": "เกี่ยวกับ มอร์มินิมอร์",
+ "subtitle": "บริษัท มอร์มินิมอร์ จำกัด
รับทำเว็บไซต์ SEO AI Chatbot สำหรับธุรกิจไทย",
+ "badge": "เกี่ยวกับเรา",
+ "hero_image": "/images/hero/about.jpg",
+ "theme": "yellow",
+ "variant": "centered",
+ "size": "compact",
+ "show_cta": false
+ }
+ },
+ {
+ "id": "page-portfolio",
+ "slug": "portfolio",
+ "data": {
+ "title": "ผลงานของเรา",
+ "subtitle": "รวมผลงานพัฒนาเว็บไซต์และโปรเจกต์ที่เราภาคภูมิใจ",
+ "badge": "พอร์ตโฟลิโอ",
+ "hero_image": "/images/hero/hero.jpg",
+ "theme": "yellow",
+ "variant": "text-only",
+ "size": "compact",
+ "show_cta": false
+ }
+ },
+ {
+ "id": "page-contact",
+ "slug": "contact",
+ "data": {
+ "title": "พูดคุยกับเรา วันนี้เลย!",
+ "subtitle": "พร้อมให้คำปรึกษาและช่วยเหลือคุณ
ปรึกษาฟรี ไม่มีค่าใช้จ่าย",
+ "badge": "ติดต่อเรา",
+ "hero_image": "/images/hero/contact.jpg",
+ "theme": "yellow",
+ "variant": "text-only",
+ "size": "compact",
+ "show_cta": false
+ }
+ },
+ {
+ "id": "page-faq",
+ "slug": "faq",
+ "data": {
+ "title": "คำถามที่พบบ่อย",
+ "subtitle": "หาคำตอบสำหรับคำถามที่พบบ่อยเกี่ยวกับบริการของเรา",
+ "badge": "FAQ",
+ "hero_image": "/images/hero/tech-consult.jpg",
+ "theme": "yellow",
+ "variant": "centered",
+ "size": "compact",
+ "show_cta": false
+ }
+ },
+ {
+ "id": "page-privacy",
+ "slug": "privacy",
+ "data": {
+ "title": "นโยบายความเป็นส่วนตัว",
+ "subtitle": "มีผลบังคับใช้วันที่ 5 พฤษภาคม 2569",
+ "badge": "กฎหมาย",
+ "hero_image": "/images/hero/ai-automation.jpg",
+ "theme": "yellow",
+ "variant": "text-only",
+ "size": "compact",
+ "show_cta": false
+ }
+ },
+ {
+ "id": "page-terms",
+ "slug": "terms",
+ "data": {
+ "title": "เงื่อนไขการให้บริการ",
+ "subtitle": "มีผลบังคับใช้วันที่ 5 พฤษภาคม 2569",
+ "badge": "กฎหมาย",
+ "hero_image": "/images/hero/marketing-automation.jpg",
+ "theme": "yellow",
+ "variant": "text-only",
+ "size": "compact",
+ "show_cta": false
+ }
+ }
+ ],
+ "services": [
+ {
+ "id": "service-automation",
+ "slug": "automation",
+ "data": {
+ "title": "Automation Consult",
+ "subtitle": "Implement specific unique app and AI for business to do automation workflow. ลดต้นทุนและเพิ่มประสิทธิภาพด้วยระบบอัตโนมัติที่ออกแบบมาเฉพาะสำหรับธุรกิจของคุณ",
+ "badge": "Technology Consult",
+ "category": "tech-consult",
+ "objective": "ลดต้นทุนและเวลา",
+ "hero_image": "/images/hero/automation-consult-hero.jpg",
+ "usp_free_server": "ลูกค้าที่ใช้บริการ Consult จะได้รับ Server สำหรับ App และ AI ฟรี (สำหรับการใช้งานปกติ) หากต้องการใช้งานหนักหรือ Resource-intensive จะมีค่าใช้จ่ายเพิ่มเติม",
+ "usp_content_edit": "",
+ "feature1_icon": "🤖",
+ "feature1_title": "Workflow Automation",
+ "feature1_desc": "ออกแบบและ implement ระบบ automation สำหรับงานที่ทำซ้ำๆ เช่น การประมวลผลออร์เดอร์ การจัดการ inventory",
+ "feature2_icon": "📊",
+ "feature2_title": "Business Process Optimization",
+ "feature2_desc": "วิเคราะห์และปรับปรุงกระบวนการทำงานให้มีประสิทธิภาพมากขึ้นด้วยเทคโนโลยีล่าสุด",
+ "feature3_icon": "🔗",
+ "feature3_title": "System Integration",
+ "feature3_desc": "เชื่อมต่อระบบต่างๆ ให้ทำงานร่วมกันอย่างราบรื่น เช่น CRM, ERP, E-commerce",
+ "feature4_icon": "📱",
+ "feature4_title": "Custom Application",
+ "feature4_desc": "พัฒนา application เฉพาะทางสำหรับธุรกิจของคุณที่ไม่สามารถหาซื้อได้ทั่วไป",
+ "feature5_icon": "🔒",
+ "feature5_title": "Security & Compliance",
+ "feature5_desc": "ตรวจสอบและปรับปรุงความปลอดภัยของระบบให้เป็นไปตามมาตรฐาน",
+ "feature6_icon": "📈",
+ "feature6_title": "Performance Monitoring",
+ "feature6_desc": "ติดตามและวัดผลประสิทธิภาพของระบบแบบ real-time"
+ }
+ },
+ {
+ "id": "service-ai-consult",
+ "slug": "ai-consult",
+ "data": {
+ "title": "AI Consult",
+ "subtitle": "Consult service for using AI to improve business workflow and knowledge management. ใช้ AI ให้เป็นประโยชน์สำหรับธุรกิจของคุณอย่างเต็มศักยภาพ",
+ "badge": "Technology Consult",
+ "category": "tech-consult",
+ "objective": "ลดต้นทุนและเวลา",
+ "hero_image": "/images/hero/ai-consult-hero.jpg",
+ "usp_free_server": "ลูกค้าที่ใช้บริการ Consult จะได้รับ Server สำหรับ App และ AI ฟรี (สำหรับการใช้งานปกติ) หากต้องการใช้งานหนักหรือ Resource-intensive จะมีค่าใช้จ่ายเพิ่มเติม",
+ "usp_content_edit": "",
+ "feature1_icon": "🧠",
+ "feature1_title": "AI Strategy & Roadmap",
+ "feature1_desc": "วางแผนการใช้ AI อย่างเป็นระบบเพื่อให้เห็นผลลัพธ์ที่ชัดเจน",
+ "feature2_icon": "💬",
+ "feature2_title": "AI Chatbot Implementation",
+ "feature2_desc": "พัฒนาและ deploy AI Chatbot ที่เข้าใจภาษาไทยและตอบคำถามลูกค้าได้ 24/7",
+ "feature3_icon": "📝",
+ "feature3_title": "Knowledge Management",
+ "feature3_desc": "สร้างระบบจัดการความรู้ด้วย AI ที่ช่วยให้การค้นหาและใช้งานข้อมูลง่ายขึ้น",
+ "feature4_icon": "🎯",
+ "feature4_title": "AI for Marketing",
+ "feature4_desc": "ใช้ AI วิเคราะห์ลูกค้าและสร้างแคมเปญการตลาดที่มีประสิทธิภาพ",
+ "feature5_icon": "🔍",
+ "feature5_title": "AI Audit",
+ "feature5_desc": "วิเคราะห์ว่าธุรกิจของคุณควรใช้ AI ตัวไหนและอย่างไร",
+ "feature6_icon": "🚀",
+ "feature6_title": "AI Implementation Support",
+ "feature6_desc": "ดูแลและให้คำปรึกษาตลอดการ implement AI ในองค์กร"
+ }
+ },
+ {
+ "id": "service-online-marketing",
+ "slug": "online-marketing",
+ "data": {
+ "title": "Online Marketing Automation",
+ "subtitle": "Use AI to help generate and manage marketing workflow. เพิ่มยอดขายด้วยระบบอัตโนมัติทางการตลาดที่ขับเคลื่อนด้วย AI",
+ "badge": "Marketing Consult",
+ "category": "marketing-consult",
+ "objective": "เพิ่มยอดขาย",
+ "hero_image": "/images/hero/online-marketing-hero.jpg",
+ "usp_free_server": "",
+ "usp_content_edit": "",
+ "feature1_icon": "📧",
+ "feature1_title": "Email Marketing Automation",
+ "feature1_desc": "สร้าง email campaign อัตโนมัติด้วย AI ที่ personalize ข้อความตามพฤติกรรมลูกค้า",
+ "feature2_icon": "💬",
+ "feature2_title": "Social Media Automation",
+ "feature2_desc": "กำหนดเวลาโพสต์และตอบสนองอัตโนมัติด้วย AI ที่เข้าใจบริบท",
+ "feature3_icon": "🎯",
+ "feature3_title": "Lead Generation AI",
+ "feature3_desc": "ใช้ AI หาและให้คะแนน leads ที่มีโอกาส conversion สูงสุด",
+ "feature4_icon": "📊",
+ "feature4_title": "Marketing Analytics",
+ "feature4_desc": "วิเคราะห์ข้อมูลการตลาดและให้คำแนะนำด้วย AI เพื่อปรับปรุง ROI",
+ "feature5_icon": "🔄",
+ "feature5_title": "Workflow Automation",
+ "feature5_desc": "สร้าง marketing workflow อัตโนมัติตั้งแต่ lead จนถึง sale",
+ "feature6_icon": "📱",
+ "feature6_title": "Multi-channel Integration",
+ "feature6_desc": "เชื่อมต่อทุกช่องทางการตลาดให้ทำงานร่วมกันอย่างไร้รอยต่อ"
+ }
+ },
+ {
+ "id": "service-webdev",
+ "slug": "webdev",
+ "data": {
+ "title": "Website Development",
+ "subtitle": "Implement website for business and integrate the website with marketing workflow. เว็บไซต์ที่ทันสมัย รวดเร็ว และเชื่อมต่อกับระบบการตลาดอย่างไร้รอยต่อ",
+ "badge": "Marketing Consult",
+ "category": "marketing-consult",
+ "objective": "เพิ่มยอดขาย",
+ "hero_image": "/images/hero/web-development-hero.jpg",
+ "usp_free_server": "",
+ "usp_content_edit": "ลูกค้าที่ใช้ Server ของเราจะได้รับบริการแก้ไขและเพิ่มเนื้อหาเว็บไซต์ฟรี! จ่ายเฉพาะเมื่อต้องการ Redesign ทั้งหมด หรือ Upgrade ฟีเจอร์ใหญ่ เช่น เพิ่มระบบ E-commerce",
+ "feature1_icon": "⚡",
+ "feature1_title": "Fast & Modern",
+ "feature1_desc": "โหลดเร็ว รองรับการขยายตัวของธุรกิจ และใช้เทคโนโลยีล่าสุด",
+ "feature2_icon": "📱",
+ "feature2_title": "Responsive Design",
+ "feature2_desc": "แสดงผลได้ดีบนทุกอุปกรณ์ ทั้ง mobile tablet และ desktop",
+ "feature3_icon": "🎨",
+ "feature3_title": "SEO Optimized",
+ "feature3_desc": "ออกแบบมาเพื่อให้ Google ชอบ ช่วยให้ติดอันดับได้ง่ายขึ้น",
+ "feature4_icon": "🔗",
+ "feature4_title": "Marketing Integration",
+ "feature4_desc": "เชื่อมต่อกับระบบ CRM, Email Marketing และ Analytics ได้อย่างไร้รอยต่อ",
+ "feature5_icon": "📊",
+ "feature5_title": "Analytics Dashboard",
+ "feature5_desc": "ติดตามผู้เข้าชมและวัดผลได้แบบ real-time",
+ "feature6_icon": "🔒",
+ "feature6_title": "Security",
+ "feature6_desc": "Security ระดับสูง ป้องกันการโจมตีและข้อมูลรั่วไหล"
+ }
+ }
+ ],
+ "portfolio": [
+ {
+ "id": "portfolio-001",
+ "slug": "lungfinler",
+ "data": {
+ "name": "Lungfinler",
+ "url": "https://lungfinler.com",
+ "category": "webdev",
+ "category_label": "พัฒนาเว็บไซต์",
+ "thumbnail": "/images/portfolio/lungfinler.png",
+ "description": "Digital Agency - บริการด้านการสร้างแบรนด์ กราฟิกดีไซน์ และถ่ายภาพสินค้าคุณภาพสูง"
+ }
+ },
+ {
+ "id": "portfolio-002",
+ "slug": "jetindustries",
+ "data": {
+ "name": "Jet Industries",
+ "url": "https://jetindustries.co.th",
+ "category": "webdev",
+ "category_label": "พัฒนาเว็บไซต์",
+ "thumbnail": "/images/portfolio/jetindustries.png",
+ "description": "ผู้ผลิตพลาสติกฉีดขึ้นรูปอย่างแม่นยำ (Precision Plastic Injection Molding) มีประสบการณ์กว่า 40 ปี"
+ }
+ },
+ {
+ "id": "portfolio-003",
+ "slug": "lawyernoom",
+ "data": {
+ "name": "สำนักงานกฎหมาย ตถาตา",
+ "url": "https://lawyernoom.com",
+ "category": "webdev",
+ "category_label": "พัฒนาเว็บไซต์",
+ "thumbnail": "/images/portfolio/lawyernoom.png",
+ "description": "สำนักงานกฎหมายโดย ทนายความ คมสัน ศรีวนิชย์ - บริการด้านคดีความ คดีแพ่ง คดีอาญา"
+ }
+ },
+ {
+ "id": "portfolio-004",
+ "slug": "underdog",
+ "data": {
+ "name": "Underdog Marketing",
+ "url": "https://underdog.run",
+ "category": "webdev",
+ "category_label": "พัฒนาเว็บไซต์",
+ "thumbnail": "/images/portfolio/underdog.png",
+ "description": "บล็อกการตลาดและการขายสไตล์ ลุยไม่ยั้ง โดย บุ้ง ดีดติ่งหู"
+ }
+ },
+ {
+ "id": "portfolio-005",
+ "slug": "baofuling",
+ "data": {
+ "name": "Baofuling Shop",
+ "url": "https://baofulingshop.com",
+ "category": "ecommerce",
+ "category_label": "อีคอมเมิร์ซ",
+ "thumbnail": "/images/portfolio/baofuling.png",
+ "description": "ร้านค้าออนไลน์ครีมบัวหิมะและผลิตภัณฑ์ความงามจีน"
+ }
+ },
+ {
+ "id": "portfolio-006",
+ "slug": "trainersunny",
+ "data": {
+ "name": "เทรนเนอร์ซันนี่",
+ "url": "https://trainersunny.com",
+ "category": "webdev",
+ "category_label": "พัฒนาเว็บไซต์",
+ "thumbnail": "/images/portfolio/trainersunny.png",
+ "description": "ผู้เชี่ยวชาญด้านการพัฒนาบุคลากรและ Soft Skill"
+ }
+ },
+ {
+ "id": "portfolio-007",
+ "slug": "luadjob",
+ "data": {
+ "name": "เลือดจระเข้วานิไทย",
+ "url": "https://เลือดจระเข้วานิไทย.com",
+ "category": "ecommerce",
+ "category_label": "อีคอมเมิร์ซ",
+ "thumbnail": "/images/portfolio/luadjob.png",
+ "description": "ตัวแทนจำหน่ายเลือดจระเข้วานิไทยอย่างเป็นทางการ"
+ }
+ },
+ {
+ "id": "portfolio-008",
+ "slug": "tuanthong",
+ "data": {
+ "name": "ทวนทอง 99",
+ "url": "https://tuanthong99.com",
+ "category": "ecommerce",
+ "category_label": "อีคอมเมิร์ซ",
+ "thumbnail": "/images/portfolio/tuanthong.png",
+ "description": "ร้านค้าออนไลน์สมุนไพรไทยคุณภาพสูง"
+ }
+ },
+ {
+ "id": "portfolio-009",
+ "slug": "odooportal",
+ "data": {
+ "name": "Odoo Portal",
+ "url": "https://odooportal.com",
+ "category": "marketing",
+ "category_label": "ที่ปรึกษาการตลาด",
+ "thumbnail": "/images/portfolio/odooportal.png",
+ "description": "ตัวแทนจำหน่าย Odoo อย่างเป็นทางการในประเทศไทย"
+ }
+ }
+ ],
+ "faq": [
+ {
+ "id": "faq-001",
+ "slug": "service-001",
+ "data": { "category": "บริการ", "category_icon": "🎯", "question": "MoreminiMore ให้บริการอะไรบ้าง?", "answer": "เราให้บริการ 4 ประเภทหลัก: พัฒนาเว็บไซต์, Marketing Automation, AI Automation และ Tech Consult สำหรับธุรกิจไทย" }
+ },
+ {
+ "id": "faq-002",
+ "slug": "service-002",
+ "data": { "category": "บริการ", "category_icon": "🎯", "question": "สามารถสั่งทำเว็บไซต์เฉพาะประเภทได้ไหม?", "answer": "ได้ เราสามารถพัฒนาเว็บไซต์ได้ทุกประเภท ไม่ว่าจะเป็นเว็บบริษัท เว็บขายของ เว็บ Landing Page หรือระบบ Web Application" }
+ },
+ {
+ "id": "faq-003",
+ "slug": "service-003",
+ "data": { "category": "บริการ", "category_icon": "🎯", "question": "AI Chatbot สามารถทำอะไรได้บ้าง?", "answer": "AI Chatbot ของเราสามารถตอบคำถามลูกค้า รับออร์เดอร์ นัดหมาย และเชื่อมต่อกับระบบ CRM หรือร้านค้าออนไลน์ได้" }
+ },
+ {
+ "id": "faq-004",
+ "slug": "price-001",
+ "data": { "category": "ราคา", "category_icon": "💰", "question": "ราคาเริ่มต้นของการทำเว็บไซต์เท่าไหร่?", "answer": "ราคาเริ่มต้นอยู่ที่ 15,000 บาท ขึ้นอยู่กับความซับซ้อนและฟีเจอร์ที่ต้องการ เราจะประเมินและเสนอราคาหลังจากการปรึกษาฟรี" }
+ },
+ {
+ "id": "faq-005",
+ "slug": "price-002",
+ "data": { "category": "ราคา", "category_icon": "💰", "question": "มีราคาแพ็คเกจหรือไม่?", "answer": "มี เรามีแพ็คเกจสำหรับธุรกิจที่ต้องการเริ่มต้นอย่างง่ายๆ และแพ็คเกจสำหรับธุรกิจที่ต้องการระบบครบวงจร สามารถเลือกได้ตามความต้องการ" }
+ },
+ {
+ "id": "faq-006",
+ "slug": "price-003",
+ "data": { "category": "ราคา", "category_icon": "💰", "question": "ชำระเงินอย่างไร?", "answer": "รองรับการชำระเงินผ่านโอนเงินธนาคาร หรือผ่อนชำระผ่านบัตรเครดิต 3-6 งวด (มีดอกเบี้ย)" }
+ },
+ {
+ "id": "faq-007",
+ "slug": "time-001",
+ "data": { "category": "ระยะเวลา", "category_icon": "⏱️", "question": "ใช้เวลาพัฒนานานเท่าไหร่?", "answer": "ขึ้นอยู่กับความซับซ้อน Landing Page ใช้เวลา 1-2 สัปดาห์ เว็บไซต์ขนาดกลาง 2-4 สัปดาห์ ระบบ Web Application 4-8 สัปดาห์" }
+ },
+ {
+ "id": "faq-008",
+ "slug": "time-002",
+ "data": { "category": "ระยะเวลา", "category_icon": "⏱️", "question": "ถ้าต้องการด่วนได้ไหม?", "answer": "ได้ เรามีบริการด่วนพิเศษ (เพิ่มค่าใช้จ่าย 30%) สามารถส่งมอบงานได้เร็วขึ้น 50%" }
+ },
+ {
+ "id": "faq-009",
+ "slug": "support-001",
+ "data": { "category": "หลังการขาย", "category_icon": "💬", "question": "มีการรับประกันหรือไม่?", "answer": "เรารับประกันงาน 30 วันหลังส่งมอบ หากมีปัญหาจากการพัฒนา เราจะแก้ไขให้ฟรี" }
+ },
+ {
+ "id": "faq-010",
+ "slug": "support-002",
+ "data": { "category": "หลังการขาย", "category_icon": "💬", "question": "มีบริการดูแลหลังการขายไหม?", "answer": "มี เรามีแพ็คเกจดูแลรายเดือนเริ่มต้นที่ 2,000 บาท/เดือน รวมการอัพเดทเนื้อหา ปรับปรุงความปลอดภัย และ Backup" }
+ }
+ ],
+ "blog": [
+ {
+ "id": "post-001",
+ "slug": "5-ways-ai-increase-sales",
+ "data": {
+ "title": "5 วิธีใช้ AI เพิ่มยอดขายให้ธุรกิจของคุณ",
+ "excerpt": "ค้นพบ 5 วิธีที่ AI สามารถช่วยเพิ่มยอดขายให้ธุรกิจ SMEs ไทย พร้อมตัวอย่างและแนวทางการนำไปใช้จริง",
+ "image": "/images/blog/5-ways-ai-increase-sales.jpg",
+ "date": "2026-03-11",
+ "category": "AI Business",
+ "content": {
+ "type": "doc",
+ "content": [
+ { "type": "heading", "attrs": { "level": 2 }, "content": [{ "type": "text", "text": "วิธีที่ 1: ใช้ AI วิเคราะห์ลูกค้าและแนะนำสินค้าที่ตรงใจ" }] },
+ { "type": "paragraph", "content": [{ "type": "text", "text": "หนึ่งในความสามารถที่ทรงพลังที่สุดของ AI คือการวิเคราะห์ข้อมูลลูกค้าและค้นหารูปแบบที่มนุษย์อาจมองไม่เห็น AI สามารถวิเคราะห์ว่าลูกค้าแต่ละคนชอบสินค้าประเภทไหน ซื้อในช่วงเวลาไหน และมีพฤติกรรมการซื้ออย่างไร" }] },
+ { "type": "heading", "attrs": { "level": 2 }, "content": [{ "type": "text", "text": "วิธีที่ 2: ใช้ Chatbot ดูแลลูกค้าตลอด 24 ชั่วโมง" }] },
+ { "type": "paragraph", "content": [{ "type": "text", "text": "ลูกค้าจำนวนมากต้องการได้รับคำตอบทันที ไม่ว่าจะกี่โมง แต่การจ้างพนักงานทำงาน 24 ชั่วโมงนั้นมีค่าใช้จ่ายสูง Chatbot ที่ใช้ AI สามารถตอบคำถามลูกค้าได้ตลอดเวลา โดยไม่ต้องเสียค่าล่วงเวลา" }] },
+ { "type": "heading", "attrs": { "level": 2 }, "content": [{ "type": "text", "text": "วิธีที่ 3: ใช้ AI ส่งข้อความการตลาดในเวลาที่เหมาะสม" }] },
+ { "type": "paragraph", "content": [{ "type": "text", "text": "การส่งข้อความการตลาดไม่ใช่แค่การส่งออกไปเท่านั้น แต่ต้องส่งในเวลาที่ลูกค้ามีโอกาสอ่านและตอบสนองมากที่สุด AI สามารถวิเคราะห์ว่าลูกค้าแต่ละคนมีช่วงเวลาไหนที่เปิดอ่านข้อความบ่อยที่สุด และส่งในเวลานั้น" }] },
+ { "type": "heading", "attrs": { "level": 2 }, "content": [{ "type": "text", "text": "วิธีที่ 4: ใช้ AI สร้างเนื้อหาการตลาด" }] },
+ { "type": "paragraph", "content": [{ "type": "text", "text": "เนื้อหาการตลาดที่ดีเป็นหัวใจสำคัญในการดึงดูดลูกค้า แต่การสร้างเนื้อหาที่มีคุณภาพตลอดเวลาต้องใช้เวลาและทรัพยากรมาก AI สามารถช่วยสร้างเนื้อหาได้เร็วขึ้น ไม่ว่าจะเป็นโพสต์เฟซบุ๊ก คำบรรยายสินค้า อีเมลการตลาด หรือบทความบล็อก" }] },
+ { "type": "heading", "attrs": { "level": 2 }, "content": [{ "type": "text", "text": "วิธีที่ 5: ใช้ AI ทำนายแนวโน้มและวางแผนสินค้า" }] },
+ { "type": "paragraph", "content": [{ "type": "text", "text": "การมีสินค้าคงคลงเป็นสิ่งจำเป็นสำหรับธุรกิจค้าปลีก แต่การมีสินค้ามากเกินไปก็เป็นปัญหา AI สามารถวิเคราะห์ข้อมูลยอดขายในอดีต ฤดูกาล และปัจจัยอื่นๆ เพื่อทำนายว่าควรสั่งสินค้าเท่าไหร่ในแต่ละช่วง" }] }
+ ]
+ }
+ }
+ },
+ {
+ "id": "post-002",
+ "slug": "ai-content-google-love",
+ "data": {
+ "title": "วิธีสร้าง Content ด้วย AI ที่ Google รัก",
+ "excerpt": "เรียนรู้วิธีการใช้ AI ช่วยสร้างเนื้อหาการตลาดที่มีคุณภาพและได้รับการจัดอันดับดีจาก Google พร้อมเทคนิคและตัวอย่างจริง",
+ "image": "/images/blog/ai-content-google-love.jpg",
+ "date": "2026-03-10",
+ "category": "AI Content",
+ "content": {
+ "type": "doc",
+ "content": [
+ { "type": "heading", "attrs": { "level": 2 }, "content": [{ "type": "text", "text": "ทำไม AI Content ต้องมีคุณภาพ" }] },
+ { "type": "paragraph", "content": [{ "type": "text", "text": "Google มีอัลกอริทึมที่ฉลาดมาก สามารถแยกแยะได้ว่าเนื้อหาที่สร้างโดย AI มีคุณภาพหรือไม่ เนื้อหาที่ไม่มีคุณค่า สร้างขึ้นแค่เพื่อใส่คีย์เวิร์ด จะถูกลงโทษและไม่ติดอันดับ" }] },
+ { "type": "heading", "attrs": { "level": 2 }, "content": [{ "type": "text", "text": "วิธีใช้ AI สร้างเนื้อหาที่ดี" }] },
+ { "type": "paragraph", "content": [{ "type": "text", "text": "ใช้ AI เป็นผู้ช่วย ไม่ใช่ผู้เขียนทั้งหมด วิธีที่ดีที่สุดคือใช้ AI ช่วยในบางส่วน เช่น รวบรวมข้อมูล สร้างโครงสร้าง หรือเขียน draft แล้วนำมาปรับแก้ด้วยมนุษย์" }] }
+ ]
+ }
+ }
+ },
+ {
+ "id": "post-003",
+ "slug": "ai-for-sme-thailand",
+ "data": {
+ "title": "AI สำหรับ SME ไทย: คู่มือฉบับสมบูรณ์",
+ "excerpt": "การใช้ AI สำหรับธุรกิจ SME ไทยเพื่อเพิ่มขีดความสามารถในการแข่งขัน พร้อมแนวทางปฏิบัติจริง",
+ "image": "/images/blog/ai-for-sme-thailand.jpg",
+ "date": "2026-03-08",
+ "category": "AI Business",
+ "content": {
+ "type": "doc",
+ "content": [
+ { "type": "heading", "attrs": { "level": 2 }, "content": [{ "type": "text", "text": "ทำไม SME ต้องใช้ AI" }] },
+ { "type": "paragraph", "content": [{ "type": "text", "text": "AI ไม่ใช่เทคโนโลยีสำหรับบริษัทใหญ่เท่านั้น ธุรกิจ SME สามารถเริ่มใช้ประโยชน์จาก AI ได้ง่ายๆ ด้วยเครื่องมือที่เข้าถึงได้" }] }
+ ]
+ }
+ }
+ },
+ {
+ "id": "post-004",
+ "slug": "digital-transformation-guide",
+ "data": {
+ "title": "คู่มือ Digital Transformation ฉบับสมบูรณ์",
+ "excerpt": "การ transform ธุรกิจของคุณสู่ดิจิทัลอย่างครบวงจร ตั้งแต่การวางแผนจนถึงการ Implement",
+ "image": "/images/blog/digital-transformation.jpg",
+ "date": "2026-03-05",
+ "category": "Business",
+ "content": {
+ "type": "doc",
+ "content": [
+ { "type": "heading", "attrs": { "level": 2 }, "content": [{ "type": "text", "text": "Digital Transformation คืออะไร" }] },
+ { "type": "paragraph", "content": [{ "type": "text", "text": "Digital Transformation คือการนำเทคโนโลยีดิจิทัลมาใช้ในทุกด้านของธุรกิจ เพื่อเพิ่มประสิทธิภาพและสร้างคุณค่าใหม่ให้กับลูกค้า" }] }
+ ]
+ }
+ }
+ },
+ {
+ "id": "post-005",
+ "slug": "marketing-automation-guide",
+ "data": {
+ "title": "Marketing Automation: คู่มือเริ่มต้น",
+ "excerpt": "เรียนรู้พื้นฐานของ Marketing Automation และวิธีเริ่มต้นใช้งานสำหรับธุรกิจของคุณ",
+ "image": "/images/blog/marketing-automation-guide.jpg",
+ "date": "2026-03-01",
+ "category": "Marketing",
+ "content": {
+ "type": "doc",
+ "content": [
+ { "type": "heading", "attrs": { "level": 2 }, "content": [{ "type": "text", "text": "Marketing Automation คืออะไร" }] },
+ { "type": "paragraph", "content": [{ "type": "text", "text": "Marketing Automation คือการใช้ซอฟต์แวร์เพื่อ automate การตลาดซ้ำๆ เช่น การส่งอีเมล การโพสต์โซเชียลมีเดีย และการวิเคราะห์ข้อมูล" }] }
+ ]
+ }
+ }
+ }
+ ]
+ }
}
\ No newline at end of file
diff --git a/src/components/BlogCard.astro b/src/components/BlogCard.astro
new file mode 100644
index 0000000..919e75b
--- /dev/null
+++ b/src/components/BlogCard.astro
@@ -0,0 +1,84 @@
+---
+interface Props {
+ title: string;
+ excerpt: string;
+ image?: string;
+ date: Date;
+ slug: string;
+ category: string;
+}
+
+const { title, excerpt, image, date, slug, category } = Astro.props;
+const formattedDate = date.toLocaleDateString('th-TH', { year: 'numeric', month: 'short', day: 'numeric' });
+---
+
+
+
+ {image &&

}
+
+
+
{formattedDate}
+
{title}
+
{excerpt}
+
อ่านต่อ →
+
+
+
+
\ No newline at end of file
diff --git a/src/components/Footer.astro b/src/components/Footer.astro
index a9c9547..83c8e02 100644
--- a/src/components/Footer.astro
+++ b/src/components/Footer.astro
@@ -1,184 +1,449 @@
---
+/**
+ * MOREMINIMORE - FOOTER COMPONENT
+ * Minimal design with animated elements
+ */
+
const currentYear = new Date().getFullYear();
-const socialLinks = [
- { label: "Facebook", href: "https://www.facebook.com/moreminimore", icon: "facebook" },
- { label: "LINE", href: "https://line.me/ti/p/~@539hdlul", icon: "line" },
- { label: "LinkedIn", href: "https://www.linkedin.com/company/moreminimore", icon: "linkedin" },
+const navLinks = [
+ { label: 'หน้าแรก', href: '/' },
+ { label: 'บริการ', href: '/services' },
+ { label: 'ผลงาน', href: '/portfolio' },
+ { label: 'บทความ', href: '/blog' },
+ { label: 'ติดต่อ', href: '/contact' },
];
-const footerLinks = [
- { label: "นโยบายความเป็นส่วนตัว", href: "/privacy" },
- { label: "เงื่อนไขการใช้บริการ", href: "/terms" },
- { label: "ติดต่อเรา", href: "/contact" },
+const serviceLinks = [
+ { label: 'พัฒนาเว็บไซต์', href: '/services/webdev' },
+ { label: 'Marketing Automation', href: '/services/marketing' },
+ { label: 'AI Automation', href: '/services/automation' },
+ { label: 'Tech Consult', href: '/services/ai-consult' },
];
---