リクエスト詳細
✨ 既存アプリの改善
対応完了
対象アプリ: PitchDeck Duel
お題へのリアクションスタンプ機能の追加
## 1. 目的
お題が提示された瞬間にプレイヤーが絵文字スタンプで即座にリアクションできるようにする。アイデア入力前の「共感・盛り上がり」を可視化し、バトルの熱量を高めるとともに、投票とは別の軽いインタラクションで離脱率を下げる。
## 2. 具体的な仕様
### 2-1. 表示タイミング
- フェーズ: お題提示〜アイデア入力中(30秒タイマー中)のみ表示
- 投票フェーズ・結果フェーズでは非表示
### 2-2. スタンプ種類(固定5種)
| 絵文字 | ラベル | 意味 |
|--------|--------|------|
| 🔥 | アツい | このお題好き |
| 😅 | むずい | 難しすぎる |
| 💡 | ひらめいた | アイデア浮かんだ |
| 🤔 | うーん | 考え中 |
| 😂 | ウケる | 面白いお題 |
### 2-3. 操作
- 画面下部(入力フォームの上)に横並びで5つのスタンプボタンを常時表示
- 1人1お題につき1スタンプのみ押せる(押すと選択状態にハイライト)
- 押したスタンプを再タップで取り消し可能
- 各スタンプの横に集計数をリアルタイム表示(既存の2秒ポーリングで取得)
### 2-4. データ設計
**新規テーブル: `round_reactions`**
```
id INT AUTO_INCREMENT PRIMARY KEY
room_id VARCHAR(32) NOT NULL
round_no TINYINT NOT NULL
player_token VARCHAR(64) NOT NULL -- ゲストトークン流用
stamp_type ENUM('fire','sweat','bulb','think','laugh') NOT NULL
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
UNIQUE KEY uq_reaction (room_id, round_no, player_token)
```
**APIエンドポイント(追加2本)**
- `POST /api/reaction.php` : stamp_type をセット/解除(トグル)
- `GET /api/reaction.php?room_id=&round_no=` : 集計結果を返す
```json
{ "fire": 3, "sweat": 1, "bulb": 5, "think": 2, "laugh": 0, "my_stamp": "bulb" }
```
### 2-5. 結果発表画面への反映
- ラウンド結果カードの下部に「このお題への反応」として最多スタンプ1種を表示
- 例: 「🔥 このラウンド最も熱かった!」
- 集計が同数の場合は fire > bulb > laugh > think > sweat の優先順
### 2-6. ソロ練習モード
- ソロ時はスタンプボタンを表示するが集計数は自分の1票のみ表示(ひとりで楽しめる程度)
## 3. 既存機能との整合
- ポーリング対象に `reaction.php` を追加するだけで既存の2秒ポーリング処理は変更不要
- 投票システム(1票制)は別テーブル・別エンドポイントのため一切影響なし
- ルーム自動クローズ時に `round_reactions` も room_id で一括削除してクリーンアップ
- OGPシェアページ・リプレイシェアには反映しない(スコープ外)
- スタンプボタンは入力フォームの上に固定配置し、キャッチコピー入力欄を隠さないようにする(z-index調整)
お題が提示された瞬間にプレイヤーが絵文字スタンプで即座にリアクションできるようにする。アイデア入力前の「共感・盛り上がり」を可視化し、バトルの熱量を高めるとともに、投票とは別の軽いインタラクションで離脱率を下げる。
## 2. 具体的な仕様
### 2-1. 表示タイミング
- フェーズ: お題提示〜アイデア入力中(30秒タイマー中)のみ表示
- 投票フェーズ・結果フェーズでは非表示
### 2-2. スタンプ種類(固定5種)
| 絵文字 | ラベル | 意味 |
|--------|--------|------|
| 🔥 | アツい | このお題好き |
| 😅 | むずい | 難しすぎる |
| 💡 | ひらめいた | アイデア浮かんだ |
| 🤔 | うーん | 考え中 |
| 😂 | ウケる | 面白いお題 |
### 2-3. 操作
- 画面下部(入力フォームの上)に横並びで5つのスタンプボタンを常時表示
- 1人1お題につき1スタンプのみ押せる(押すと選択状態にハイライト)
- 押したスタンプを再タップで取り消し可能
- 各スタンプの横に集計数をリアルタイム表示(既存の2秒ポーリングで取得)
### 2-4. データ設計
**新規テーブル: `round_reactions`**
```
id INT AUTO_INCREMENT PRIMARY KEY
room_id VARCHAR(32) NOT NULL
round_no TINYINT NOT NULL
player_token VARCHAR(64) NOT NULL -- ゲストトークン流用
stamp_type ENUM('fire','sweat','bulb','think','laugh') NOT NULL
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
UNIQUE KEY uq_reaction (room_id, round_no, player_token)
```
**APIエンドポイント(追加2本)**
- `POST /api/reaction.php` : stamp_type をセット/解除(トグル)
- `GET /api/reaction.php?room_id=&round_no=` : 集計結果を返す
```json
{ "fire": 3, "sweat": 1, "bulb": 5, "think": 2, "laugh": 0, "my_stamp": "bulb" }
```
### 2-5. 結果発表画面への反映
- ラウンド結果カードの下部に「このお題への反応」として最多スタンプ1種を表示
- 例: 「🔥 このラウンド最も熱かった!」
- 集計が同数の場合は fire > bulb > laugh > think > sweat の優先順
### 2-6. ソロ練習モード
- ソロ時はスタンプボタンを表示するが集計数は自分の1票のみ表示(ひとりで楽しめる程度)
## 3. 既存機能との整合
- ポーリング対象に `reaction.php` を追加するだけで既存の2秒ポーリング処理は変更不要
- 投票システム(1票制)は別テーブル・別エンドポイントのため一切影響なし
- ルーム自動クローズ時に `round_reactions` も room_id で一括削除してクリーンアップ
- OGPシェアページ・リプレイシェアには反映しない(スコープ外)
- スタンプボタンは入力フォームの上に固定配置し、キャッチコピー入力欄を隠さないようにする(z-index調整)
💬 返信 (3)
🛠 開発を開始しました (機能追加 (pitchdeck-duel))
ご要望ありがとうございます。AI 開発ワーカーが実装を開始します。
通常 5〜30 分で Pull Request を作成し、レビュー後にリリースされます。
ご要望ありがとうございます。AI 開発ワーカーが実装を開始します。
通常 5〜30 分で Pull Request を作成し、レビュー後にリリースされます。
📝 開発が完了しました
ご要望いただいた内容の実装が完了し、最終チェック段階に入りました。
レビュー (自動) → リリース、の流れで進みます。
もう少々お待ちください。
ご要望いただいた内容の実装が完了し、最終チェック段階に入りました。
レビュー (自動) → リリース、の流れで進みます。
もう少々お待ちください。
✅ リリース完了のお知らせ
ご要望いただいた「PitchDeck Duel」を実装し、リリースいたしました。
【ご利用方法】
ダッシュボード: https://www.aiapps.jp/?action=dashboard
アプリ詳細: https://www.aiapps.jp/apps/show.php?slug=pitchdeck-duel
デモ環境は 1 時間以内に自動構築されます:
https://www.aiapps.jp/demo/pitchdeck-duel/
ご利用ありがとうございます!
ご要望いただいた「PitchDeck Duel」を実装し、リリースいたしました。
【ご利用方法】
ダッシュボード: https://www.aiapps.jp/?action=dashboard
アプリ詳細: https://www.aiapps.jp/apps/show.php?slug=pitchdeck-duel
デモ環境は 1 時間以内に自動構築されます:
https://www.aiapps.jp/demo/pitchdeck-duel/
ご利用ありがとうございます!
Echo
Iris