DishDash — это веб-приложение для совместного выбора заведений с друзьями. Сервис решает извечную проблему «куда пойти» с помощью механики, похожей на Tinder: участники одного лобби свайпают карточки ресторанов, кафе и баров, пока не найдут взаимный лайк (match). Когда два человека свайпают одно и то же заведение в одну сторону — это считается матчем, и все участники лобби получают уведомление с адресом и деталями выбранного места.
- Создание лобби — пользователь может создать комнату и пригласить друзей по ссылке
- Совместный свайп — все участники видят одни и те же карточки заведений и свайпают их в реальном времени
- Матчинг — когда два участника свайпают заведение вправо (лайк), образуется матч
- Интерактивная карта — на карте отображаются все заведения с информацией о них
- Telegram Mini App — приложение работает внутри Telegram без необходимости отдельной установки
- Админ-панель — для управления заведениями, пользователями и лобби
- Язык: Go 1.22
- Фреймворк: Gin
- База данных: PostgreSQL (pgx)
- WebSocket: Socket.IO
- Документация: Swagger
- Миграции: golang-migrate
- Логирование: Logrus
- Метрики: Prometheus
- Язык: Go 1.23
- Фреймворк: Gin
- База данных: PostgreSQL (pgx)
- AWS: AWS SDK (S3)
- Фреймворк: React 19
- Сборщик: Vite
- Стили: Tailwind CSS
- Карты: OpenLayers
- Маршрутизация: React Router
- Фреймворк: React 18
- Сборщик: Vite
- Стили: Tailwind CSS
- UI-компоненты: Radix UI
- Карты: Mapbox GL, MapLibre
- Состояние: Zustand
- Запросы: TanStack Query
- Фреймворк: React 18
- Сборщик: Vite
- Стили: Tailwind CSS
- UI-компоненты: Radix UI
- Интеграция: Telegram Mini Apps SDK
- Анимации: Framer Motion
- WebSocket: Socket.IO
- Карты: Mapbox GL, react-map-gl
- Состояние: Zustand
- Запросы: TanStack Query
- Фреймворк: React
- Сборщик: Vite
- Язык: Node.js (TypeScript)
- Сборщик: esbuild
- Фреймворк: Telegraf, Express
- Логирование: Winston
- AWS: AWS SDK (S3)
- Тестирование: Jest
Проект представляет собой монорепо с несколькими независимыми сервисами, которые взаимодействуют друг с другом через REST API и WebSocket:
dishdash/
├── server/ # Основное API (публичное)
├── dashboard/ # Админ-панель (Backend)
├── dashboard-ui/ # Админ-панель (Frontend v1)
├── dashboard-ui-v2/ # Админ-панель (Frontend v2)
├── miniapp/ # Telegram Mini App
├── landing/ # Landing page
└── bot/ # Telegram Bot
- Miniapp взаимодействует с Server через REST API и Socket.IO для real-time коммуникации
- Bot использует Server API для создания лобби и обработки webhook от Telegram
- Dashboard и Dashboard UI обеспечивают управление контентом (заведения, пользователи, статистика)
- Статические файлы (изображения заведений) хранятся в AWS S3
Используется PostgreSQL с пространственными расширениями (PostGIS) для работы с геоданными. Структура базы данных включает таблицы пользователей, заведений, лобби, матчей и сессий.