A daily semantic word guessing game for the Belarusian language, inspired by Contexto and Semantle.
Every day a new secret word is chosen. Players submit guesses and the game ranks each guess by semantic similarity using ML word embeddings — the closer the meaning, the lower the rank number. The goal is to find the secret word.
- Framework: Next.js 16 (App Router), React 19
- Language: TypeScript (strict mode)
- Styling: Tailwind CSS 4
- Linting/Formatting: Biome
- Testing: Jest, React Testing Library
- Analytics: PostHog, Vercel Analytics
- Deployment: Vercel (Frankfurt region)
- Node.js (see
.nvmrc)
npm install
npm run dev # start dev serverYou also need to manually clone the data repository into the data/ directory (see Data below).
| Script | Description |
|---|---|
npm run dev |
Start Next.js dev server |
npm run build |
Production build |
npm run start |
Start production server |
npm run lint |
Run Biome linter |
npm run format |
Auto-format with Biome |
npm run test |
Run Jest tests |
npm run clean |
Remove .next and node_modules |
src/
├── app/ # Next.js App Router pages and layouts
├── components/ # React components
├── contexts/ # React contexts
├── core/
│ ├── entities/ # Domain models
│ ├── interfaces/ # Repository interfaces
│ └── use-cases/ # Business logic (GameService)
├── hooks/ # Custom React hooks
├── infrastructure/ # Concrete implementations (repos, analytics)
├── lib/ # Utilities, config, DI container
└── providers/ # React providers
Word embeddings live in a separate private repository. Clone it manually into data/.
The code in this repository is licensed under the MIT License.


