BibleCardAI 랜딩 페이지 리뉴얼
BibleCardAI 랜딩 페이지 리뉴얼
BibleCardAI의 첫 페이지가 Hero 텍스트 + 기능 소개 카드 3장이 전부였다. 서비스가 뭔지 한눈에 안 보이고, 실제 결과물을 보려면 갤러리까지 들어가야 했다.
리뉴얼 목표는 단순하다. 들어오자마자 “이 서비스는 이런 카드를 만든다”가 보이게 하는 것.
구조
- Hero — CTA 버튼 2개 (만들기 / 갤러리 둘러보기)
- 인기 카드 무한 슬라이드 — 좋아요 많은 공개 카드
- How it works — 3단계 (묵상 → AI 이미지 → 카드)
- 스타일 갤러리 — 수채화, 바로크 등
Pinterest나 Midjourney처럼 masonry 그리드도 고려했지만, 카드 수가 아직 적고 모바일에서 가로 슬라이드가 더 임팩트 있어서 이 방식으로 갔다.
무한 슬라이드 구현
라이브러리 없이 requestAnimationFrame으로 구현했다. 핵심은 카드 배열을 2배로 복제해서 이어 붙이고, 절반 지점에서 offset을 0으로 리셋하는 것.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
const doubled = [...cards, ...cards];
useEffect(() => {
let offset = 0;
const halfWidth = el.scrollWidth / 2;
const tick = () => {
if (!paused) {
offset += 0.5; // px per frame
if (offset >= halfWidth) offset = 0;
el.style.transform = `translateX(-${offset}px)`;
}
requestAnimationFrame(tick);
};
requestAnimationFrame(tick);
}, []);
transform: translateX로 GPU 가속 (will-change: transform)- hover/터치 시
paused상태로 일시정지 - 카드 클릭하면
/gallery?card=ID로 갤러리 모달이 열림
인기 카드 API
갤러리 API에 sort=popular 파라미터를 추가했다.
1
2
if sort == 'popular':
query = query.order_by(CardModel.likes_count.desc(), CardModel.created_at.desc())
랜딩에서 ?sort=popular&per_page=20으로 호출해서 좋아요 많은 카드를 가져온다.
Tailwind 동적 클래스 주의
처음에 이렇게 썼다가 스타일이 안 먹었다:
1
2
// 안 됨 — Tailwind은 빌드 타임에 클래스를 추출하므로 동적 문자열 인식 불가
<div className={`bg-${color}-100`}>
이렇게 바꿔야 한다:
1
2
3
// 됨 — 전체 클래스명을 미리 선언
{ bg: 'bg-purple-100 dark:bg-purple-900/30', fg: 'text-purple-600' }
<div className={item.bg}>
결과
텍스트만 있던 페이지가 실제 카드가 흘러가는 페이지로 바뀌었다. 첫 방문자가 갤러리까지 들어가지 않아도 어떤 카드가 만들어지는지 바로 보게 됐다.
두 줄 무한 슬라이드 — 터치 스와이프, 마우스 드래그, 클릭 피드백
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.