# poker-player

Источник: https://docs.novapoker.ru/dev/poker-player/
Дорожка: разработка
Сверено с кодом: Mon Aug 24
Код: repos/poker-player/package.json, repos/poker-player/Dockerfile

---

Приложение для посетителей турниров: найти турнир, записаться, следить за игрой,
расти в рейтинге.

**Где код:** `github.com/Klonaps/poker-player`, локально `repos/poker-player`.

## Стек

Expo 57 / React Native 0.86, expo-router, TanStack Query, zustand, i18next,
socket.io-client, reanimated. Таргеты — iOS, Android и веб-сборка.

## Как запустить локально

```bash
pnpm --dir repos/poker-player exec expo start --web --port 8090 --clear
```

Адрес API задаётся переменной `EXPO_PUBLIC_API_URL`; для локального стенда это
`http://localhost:3001`. Конфигурация стенда лежит в `.claude/launch.json`
корневого репозитория.

## Как собирается и куда деплоится

`pnpm build:web` — `expo export --platform web` плюс минификация HTML. В образе
статику раздаёт nginx, `app.json` задаёт `web.output = "single"`, то есть SPA
с клиентской маршрутизацией: nginx заворачивает неизвестные пути в `index.html`.

**Обе переменные `EXPO_PUBLIC_*` — аргументы сборки, а не переменные рантайма.**
Metro подставляет значения прямо в бандл, поэтому сменить их можно только
пересборкой образа; в Dokploy они задаются в Build Args, не в Env:

| Аргумент | Что задаёт |
|---|---|
| `EXPO_PUBLIC_API_URL` | голый origin API, без `/api/v1` |
| `EXPO_PUBLIC_SHARE_BASE_URL` | база для ссылок «поделиться турниром» |

Значение `EXPO_PUBLIC_API_URL` — именно голый origin: префикс версии дописывает
HTTP-клиент, а socket.io берёт этот же origin для namespace `/live`, который
под префиксом не живёт.

## Типы из контракта

```bash
pnpm gen:api
```

Генерирует `src/api/schema.d.ts` из `openapi.json` бэкенда. Запускать после
каждого изменения контракта, иначе типы разъедутся с реальностью молча.

## Тесты

```bash
pnpm test
```

Это `jest --forceExit`. Флаг обязателен: без него открытые хендлы не дают
процессу завершиться, и прогон висит до таймаута.

## Что рядом

- [Ландшафт и границы](https://docs.novapoker.ru/dev.md) — как сервис связан с остальными.
