Art-auc.ru — мой проект онлайн-аукциона антиквариата и искусства. Построен на Django с WebSocket для ставок в реальном времени. Вот технический разбор.

Аукцион требует мгновенной синхронизации: когда один пользователь делает ставку, все остальные должны увидеть это в ту же секунду. HTTP-поллинг — слишком медленно и расточительно. WebSocket через Django Channels решает это элегантно.

Django Channels + Daphne (ASGI-сервер) + Redis (channel layer). Каждый лот — отдельная WebSocket-группа. Когда приходит ставка: валидация → сохранение в БД → broadcast всем подключённым к лоту.

JavaScript-таймер синхронизируется с сервером. При новой ставке в последние 30 секунд — автоматическое продление. Это предотвращает «снайперские ставки» в последнюю секунду.

Email-уведомления через Celery: перебит, выиграл, проиграл, скоро завершение. Celery Beat для периодических задач: генерация статей, проверка завершённых аукционов.

Смотрите все проекты в мои проекты. Нужен подобный проект? напишите мне.
Backend: Django 5.0 + Channels 4.x. ASGI: Daphne. Channel Layer: Redis. БД: PostgreSQL 16 + pgBouncer.
WebSocket: Каждый лот — группа lot_{id}. При ставке: receive() → валидация → Bid.objects.create() → group_send() → UI обновляется без перезагрузки.
Антиснайпинг: Ставка в последние 30 секунд → автоматическое продление на 30 секунд.
Race conditions: Два пользователя ставят одновременно. Решение: select_for_update() + atomic transaction.
Locale: Русская локаль форматирует 1500,00 — ломает JS. Решение: |stringformat:"g".
Reconnection: Мобильные теряют соединение. Решение: heartbeat + автоматический reconnect с exponential backoff.
Email-уведомления: Через Celery: перебили, выиграли, скоро завершение. Celery Beat для периодических задач.