GeminiWorld
GeminiWorld is a web-based, explorable 2D world where AI-driven minigames reshape the environment in real time via Google’s Gemini API.
Core trick
Sends minigame results to Gemini, which returns structured world changes applied to tile terrain, NPCs, and weather in a Phaser overworld.
Description
GeminiWorld is a web-based, explorable 2D world where AI-driven minigames reshape the environment in real time via Google’s Gemini API. Players move through a tile-based overworld, enter zones to play minigames, and see terrain, NPCs, weather, and story change based on performance.
Core loop: play minigame → Gemini evaluates → world mutates.
Minigames are triggered by interactions (e.g., hitting a box) and are personalized per player. Gemini generates unique challenges, adapts difficulty, and keeps each run distinct.
Stack: Phaser + React + TypeScript + Vite, deployed on Vercel/Cloudflare Pages.
Team (3): World/Shell, Minigame Framework, AI/Gemini Integration.
Differentiator: Gemini is the backbone—adaptive difficulty, procedural NPC dialogue, emergent storylines, and Live API (voice/camera) enable deep AI-native gameplay.
README excerpt
# PlayGo Workspace
This workspace contains two connected frontend apps:
- `world`: A Phaser-based overworld where the player moves through zones.
- `minigame`: A mini-game app launched from the overworld when the player enters a zone.
The current integration uses an embedded `iframe` flow:
- Enter a zone in `world`
- `world` opens `minigame`
- `minigame` sends results back to `world`
## Repository Structure
```text
worktree/
├── world/
│ └── gemini_world/ # Overworld app (React + Phaser + Firebase client)
└── minigame/
└── gemini_arcade/ # Mini-game app (React + Phaser)
```
## Key Features
- Zone-based game entry from the overworld
- Embedded mini-game modal with postMessage communication
- Return-to-world flow with mini-game result display
- Custom world labels and title (`PlayGo`)
- Static dungeon-like background in the world
- Player icon loaded from generated asset (`public/generated/player-icon.png`)
## Local Development
Run both apps in separate terminals.
### 1) Start mini-game app
```bash
cd minigame/gemini_arcade
npm install
npm run dev -- --port 5274
```
### 2) Configure world app
Create `world/gemini_world/.env`:
```env
VITE_MINIGAME_URL=http://localhost:5274
VITE_GEMINI_API_KEY=YOUR_API_KEY # optional for generation-related features
```
### 3) Start world app
```bash
cd world/gemini_world
npm install
npm run dev -- --port 5273
```
Open:
- World: `http://localhost:5273`
- Mini-game direct (optional): `http://localhost:5274`
#