Такси в Грахово
  • TypeScript 88.4%
  • JavaScript 5.2%
  • HTML 3%
  • CSS 1.4%
  • Python 1.1%
  • Разное 0.7%
Найти файл
Roman Mescheryakov d24e5f097f
Все проверки успешно пройдены
Deploy production / Tests, Expo web build and production deployment (push) Successful in 8m49s
Migrate production deployment to Gitlub with isolated Expo builds
2026-09-28 22:35:27 +04:00
.claude Publish complete taxi application 2026-08-01 11:34:21 +04:00
.forgejo Migrate production deployment to Gitlub with isolated Expo builds 2026-09-28 22:35:27 +04:00
.github/workflows Verify deployed MapLibre compatibility assets in production 2026-09-15 17:23:16 +04:00
.superdesign Publish complete taxi application 2026-08-01 11:34:21 +04:00
.vscode Publish complete taxi application 2026-08-01 11:34:21 +04:00
android-ndk-27.1.12297006-incomplete/.installer chore: commit remaining workspace changes 2026-08-26 20:57:14 +04:00
assets Remove production placeholders and demo fallbacks 2026-09-22 04:16:46 +04:00
deploy Fix VK Mini App map loading in older mobile browsers 2026-09-15 17:13:02 +04:00
docs Migrate production deployment to Gitlub with isolated Expo builds 2026-09-28 22:35:27 +04:00
modules Add direct Android messenger login and improve address map gestures 2026-09-11 14:19:25 +04:00
patches Add admin booking switch and driver recruitment dialog; prepare 1.0.20 2026-09-18 13:23:23 +04:00
plugins Add admin booking switch and driver recruitment dialog; prepare 1.0.20 2026-09-18 13:23:23 +04:00
public feat: deliver yellow redesign and complete ride interactions 2026-09-09 17:22:55 +04:00
scripts Remove production placeholders and demo fallbacks 2026-09-22 04:16:46 +04:00
server Add admin booking switch and driver recruitment dialog; prepare 1.0.20 2026-09-18 13:23:23 +04:00
src Remove production placeholders and demo fallbacks 2026-09-22 04:16:46 +04:00
store-listing Fix location consent and privacy policy for Google Play 1.0.21 2026-09-22 03:45:02 +04:00
tests Remove production placeholders and demo fallbacks 2026-09-22 04:16:46 +04:00
video-promo design: add yellow community artwork and signature motion promo 2026-09-09 21:25:44 +04:00
.dockerignore Publish complete taxi application 2026-08-01 11:34:21 +04:00
.easignore feat: add store-aware update prompts and prepare 1.0.11 2026-09-09 21:25:19 +04:00
.env.example Replace Yandex maps with MapLibre and remember house locations 2026-09-11 05:17:56 +04:00
.env.production.example Replace Yandex maps with MapLibre and remember house locations 2026-09-11 05:17:56 +04:00
.gitattributes Remove production placeholders and demo fallbacks 2026-09-22 04:16:46 +04:00
.gitignore Replace Yandex maps with MapLibre and remember house locations 2026-09-11 05:17:56 +04:00
AGENTS.md Add direct Android messenger login and improve address map gestures 2026-09-11 14:19:25 +04:00
app.config.ts Replace Yandex maps with MapLibre and remember house locations 2026-09-11 05:17:56 +04:00
app.json Fix location consent and privacy policy for Google Play 1.0.21 2026-09-22 03:45:02 +04:00
CLAUDE.md Publish complete taxi application 2026-08-01 11:34:21 +04:00
docker-compose.yml Replace Yandex maps with MapLibre and remember house locations 2026-09-11 05:17:56 +04:00
Dockerfile.api perf: streamline startup and order loading 2026-08-31 07:59:47 +04:00
Dockerfile.web Replace Yandex maps with MapLibre and remember house locations 2026-09-11 05:17:56 +04:00
eas.json Add admin booking switch and driver recruitment dialog; prepare 1.0.20 2026-09-18 13:23:23 +04:00
eslint.config.js feat: deliver yellow redesign and complete ride interactions 2026-09-09 17:22:55 +04:00
google-services.json feat: add VK community and Android service assets 2026-08-25 20:06:05 +04:00
LICENSE Publish complete taxi application 2026-08-01 11:34:21 +04:00
package-lock.json Fix location consent and privacy policy for Google Play 1.0.21 2026-09-22 03:45:02 +04:00
package.json Fix location consent and privacy policy for Google Play 1.0.21 2026-09-22 03:45:02 +04:00
pepk.jar chore: commit remaining workspace changes 2026-08-26 20:57:14 +04:00
react-native.config.js feat: add RuStore push delivery 2026-09-07 20:54:39 +04:00
README.md Replace Yandex maps with MapLibre and remember house locations 2026-09-11 05:17:56 +04:00
rustore-pepk-out.zip chore: commit remaining workspace changes 2026-08-26 20:57:14 +04:00
SECURITY.md Configure production deployment and publish readiness 2026-08-01 15:03:39 +04:00
taxi-grahovo-1.0.3-15-rustore.apk chore: commit remaining workspace changes 2026-08-26 20:57:14 +04:00
taxi-grahovo-1.0.3-16-rustore.apk chore: commit remaining workspace changes 2026-08-26 20:57:14 +04:00
taxi-grahovo-1.0.3-17-rustore.apk chore: commit remaining workspace changes 2026-08-26 20:57:14 +04:00
taxi-grahovo-1.0.4-19-rustore.apk chore: add RuStore Android 1.0.4 build 19 2026-08-26 21:56:50 +04:00
taxi-grahovo-1.0.5-20-rustore.apk chore: add RuStore Android 1.0.5 build 20 2026-08-28 20:54:31 +04:00
taxi-grahovo-1.0.6-21-rustore.apk fix: refine booking prices and address suggestions 2026-08-31 06:13:44 +04:00
taxi-grahovo-1.0.7-22-rustore.apk chore: add RuStore 1.0.7 artifact 2026-08-31 09:18:55 +04:00
tsconfig.json fix: include Expo asset types in clean CI checkouts 2026-09-09 17:27:35 +04:00

Такси Грахово

Единое приложение локального такси для web, iOS и Android. В репозитории находятся пассажирский интерфейс, кабинет водителя, панель суперадмина, Fastify API, MySQL‑схема, вход по SMS, карты MapLibre, real‑time статусы и push‑уведомления.

Быстрый запуск интерфейса

npm install
copy .env.example .env.local
npm start

В .env.local оставьте EXPO_PUBLIC_DEMO_MODE=true. На экране входа доступны три роли без базы: пассажир, водитель и админ.

Полный локальный запуск

  1. Создайте MySQL базу taxi_grahovo.
  2. Скопируйте .env.example в .env и заполните server‑переменные.
  3. Выполните:
npm run db:migrate
npm run db:seed
npm run dev

Web откроется по адресу Expo, API слушает http://localhost:4100.

В development SMS_PROVIDER=console: тестовый код подтверждения возвращается интерфейсу без отправки SMS. Для production укажите SMS_PROVIDER=notificore, секретный NOTIFICORE_API_KEY (или готовый NOTIFICORE_BEARER_TOKEN) и шаблон NOTIFICORE_TEMPLATE_ID=271. При наличии зарегистрированного имени отправителя задайте NOTIFICORE_ORIGINATOR. Для основного входа через MAX задайте MAX_BOT_USERNAME, MAX_BOT_TOKEN, MAX_WEBHOOK_SECRET и подпишите webhook https://<ваш-домен>/v1/webhooks/max на события bot_started, message_created и message_callback. Для входа через Telegram задайте TELEGRAM_BOT_USERNAME, TELEGRAM_BOT_TOKEN, TELEGRAM_WEBHOOK_SECRET. Прокси и шлюз вебхуков настройте в панели супер администратора, затем нажмите «Зарегистрировать вебхук». Настройки хранятся в MySQL и применяются без перезапуска. Подробнее: прокси и вебхуки. Операционные уведомления для администраторов отправляются тем же ботом в TELEGRAM_ADMIN_CHAT_ID (по умолчанию -1004215180973). Критические ошибки API, серверного процесса и Expo-клиента отправляются в TELEGRAM_CRITICAL_CHAT_ID (по умолчанию -1004442605510); Telegram-токен в клиентскую сборку не включается. После входа через MAX или Telegram привязанный бот также отправляет пользователю персональные транзакционные уведомления о поиске машины, этапах поездки, отменах и результатах модерации. Из чата можно управлять уже созданным заказом; сам вызов такси остаётся в приложении. При наличии обеих привязок сообщение доставляется в оба мессенджера. Все секреты хранятся только на сервере и не должны иметь префикс EXPO_PUBLIC_.

Для входа через VK ID и уведомлений от сообщества задайте VK_APP_ID, VK_REDIRECT_URI, VK_COMMUNITY_ID, VK_BOT_TOKEN, VK_CALLBACK_SECRET и VK_CALLBACK_CONFIRMATION. Redirect VK ID: https://<api-домен>/v1/auth/vk/callback; Callback API сообщества: https://<api-домен>/v1/webhooks/vk. Полная настройка описана в docs/VK_INTEGRATION.md.

Команды проверки

npm run typecheck
npm test
npm run lint
npm run build:web
npm run check

Production через Docker

copy .env.production.example .env.production
powershell -ExecutionPolicy Bypass -File deploy/osrm/prepare.ps1
docker compose --env-file .env.production up -d --build

Скрипт один раз скачивает данные OpenStreetMap и готовит собственный автомобильный маршрутизатор OSRM. Контейнер web слушает порт 8080; перед ним нужен HTTPS reverse proxy/CDN. MySQL и OSRM не публикуют порты наружу. Изменения схемы находятся в server/migrations.

Нативные сборки

Создайте EAS project, укажите EAS_PROJECT_ID, добавьте production environment variables и выполните:

npx eas-cli@latest build --profile preview
npx eas-cli@latest build --profile production

Production Android создаётся как AAB, iOS — как App Store build; номера увеличиваются EAS автоматически. Облачные сборки и аккаунты магазинов могут требовать оплаты.

Для APK RuStore с собственным каналом push создайте production-проект для ru.grahovo.taxi и release SHA-256 в RuStore Консоли. В EAS production environment задайте RUSTORE_PUSH_ENABLED=true и публичный RUSTORE_PUSH_PROJECT_ID. На сервере задайте тот же project ID и секретный RUSTORE_PUSH_SERVICE_TOKEN, затем собирайте профиль rustore. Сервисный токен нельзя включать в приложение или хранить в Git.

Карты, маршруты и адреса

Карту отображает MapLibre: нативный компонент на Android/iOS и GL JS в браузере. Собственный светлый/тёмный стиль включает здания в 3D, улицы и точки населённых пунктов. По умолчанию векторные тайлы и шрифты загружаются с OpenFreeMap без API-ключа. Можно задать свои совместимые источники через EXPO_PUBLIC_MAP_TILES_URL и EXPO_PUBLIC_MAP_GLYPHS_URL. Карта требует соединения с источником данных.

Расстояние и длительность поездки рассчитывает собственный OSRM по данным OpenStreetMap. Поиск адресов использует локальный справочник Грахово и кэшируемый Nominatim без автодополнения. Обратное геокодирование и уточнение улицы также идут через API приложения. Кнопка «Маршрут» включает карту и возобновляет слежение за машиной внутри приложения. Подробности: MapLibre, маршрутизация и геокодирование. Справочник района дополнен координатами домов из OSM; импорт в MySQL и границы покрытия описаны в документации адресного каталога.

Документация

Перед коммерческим запуском обязательно заполните внешние ключи, реквизиты оператора и пройдите чек‑лист. Код не может самостоятельно создать договоры перевозки или аккаунты Apple/Google/VK.