poker-player
Приложение для посетителей турниров: найти турнир, записаться, следить за игрой, расти в рейтинге.
Где код: 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 и веб-сборка.
Как запустить локально
Заголовок раздела «Как запустить локально»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, который
под префиксом не живёт.
Типы из контракта
Заголовок раздела «Типы из контракта»pnpm gen:apiГенерирует src/api/schema.d.ts из openapi.json бэкенда. Запускать после
каждого изменения контракта, иначе типы разъедутся с реальностью молча.
pnpm testЭто jest --forceExit. Флаг обязателен: без него открытые хендлы не дают
процессу завершиться, и прогон висит до таймаута.
Что рядом
Заголовок раздела «Что рядом»- Ландшафт и границы — как сервис связан с остальными.