콘텐츠로 이동

빌드 케이스: 시길 CSS 가이드 사이트

바이브 코딩으로 사이트 만들기 - 첫 번째 케이스 (2026-02) 상태: 진행 중 (카드 데이터 추가 단계)

프로젝트 개요

  • 사이트: https://sigil-css-guide.vercel.app
  • 목적: 시길(Sigil) 전자책 CSS 가이드 + 레퍼런스. 초보자 학습 + 본인 작업 참조 + 강의 교재
  • 핵심 기능: CSS 카드 카탈로그, 코드 복사(주석 포함/코드만), 라이브 미리보기, 뷰어 호환성 뱃지

기술 스택

선택 이유
Astro 5.x 정적 콘텐츠 사이트에 최적
순수 CSS + 최소 JS 외부 의존성 0
Vercel GitHub push → 자동 배포, 무료

ai-prompt 사이트와의 차이점

항목 sigil-css-guide (1차) ai-prompt (2차)
콘텐츠 형식 페이지별 카드 배열 (하드코딩) Content Collections (마크다운)
상세 패널 DetailPanel 컴포넌트 분리 interactions.ts에서 동적 생성
미리보기 iframe 라이브 미리보기 없음 (텍스트 프롬프트라 불필요)
뱃지 뷰어 호환성 + 접근성 (자동 계산) AI 역할 (수동 지정)
카테고리 페이지별 분리 (headings, body 등) categories.ts 중앙 관리

프로젝트 구조

src/
├── components/
│   ├── CSSCard.astro        ← CSS 카드 썸네일
│   ├── DetailPanel.astro    ← 상세 패널 (6페이지 공유)
│   └── PreviewCard.astro    ← 미리보기 카드
├── layouts/BaseLayout.astro
├── pages/                   ← 카테고리별 페이지 14개
│   ├── index.astro
│   ├── headings.astro, body.astro, boxes.astro ...
│   ├── compatibility.astro, troubleshooting.astro, workflow.astro
│   └── test.astro
├── scripts/detail-panel.ts  ← 패널 인터랙션
├── styles/global.css
└── types/card.ts            ← CardData 타입 정의

핵심 설계 결정들

1. DetailPanel 컴포넌트 분리

  • 처음에 6개 페이지에 패널 HTML 중복 → 컴포넌트 1개로 통합
  • ai-prompt에서는 JS로 동적 생성하는 다른 방식 채택

2. CardData 타입

  • TypeScript 타입으로 카드 데이터 구조 강제
  • 뷰어 호환성, 접근성 등급 등 복잡한 메타데이터 관리

3. 코드 안 주석 = 조작 가이드

  • /* 숫자↑ 두꺼워짐 */ 같은 주석으로 비개발자도 수정 가능
  • 코드 설명(접이식)은 이해 가이드 역할

1차에서 배운 것 → 2차에 적용

1차 경험 2차 개선
카드 데이터 하드코딩 → 수정 번거로움 Content Collections 마크다운 도입
DetailPanel 컴포넌트 분리에 시간 소요 처음부터 JS 동적 생성으로 설계
Vercel 이메일 불일치 삽질 배포 전 체크리스트 만들어서 방지
페이지마다 카드 배열 관리 categories.ts 중앙화

현재 상태

  • 프레임워크/컴포넌트/배포 완성
  • 카드 데이터 본격 추가 단계 (03-CSS-레퍼런스.md 기반)
  • 참조 데이터: D:\ebook-project\_docs\03-CSS-레퍼런스.md