101 lines
4.3 KiB
Markdown
101 lines
4.3 KiB
Markdown
# Lila
|
||
|
||
**Learn words. Beat friends.**
|
||
|
||
Lila is a vocabulary trainer that turns the media you love into language practice. Learn vocabulary from a Shakira song, the first chapter of _Harry Potter_, or an episode of _Breaking Bad_ — then challenge your friends in real-time multiplayer quizzes.
|
||
|
||
Live at [lilastudy.com](https://lilastudy.com).
|
||
|
||
---
|
||
|
||
## Quickstart
|
||
|
||
```bash
|
||
# 1. Clone and install
|
||
git clone git@git.lilastudy.com:forgejo-lila/lila.git
|
||
cd lila
|
||
pnpm install
|
||
|
||
# 2. Environment
|
||
cp .env.example .env
|
||
|
||
# 3. Start local services (PostgreSQL, Valkey)
|
||
docker compose up -d
|
||
|
||
# 4. Build shared packages
|
||
pnpm --filter @lila/shared build
|
||
pnpm --filter @lila/db build
|
||
|
||
# 5. Run migrations
|
||
pnpm --filter @lila/db migrate
|
||
|
||
# 6. Start dev servers
|
||
pnpm dev
|
||
```
|
||
|
||
API: `http://localhost:3000` · Web: `http://localhost:5173`
|
||
|
||
See [DEPLOYMENT.md](documentation/DEPLOYMENT.md) for production infrastructure details.
|
||
|
||
---
|
||
|
||
## Documentation Index
|
||
|
||
| Document | What you'll find there |
|
||
| -------------------------------------------------------------- | ----------------------------------------------------------------------- |
|
||
| [STATUS.md](documentation/STATUS.md) | Current state — what's working, what's blocked, what we're building now |
|
||
| [BACKLOG.md](documentation/BACKLOG.md) | Prioritized task list: now / next / later / changelog |
|
||
| [ARCHITECTURE.md](documentation/ARCHITECTURE.md) | Monorepo structure, layered architecture, data flow |
|
||
| [DECISIONS.md](documentation/DECISIONS.md) | Why we chose X over Y — tool choices, schema design, trade-offs |
|
||
| [DATA_PIPELINE.md](documentation/DATA_PIPELINE.md) | Gemini → SQLite staging → PostgreSQL: flow, current state, phase status |
|
||
| [pipeline/design-doc.md](documentation/pipeline/design-doc.md) | Schema design, difficulty model, query patterns, Gemini JSON contract |
|
||
| [pipeline/roadmap.md](documentation/pipeline/roadmap.md) | Phase plan for the pipeline and schema migration |
|
||
| [DEPLOYMENT.md](documentation/DEPLOYMENT.md) | Hetzner VPS, Caddy, Docker Compose, CI/CD, backups |
|
||
| [design/GAME_MODES.md](documentation/design/GAME_MODES.md) | Planned multiplayer and singleplayer game modes |
|
||
| [archive/](documentation/archive/) | Superseded docs — the removed local-LLM pipeline, CEFR voter strategy |
|
||
|
||
---
|
||
|
||
## Stack
|
||
|
||
| Layer | Technology |
|
||
| ---------- | ----------------------------------------------- |
|
||
| Monorepo | pnpm workspaces |
|
||
| Frontend | React 19, Vite, TanStack Router, Tailwind CSS |
|
||
| Backend | Node.js, Express, TypeScript, WebSockets (`ws`) |
|
||
| Database | PostgreSQL + Drizzle ORM |
|
||
| Auth | Better Auth (Google + GitHub) |
|
||
| Validation | Zod (shared between frontend and backend) |
|
||
| Testing | Vitest, supertest |
|
||
| Deployment | Docker Compose, Caddy, Hetzner VPS |
|
||
| CI/CD | Forgejo Actions |
|
||
|
||
---
|
||
|
||
## Current Status
|
||
|
||
- ✅ Singleplayer quiz (5 language pairs: en↔it/de/es/fr)
|
||
- ✅ Multiplayer lobby + real-time game (2–4 players, simultaneous answers, 15s timer)
|
||
- ✅ Auth (Google + GitHub)
|
||
- ✅ Live deployment with CI/CD
|
||
- 🔄 Rewriting the vocabulary data pipeline around **Gemini** + a sense-based schema
|
||
- 🔄 Phase 7 hardening (rate limiting, error boundaries, monitoring)
|
||
|
||
See [STATUS.md](documentation/STATUS.md) for the full picture.
|
||
|
||
---
|
||
|
||
## Repository Structure
|
||
|
||
```
|
||
lila/
|
||
├── apps/
|
||
│ ├── api/ — Express backend
|
||
│ └── web/ — React frontend
|
||
├── packages/
|
||
│ ├── shared/ — Zod schemas + constants (API/web contract)
|
||
│ └── db/ — Drizzle schema, migrations, models, seeding
|
||
├── data-pipeline/ — Gemini generation → SQLite staging → PostgreSQL
|
||
├── documentation/ — Project docs (this directory)
|
||
└── Caddyfile, docker-compose.yml, etc.
|
||
```
|