Initial Astro redesign for MoreminiMore
This commit is contained in:
5
.dockerignore
Normal file
5
.dockerignore
Normal file
@@ -0,0 +1,5 @@
|
||||
node_modules
|
||||
dist
|
||||
.git
|
||||
.DS_Store
|
||||
npm-debug.log*
|
||||
9
.gitignore
vendored
Normal file
9
.gitignore
vendored
Normal file
@@ -0,0 +1,9 @@
|
||||
node_modules/
|
||||
dist/
|
||||
.astro/
|
||||
.DS_Store
|
||||
*.log
|
||||
.env
|
||||
.env.*
|
||||
!.env.example
|
||||
|
||||
14
Dockerfile
Normal file
14
Dockerfile
Normal file
@@ -0,0 +1,14 @@
|
||||
# Build the static Astro site
|
||||
FROM node:22-alpine AS build
|
||||
WORKDIR /app
|
||||
COPY package.json package-lock.json ./
|
||||
RUN npm ci
|
||||
COPY . .
|
||||
RUN npm run build
|
||||
|
||||
# Serve static files with a small, unprivileged web server
|
||||
FROM nginxinc/nginx-unprivileged:1.27-alpine AS production
|
||||
COPY nginx.conf /etc/nginx/conf.d/default.conf
|
||||
COPY --from=build /app/dist /usr/share/nginx/html
|
||||
EXPOSE 8080
|
||||
CMD ["nginx", "-g", "daemon off;"]
|
||||
25
README.md
Normal file
25
README.md
Normal file
@@ -0,0 +1,25 @@
|
||||
# MoreminiMore redesign
|
||||
|
||||
A static Astro redesign for MoreminiMore, retaining verified service, case study, portfolio, and contact information from moreminimore.com.
|
||||
|
||||
## Local development
|
||||
|
||||
```sh
|
||||
npm install
|
||||
npm run dev
|
||||
```
|
||||
|
||||
## Production build
|
||||
|
||||
```sh
|
||||
npm run build
|
||||
```
|
||||
|
||||
## Docker deployment
|
||||
|
||||
```sh
|
||||
docker build -t moreminimore-site .
|
||||
docker run --rm -p 8080:8080 moreminimore-site
|
||||
```
|
||||
|
||||
The site is served at `http://localhost:8080`.
|
||||
9
astro.config.mjs
Normal file
9
astro.config.mjs
Normal file
@@ -0,0 +1,9 @@
|
||||
import { defineConfig } from 'astro/config';
|
||||
import sitemap from '@astrojs/sitemap';
|
||||
|
||||
export default defineConfig({
|
||||
site: 'https://moreminimore.com',
|
||||
output: 'static',
|
||||
integrations: [sitemap()],
|
||||
build: { format: 'file' },
|
||||
});
|
||||
12
nginx.conf
Normal file
12
nginx.conf
Normal file
@@ -0,0 +1,12 @@
|
||||
server {
|
||||
listen 8080;
|
||||
server_name _;
|
||||
root /usr/share/nginx/html;
|
||||
index index.html;
|
||||
location / { try_files $uri $uri/ /index.html; }
|
||||
location ~* \.(?:css|js|mjs|svg|png|jpg|jpeg|webp|woff2)$ {
|
||||
expires 7d;
|
||||
add_header Cache-Control "public, max-age=604800, immutable";
|
||||
try_files $uri =404;
|
||||
}
|
||||
}
|
||||
6548
package-lock.json
generated
Normal file
6548
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
9
package.json
Normal file
9
package.json
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"name": "moreminimore-site",
|
||||
"version": "1.0.0",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"scripts": {"dev": "astro dev", "build": "astro check && astro build", "preview": "astro preview"},
|
||||
"dependencies": {"@astrojs/sitemap": "^3.2.1", "astro": "^5.10.0"},
|
||||
"devDependencies": {"@astrojs/check": "^0.9.4", "typescript": "^5.8.3"}
|
||||
}
|
||||
BIN
public/og.png
Normal file
BIN
public/og.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.9 MiB |
20
src/layouts/BaseLayout.astro
Normal file
20
src/layouts/BaseLayout.astro
Normal file
@@ -0,0 +1,20 @@
|
||||
---
|
||||
import '../styles/global.css';
|
||||
interface Props { title?: string; description?: string; }
|
||||
const { title = 'MoreminiMore | เพิ่มกำไรให้ลูกค้า', description = 'พาร์ทเนอร์สำหรับ SME ที่อยากตัดสินใจให้คุ้มขึ้น ด้วยเว็บไซต์ การตลาด AI และระบบอัตโนมัติที่ยึดข้อมูลจริง' } = Astro.props;
|
||||
const canonicalURL = new URL(Astro.url.pathname, 'https://moreminimore.com');
|
||||
const socialImageURL = new URL('/og.png', 'https://moreminimore.com');
|
||||
const organization = { '@context': 'https://schema.org', '@type': 'ProfessionalService', name: 'MoreminiMore', url: 'https://moreminimore.com', description, telephone: '+66809955945', email: 'contact@moreminimore.com', sameAs: ['https://line.me/R/ti/p/@moreminimore'], areaServed: { '@type': 'Country', name: 'Thailand' }, serviceType: ['Website Development', 'Marketing Consult', 'Automation Workflow', 'AI Consult'] };
|
||||
---
|
||||
<!doctype html>
|
||||
<html lang="th">
|
||||
<head>
|
||||
<meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<meta name="theme-color" content="#101828" /><meta name="description" content={description} /><link rel="canonical" href={canonicalURL} />
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com" /><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
||||
<link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Sans+Thai:wght@400;500;600;700&family=Manrope:wght@500;600;700;800&display=swap" rel="stylesheet" />
|
||||
<meta property="og:type" content="website" /><meta property="og:site_name" content="MoreminiMore" /><meta property="og:title" content={title} /><meta property="og:description" content={description} /><meta property="og:url" content={canonicalURL} /><meta property="og:image" content={socialImageURL} /><meta property="og:image:alt" content="MoreminiMore — เป้าหมายของเราคือเพิ่มกำไรให้ลูกค้า" /><meta name="twitter:card" content="summary_large_image" /><meta name="twitter:image" content={socialImageURL} /><meta name="twitter:image:alt" content="MoreminiMore — เป้าหมายของเราคือเพิ่มกำไรให้ลูกค้า" />
|
||||
<title>{title}</title><script is:inline type="application/ld+json" set:html={JSON.stringify(organization)}></script>
|
||||
</head>
|
||||
<body><a class="skip-link" href="#content">ข้ามไปยังเนื้อหา</a><slot /></body>
|
||||
</html>
|
||||
24
src/pages/index.astro
Normal file
24
src/pages/index.astro
Normal file
@@ -0,0 +1,24 @@
|
||||
---
|
||||
import BaseLayout from '../layouts/BaseLayout.astro';
|
||||
const services = [
|
||||
['01', 'Website Development', 'เว็บไซต์ที่ช่วยหาลีดหรือช่วยให้จำแบรนด์', 'เหมาะกับธุรกิจที่มีเว็บแล้วแต่ลูกค้ายังไม่ค่อยติดต่อ หรืออยากเริ่มเว็บใหม่ให้วัดผลได้ตั้งแต่วันแรก รวมถึงธุรกิจที่มีปัญหาเรื่อง SEO และ GEO', ['ศึกษาสินค้าและกลุ่มเป้าหมายก่อนเริ่มงาน เพื่อให้เว็บไซต์ตรงกับรูปแบบที่กลุ่มเป้าหมายต้องการมากที่สุด', 'มีระบบเก็บสถิติให้ โดยลูกค้าเป็นเจ้าของข้อมูลนั้นเอง', 'คำนึงถึงความง่ายในการปรับแต่ง ให้ลูกค้าสามารถแก้ไขเว็บไซต์ได้ด้วยตัวเองเป็นหลัก', 'ให้คำแนะนำแนวทาง content strategy เบื้องต้น เพราะเราคาดหวังให้ลูกค้าได้กำไรจากผลงาน']],
|
||||
['02', 'Marketing Consult', 'วางกลยุทธ์การตลาดจากสถิติ', 'เหมาะกับธุรกิจที่ยิงโฆษณาอยู่ แต่ยอดขายไม่คุ้ม หรือมีคนทักมาแล้วไม่ใช่ลูกค้าที่ควรได้ รวมถึงธุรกิจที่ยิงโฆษณา โดยไม่รู้ว่าโฆษณาที่ลงทุนไปนั้นคุ้มค่าหรือยัง?', ['วางระบบเก็บข้อมูลทางสถิติสำหรับเว็บไซต์ โฆษณา และยอดขาย', 'การวางกลยุทธ์จะใช้ข้อมูลสถิติเป็นพื้นฐาน', 'แต่ละช่องทางและแต่ละกลุ่มลูกค้าจะมีกลยุทธ์แตกต่างกัน']],
|
||||
['03', 'Automation Workflow', 'วางระบบงานให้มีความรวดเร็วและลดความผิดพลาด', 'เหมาะกับธุรกิจที่ยังใช้ระบบงานที่เน้นแรงงานคนมาก ซึ่งช้าและมีโอกาสผิดพลาดสูง', ['งานที่มีการทำซ้ำ จะมีระบบงานมาแทนที่ทั้งหมด', 'เลือกระบบงานที่เหมาะสม กับความต้องการของลูกค้า และพฤติกรรมองค์กร', 'ระบบงานจะไม่เน้นการปรับพฤติกรรมการทำงาน แต่จะประสานหรือเป็นหนึ่งเดียวแทน']],
|
||||
['04', 'AI Consult', 'ระบบงานที่ผสาน AI เป็นส่วนหนึ่งในระบบ', 'เหมาะกับธุรกิจที่อยากใช้ AI ให้เกิดประโยชน์สูงสุด และไม่ต้องการให้ความรู้อยู่กับพนักงานเท่านั้น', ['วางระบบ AI ให้เป็นส่วนหนึ่งของการทำงาน', 'พนักงานจะไม่ต้องปรับตัวมาก และกระตุ้นให้ใช้งานระบบที่สร้างขึ้นจนเป็นนิสัย', 'ข้อมูลจะถูกเก็บอย่างเป็นความลับ และง่ายต่อการเข้าถึงและโยกย้าย']],
|
||||
] as const;
|
||||
const process = [['01', 'เข้าใจธุรกิจ', 'ทำความรู้จักสินค้า กลุ่มเป้าหมาย พฤติกรรมองค์กรของลูกค้า และปัญหาที่เจอจริง'], ['02', 'ดูข้อมูล', 'รวบรวมข้อมูลทางสถิติ ถ้าลูกค้ามีข้อมูลน้อย หรือยังไม่มีจะช่วยวางระบบเก็บข้อมูลให้ด้วย'], ['03', 'เลือกทางที่คุ้ม', 'สรุปกลยุทธ์สำหรับลูกค้าทั้งในระยะสั้น และระยะยาว พร้อมทั้งแนวทางการปรับกลยุทธ์เบื้องต้น'], ['04', 'ลงมือและวัดผล', 'การติดตามผลหลังจากปฏิบัติตามกลยุทธ์ และปรับกลยุทธ์ตามสถานการณ์ที่เปลี่ยนไป']];
|
||||
const portfolio = [['Marketing Consult', 'Dataroot', 'บริษัทให้บริการ ERP Software และการปรับแต่ง ERP Software สำหรับองค์กรขนาดใหญ่', 'https://erp.dataroot.asia/'], ['Website Development', 'Jet Industries', 'เว็บไซต์องค์กรผู้ผลิตพลาสติกฉีดขึ้นรูป ประสบการณ์กว่า 40 ปี', 'https://jetindustries.co.th/'], ['Marketing Consult · Website Development', 'Dealplustech', 'เว็บไซต์จัดจำหน่ายระบบน้ำและสุขภัณฑ์คุณภาพสูงสำหรับโรงงานและบ้านเรือน', 'https://www.dealplustech.co.th/'], ['Website Development', 'เลือดจระเข้วานิไทย', 'เว็บไซต์ผลิตภัณฑ์แคปซูลเลือดจระเข้เพื่อสุขภาพ', 'https://xn--22cl9aoj9cdnw9cvb0a1a6a8jh7e5d.com/'], ['Website Development', 'เทรนเนอร์ซันนี่', 'เว็บไซต์ personal brand และหลักสูตรอบรมสำหรับเทรนเนอร์ฟิตเนส', 'https://trainersunny.com/'], ['Website Development', 'Underdog Marketing', 'เว็บไซต์ของอาจารย์บุ้ง ดีดติ่งหู ที่ปรึกษาการตลาดและการขาย', 'https://underdog.run/'], ['Website Development', 'ทวนทอง 99', 'เว็บไซต์จำหน่ายสินค้าอุปโภคบริโภคและสมุนไพรไทย', 'https://tuanthong99.com/'], ['Website Development', 'สำนักงานกฎหมาย ตถาตา', 'เว็บไซต์สำนักงานกฎหมายที่เน้นความน่าเชื่อถือและการเข้าถึงง่าย', 'https://lawyernoom.com/'], ['Website Development', 'Baofuling Shop', 'เว็บไซต์ร้านค้าออนไลน์จำหน่ายผลิตภัณฑ์อาหารเสริมและสุขภาพ', 'https://baofulingshop.com/']];
|
||||
---
|
||||
<BaseLayout>
|
||||
<header class="site-header"><a class="wordmark" href="#home" aria-label="MoreminiMore หน้าหลัก">MORE<span>MINI</span>MORE<span class="wordmark-dot">.</span></a><nav class="desktop-nav" aria-label="เมนูหลัก"><a href="#services">บริการ</a><a href="#process">วิธีการทำงาน</a><a href="#case-study">กรณีศึกษา</a><a href="#portfolio">ผลงาน</a></nav><details class="mobile-nav"><summary aria-label="เปิดเมนูนำทาง">เมนู <span aria-hidden="true">+</span></summary><nav aria-label="เมนูมือถือ"><a href="#services">บริการ</a><a href="#process">วิธีการทำงาน</a><a href="#case-study">กรณีศึกษา</a><a href="#portfolio">ผลงาน</a><a href="#contact">ส่งโจทย์ให้เราดู</a></nav></details><a class="header-cta" href="#contact">ส่งโจทย์ให้เราดู <span aria-hidden="true">↗</span></a></header>
|
||||
<main id="content">
|
||||
<section class="hero" id="home" aria-labelledby="hero-title"><div class="hero-copy"><p class="eyebrow"><span class="live-dot"></span> Partner for practical growth</p><p class="hero-kicker">พาร์ทเนอร์สำหรับ SME ที่อยากตัดสินใจให้คุ้มขึ้น</p><h1 id="hero-title">เป้าหมายของเราคือ<br /><em>เพิ่มกำไร</em>ให้ลูกค้า</h1><p class="hero-lede">เราช่วย SME ดูข้อมูลจริงก่อนตัดสินใจทำเว็บ การตลาด AI หรือระบบอัตโนมัติ เพื่อเลือกสิ่งที่ควรทำอย่างมีประสิทธิภาพ และเหมาะกับธุรกิจของคุณ</p><div class="hero-actions"><a class="button button-primary" href="#contact">ส่งโจทย์ให้เราดู <span>↗</span></a><a class="text-link" href="#portfolio">ดูผลงานก่อน <span>↓</span></a></div></div><div class="signal-panel" aria-label="ปัจจัยเพื่อกำไร"><div class="panel-topline"><span>VALUE MAP / 01</span><span>SME FOCUS</span></div><div class="profit-orbit"><span class="orbit-label top">รายได้</span><span class="orbit-label left">ความเสี่ยง</span><strong>กำไร</strong><span class="orbit-label right">เวลา</span><span class="orbit-label bottom">ข้อมูล</span></div><div class="signal-legend"><span><i class="green"></i> Marketing เพิ่มรายได้</span><span><i class="blue"></i> AI ลดต้นทุนและเวลา</span><span><i class="ink"></i> Business Knowledge ลดความเสี่ยง</span></div></div></section>
|
||||
<section class="problem-strip" aria-label="ปัญหาที่เราช่วยแก้"><p class="eyebrow">START WITH THE PROBLEM</p><h2>คุณมีปัญหาเหล่านี้ไหม?</h2><div class="problem-list"><p><b>01</b> เว็บมีอยู่แล้ว แต่ไม่ค่อยมีลูกค้าทัก</p><p><b>02</b> ยิงแอดอยู่ แต่ยอดขายไม่คุ้ม</p><p><b>03</b> ทีมงานทำงานช้า หรือผิดพลาดบ่อย</p><p><b>04</b> พนักงานลาออก พร้อมกับความรู้เกี่ยวกับลูกค้า</p></div><p class="problem-close">ถ้าคุณมี 1 ใน 4 ปัญหานี้ <span>—</span> คุณคือคนที่เราอยากช่วย</p></section>
|
||||
<section class="section services" id="services" aria-labelledby="services-title"><div class="section-heading"><p class="eyebrow">SERVICES / WHAT WE DO</p><h2 id="services-title">บริการเพื่อตอบโจทย์<br />ปัญหาของคุณ</h2><p>ทุกบริการเริ่มจากบริบทธุรกิจและข้อมูลที่มี ไม่ใช่จากคำตอบสำเร็จรูป</p></div><div class="service-list">{services.map(([number,name,title,text,points]) => <article class="service-card"><div class="service-index">{number}</div><div><p class="service-name">{name}</p><h3>{title}</h3><p class="service-text">{text}</p><ul>{points.map((point) => <li>{point}</li>)}</ul></div><span class="service-arrow" aria-hidden="true">↘</span></article>)}</div></section>
|
||||
<section class="case-study" id="case-study" aria-labelledby="case-title"><div class="case-intro"><p class="eyebrow light">CASE STUDY / DATAROOT</p><h2 id="case-title">ปรับให้ทุกบาท<br /><em>ไปถึงคนที่ใช่</em></h2><p>บริษัทให้บริการ ERP Software และการปรับแต่ง ERP Software สำหรับองค์กรขนาดใหญ่</p><a class="case-link" href="https://erp.dataroot.asia/" target="_blank" rel="noreferrer">เยี่ยมชม Dataroot <span>↗</span></a></div><div class="case-data"><div class="data-topline"><span>CAMPAIGN RESULT</span><span>MARKETING CONSULT</span></div><div class="data-story"><div><b>01</b><h3>ปัญหา</h3><p>ยิงโฆษณาและทำการตลาดอยู่แล้ว แต่ต้องใช้งบประมาณสูงมาก โดยลูกค้าที่ได้มาไม่คุ้มค่ากับงบประมาณที่จ่ายไป</p></div><div><b>02</b><h3>สิ่งที่พบ</h3><p>ตั้งค่าโฆษณากว้างมากเกินไป ทำให้เสียงบประมาณไปกับกลุ่มคนที่ไม่ใช่เป้าหมาย</p></div><div><b>03</b><h3>สิ่งที่ปรับ</h3><p>ปรับการตั้งค่าโดยโฟกัสกลุ่มเป้าหมาย เพื่อให้โฆษณาไปแสดงเฉพาะกลุ่มคนที่น่าจะเป็นลูกค้า</p></div></div><div class="metrics" aria-label="ผลลัพธ์ Dataroot"><div><strong>+373<span>%</span></strong><p>impression</p></div><div><strong>+114.2<span>%</span></strong><p>click</p></div><div><strong>−28.3<span>%</span></strong><p>ad spend</p></div></div></div></section>
|
||||
<section class="section process" id="process" aria-labelledby="process-title"><div class="section-heading"><p class="eyebrow">HOW WE WORK</p><h2 id="process-title">กลยุทธ์และระบบงานของเรา<br />สำหรับลูกค้าแต่ละราย<em>ไม่เหมือนกัน</em></h2></div><ol class="process-grid">{process.map(([number,title,text]) => <li><span>{number}</span><h3>{title}</h3><p>{text}</p></li>)}</ol></section>
|
||||
<section class="section portfolio" id="portfolio" aria-labelledby="portfolio-title"><div class="section-heading portfolio-heading"><div><p class="eyebrow">SELECTED WORK</p><h2 id="portfolio-title">ผลงานจริง<br />ของเรา</h2></div><p>ผลงานที่แสดงเป็นส่วนที่เปิดเผยได้ — บางโปรเจกต์มีข้อมูลลับของลูกค้า จึงไม่สามารถนำมาโชว์ได้</p></div><p class="portfolio-note">เราออกแบบตามวัตถุประสงค์ของลูกค้า ไม่ใช่แค่ความสวยหรือเทคโนโลยี — เพราะกลุ่มเป้าหมายต่างกัน ประสบการณ์ที่ดีสำคัญกว่าเทคนิคที่หวือหวา</p><div class="portfolio-grid">{portfolio.map(([type,name,description,url],index) => <a class:list={['portfolio-card', `portfolio-${index+1}`]} href={url} target="_blank" rel="noreferrer"><span class="project-type">{type}</span><span class="project-number">0{index+1}</span><div class="project-mark" aria-hidden="true"><span>{name.slice(0,1)}</span></div><div><h3>{name}</h3><p>{description}</p></div><span class="project-arrow" aria-hidden="true">↗</span></a>)}</div></section>
|
||||
<section class="contact" id="contact" aria-labelledby="contact-title"><div><p class="eyebrow light">LET'S START SIMPLE</p><h2 id="contact-title">ส่งโจทย์มาให้เรา<br />ดูก่อนได้</h2><p>เริ่มจากปัญหาที่คุณอยากแก้ แล้วเราจะช่วยดูทางเลือกที่เหมาะกับธุรกิจของคุณ</p></div><div class="contact-links"><a href="tel:+66809955945"><span>โทร</span> 080-995-5945 <b>↗</b></a><a href="mailto:contact@moreminimore.com"><span>อีเมล</span> contact@moreminimore.com <b>↗</b></a><a href="https://line.me/R/ti/p/@moreminimore" target="_blank" rel="noreferrer"><span>LINE</span> @moreminimore <b>↗</b></a></div></section>
|
||||
</main>
|
||||
<footer><a class="wordmark" href="#home">MORE<span>MINI</span>MORE<span class="wordmark-dot">.</span></a><p>© 2026 MoreminiMore</p><a href="#home">กลับด้านบน ↑</a></footer>
|
||||
</BaseLayout>
|
||||
1
src/styles/global.css
Normal file
1
src/styles/global.css
Normal file
File diff suppressed because one or more lines are too long
5
tsconfig.json
Normal file
5
tsconfig.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"extends": "astro/tsconfigs/strict",
|
||||
"include": [".astro/types.d.ts", "**/*"],
|
||||
"exclude": ["dist"]
|
||||
}
|
||||
Reference in New Issue
Block a user