updating documentation, prettier format
This commit is contained in:
parent
039ed50567
commit
e534b98bc5
16 changed files with 1271 additions and 1070 deletions
|
|
@ -31,7 +31,7 @@ Live at [lilastudy.com](https://lilastudy.com).
|
|||
|
||||
### What's In Progress / Blocked
|
||||
|
||||
- **Kaikki data pipeline migration** — Replacing OpenWordNet/OMW with sense-disambiguated Kaikki data. Stage 1 (extract) and Stage 2 (reverse link) complete on sample data. Stage 3 (enrich) being rewritten for sub-stage architecture.
|
||||
- **Data pipeline rewrite** — The Kaikki/local-LLM pipeline was replaced by a Gemini-only pipeline writing a new sense-based schema (`words` → `senses` → `translations`). Schema and prompt are done; the pipeline script itself is not written yet. See 05-data-pipeline.md.
|
||||
- **Guest play** — No try-before-signup flow yet. Auth required for all game routes.
|
||||
- **Game session store** — Still in-memory. Valkey container exists locally but not wired up.
|
||||
- **Media ingestion** — Not started. No pipeline for subtitles/lyrics → vocab extraction yet.
|
||||
|
|
@ -40,7 +40,7 @@ Live at [lilastudy.com](https://lilastudy.com).
|
|||
|
||||
The app is currently a **generic vocabulary quiz**. The media-based practice feature (the differentiator) does not exist yet. It depends on:
|
||||
|
||||
1. Kaikki pipeline reaching production (fixes translation quality)
|
||||
1. The new data pipeline reaching production (fixes translation quality)
|
||||
2. A media ingestion prototype (subtitles/lyrics → text → vocab extraction → quiz)
|
||||
|
||||
---
|
||||
|
|
@ -50,7 +50,7 @@ The app is currently a **generic vocabulary quiz**. The media-based practice fea
|
|||
| Layer | Technology |
|
||||
| ------------- | -------------------------------------------------------------- |
|
||||
| Monorepo | pnpm workspaces |
|
||||
| Frontend | React 18, Vite, TanStack Router, TanStack Query, Tailwind CSS |
|
||||
| Frontend | React 19, Vite, TanStack Router, Tailwind CSS |
|
||||
| Backend | Node.js, Express, TypeScript, WebSockets (`ws` library) |
|
||||
| Database | PostgreSQL + Drizzle ORM |
|
||||
| Auth | Better Auth (Google + GitHub) |
|
||||
|
|
@ -58,7 +58,7 @@ The app is currently a **generic vocabulary quiz**. The media-based practice fea
|
|||
| Testing | Vitest, supertest |
|
||||
| Deployment | Docker Compose, Caddy, Hetzner VPS |
|
||||
| CI/CD | Forgejo Actions |
|
||||
| Data Pipeline | Kaikki (Wiktionary) → SQLite (`pipeline.db`) → PostgreSQL |
|
||||
| Data Pipeline | Gemini API → SQLite staging (`db/staging.db`) → PostgreSQL |
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -72,7 +72,7 @@ lila/
|
|||
├── packages/
|
||||
│ ├── shared/ — Zod schemas + constants (API/web contract)
|
||||
│ └── db/ — Drizzle schema, migrations, models, seeding
|
||||
├── data-pipeline/ — Kaikki extraction → enrichment → PostgreSQL sync
|
||||
├── data-pipeline/ — Gemini generation → SQLite staging → PostgreSQL
|
||||
└── documentation/ — Project docs (human + AI-context branches)
|
||||
```
|
||||
|
||||
|
|
@ -86,7 +86,7 @@ lila/
|
|||
2. **Server-side answer evaluation** — The correct answer is never sent to the frontend. All evaluation happens server-side.
|
||||
3. **Zod discriminated unions for WebSockets** — All WS messages are typed via Zod schemas in `packages/shared`. The router switches on the `type` field.
|
||||
4. **GameSessionStore abstraction** — Session state is stored through an interface (`InMemoryGameSessionStore` now, `ValkeyGameSessionStore` planned).
|
||||
5. **Language-neutral data model** — `terms` are concepts; `translations` are per-language words. Adding a language requires no schema changes.
|
||||
5. **Sense-based data model** — `words` have `senses`, and translations hang off a sense. Adding a language requires no schema changes. Note the app still queries the older `vocabulary_entries` tables — see 02-data-model.md.
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -98,7 +98,7 @@ lila/
|
|||
| WebSocket | `ws` library, not Socket.io | 2–4 players, explicit Zod protocol sufficient |
|
||||
| Auth | Better Auth, not Keycloak | Embedded middleware, no separate service |
|
||||
| Answer eval | Server-side only | Correct answer never sent to frontend |
|
||||
| Data source | Kaikki, not OMW | Sense-disambiguated translations |
|
||||
| Data source | Gemini-generated, not OMW | Sense-disambiguated, language-native glosses |
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -110,7 +110,7 @@ lila/
|
|||
| [02-data-model.md](02-data-model.md) | Database schema, tables, relationships, constraints |
|
||||
| [03-api-contract.md](03-api-contract.md) | REST endpoints, request/response schemas, Zod types |
|
||||
| [04-websocket-protocol.md](04-websocket-protocol.md) | WS message types, game flow, auth, state management |
|
||||
| [05-data-pipeline.md](05-data-pipeline.md) | Kaikki pipeline stages, enrich sub-stages, sync |
|
||||
| [05-data-pipeline.md](05-data-pipeline.md) | Gemini pipeline flow, output contract, validation, blockers |
|
||||
| [06-deployment.md](06-deployment.md) | Docker, Caddy, CI/CD, backups |
|
||||
| [prompts/meta.md](prompts/meta.md) | How to work with LLMs on this codebase |
|
||||
| [99-current-task.md](99-current-task.md) | Template: fill this out before giving a task to an LLM |
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue