SolaCity — IEEE Metaverse Grand Challenge 2026 entry: Adaptive solar microgrid sim for Abeokuta, Nigeria with multilingual Socratic AI tutor
# SolaCity
Adaptive Smart Energy Simulation Platform for Urban Sustainability Education.
Entry for the **2026 IEEE Metaverse Grand Challenge** — Theme 2: Sustainable Smart Cities & Urban Innovation.
Submission deadline: **2026-08-15**.
## What is SolaCity?
A browser-based 2D microgrid simulation set in Abeokuta, Nigeria. Players size solar PV arrays and battery banks against real load profiles (school, clinic, neighborhood) and Nigerian weather, then watch a 7-day simulation play out hour by hour on an isometric city canvas. A Socratic AI tutor (Claude by default, with Gemini and freellmapi fallbacks) helps learners reason about why their build failed or succeeded — in English, Yoruba, or Hausa.
## Stack
- React 19 + TypeScript + Vite
- Konva.js (HTML5 Canvas) for the 2D isometric city
- Zustand (with `persist`) for simulation, progress, tutor, feedback state
- Recharts for load profile charts
- i18next + react-i18next for English / Yoruba / Hausa
- Multi-provider LLM tutor:
- **Anthropic Claude SDK** (`claude-opus-4-7` with adaptive thinking + prompt caching) — default
- **Google `@google/genai`** (`gemini-2.5-flash`) — alternative
- **freellmapi** OpenAI-compatible gateway — for free-tier aggregation
- PVGIS (EU JRC) for solar irradiance at Abeokuta coordinates
## Folder layout
```
src/
engine/ runWeek simulation (PV gen, battery SoC, load shed, cost)
renderer/ CityCanvas Konva isometric scene, buildings, weather, day/night
ai/ AITutorService dispatcher + providers/{claude,gemini,freellm}
scenarios/ Level 1-3 scenario definitions (loads, weather, success criteria)
badges/ Achievement rules + evaluator
state/ designStore, progressStore, tutorStore
feedback/ eventLog (session events) + feedbackStore (user feedback)
ui/ React components (workshop, charts, tutor, level select, badges, feedback)
i18n/ i18next config + locales/{en,yo,ha}.ts
```
## Getting started
```bash
cp .env.example .env # fil …