diff --git a/app/tarot/TarotReadingClient.tsx b/app/tarot/TarotReadingClient.tsx
new file mode 100644
index 0000000..bf756b8
--- /dev/null
+++ b/app/tarot/TarotReadingClient.tsx
@@ -0,0 +1,719 @@
+'use client';
+
+import { useEffect, useState } from 'react';
+import type { CSSProperties } from 'react';
+import Link from 'next/link';
+import { TAROT_DECK, SPREADS, CATEGORIES } from '@/lib/tarot/cards';
+import type { TarotCard } from '@/lib/tarot/cards';
+import { buildShuffle } from '@/lib/tarot/shuffle';
+import type { Pick } from '@/lib/tarot/shuffle';
+import { buildReferenceBlock, buildContextMeta } from '@/lib/tarot/reference';
+import type { TarotInterpretation } from '@/lib/tarot/prompt';
+
+// 타로 3카드 리딩 클라이언트 — web-ui Reading.jsx의 구조·상태머신을 참고해
+// 이 저장소의 라이트(--jsm-*) 디자인 언어로 새로 작성.
+// 3-step: setup(질문+카테고리) → pick(20장 부채꼴에서 3장 선택) → result(3장 + 2탭).
+
+const KOR_TIGHT = { letterSpacing: '-0.02em' } as const;
+const KOR_BODY = { letterSpacing: '-0.01em' } as const;
+
+const INPUT_STYLE = {
+ background: 'var(--jsm-surface-alt)',
+ border: '1px solid var(--jsm-line)',
+ color: 'var(--jsm-ink)',
+} as const;
+
+const SPREAD = SPREADS[0];
+const DEFAULT_CATEGORY = CATEGORIES[CATEGORIES.length - 1];
+const QUESTION_MAX = 200;
+const DECK_SIZE = 20;
+
+type DeckCard = TarotCard & { reversed: boolean };
+type Step = 'setup' | 'pick' | 'result';
+type ResultTab = 'meaning' | 'ai';
+type AiStatus = 'idle' | 'loading' | 'done' | 'auth' | 'limit' | 'error';
+
+const STEP_LABELS: { key: Step; label: string }[] = [
+ { key: 'setup', label: '질문 설정' },
+ { key: 'pick', label: '카드 선택' },
+ { key: 'result', label: '리딩 결과' },
+];
+
+// ── 카드 칩(카테고리) ────────────────────────────────────────────────
+function Chip({ label, selected, onClick }: { label: string; selected: boolean; onClick: () => void }) {
+ return (
+
+ );
+}
+
+// ── 단계 인디케이터 ──────────────────────────────────────────────────
+function StepIndicator({ step }: { step: Step }) {
+ const idx = STEP_LABELS.findIndex((s) => s.key === step);
+ return (
+
+ {STEP_LABELS.map((s, i) => (
+
+
+
+ {i + 1}
+
+
+ {s.label}
+
+
+ {i < STEP_LABELS.length - 1 && (
+
+ )}
+
+ ))}
+
+ );
+}
+
+// ── 카드 앞면 — 이미지 실패 시 카드명·영문명 텍스트 폴백, 역방향은 180도 회전 ──
+function TarotFrontFace({ card, reversed, sizeClass }: { card: TarotCard; reversed: boolean; sizeClass: string }) {
+ const [broken, setBroken] = useState(false);
+ return (
+
+ {!broken ? (
+

setBroken(true)}
+ className="h-full w-full object-cover"
+ style={{ transform: reversed ? 'rotate(180deg)' : undefined }}
+ />
+ ) : (
+
+
+ {card.name}
+
+
+ {card.nameEn}
+
+
+ )}
+
+ );
+}
+
+// ── 부채꼴 배치용 트랜스폼 계산 ──────────────────────────────────────
+function fanCardStyle(index: number, total: number): CSSProperties {
+ const mid = (total - 1) / 2;
+ const offset = index - mid;
+ const rotate = offset * 3.4;
+ const lift = Math.abs(offset) * 2.2;
+ return {
+ transform: `rotate(${rotate}deg) translateY(${lift}px)`,
+ transformOrigin: 'bottom center',
+ marginLeft: index === 0 ? 0 : -34,
+ zIndex: index,
+ };
+}
+
+// ── 탭 1: 카드 해석(항상 표시, 정역 반영 로컬 데이터) ─────────────────
+function MeaningTab({ picks }: { picks: Pick[] }) {
+ return (
+
+ {picks.map((p) => {
+ const c = p.card;
+ const keywords = p.reversed ? c.reversedKeywords : c.keywords;
+ const meaning = p.reversed ? c.meaningReversed : c.meaningUpright;
+ return (
+
+
+
+ {p.position}
+
+
+ {c.name} · {c.nameEn} ({p.reversed ? '역방향' : '정방향'})
+
+
+
+
+ {keywords.map((k) => (
+
+ {k}
+
+ ))}
+
+
+
+ {meaning}
+
+
+
+ {c.symbols.map((s) => (
+
+
+ {s.label}
+ {' '}
+ — {s.meaning}
+
+ ))}
+
+
+ );
+ })}
+
+ );
+}
+
+const CONFIDENCE_LABEL: Record = {
+ high: '높음',
+ medium: '보통',
+ low: '낮음',
+};
+const CONFIDENCE_COLOR: Record = {
+ high: 'var(--jsm-accent)',
+ medium: 'var(--jsm-ink-soft)',
+ low: '#b45309',
+};
+const INTERACTION_LABEL: Record = {
+ synergy: '시너지',
+ conflict: '충돌',
+ transition: '전환',
+};
+
+// ── 탭 2: AI 인사이트 — idle/loading/auth/limit/error/done ───────────
+function AiInsightTab({
+ status,
+ errorMessage,
+ interpretation,
+ onStart,
+}: {
+ status: AiStatus;
+ errorMessage: string;
+ interpretation: TarotInterpretation | null;
+ onStart: () => void;
+}) {
+ const panelStyle = { borderColor: 'var(--jsm-line)', background: 'var(--jsm-surface)' } as const;
+
+ if (status === 'idle') {
+ return (
+
+
+ 카드의 상징과 위치를 근거로 AI가 3장의 흐름을 해석합니다. 로그인 후 하루 3회까지 무료로 이용할 수 있습니다.
+
+
+
+ );
+ }
+
+ if (status === 'loading') {
+ return (
+
+
+
+ AI가 카드를 해석하는 중입니다...
+
+
+ 최대 45초 정도 걸릴 수 있습니다.
+
+
+ );
+ }
+
+ if (status === 'auth') {
+ return (
+
+
+ 로그인하면 AI 해석을 무료로 받을 수 있습니다. (일 3회)
+
+
+ 로그인하고 해석 보기
+
+
+ );
+ }
+
+ if (status === 'limit') {
+ return (
+
+
+ {errorMessage || '오늘의 무료 AI 해석 횟수를 모두 사용했습니다.'}
+
+
+ 내일 다시 시도해주세요.
+
+
+ );
+ }
+
+ if (status === 'error') {
+ return (
+
+
+ {errorMessage || 'AI 해석 생성에 실패했습니다. 잠시 후 다시 시도해주세요.'}
+
+
+
+ );
+ }
+
+ if (!interpretation) return null;
+
+ return (
+
+
+
+
+ 종합 요약
+
+
+ 신뢰도 {CONFIDENCE_LABEL[interpretation.confidence]}
+
+
+
+ {interpretation.summary}
+
+
+
+
+ {interpretation.cards.map((c) => (
+
+
+
+ {c.position}
+
+
+ {c.card} ({c.reversed ? '역방향' : '정방향'})
+
+
+
+ {c.interpretation}
+
+
+
+
+ 근거 · 카드 의미
+ {' '}
+ — {c.evidence.card_meaning_used}
+
+
+
+ 근거 · 위치 논리
+ {' '}
+ — {c.evidence.position_logic}
+
+
+
+ 근거 · 카테고리 관점
+ {' '}
+ — {c.evidence.category_lens}
+
+
+
+ {c.advice}
+
+
+ ))}
+
+
+ {interpretation.interactions.length > 0 && (
+
+
+ 카드 간 상호작용
+
+
+ {interpretation.interactions.map((it, i) => (
+
+
+ {INTERACTION_LABEL[it.type]}
+
+ {it.between.join(' · ')} — {it.explanation}
+
+ ))}
+
+
+ )}
+
+
+
+ 종합 조언
+
+
+ {interpretation.advice}
+
+ {interpretation.warning && (
+
+ 주의 — {interpretation.warning}
+
+ )}
+
+
+ );
+}
+
+// ── 메인 컴포넌트 ──────────────────────────────────────────────────
+export default function TarotReadingClient() {
+ // hydration mismatch 방지 — 최초 렌더는 빈 배열, 마운트 후 클라에서만 셔플
+ const [deck, setDeck] = useState([]);
+ useEffect(() => {
+ setDeck(buildShuffle(TAROT_DECK, DECK_SIZE));
+ }, []);
+
+ const [step, setStep] = useState('setup');
+ const [question, setQuestion] = useState('');
+ const [category, setCategory] = useState(DEFAULT_CATEGORY);
+ const [picks, setPicks] = useState([]);
+
+ const [resultTab, setResultTab] = useState('meaning');
+ const [aiStatus, setAiStatus] = useState('idle');
+ const [aiErrorMessage, setAiErrorMessage] = useState('');
+ const [interpretation, setInterpretation] = useState(null);
+
+ const availableDeck = deck.filter((c) => !picks.some((p) => p.card.slug === c.slug));
+ const currentPosition = SPREAD.positions[picks.length];
+
+ function startPicking() {
+ setPicks([]);
+ setResultTab('meaning');
+ setAiStatus('idle');
+ setAiErrorMessage('');
+ setInterpretation(null);
+ setStep('pick');
+ }
+
+ function handlePick(card: DeckCard) {
+ if (picks.length >= SPREAD.positions.length) return;
+ const position = SPREAD.positions[picks.length];
+ const next: Pick[] = [...picks, { card, position, reversed: card.reversed }];
+ setPicks(next);
+ if (next.length === SPREAD.positions.length) setStep('result');
+ }
+
+ function restart() {
+ setDeck(buildShuffle(TAROT_DECK, DECK_SIZE));
+ setPicks([]);
+ setResultTab('meaning');
+ setAiStatus('idle');
+ setAiErrorMessage('');
+ setInterpretation(null);
+ setStep('setup');
+ }
+
+ async function handleInterpret() {
+ if (picks.length < SPREAD.positions.length) return;
+ setAiStatus('loading');
+ setAiErrorMessage('');
+
+ const cards = picks.map((p) => ({ position: p.position, card_id: p.card.slug, reversed: p.reversed }));
+ const payload = {
+ spread_type: 'three_card',
+ category,
+ question: question.trim() || null,
+ cards,
+ cards_reference: buildReferenceBlock(picks),
+ context_meta: buildContextMeta(picks),
+ };
+
+ try {
+ const res = await fetch('/api/tarot/interpret', {
+ method: 'POST',
+ headers: { 'Content-Type': 'application/json' },
+ body: JSON.stringify(payload),
+ });
+
+ let body: { interpretation_json?: TarotInterpretation; model?: string; error?: string } = {};
+ try {
+ body = await res.json();
+ } catch {
+ body = {};
+ }
+
+ if (res.status === 401) {
+ setAiStatus('auth');
+ return;
+ }
+ if (res.status === 429) {
+ setAiErrorMessage(body.error ?? '오늘의 무료 AI 해석 횟수를 모두 사용했습니다.');
+ setAiStatus('limit');
+ return;
+ }
+ if (!res.ok || !body.interpretation_json) {
+ setAiErrorMessage(body.error ?? 'AI 해석 생성에 실패했습니다. 잠시 후 다시 시도해주세요.');
+ setAiStatus('error');
+ return;
+ }
+
+ setInterpretation(body.interpretation_json);
+ setAiStatus('done');
+
+ // 리딩 저장은 best-effort — 실패해도 이미 렌더된 해석은 유지한다.
+ fetch('/api/tarot/readings', {
+ method: 'POST',
+ headers: { 'Content-Type': 'application/json' },
+ body: JSON.stringify({
+ spread_type: 'three_card',
+ category,
+ question: question.trim() || null,
+ cards,
+ interpretation_json: body.interpretation_json,
+ }),
+ }).catch(() => {});
+ } catch {
+ setAiErrorMessage('네트워크 오류로 해석을 가져오지 못했습니다.');
+ setAiStatus('error');
+ }
+ }
+
+ return (
+
+
+
+
+
+ {/* ── setup: 질문 + 카테고리 ── */}
+ {step === 'setup' && (
+
+
+ 질문을 정리해보세요
+
+
+ 구체적일수록 카드의 의미가 선명하게 연결됩니다. 비워두어도 리딩은 진행됩니다.
+
+
+
+
+ )}
+
+ {/* ── pick: 20장 부채꼴에서 3장 선택 ── */}
+ {step === 'pick' && (
+
+
+ {currentPosition} 카드를 골라보세요
+
+
+ 펼쳐진 카드 중 마음이 끌리는 카드를 선택하세요. ({picks.length}/{SPREAD.positions.length})
+
+
+
+ {SPREAD.positions.map((pos, i) => {
+ const pick = picks[i];
+ return (
+
+
+ {pos}
+
+ {pick ? (
+
+ ) : (
+
+ 대기
+
+ )}
+
+ );
+ })}
+
+
+ {deck.length === 0 ? (
+
+ 카드를 준비하는 중입니다...
+
+ ) : (
+
+
+ {availableDeck.map((card, i) => (
+
+ ))}
+
+
+ )}
+
+ )}
+
+ {/* ── result: 3장 공개 + 2탭 ── */}
+ {step === 'result' && (
+
+
+ 선택한 카드가 스프레드에 놓였습니다
+
+
+ 과거·현재·미래 순서로 세 장의 카드가 이 리딩의 흐름을 보여줍니다.
+
+
+
+ {picks.map((p) => (
+
+
+
+
+ {p.position}
+
+
+ {p.card.name}
+ {p.reversed ? ' (역방향)' : ''}
+
+
+
+ ))}
+
+
+
+
+
+
+
+ {(['meaning', 'ai'] as const).map((t) => {
+ const active = resultTab === t;
+ return (
+
+ );
+ })}
+
+
+
+ {resultTab === 'meaning' ? (
+
+ ) : (
+
+ )}
+
+
+ )}
+
+
+
+ );
+}
diff --git a/app/tarot/layout.tsx b/app/tarot/layout.tsx
new file mode 100644
index 0000000..dfeb185
--- /dev/null
+++ b/app/tarot/layout.tsx
@@ -0,0 +1,14 @@
+import type { Metadata } from 'next';
+
+export const metadata: Metadata = {
+ title: '타로 리딩 | 쟁승메이드',
+ description: '3카드(과거·현재·미래) 타로 스프레드. AI가 카드 상징을 근거로 해석합니다.',
+ openGraph: {
+ title: '타로 리딩 | 쟁승메이드',
+ url: 'https://jaengseung-made.com/tarot',
+ },
+};
+
+export default function TarotLayout({ children }: { children: React.ReactNode }) {
+ return <>{children}>;
+}
diff --git a/app/tarot/page.tsx b/app/tarot/page.tsx
new file mode 100644
index 0000000..c7a7304
--- /dev/null
+++ b/app/tarot/page.tsx
@@ -0,0 +1,37 @@
+import TarotReadingClient from './TarotReadingClient';
+
+// 타로 리딩 공개 라우트 — 서버 Hero(라이트 관용구, app/showcase 참고) + 클라이언트 리딩 마운트.
+
+const KOR_BODY = { letterSpacing: '-0.01em' } as const;
+
+export default function TarotPage() {
+ return (
+ <>
+
+
+
+
+
+ tarot reading
+
+
+ 타로 리딩
+ .
+
+
+ 3장의 카드로 과거·현재·미래의 흐름을 읽습니다.
+
+
+
+
+
+
+ >
+ );
+}
diff --git a/public/images/tarot/card_back.png b/public/images/tarot/card_back.png
new file mode 100644
index 0000000..62af3d6
Binary files /dev/null and b/public/images/tarot/card_back.png differ
diff --git a/public/images/tarot/cards/ace-of-cups.png b/public/images/tarot/cards/ace-of-cups.png
new file mode 100644
index 0000000..5c3fd31
Binary files /dev/null and b/public/images/tarot/cards/ace-of-cups.png differ
diff --git a/public/images/tarot/cards/ace-of-pentacles.png b/public/images/tarot/cards/ace-of-pentacles.png
new file mode 100644
index 0000000..acda7d9
Binary files /dev/null and b/public/images/tarot/cards/ace-of-pentacles.png differ
diff --git a/public/images/tarot/cards/ace-of-swords.png b/public/images/tarot/cards/ace-of-swords.png
new file mode 100644
index 0000000..425a7f0
Binary files /dev/null and b/public/images/tarot/cards/ace-of-swords.png differ
diff --git a/public/images/tarot/cards/ace-of-wands.png b/public/images/tarot/cards/ace-of-wands.png
new file mode 100644
index 0000000..7e3a0f2
Binary files /dev/null and b/public/images/tarot/cards/ace-of-wands.png differ
diff --git a/public/images/tarot/cards/death.png b/public/images/tarot/cards/death.png
new file mode 100644
index 0000000..e8a29f8
Binary files /dev/null and b/public/images/tarot/cards/death.png differ
diff --git a/public/images/tarot/cards/eight-of-cups.png b/public/images/tarot/cards/eight-of-cups.png
new file mode 100644
index 0000000..93c8d5b
Binary files /dev/null and b/public/images/tarot/cards/eight-of-cups.png differ
diff --git a/public/images/tarot/cards/eight-of-pentacles.png b/public/images/tarot/cards/eight-of-pentacles.png
new file mode 100644
index 0000000..4113359
Binary files /dev/null and b/public/images/tarot/cards/eight-of-pentacles.png differ
diff --git a/public/images/tarot/cards/eight-of-swords.png b/public/images/tarot/cards/eight-of-swords.png
new file mode 100644
index 0000000..586320f
Binary files /dev/null and b/public/images/tarot/cards/eight-of-swords.png differ
diff --git a/public/images/tarot/cards/eight-of-wands.png b/public/images/tarot/cards/eight-of-wands.png
new file mode 100644
index 0000000..7b0f77b
Binary files /dev/null and b/public/images/tarot/cards/eight-of-wands.png differ
diff --git a/public/images/tarot/cards/five-of-cups.png b/public/images/tarot/cards/five-of-cups.png
new file mode 100644
index 0000000..f1524bd
Binary files /dev/null and b/public/images/tarot/cards/five-of-cups.png differ
diff --git a/public/images/tarot/cards/five-of-pentacles.png b/public/images/tarot/cards/five-of-pentacles.png
new file mode 100644
index 0000000..e58ecc0
Binary files /dev/null and b/public/images/tarot/cards/five-of-pentacles.png differ
diff --git a/public/images/tarot/cards/five-of-swords.png b/public/images/tarot/cards/five-of-swords.png
new file mode 100644
index 0000000..e875d2c
Binary files /dev/null and b/public/images/tarot/cards/five-of-swords.png differ
diff --git a/public/images/tarot/cards/five-of-wands.png b/public/images/tarot/cards/five-of-wands.png
new file mode 100644
index 0000000..088d268
Binary files /dev/null and b/public/images/tarot/cards/five-of-wands.png differ
diff --git a/public/images/tarot/cards/four-of-cups.png b/public/images/tarot/cards/four-of-cups.png
new file mode 100644
index 0000000..da47190
Binary files /dev/null and b/public/images/tarot/cards/four-of-cups.png differ
diff --git a/public/images/tarot/cards/four-of-pentacles.png b/public/images/tarot/cards/four-of-pentacles.png
new file mode 100644
index 0000000..6ac5d39
Binary files /dev/null and b/public/images/tarot/cards/four-of-pentacles.png differ
diff --git a/public/images/tarot/cards/four-of-swords.png b/public/images/tarot/cards/four-of-swords.png
new file mode 100644
index 0000000..f5d743e
Binary files /dev/null and b/public/images/tarot/cards/four-of-swords.png differ
diff --git a/public/images/tarot/cards/four-of-wands.png b/public/images/tarot/cards/four-of-wands.png
new file mode 100644
index 0000000..9e923a7
Binary files /dev/null and b/public/images/tarot/cards/four-of-wands.png differ
diff --git a/public/images/tarot/cards/judgement.png b/public/images/tarot/cards/judgement.png
new file mode 100644
index 0000000..195a8e6
Binary files /dev/null and b/public/images/tarot/cards/judgement.png differ
diff --git a/public/images/tarot/cards/justice.png b/public/images/tarot/cards/justice.png
new file mode 100644
index 0000000..4915b58
Binary files /dev/null and b/public/images/tarot/cards/justice.png differ
diff --git a/public/images/tarot/cards/king-of-cups.png b/public/images/tarot/cards/king-of-cups.png
new file mode 100644
index 0000000..59e56a3
Binary files /dev/null and b/public/images/tarot/cards/king-of-cups.png differ
diff --git a/public/images/tarot/cards/king-of-pentacles.png b/public/images/tarot/cards/king-of-pentacles.png
new file mode 100644
index 0000000..97c2da2
Binary files /dev/null and b/public/images/tarot/cards/king-of-pentacles.png differ
diff --git a/public/images/tarot/cards/king-of-swords.png b/public/images/tarot/cards/king-of-swords.png
new file mode 100644
index 0000000..a98678c
Binary files /dev/null and b/public/images/tarot/cards/king-of-swords.png differ
diff --git a/public/images/tarot/cards/king-of-wands.png b/public/images/tarot/cards/king-of-wands.png
new file mode 100644
index 0000000..20606e4
Binary files /dev/null and b/public/images/tarot/cards/king-of-wands.png differ
diff --git a/public/images/tarot/cards/knight-of-cups.png b/public/images/tarot/cards/knight-of-cups.png
new file mode 100644
index 0000000..4dad6f0
Binary files /dev/null and b/public/images/tarot/cards/knight-of-cups.png differ
diff --git a/public/images/tarot/cards/knight-of-pentacles.png b/public/images/tarot/cards/knight-of-pentacles.png
new file mode 100644
index 0000000..c433546
Binary files /dev/null and b/public/images/tarot/cards/knight-of-pentacles.png differ
diff --git a/public/images/tarot/cards/knight-of-swords.png b/public/images/tarot/cards/knight-of-swords.png
new file mode 100644
index 0000000..bfb3adb
Binary files /dev/null and b/public/images/tarot/cards/knight-of-swords.png differ
diff --git a/public/images/tarot/cards/knight-of-wands.png b/public/images/tarot/cards/knight-of-wands.png
new file mode 100644
index 0000000..ef903ae
Binary files /dev/null and b/public/images/tarot/cards/knight-of-wands.png differ
diff --git a/public/images/tarot/cards/nine-of-cups.png b/public/images/tarot/cards/nine-of-cups.png
new file mode 100644
index 0000000..8bec4c0
Binary files /dev/null and b/public/images/tarot/cards/nine-of-cups.png differ
diff --git a/public/images/tarot/cards/nine-of-pentacles.png b/public/images/tarot/cards/nine-of-pentacles.png
new file mode 100644
index 0000000..8311022
Binary files /dev/null and b/public/images/tarot/cards/nine-of-pentacles.png differ
diff --git a/public/images/tarot/cards/nine-of-swords.png b/public/images/tarot/cards/nine-of-swords.png
new file mode 100644
index 0000000..93f9611
Binary files /dev/null and b/public/images/tarot/cards/nine-of-swords.png differ
diff --git a/public/images/tarot/cards/nine-of-wands.png b/public/images/tarot/cards/nine-of-wands.png
new file mode 100644
index 0000000..5633835
Binary files /dev/null and b/public/images/tarot/cards/nine-of-wands.png differ
diff --git a/public/images/tarot/cards/page-of-cups.png b/public/images/tarot/cards/page-of-cups.png
new file mode 100644
index 0000000..8029c2e
Binary files /dev/null and b/public/images/tarot/cards/page-of-cups.png differ
diff --git a/public/images/tarot/cards/page-of-pentacles.png b/public/images/tarot/cards/page-of-pentacles.png
new file mode 100644
index 0000000..c343464
Binary files /dev/null and b/public/images/tarot/cards/page-of-pentacles.png differ
diff --git a/public/images/tarot/cards/page-of-swords.png b/public/images/tarot/cards/page-of-swords.png
new file mode 100644
index 0000000..34a9c77
Binary files /dev/null and b/public/images/tarot/cards/page-of-swords.png differ
diff --git a/public/images/tarot/cards/page-of-wands.png b/public/images/tarot/cards/page-of-wands.png
new file mode 100644
index 0000000..2a32393
Binary files /dev/null and b/public/images/tarot/cards/page-of-wands.png differ
diff --git a/public/images/tarot/cards/queen-of-cups.png b/public/images/tarot/cards/queen-of-cups.png
new file mode 100644
index 0000000..fdd7e4e
Binary files /dev/null and b/public/images/tarot/cards/queen-of-cups.png differ
diff --git a/public/images/tarot/cards/queen-of-pentacles.png b/public/images/tarot/cards/queen-of-pentacles.png
new file mode 100644
index 0000000..78101ba
Binary files /dev/null and b/public/images/tarot/cards/queen-of-pentacles.png differ
diff --git a/public/images/tarot/cards/queen-of-swords.png b/public/images/tarot/cards/queen-of-swords.png
new file mode 100644
index 0000000..3158540
Binary files /dev/null and b/public/images/tarot/cards/queen-of-swords.png differ
diff --git a/public/images/tarot/cards/queen-of-wands.png b/public/images/tarot/cards/queen-of-wands.png
new file mode 100644
index 0000000..827b708
Binary files /dev/null and b/public/images/tarot/cards/queen-of-wands.png differ
diff --git a/public/images/tarot/cards/seven-of-cups.png b/public/images/tarot/cards/seven-of-cups.png
new file mode 100644
index 0000000..bd2b7a8
Binary files /dev/null and b/public/images/tarot/cards/seven-of-cups.png differ
diff --git a/public/images/tarot/cards/seven-of-pentacles.png b/public/images/tarot/cards/seven-of-pentacles.png
new file mode 100644
index 0000000..0e5d868
Binary files /dev/null and b/public/images/tarot/cards/seven-of-pentacles.png differ
diff --git a/public/images/tarot/cards/seven-of-swords.png b/public/images/tarot/cards/seven-of-swords.png
new file mode 100644
index 0000000..8e240d1
Binary files /dev/null and b/public/images/tarot/cards/seven-of-swords.png differ
diff --git a/public/images/tarot/cards/seven-of-wands.png b/public/images/tarot/cards/seven-of-wands.png
new file mode 100644
index 0000000..b8bd12a
Binary files /dev/null and b/public/images/tarot/cards/seven-of-wands.png differ
diff --git a/public/images/tarot/cards/six-of-cups.png b/public/images/tarot/cards/six-of-cups.png
new file mode 100644
index 0000000..1f2c31b
Binary files /dev/null and b/public/images/tarot/cards/six-of-cups.png differ
diff --git a/public/images/tarot/cards/six-of-pentacles.png b/public/images/tarot/cards/six-of-pentacles.png
new file mode 100644
index 0000000..9fd6234
Binary files /dev/null and b/public/images/tarot/cards/six-of-pentacles.png differ
diff --git a/public/images/tarot/cards/six-of-swords.png b/public/images/tarot/cards/six-of-swords.png
new file mode 100644
index 0000000..845712d
Binary files /dev/null and b/public/images/tarot/cards/six-of-swords.png differ
diff --git a/public/images/tarot/cards/six-of-wands.png b/public/images/tarot/cards/six-of-wands.png
new file mode 100644
index 0000000..88d6759
Binary files /dev/null and b/public/images/tarot/cards/six-of-wands.png differ
diff --git a/public/images/tarot/cards/strength.png b/public/images/tarot/cards/strength.png
new file mode 100644
index 0000000..c1faeee
Binary files /dev/null and b/public/images/tarot/cards/strength.png differ
diff --git a/public/images/tarot/cards/temperance.png b/public/images/tarot/cards/temperance.png
new file mode 100644
index 0000000..50b3fe5
Binary files /dev/null and b/public/images/tarot/cards/temperance.png differ
diff --git a/public/images/tarot/cards/ten-of-cups.png b/public/images/tarot/cards/ten-of-cups.png
new file mode 100644
index 0000000..f39c04b
Binary files /dev/null and b/public/images/tarot/cards/ten-of-cups.png differ
diff --git a/public/images/tarot/cards/ten-of-pentacles.png b/public/images/tarot/cards/ten-of-pentacles.png
new file mode 100644
index 0000000..6a70092
Binary files /dev/null and b/public/images/tarot/cards/ten-of-pentacles.png differ
diff --git a/public/images/tarot/cards/ten-of-swords.png b/public/images/tarot/cards/ten-of-swords.png
new file mode 100644
index 0000000..6649300
Binary files /dev/null and b/public/images/tarot/cards/ten-of-swords.png differ
diff --git a/public/images/tarot/cards/ten-of-wands.png b/public/images/tarot/cards/ten-of-wands.png
new file mode 100644
index 0000000..7ef3b01
Binary files /dev/null and b/public/images/tarot/cards/ten-of-wands.png differ
diff --git a/public/images/tarot/cards/the-chariot.png b/public/images/tarot/cards/the-chariot.png
new file mode 100644
index 0000000..f91c2b7
Binary files /dev/null and b/public/images/tarot/cards/the-chariot.png differ
diff --git a/public/images/tarot/cards/the-devil.png b/public/images/tarot/cards/the-devil.png
new file mode 100644
index 0000000..fa9453f
Binary files /dev/null and b/public/images/tarot/cards/the-devil.png differ
diff --git a/public/images/tarot/cards/the-emperor.png b/public/images/tarot/cards/the-emperor.png
new file mode 100644
index 0000000..4d9f07d
Binary files /dev/null and b/public/images/tarot/cards/the-emperor.png differ
diff --git a/public/images/tarot/cards/the-empress.png b/public/images/tarot/cards/the-empress.png
new file mode 100644
index 0000000..dc97401
Binary files /dev/null and b/public/images/tarot/cards/the-empress.png differ
diff --git a/public/images/tarot/cards/the-fool.png b/public/images/tarot/cards/the-fool.png
new file mode 100644
index 0000000..104669e
Binary files /dev/null and b/public/images/tarot/cards/the-fool.png differ
diff --git a/public/images/tarot/cards/the-hanged-man.png b/public/images/tarot/cards/the-hanged-man.png
new file mode 100644
index 0000000..b13a860
Binary files /dev/null and b/public/images/tarot/cards/the-hanged-man.png differ
diff --git a/public/images/tarot/cards/the-hermit.png b/public/images/tarot/cards/the-hermit.png
new file mode 100644
index 0000000..fd79a17
Binary files /dev/null and b/public/images/tarot/cards/the-hermit.png differ
diff --git a/public/images/tarot/cards/the-hierophant.png b/public/images/tarot/cards/the-hierophant.png
new file mode 100644
index 0000000..77ac182
Binary files /dev/null and b/public/images/tarot/cards/the-hierophant.png differ
diff --git a/public/images/tarot/cards/the-high-priestess.png b/public/images/tarot/cards/the-high-priestess.png
new file mode 100644
index 0000000..6f35c7b
Binary files /dev/null and b/public/images/tarot/cards/the-high-priestess.png differ
diff --git a/public/images/tarot/cards/the-lovers.png b/public/images/tarot/cards/the-lovers.png
new file mode 100644
index 0000000..f569977
Binary files /dev/null and b/public/images/tarot/cards/the-lovers.png differ
diff --git a/public/images/tarot/cards/the-magician.png b/public/images/tarot/cards/the-magician.png
new file mode 100644
index 0000000..0fb3857
Binary files /dev/null and b/public/images/tarot/cards/the-magician.png differ
diff --git a/public/images/tarot/cards/the-moon.png b/public/images/tarot/cards/the-moon.png
new file mode 100644
index 0000000..3ee988e
Binary files /dev/null and b/public/images/tarot/cards/the-moon.png differ
diff --git a/public/images/tarot/cards/the-star.png b/public/images/tarot/cards/the-star.png
new file mode 100644
index 0000000..42a6159
Binary files /dev/null and b/public/images/tarot/cards/the-star.png differ
diff --git a/public/images/tarot/cards/the-sun.png b/public/images/tarot/cards/the-sun.png
new file mode 100644
index 0000000..06ca652
Binary files /dev/null and b/public/images/tarot/cards/the-sun.png differ
diff --git a/public/images/tarot/cards/the-tower.png b/public/images/tarot/cards/the-tower.png
new file mode 100644
index 0000000..8361ace
Binary files /dev/null and b/public/images/tarot/cards/the-tower.png differ
diff --git a/public/images/tarot/cards/the-world.png b/public/images/tarot/cards/the-world.png
new file mode 100644
index 0000000..e5a9a44
Binary files /dev/null and b/public/images/tarot/cards/the-world.png differ
diff --git a/public/images/tarot/cards/three-of-cups.png b/public/images/tarot/cards/three-of-cups.png
new file mode 100644
index 0000000..834b7ff
Binary files /dev/null and b/public/images/tarot/cards/three-of-cups.png differ
diff --git a/public/images/tarot/cards/three-of-pentacles.png b/public/images/tarot/cards/three-of-pentacles.png
new file mode 100644
index 0000000..54341fb
Binary files /dev/null and b/public/images/tarot/cards/three-of-pentacles.png differ
diff --git a/public/images/tarot/cards/three-of-swords.png b/public/images/tarot/cards/three-of-swords.png
new file mode 100644
index 0000000..c692bc8
Binary files /dev/null and b/public/images/tarot/cards/three-of-swords.png differ
diff --git a/public/images/tarot/cards/three-of-wands.png b/public/images/tarot/cards/three-of-wands.png
new file mode 100644
index 0000000..155533e
Binary files /dev/null and b/public/images/tarot/cards/three-of-wands.png differ
diff --git a/public/images/tarot/cards/two-of-cups.png b/public/images/tarot/cards/two-of-cups.png
new file mode 100644
index 0000000..9552da4
Binary files /dev/null and b/public/images/tarot/cards/two-of-cups.png differ
diff --git a/public/images/tarot/cards/two-of-pentacles.png b/public/images/tarot/cards/two-of-pentacles.png
new file mode 100644
index 0000000..f7b8a8e
Binary files /dev/null and b/public/images/tarot/cards/two-of-pentacles.png differ
diff --git a/public/images/tarot/cards/two-of-swords.png b/public/images/tarot/cards/two-of-swords.png
new file mode 100644
index 0000000..0f4e336
Binary files /dev/null and b/public/images/tarot/cards/two-of-swords.png differ
diff --git a/public/images/tarot/cards/two-of-wands.png b/public/images/tarot/cards/two-of-wands.png
new file mode 100644
index 0000000..f7304a0
Binary files /dev/null and b/public/images/tarot/cards/two-of-wands.png differ
diff --git a/public/images/tarot/cards/wheel-of-fortune.png b/public/images/tarot/cards/wheel-of-fortune.png
new file mode 100644
index 0000000..8fccebe
Binary files /dev/null and b/public/images/tarot/cards/wheel-of-fortune.png differ