запустить публичную страницу, где любой желающий может посмотреть список идей для развития продукта и проголосовать за самые понравившиеся. Чтобы избежать накруток, ограничим голосование: с одного IP-адреса можно отдать свой голос не более чем за 10 разных идей.
Бэкенд (Node.js + Typescript + Express)
Логика голосования: Сервер должен определить IP-адрес клиента. Учтите, что сервис может работать за reverse-proxy (например, Nginx), поэтому нужно корректно обрабатывать заголовок X-Forwarded-For. Перед тем как засчитать голос, система должна проверить, не превысил ли данный IP-адрес лимит в 10 голосов. Если лимит превышен или голос за эту идею уже был, сервер должен вернуть соответствующую ошибку 409 Conflict. База данных: Используйте PostgreSQL или MySQL. Должен быть предоставлен seed-скрипт для наполнения БД. Фронтенд (React)
Отображение: При загрузке страница запрашивает и отображает список идей, отсортированный по количеству голосов. У каждой идеи есть кнопка "Проголосовать", если с этого IP адреса за идею ещё не голосовали. Интерактивность: При нажатии на кнопку "Проголосовать" должен засчитываться голос за эту идею, если пользователь не исчерпал свой лимит голосов.