シャドウバース EVOLVE対戦記録・統計分析Webアプリケーション
- Next.js 15 - App Router, React Server Components, Server Actions
- React 19 - Concurrent Features, Suspense Boundaries
- TypeScript 5.5 - 型安全性
- Tailwind CSS - スタイリング
- shadcn/ui - UIコンポーネントライブラリ
- React Hook Form + Zod - フォーム管理・バリデーション
- Lucide React - アイコン
- Drizzle ORM - 型安全なORM
- Neon - Serverless PostgreSQL
- Edge Runtime - Vercelエッジ関数
- Clerk - 認証サービス
- Passwordless認証 - パスキー対応
- OAuth - Google, Discord連携
-
認証システム
- Clerkによるセキュアな認証
- ログイン・サインアップページ
- プロテクトされたルート
-
ダッシュボード
- 戦績概要の表示
- KPIカード(勝率、対戦数、連勝記録など)
- 最近の対戦履歴
- クイックアクション
-
対戦記録管理
- 新しい対戦の記録
- 対戦履歴の表示
- フィルタリング機能
- 詳細な対戦情報入力
-
デッキ管理
- デッキ一覧表示
- デッキ別統計
- アクティブ/非アクティブ状態管理
-
統計・分析
- デッキ別勝率
- 対戦相手別勝率
- 月別戦績推移
- 詳細な統計データ
-
AIインサイト
- AI分析結果の表示
- 強みと改善点の分析
- 具体的な改善提案
- 目標設定の提案
-
UIコンポーネント
- shadcn/uiベースのコンポーネント
- レスポンシブデザイン
- ダークモード対応
- アクセシビリティ配慮
shadowverse_stats/
├── app/ # Next.js App Router
│ ├── (auth)/ # 認証関連ページ
│ │ ├── sign-in/ # ログインページ
│ │ └── sign-up/ # サインアップページ
│ ├── (dashboard)/ # メインアプリ
│ │ ├── page.tsx # ダッシュボード
│ │ ├── battles/ # 対戦記録
│ │ ├── decks/ # デッキ管理
│ │ ├── statistics/ # 統計
│ │ └── insights/ # AIインサイト
│ ├── globals.css # グローバルCSS
│ └── layout.tsx # ルートレイアウト
├── components/ # UIコンポーネント
│ └── ui/ # shadcn/ui コンポーネント
├── lib/ # ライブラリ・ユーティリティ
│ ├── db/ # データベース関連
│ │ └── schema.ts # Drizzleスキーマ
│ ├── validations/ # Zodスキーマ
│ ├── constants/ # 定数定義
│ └── utils.ts # ユーティリティ関数
└── middleware.ts # Clerkミドルウェア
-- ユーザー
users (
id UUID PRIMARY KEY,
clerk_id TEXT UNIQUE,
username TEXT,
created_at TIMESTAMP,
updated_at TIMESTAMP
)
-- デッキ
decks (
id UUID PRIMARY KEY,
user_id UUID REFERENCES users(id),
name TEXT,
archetype TEXT,
leader TEXT,
is_active BOOLEAN,
created_at TIMESTAMP
)
-- 対戦記録
battles (
id UUID PRIMARY KEY,
user_id UUID REFERENCES users(id),
player_deck_id UUID REFERENCES decks(id),
opponent_archetype TEXT,
result ENUM('win', 'loss', 'draw'),
turn_count INTEGER,
damage_dealt INTEGER,
damage_received INTEGER,
played_at TIMESTAMP
)- Node.js 20以上
- npm または yarn
- リポジトリをクローン
git clone <repository-url>
cd shadowverse_stats- 依存関係をインストール
npm install- 環境変数を設定
cp .env.example .env必要な環境変数:
DATABASE_URL- Neon PostgreSQL接続文字列NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY- Clerk公開キーCLERK_SECRET_KEY- Clerkシークレットキー
- データベースマイグレーション
npm run db:generate
npm run db:migrate- 開発サーバーを起動
npm run devnpm run dev # 開発サーバー起動
npm run build # プロダクションビルド
npm run start # プロダクション実行
npm run lint # ESLint実行
npm run typecheck # TypeScript型チェック
npm run db:generate # Drizzleマイグレーション生成
npm run db:migrate # データベースマイグレーション実行
npm run db:studio # Drizzle Studio起動- tRPC APIの実装
- データベース接続とCRUD操作
- リアルタイムデータ更新
- チャート・グラフコンポーネント
- PWA対応(サービスワーカー)
- オフライン機能
- プッシュ通知
- AI分析機能の実装
- モバイルアプリ版
- 多言語対応
- ソーシャル機能
- 大会・トーナメント機能
- Vercelアカウントにサインアップ
- GitHubリポジトリを接続
- 環境変数を設定
- 自動デプロイが開始
DATABASE_URLNEXT_PUBLIC_CLERK_PUBLISHABLE_KEYCLERK_SECRET_KEY
ISC
プルリクエストやIssueでの貢献を歓迎します。
質問やバグ報告はIssuesまでお願いします。