Skip to content
3rd Place

PrompDojo

PrompDojo is a real-time multiplayer prompt battle where Gemini runs the entire game loop.

Core trick

Gemini generates a hidden target image, then scores player prompts by image-to-image similarity against it each round.

Tags

Description

PrompDojo is a real-time multiplayer prompt battle where Gemini runs the entire game loop. In each round, Gemini creates a mystery target image. Players attempt to reverse-engineer the hidden prompt using text alone, and Gemini evaluates every submission based on visual similarity and scene alignment. ⚙️ What we built: ・Gemini as Game Master👑 — generates diverse target images each round ・Gemini as Creative Engine🧠 — transforms player prompts into challenge attempts ・Gemini as Judge🚩 — scores results and provides match/miss reasoning ・Gemini-powered Reveal💯 — reveals the original “correct” prompt at the end of each round ・Live competitive flow — timed rounds, instant rankings, and real-time multiplayer tension Welcome to the Prompt Era, where creativity meets strategy, and prompt engineering isn’t just a skill — it’s your competitive edge.
Haruk1y/Gemini_Hackathon★ 00 forksTypeScriptCreated Feb 21, 2026 · last push May 28, 2026

README excerpt

# PrompDojo

Prompt engineering meets party game.  
AI が作ったお題画像を見て、元のプロンプトを推理し、どれだけ近い画像を再生成できるかを競う対戦ゲームです。

## What Changed

- Firebase Auth / Firestore client / Storage client 依存を撤去
- 認証を匿名 session cookie に変更
- リアルタイム同期を lightweight snapshot polling に変更
- Gemini 呼び出しを `GEMINI_API_KEY` 前提に簡素化
- お題生成の固定 seed/pool を廃止し、Gemini が毎回お題仕様を生成
- `caption -> embedding -> cosine` を削除し、最終スコアを画像対画像評価だけで決定
- ゲームルールを `1ラウンド1回生成 / ヒントなし` に簡素化
- Storage 保存を `target.png` と `best.png` のみへ削減
- 状態保存を Firestore から Upstash Redis へ移行
- 画像保存を Google Cloud Storage から Vercel Blob へ移行
- cleanup を Google Cloud Scheduler から Vercel Cron へ移行
- 画像生成プロバイダをルーム単位で `Gemini` / `Flux (Vertex custom endpoint)` から切り替え可能に変更
- ルーム作成直後に `1ラウンド目` を先読み生成し、以後も常に `次の1ラウンド分` をバックグラウンドで準備するように変更
- 再プレイ時の round/image 再利用を避けるため、表示用 `roundIndex` と保存用 `roundId` を分離

## Tech Stack

- Next.js 16 (App Router, TypeScript)
- Vercel
- Upstash Redis
- Vercel Blob
- Neon Postgres
- Gemini API (`@google/genai`)
- Vertex AI custom endpoint (optional for Flux image generation)
- Vercel Cron Jobs
- Tailwind CSS
- Vitest + Playwright

## Environment Variables

Copy `.env.example` to `.env.local`.

```bash
cp .env.example .env.local
```

Required values:

- `SESSION_SECRET`
- `GEMINI_API_KEY`
- `UPSTASH_REDIS_REST_URL`
- `UPSTASH_REDIS_REST_TOKEN`
- `BLOB_READ_WRITE_TOKEN`
- `CRON_SECRET`
- `DATABASE_URL` (Neon Postgres, required for the theme catalog database only)

Optional values:

- `IMAGE_PROVIDER_DEFAULT`
- `AHA_ADMIN_SECRET` (local-onl

Team