사용 방법: 새 Claude Code 세션을
C:\GIT디렉터리에서 열고, 본 문서 전체를 첫 프롬프트로 붙여넣으세요. (또는 짧게 “이 브리프대로 진행해줘 + 본 파일 경로” 만 줘도 OK — 본 세션이 파일을 읽음)가능하면
oh-my-claudecode:designer서브에이전트 활용을 요청하세요. 예: “Agent tool로 designer 서브에이전트 호출해서 진행해줘”.
당신은 이 책 인용구 공유 앱의 카드 템플릿·디자인 시스템 담당 디자이너입니다.
본 프로젝트의 메인 작업자(폴리글랏 백엔드 엔지니어)가 다른 세션에서 코딩을 진행합니다. 당신은 시각 디자인·디자인 시스템에 집중하고, 결과물을 메인 세션이 React Native Skia로 구현할 수 있는 형태로 전달합니다.
제품: 책의 좋은 문장을 사진 한 장으로 저장하고, 예쁜 카드로 만들어 친구·SNS에 공유하는 모바일 앱 (가칭 “책귀”)
목표 사용자: 연 5–20권 읽는 일반 독서가 (20–30대 여성 우선)
핵심 메커니즘: 사용자가 만든 카드가 인스타 스토리·단톡방으로 공유 → 친구 호기심 → 앱 설치 (바이럴)
차별화 축: 모바일 퍼스트 + 인스타그래머블한 카드 디자인 (이게 이 앱의 핵심 차별화. 카드 디자인 품질이 곧 앱의 성패)
관련 문서 (모두 C:\GIT\quotes-app-discovery\):
architecture.md — 시스템 아키텍처client-architecture.md — 클라이언트 구조flows.md — 사용자 플로우 (특히 4번 Flow B의 카드 편집기)landing-page/app-screens.html — 화면 모형 (열어서 봐주세요)landing-page/index.html — 랜딩 페이지원본 플랜: C:\Users\sttgp\.claude\plans\parallel-sleeping-meadow.md
민지, 28세, 마케터, 서울
부페르소나: 한지영, 31세, 프리랜서 디자이너
가상 인터뷰 자세한 내용: virtual-interviews-2026-05-09.md
키워드 (5–8개로 좁히되 시작점):
피해야 할 것:
경쟁/영감 소스:
각 템플릿은 명확히 다른 결을 가져야 함. 5개 모두 미니멀이면 의미 없음.
추천 5종 (시작점 — 더 좋은 안 있으면 자유롭게 변경 제안):
각 템플릿마다 다음 명세:
이 앱의 핵심 차별화. 알고리즘 명세 + 의사 코드:
node-vibrant의 RN 포팅 또는 react-native-image-colorslanding-page/app-screens.html의 와이어프레임을 정밀 비주얼로:
우선순위: A > B > C » D. A가 빛나면 D는 V1 이후로 미뤄도 OK.
image.aladin.co.kr/...)palette_generator (Google 공식 패키지)supabase_flutter)가장 중요: 메인 세션이 코드로 구현할 수 있는 형태로 전달.
// lib/design/tokens.dart
abstract final class AppColors {
static const primary = _PrimaryScale();
static const secondary = _SecondaryScale();
static const accent = _AccentScale();
// ...
}
abstract final class AppFontSize {
static const double xs = 11;
static const double sm = 13;
static const double base = 15;
static const double lg = 17;
static const double xl = 22;
}
abstract final class AppSpacing {
static const double s4 = 4;
static const double s8 = 8;
// ...
}
abstract final class AppRadius {
static const double sm = 2;
static const double md = 4;
static const double lg = 8;
}
abstract final class AppShadow {
static const card = BoxShadow(...);
static const modal = BoxShadow(...);
}
각 템플릿마다 한 파일:
lib/features/cards/presentation/templates/minimal_template.dartlib/features/cards/presentation/templates/warm_template.dartclass MinimalTemplate {
static const String id = 'minimal';
static const String name = '미니멀';
static const TemplateLayout layout = TemplateLayout(
quoteArea: QuoteAreaSpec(padding: 32, fontSize: 18, lineHeight: 1.7, fontFamily: 'NotoSerifKR-Medium'),
bookArea: BookAreaSpec(padding: 16, fontSize: 11),
watermarkArea: WatermarkSpec(...),
);
static TemplateColors colorMapping(ExtractedPalette palette) => TemplateColors(
background: palette.dominant,
quoteText: ensureContrast(palette.dominant, palette.textOnBackground),
bookText: palette.subtextOnBackground,
);
static const Map<String, RatioVariant> variants = {
'9:16': RatioVariant(...),
'1:1': RatioVariant(...),
'4:5': RatioVariant(...),
};
}
Flutter는 Skia가 엔진이라 별도 캔버스 라이브러리 없음. CustomPainter 또는 일반 Widget 합성으로 카드 렌더링.
// lib/features/cards/presentation/templates/minimal_template_widget.dart
class MinimalTemplateWidget extends StatelessWidget {
final Quote quote;
final Book book;
final TemplateDesign design;
const MinimalTemplateWidget({
super.key,
required this.quote,
required this.book,
required this.design,
});
@override
Widget build(BuildContext context) {
return RepaintBoundary( // PNG export 시 boundary 캡처
child: CustomPaint(
size: Size(design.width, design.height),
painter: MinimalCardPainter(quote: quote, book: book, design: design),
),
);
}
}
C:\GIT\quotes-app-discovery\design\
├── tokens.md # 디자인 토큰 명세
├── tokens.dart # 실제 import 가능한 Dart 토큰
├── templates\
│ ├── 01-minimal.md # 명세 + 시각 미리보기 (HTML mockup)
│ ├── 02-warm.md
│ ├── 03-mono.md
│ ├── 04-cover-extract.md
│ └── 05-typography.md # (브리프 5번 일러스트 → 타이포 교체됨)
├── color-extraction.md # 표지 → 팔레트 알고리즘 (palette_generator 기반)
├── design-system.md # 전체 시스템 종합
└── mockups\
└── all-templates.html # 5개 템플릿 시각 비교
또는 코드로 바로 가능하면 lib/features/cards/presentation/templates/ 아래.
landing-page/app-screens.html 카드 편집기 화면 확인. #책스타그램 인기 게시물 검색 (가능하면).landing-page/app-screens.html 보고 첫인상·이슈 언급본 세션을 메인 세션과 다른 컨텍스트로 분리해서 시각 디자인에 집중해주세요.