Restore ECHO 3D README and HF metadata
Browse files
README.md
CHANGED
|
@@ -1,11 +1,65 @@
|
|
| 1 |
---
|
| 2 |
-
title:
|
| 3 |
-
emoji:
|
| 4 |
-
colorFrom:
|
| 5 |
-
colorTo:
|
| 6 |
sdk: docker
|
|
|
|
| 7 |
pinned: false
|
| 8 |
license: mit
|
|
|
|
| 9 |
---
|
| 10 |
|
| 11 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
---
|
| 2 |
+
title: ECHO 3D
|
| 3 |
+
emoji: π€
|
| 4 |
+
colorFrom: blue
|
| 5 |
+
colorTo: yellow
|
| 6 |
sdk: docker
|
| 7 |
+
app_port: 7860
|
| 8 |
pinned: false
|
| 9 |
license: mit
|
| 10 |
+
short_description: 3D vocab trainer with seasonal weather.
|
| 11 |
---
|
| 12 |
|
| 13 |
+
# ECHO 3D
|
| 14 |
+
|
| 15 |
+
A vocabulary trainer with a full 3D world and seasonal weather progression. The player listens to a spoken English word and types it back. Mastering words in each grade unlocks the next weather stage β from Sunny mornings all the way to a final Ice Age blizzard.
|
| 16 |
+
|
| 17 |
+
Built with **Vite + Three.js + GSAP** on the frontend, **Node + Express + SQLite** on the backend, packaged as a single Docker image.
|
| 18 |
+
|
| 19 |
+
---
|
| 20 |
+
|
| 21 |
+
## Features
|
| 22 |
+
|
| 23 |
+
- 7 weather stages: Sunny β Cloudy β Drizzle β Mist β Thunderstorm β First Snow β Ice Age
|
| 24 |
+
- Procedural scene: sun + moon, day/night cycle, forest, sea, fish, shark, cranes, goats, penguins, sprite clouds, line-segment rain, soft-flake snow, forked lightning, sea fog
|
| 25 |
+
- Medal journey panel (bronze β silver β gold β trophy)
|
| 26 |
+
- TTS via StreamElements (Polly), Google Translate, or browser SpeechSynthesis (with a Random-voice option)
|
| 27 |
+
- File-based sound library β drop audio into `public/sounds/<category>/` and list it in `manifest.json`
|
| 28 |
+
- **Admin dashboard** at `/admin` for managing users, online activity, exporting/importing the DB
|
| 29 |
+
- Boot loader with progress bar
|
| 30 |
+
|
| 31 |
+
## Admin login
|
| 32 |
+
|
| 33 |
+
A fresh deploy ships with one admin account ready to go. Default credentials live in code as a fallback but can be overridden by environment variables on the Space:
|
| 34 |
+
|
| 35 |
+
- `ADMIN_SEED_EMAIL` β defaults to `admin@echo.app`
|
| 36 |
+
- `ADMIN_SEED_PWD` β defaults to a random value baked into the source
|
| 37 |
+
|
| 38 |
+
> β Set `ADMIN_SEED_PWD` in **Space Settings β Variables and secrets** before the first boot if you want a private password. The seed only runs once per fresh DB.
|
| 39 |
+
|
| 40 |
+
## URLs
|
| 41 |
+
|
| 42 |
+
- `/` β the game (public, anyone can register and play)
|
| 43 |
+
- `/?admin` or `#admin` β the admin dashboard (admin sign-in required)
|
| 44 |
+
- `/admin` β also opens the dashboard (the backend serves index.html for unknown routes)
|
| 45 |
+
|
| 46 |
+
## Architecture
|
| 47 |
+
|
| 48 |
+
- **Frontend**: Vite + Three.js, built to `dist/`
|
| 49 |
+
- **Backend**: Node 22+ Express + built-in `node:sqlite`, serves the frontend AND the `/api/*` REST endpoints
|
| 50 |
+
- **Database**: a single SQLite file at `$DB_DIR/echo.db`. Default `/data/echo.db` in the container β mount Persistent Storage at `/data` on HF to keep data across restarts.
|
| 51 |
+
|
| 52 |
+
## Local development
|
| 53 |
+
|
| 54 |
+
```bash
|
| 55 |
+
npm install
|
| 56 |
+
cd backend && npm install && cd ..
|
| 57 |
+
npm run dev # vite-only frontend (localStorage fallback)
|
| 58 |
+
# OR full stack:
|
| 59 |
+
npm run build
|
| 60 |
+
cd backend && node --experimental-sqlite server.js # http://localhost:7860
|
| 61 |
+
```
|
| 62 |
+
|
| 63 |
+
## License
|
| 64 |
+
|
| 65 |
+
MIT
|