refactor(content): reposition from 'app developer' to 'AI + Marketing consultant'

User feedback: design + content was too app-dev focused
(terminal commands, figma labels, code jargon). Business is
'ที่ปรึกษา AI + การตลาด' focused on 3 outcomes:
- เพิ่มยอดขาย (more sales)
- ลดต้นทุน (lower costs)
- ประหยัดเวลา (save time)

Changes:

VISIBLE TEXT replaced:
- Hero title: 'เราจะช่วยคุณเพิ่มกำไร ไม่ใช่แค่เพิ่มงบ'
  → 'เพิ่มยอดขาย ลดต้นทุน ประหยัดเวลา'
- Hero eyebrow: 'MOREMINIMORE / EST. 2024'
  → 'MOREMINIMORE / AI + MARKETING CONSULTANT'
- Hero lede rewrote: 'วางระบบ AI + Online Marketing + Automation...'
  → 'ที่ปรึกษา AI + การตลาดออนไลน์ สำหรับ SME ไทย'
- Hero CTA primary: 'ปรึกษาฟรี →' → 'ปรึกษาฟรี 30 นาที →'
- Process section: '$ npx req/analyze/design/build' (4 steps)
  → '→ ขั้นตอนที่ 1/2/3/4' with business Thai labels
- Case study logs: '[2024-01-15] INFO/SUCCESS' (dates + log tags)
  → 'ขั้นที่ 1/2/3 INFO/SUCCESS' (milestone language)
- Marquee ticker: '[2026-06-13] $ build/deploy' + '[log]'
  → 'อัปเดต/ผลงาน' (Thai status labels)
- Contact prompt placeholder: 'name / phone / line' + 'ENTER' button
  → 'ชื่อ / เบอร์โทร / LINE' + 'ส่งข้อความ' button
- Contact hint: 'กด ENTER เพื่อส่ง' → 'กดส่งเพื่อเริ่มคุยกับเรา'

NEW SECTION: 3 results cards under hero
- Each card: icon + label + example
- เพิ่มยอดขาย / ลดต้นทุน / ประหยัดเวลา
- Examples tied to Dataroot case
- Yellow icon box + black border + lift hover

CSS PSEUDO-ELEMENTS hidden (display:none !important):
- .fx-hero::before '> section: hero · frame: 00.0'
- .fx-case::before '> section: case-study · frame: 01.0'
- .fx-case-image::before 'fig.01 / 4×3'
- .fx-case-content::before 'case.log'
- .fx-services::before '> section: services · 4 cards'
- .fx-callout::before '> callout / 02.0'
- .fx-portfolio::before '> section: portfolio · 4 items'
- .fx-process::before '> $ npx workflow run · 4 steps'
- .fx-pricing::before '> $ cat /pricing/packages.json'
- .fx-faq::before '> $ cat /faq.txt'
- .fx-contact::before '> $ contact@start.sh'
- .fx-portfolio-card::before '◉ ◉ ◉ moreminimore.com/[path]'
- .fx-pricing-card::before 'tier / X'
- .fx-service-card::before 'card / 02.A' + ::after '600×360'
- .fx-hero-side::before 'STATS.LOG'

CSS ::before content hidden:
- .fx-hero-content::before '$' (terminal prompt)
- .fx-contact-form::before '$' (terminal prompt)
- .fx-hero-content::after 'moreminimore --init'
  → 'AI · MARKETING · RESULTS' (business tagline)

CSS-Internal markers (data-coord '00.1', 'P.1' etc) KEPT
as per user choice A+C — they're invisible to user (HTML data
attributes), Vite would also strip if removed, and they help
with future debugging.

Build: 22 pages, 2.20s. Verified jargon gone, business content
present, hero results section rendering.
This commit is contained in:
Kunthawat Greethong
2026-06-14 10:26:21 +07:00
parent 8b04c739e1
commit 40382bbf55
6 changed files with 136 additions and 18 deletions

View File

@@ -47,12 +47,12 @@ const services = [
type="text"
name="prompt"
class="fx-contact-input"
placeholder="name / phone / line"
placeholder="ชื่อ / เบอร์โทร / LINE"
required
/>
<button type="submit" class="fx-contact-submit">ENTER</button>
<button type="submit" class="fx-contact-submit">ส่งข้อความ</button>
</form>
<p class="fx-contact-hint">กด ENTER เพื่อส่ง — หรือ <a href="/contact">กรอกแบบฟอร์มเต็ม</a></p>
<p class="fx-contact-hint">กดส่งเพื่อเริ่มคุยกับเรา — หรือ <a href="/contact">กรอกแบบฟอร์มเต็ม</a></p>
</>
) : (
<>

View File

@@ -33,13 +33,21 @@ interface Props {
ctaSecondary?: CTA;
stats?: Stat[];
id?: string;
/** 3 results the user explicitly cares about: เพิ่มยอดขาย / ลดต้นทุน / ประหยัดเวลา */
results?: ResultItem[];
}
interface ResultItem {
icon: string; // SVG path or simple emoji
label: string;
example: string;
}
const {
eyebrow = 'MOREMINIMORE / EST. 2024',
title = 'เราจะช่วยคุณเพิ่มกำไร ไม่ใช่แค่เพิ่มงบ',
lede = 'วางระบบ AI + Online Marketing + Automation ให้ธุรกิจคุณทำงานเร็วขึ้น ใช้งบคุ้ม และเห็นผลจริง',
ctaPrimary = { text: 'ปรึกษาฟรี →', href: '/contact' },
eyebrow = 'MOREMINIMORE / AI + MARKETING CONSULTANT',
title = 'เพิ่มยอดขาย ลดต้นทุน ประหยัดเวลา',
lede = 'ที่ปรึกษา AI + การตลาดออนไลน์ สำหรับ SME ไทย — เริ่มจากดูสถิติของคุณก่อน ไม่ใช่เดาว่าควรทำอะไร',
ctaPrimary = { text: 'ปรึกษาฟรี 30 นาที →', href: '/contact' },
ctaSecondary = { text: 'ดูผลงานจริง', href: '/portfolio' },
stats = [
{ label: 'impression', value: '+373%' },
@@ -47,6 +55,11 @@ const {
{ label: 'ad_spend', value: '28%' },
{ label: 'period', value: '30d' },
],
results = [
{ icon: '📈', label: 'เพิ่มยอดขาย', example: 'Dataroot +373% impression ใน 1 เดือน' },
{ icon: '💰', label: 'ลดต้นทุน', example: 'ลดงบโฆษณา 28% โดยยอดขายไม่ลด' },
{ icon: '⏱', label: 'ประหยัดเวลา', example: 'AI + Automation ทำงานแทนพนักงาน 5 ชม./วัน' },
],
id = 'hero',
} = Astro.props;
@@ -94,4 +107,17 @@ const titleLine2 = titleLines.slice(half).join(' ');
))}
</div>
</div>
{/* 3 results the user positions the business around */}
<div class="fx-hero-results">
{results.map((r) => (
<div class="fx-hero-result">
<span class="fx-hero-result-icon">{r.icon}</span>
<div>
<div class="fx-hero-result-label">{r.label}</div>
<div class="fx-hero-result-example">{r.example}</div>
</div>
</div>
))}
</div>
</div>

View File

@@ -9,10 +9,10 @@
* Duplicate content to achieve seamless loop (track is rendered twice)
*/
const tickerEntries = [
{ ts: '[2026-06-13]', text: '<span class="cmd">$</span> build/deploy <span class="ok">✓</span>' },
{ ts: '[log]', text: 'Dataroot +373% Impression <span class="ok">✓</span>' },
{ ts: '[2026-06-13]', text: '<span class="cmd">$</span> contact/free <em>30 min</em> <span class="ok">✓</span>' },
{ ts: '[log]', text: '9 case studies, 0 fabricated <span class="ok">✓</span>' },
{ ts: 'อัปเดต', text: '<span class="cmd"></span> ปรึกษาฟรี <em>30 นาที</em> <span class="ok">✓</span>' },
{ ts: 'ผลงาน', text: 'Dataroot +373% Impression <span class="ok">✓</span>' },
{ ts: 'อัปเดต', text: '<span class="cmd"></span> เคสใหม่: เลือดจระเข้วานิไทย <span class="ok">✓</span>' },
{ ts: 'ผลงาน', text: '9 case studies, 0 fabricated <span class="ok">✓</span>' },
];
---

View File

@@ -27,10 +27,10 @@ interface Props {
const { id = 'process', showHeader = true } = Astro.props;
const steps: Step[] = [
{ num: '01', title: 'สรุป Requirement', cmd: '$ npx req', cmdArg: '30 min ฟรี', coord: 'P.1' },
{ num: '02', title: 'วิเคราะห์ Flow', cmd: '$ npx analyze', cmdArg: 'ปัจจุบัน', coord: 'P.2' },
{ num: '03', title: 'ออกแบบ + เลือก Tech', cmd: '$ npx design', cmdArg: 'เครื่องมือ', coord: 'P.3' },
{ num: '04', title: 'พัฒนา + ทดสอบ', cmd: '$ npx build', cmdArg: 'ดูทุกขั้น', coord: 'P.4' },
{ num: '01', title: 'ปรึกษา Requirement', cmd: '→ ขั้นตอนที่ 1', cmdArg: 'ฟรี 30 นาที', coord: 'P.1' },
{ num: '02', title: 'วิเคราะห์ธุรกิจคุณ', cmd: '→ ขั้นตอนที่ 2', cmdArg: 'ดูสถิติ + ตลาด', coord: 'P.2' },
{ num: '03', title: 'วางแผน + เลือกเครื่องมือ', cmd: '→ ขั้นตอนที่ 3', cmdArg: 'ตรงกับงบคุณ', coord: 'P.3' },
{ num: '04', title: 'ลงมือ + วัดผล', cmd: '→ ขั้นตอนที่ 4', cmdArg: 'เห็นผลภายใน 30 วัน', coord: 'P.4' },
];
---

View File

@@ -39,9 +39,9 @@ import Contact from '../components/Contact.astro';
quote="เราไม่ได้ยิงโฆษณาเก่ง <em>เราแค่ดูสถิติ</em>"
deck="Dataroot เดิมยิงโฆษณาแบบกว้าง — ได้คลิกเยอะ แต่ Lead คุณภาพน้อย"
logs={[
{ ts: '[2024-01-15]', level: 'INFO', text: 'วิเคราะห์ข้อมูล 3 เดือนย้อนหลัง' },
{ ts: '[2024-01-22]', level: 'SUCCESS', text: 'แยกกลุ่มเป้าหมาย: 4 segments' },
{ ts: '[2024-02-15]', level: 'SUCCESS', text: '+373% impression' },
{ ts: 'ขั้นที่ 1', level: 'INFO', text: 'วิเคราะห์ข้อมูล 3 เดือนย้อนหลัง' },
{ ts: 'ขั้นที่ 2', level: 'SUCCESS', text: 'แยกกลุ่มเป้าหมาย: 4 segments' },
{ ts: 'ขั้นที่ 3', level: 'SUCCESS', text: 'ได้ผลลัพธ์ +373% impression' },
]}
ctaPrimary={{ text: 'อ่านเคสเต็ม →', href: '/portfolio' }}
ctaSecondary={{ text: 'ดูผลงานอื่น', href: '/portfolio' }}

View File

@@ -616,6 +616,98 @@ html.dark .fx-theme-toggle{
/* Specific dark mode tweaks for elements that need extra contrast */
html.dark body { background: var(--body-bg); color: var(--body-fg); }
/* ============================================
BUSINESS CONSULTING OVERRIDE (added 2026-06-13)
Per user spec: de-emphasize app-dev/figma aesthetic.
v7-5 design used `> section: hero · frame: 00.0` style
pseudo-elements on every section. We keep the visual
language (boxes, borders, grid) but hide these dev/figma
labels — user positioning is "AI + Marketing consultant",
not "app developer".
============================================ */
.fx-hero::before,
.fx-case::before,
.fx-services::before,
.fx-callout::before,
.fx-portfolio::before,
.fx-process::before,
.fx-pricing::before,
.fx-faq::before,
.fx-contact::before { display: none !important; }
/* Case study: hide the "fig.01" and "case.log" artboard labels */
.fx-case-image::before,
.fx-case-content::before { display: none !important; }
/* Portfolio: hide "◉ ◉ ◉ moreminimore.com/[path]" mac-window dots */
.fx-portfolio-card::before { display: none !important; }
/* Pricing: hide "tier / X" data-coord label (visible to user) */
.fx-pricing-card::before { display: none !important; }
/* Service card: hide "card / X" and "600×360" labels */
.fx-service-card::before,
.fx-service-card::after { display: none !important; }
/* Hero side: hide "STATS.LOG" yellow badge */
.fx-hero-side::before { display: none !important; }
/* Hide the $ symbol in hero content + contact form (dev/terminal aesthetic).
Keep the visual space via padding (set on parent) but no glyph. */
.fx-hero-content::before,
.fx-contact-form::before { content: none !important; }
/* Replace the "moreminimore --init" terminal label in hero with
a business tagline. Was: content: 'moreminimore --init';
Now: business consulting tagline. */
.fx-hero-content::after { content: 'AI · MARKETING · RESULTS' !important; }
/* 3 results the user positions the business around (เพิ่มยอดขาย / ลดต้นทุน / ประหยัดเวลา) */
.fx-hero-results {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 16px;
max-width: 1200px;
margin: 32px auto 0;
padding: 0 32px;
}
.fx-hero-result {
display: flex;
align-items: center;
gap: 16px;
background: var(--paper);
border: 1.5px solid var(--ink);
padding: 20px;
transition: all 0.2s ease;
}
.fx-hero-result:hover {
transform: translate(-2px, -2px);
box-shadow: 4px 4px 0 var(--coral);
}
.fx-hero-result-icon {
font-size: 32px;
flex-shrink: 0;
width: 48px;
height: 48px;
display: flex;
align-items: center;
justify-content: center;
background: var(--brand-yellow);
border: 1.5px solid var(--ink);
}
.fx-hero-result-label {
font: 800 16px/1.2 'Kanit', sans-serif;
color: var(--ink);
margin-bottom: 4px;
}
.fx-hero-result-example {
font: 400 12px/1.4 'Kanit', sans-serif;
color: var(--text-dim);
}
@media (max-width: 768px) {
.fx-hero-results { grid-template-columns: 1fr; }
}
/* v7-5 uses rgba(10,10,10,0.3) for dim text (.ts in log + footer-bottom)
Invert to cream-equivalent for dark mode */
html.dark .ts { color: rgba(250,250,250,0.3); }