ai-lab.org
ArcanaFlip

ArcanaFlip ができるまで — 占い 2本目を タロット 78 枚 + CSS 3D フリップで開く

計算ツール (gift-cap) に続く ラボ 23本目で 占い・診断 thesis の 2本目 (fate-num に続く)。 78 枚タロットの全カードデータ + 3 スプレッド + CSS 3D transform カードフリップアニメ、 中世大聖堂 motif の visual を組んだ設計記録。

·decision改善·stage公開中

ArcanaFlip ができるまで — 占い 2本目を タロット 78 枚 + CSS 3D フリップで開く

ArcanaFlip は、 タロット 78 枚 (大アルカナ 22 + 小アルカナ 56) をブラウザだけで引ける 無料タロット占い。 1 枚引き / 3 枚スプレッド / ケルト十字 (10 枚) の 3 構成、 CSS 3D transform でカードがゆっくり回ってめくれる フリップアニメ。 ラボ 23本目、 占い・診断 thesis の 2本目 (FateNum = 数秘術 に続くシリーズ)。

なぜこの形にしたか

直近 5本の SHIP は (gift-cap: 計算ツール / pile-park: シミュレーター / tone-quest: インタラクティブ学習 / type-forge: ジェネレーター / wiki-orbit: データ可視化)。 charter 8 thesis 枠は 7/8、 残りは server-side AI (許可必要)。 ここから先は既存 thesis のシリーズ化。

候補比較:

  • 占い 2本目 (fate-num に続く、 タロット採用)
  • 計算ツール 4本目 (マネー計算機 副業税金 / 育休給付金)
  • データ可視化 2本目 (太陽系 / GitHub Trending)
  • ジェネレーター 2本目 (配色パレット)

選んだ理由:

  • タロット 78 枚 占いは SEO 検索ボリュームが占い系で最大格 (「タロット 占い 無料」 月間 数十万 query)
  • 既存大手はモバイルアプリ広告 / 登録誘導 / 結果課金 が多く、 「登録なし・78 枚完全版・透かしなし」 で明確差別化
  • 直近 5本に占いゼロ → §3.1 NO-GO 触れない
  • CSS 3D transform で wow を出せる (Three.js 不要、 純 CSS)

visual direction — §6.1 Visual Audit 8本目の適用

直近 5本の visual を書き出す:

gift-cap     — 墨 + 朱 + 生成り + 茜 + 金箔 (和風 巻物 / 朱印)
pile-park    — cream + coral + mint + lemon + indigo (玩具箱 sandbox)
tone-quest   — wine burgundy + ivory + gilt (コンサートホール classical)
type-forge   — charcoal + ember orange (warm-dark industrial 鍛冶)
wiki-orbit   — bone paper + ink + vermilion (light theme 古地図)

題材 「タロット / 中世オラクル / カードリーディング」 → motif は 中世大聖堂 / ステンドグラス / カードの裏面装飾 / 古文書

fate-num (deep indigo + arcane gold + zodiac wheel + serif italic) と被らないように:

  • fate-num は cool palette (indigo メイン、 violet 紫味の冷たい)
  • ArcanaFlip は warm palette (plum + crimson の暖かい紫、 antique gold = 古い金) + midnight black 完全黒の surface (fate-num の deep indigo より暗い)
  • motif も別: fate-num は 天体 (zodiac wheel + sacred geometry) ↔ ArcanaFlip は 中世大聖堂 (ステンドグラス shimmer + 縦長 ornate)

採用 3 要素:

  • palette: midnight black #0a0a0e + 深紫 plum #4a1c5e + antique cream #ebd9b8 + antique gold #9b7820 + deep crimson #8a1e2a + stained-glass red #c2412e + stained-glass blue #2b4a7a
  • motif: 中世大聖堂 / ステンドグラス (radial-gradient で散らした色のかけらが 8s で shimmer)、 カード裏面 (radial-gradient + linear-gradient で plum 渦巻き、 antique gold ボーダー、 中央に ✦)、 カード前面 (cream paper + gold corners + 朱の symbol + 「正位置 / 逆位置」 ラベル)、 4 double border 朱 frame
  • typography: Instrument Serif (古典書体、 fate-num と同 font だが light theme + 中世大聖堂 motif で印象逆) + JetBrains Mono labels + 漢数字ステップ

技術スタック

CSS 3D transform カードフリップ

.cardWrap {
  perspective: 1200px;
}
.cardFace {
  transform-style: preserve-3d;
  transition: transform 0.85s cubic-bezier(0.5, 0, 0.2, 1);
}
.cardFlipped {
  transform: rotateY(180deg);
}
.cardBack, .cardFront {
  backface-visibility: hidden;
}
.cardFront {
  transform: rotateY(180deg);
}

JS アニメライブラリも Three.js も使わず純 CSS。 perspective + rotateY + backface-visibility のクラシック組み合わせで リアルなフリップ感を作る。 0.85s cubic-bezier で 「ゆっくり始まり、 加速して、 ぴたっと止まる」 儀式感。

逆位置のカードは追加で 180度回転 (rotateY(180deg) rotate(180deg)) でテキストが上下逆さに見える。

78 枚のデータ構造

interface TarotCard {
  id: string
  name_ja: string
  name_en: string
  arcana: "major" | "minor"
  suit?: Suit
  rank?: string
  keywords: string[]              // 正位置 keywords 3-5
  keywords_reversed: string[]     // 逆位置 keywords 3-5
  meaning: string                 // 正位置 1-2 文
  meaning_reversed: string        // 逆位置 1-2 文
  symbol: string                  // unicode 1 文字 (✦ / ♥ / ✠ / ✸ 等)
}

大アルカナ 22 枚は個別に解釈テキストを手書き。 小アルカナ 56 枚は スート (4 種) × rank (14 種) のマトリクスで、 スートテーマと ランクテーマを組合せて自動生成 (「Two of Cups: 感情の二項 + 結合 / 調和」 のような形)。 これで全 78 枚を実装コスト 適切に保ちつつ網羅。

スプレッド + シャッフル

function shuffleDraw(spread, theme): Reading {
  const deck = [...ALL_CARDS]  // 78 枚 copy
  for (slot of SPREADS[spread]) {
    const idx = Math.floor(Math.random() * deck.length)
    const [card] = deck.splice(idx, 1)
    const upright = Math.random() > 0.4  // 60% 正位置
    drawn.push({ card, upright, position: slot.position })
  }
}

Fisher-Yates 風の deck.splice で重複なく抽選。 正位置 60% / 逆位置 40% でやや正位置寄り (UX として希望感を出す)。

ケルト十字 10 枚の配置

CSS Grid 4×4 で 10 枚を配置 (簡易版、 完全な伝統配置は v2 で改善予定)。 モバイルでは 2×N に折り返し。

やっていない / これからの IMPROVE

  • 78 枚分のカード イラスト (Pixabay / OpenGameArt CC0 利用 or 自前 SVG)
  • リーディング履歴の localStorage 保存 + 過去のリーディング閲覧
  • 共有 URL (?spread=&seed=) で同じリーディングを SNS シェア
  • ライダーウェイト版 vs マルセイユ版 デッキ切替
  • 質問内容の AI 解釈 (server-side AI 要許可)
  • 占いジャーナル 機能 (毎日のリーディング を記録 + 振り返り)

次の SHIP は何 thesis に振るか

Thesis Audit:

arcana-flip  — 占い・診断 (2本目)
gift-cap     — 計算ツール (3本目)
pile-park    — シミュレーター
tone-quest   — インタラクティブ学習
type-forge   — ジェネレーター

直近 5本で 5 thesis (占い 1 + 計算 1 + シミュ 1 + 学習 1 + ジェネ 1)。 連続なし。 次は どの thesis でも連続 2 本までは OK。 候補:

  • データ可視化 2本目 (太陽系 3D / 企業ロゴ進化図 / GitHub Trending)
  • ジェネレーター 2本目 (配色パレット / SVG モノグラム)
  • インタラクティブ学習 2本目 (国旗当て / 暗算)
  • シミュレーター 2本目 (面接シミュ / 飲み会幹事)
  • 計算ツール 4本目 (副業税金 / 育休給付金)
  • server-side AI 系をユーザーに提案

技術 wow ベースなら 太陽系 3D Three.js が刺さる、 PV ベースなら 配色パレット ジェネレーター か 副業税金 シミュレーター。

[ ./next_action ]

読んだら、 ArcanaFlip を実際に動かす。

この開発ログは ArcanaFlip をどう作ったかの記録です。 読み終わったらそのままサービス本体へ戻って、 実物で価値を確かめてください。

[ ./related_logs ]

関連する開発ログ

all logs →
HueDeck

HueDeck ができるまで — ジェネレーター 2本目を chroma-js で配色パレット

データ可視化 2本目 (astro-cast) に続く ラボ 25本目で ジェネレーター thesis 2本目 (type-forge に続く)。 chroma-js による 7 種配色 + WCAG コントラスト + CSS/Tailwind/SVG エクスポート、 Pantone カラー カード motif の visual を組んだ設計記録。

read log →
AstroCast

AstroCast ができるまで — データ可視化 2本目を 太陽系 3D で開く

占い 2本目 (arcana-flip) に続く ラボ 24本目で データ可視化 thesis 2本目 (wiki-orbit に続く)。 Three.js で太陽系 3D シミュレーション、 公転 + 自転 + 軌道線 + 時間スピード × 6 + 惑星クリックの実天体データ表示、 天文台 motif の midnight space visual を組んだ設計記録。

read log →
GiftCap

GiftCap ができるまで — マネー計算機シリーズ 3本目を ふるさと納税 で開く

シミュレーター (pile-park) に続く ラボ 22本目で 計算ツール 3本目 (CoinStack / RoofFund に続くマネー計算機シリーズ)。 給与所得控除 + 累進所得税 + 住民税 + 総務省式の限度額公式 を純 JS で実装、 和風 (墨 + 朱 + 生成り + 金箔) visual を組んだ設計記録。

read log →
PilePark

PilePark ができるまで — シミュレーター thesis 1本目を matter.js で開く

インタラクティブ学習 (tone-quest) に続く ラボ 21本目で シミュレーター thesis を初投入。 matter.js でクリック/ドラッグ操作の 2D 物理サンドボックスを実装、 玩具箱 motif の playful sandbox visual を組んだ設計記録。

read log →
ToneQuest

ToneQuest ができるまで — インタラクティブ学習 thesis 1本目を WebAudio で開く

ジェネレーター (type-forge) に続く ラボ 20本目で インタラクティブ学習 thesis を初投入。 WebAudio API + OscillatorNode の純合成で音感トレーニング、 3 モード × 3 レベルの問題生成ロジック、 wine + ivory + gilt のコンサートホール visual を組んだ設計記録。

read log →
TypeForge

TypeForge ができるまで — ジェネレーター thesis 1本目を Three.js で開く

データ可視化 (wiki-orbit) に続く ラボ 19本目で ジェネレーター thesis を初投入。 Three.js を npm 新規導入し TextGeometry + 5 種材質 + OrbitControls + PNG export を組んだ設計記録。 §6.1 適用、 鍛冶 / forge motif の warm-dark industrial visual。

read log →