o2o-infinith-demo/supporters/src/pages/posts/index.astro
Haewon Kam 24b8be0f3d feat(supporters): 고객용 메시지와 운영자용 설명 분리 (v4)
- 홈: "답변엔진 인용", "질문 뱅크 120", "홈페이지 문장 복사 안 함", "의료법 56조" 등 제작 원칙 섹션 제거.
  주제별 찾기(카테고리 카드) · 최근 답한 질문 · 원장 영상 · 병원 둘러보기 · 신뢰 근거 3가지 · 병원 정보로 재구성. 영어 덱 스타일 헤딩을 한국어 고객 문장으로 교체
- /about: 방문자용 "이 사이트에 대해"로 다시 씀 (근거, 작성·감수, 싣지 않는 것, 병원과의 관계, 문의)
- /editorial 신설: 운영자용 편집 기준 (질문 뱅크, 글 구조, 원천 변환, 중복 회피, 스키마, 발행 게이트, 고객/운영자 경계). noindex, 푸터에서만 연결
- 내비 "운영 원칙" → "소개", 샘플 배너에서 noindex 언급 제거, 글 상세 QB 번호는 data-qb 속성으로만 유지
- 글 목록·병원 정보·영상·뉴스룸·작성자 페이지의 "단일 원본", "API 집계", "수집 기준", "팩트 시트" 문구 정리
- 후기 글·방문 안내 글의 법 조문·답변엔진 언급을 고객 문장으로 교체
- Base에 noindex prop 추가. docs/v4-screenshots 기록

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-07 08:57:56 +09:00

21 lines
1.7 KiB
Plaintext

---
import { getCollection } from 'astro:content';
import Base from '../../layouts/Base.astro';
import PostCard from '../../components/PostCard.astro';
import { CATEGORY_LABELS, SITE_NAME } from '../../lib';
const posts = (await getCollection('posts')).sort((a, b) => b.data.dateModified.localeCompare(a.data.dateModified));
const cats = Object.keys(CATEGORY_LABELS);
const site = Astro.site!.toString().replace(/\/$/, '');
const ld = { '@type': 'CollectionPage', '@id': `${site}/posts#page`, name: '전체 글', url: `${site}/posts`, inLanguage: 'ko', publisher: { '@type': 'Organization', name: SITE_NAME, url: site }, hasPart: posts.map((p) => ({ '@type': 'Article', headline: p.data.title, url: `${site}/posts/${p.id}`, dateModified: p.data.dateModified })) };
---
<Base title="전체 글" description="뷰성형외과에 대해 사람들이 묻는 질문에 서포터즈가 먼저 답한 글 목록. 카테고리별로 정리했습니다." jsonLd={ld}>
<div class="wrap-wide" style="padding-bottom:4rem">
<header class="article-head"><div class="eyebrow">전체 글</div><h1>질문별로 답한 글</h1><p style="color:var(--slate-600);margin-top:0.6rem">궁금한 주제를 골라 보세요. 글 하나가 질문 하나에 답합니다.</p></header>
{cats.map((c) => {
const list = posts.filter((p) => p.data.category === c);
if (!list.length) return null;
return (<section id={`cat-${c}`} style="scroll-margin-top:90px"><div class="section-title" style="margin-top:2.4rem"><h2>{c}. {CATEGORY_LABELS[c]}</h2><span style="color:var(--slate-500);font-size:0.9rem">{list.length}편</span></div><div class="grid">{list.map((p) => <PostCard post={p} />)}</div></section>);
})}
</div>
</Base>