Ну если дело было давно, могу только предположить, что звуковуха была Creative SoundBlaster AWE 32 или AWE 64. А если встроенная, то Realtek AC97 кодек.
ИМХО, ограничение по IP адресу лучше всего искать на хостинге. Тогда вам подойдет любой конструктор, лишь бы результат конструктора можно было бы выгружать на хостинг. А на хостинге вам технические специалисты из платной поддержки быстро настроят любые ограничения.
У вас разные окружения. В докере вы выполняете `npm run build` (т.е. сборку в продакшн-окружении), а локально `npm run dev` - запускается локальный сервер в окружении для разработки. Ищите различия в ваших окружениях.
Из всего вышенаписанного вообще не понятно чего вы хотите. Вам нужно в чем то помочь? Задайте чёткий вопрос. Вы хотите похвастаться своей "разработкой"? Выложите ваш код на гитхаб. Сообщество оценит. Или нет.
Данные нужно запрашивать только тогда, когда они нужны вашему приложению. Если они нужны "сразу" при открытии приложения - можно фетчить в корневом компоненте, хотя так все же никто не делает. Кроме танков есть еще RTK Query с блекджеком и ... ну вы поняли.
Если ошибка у 1 пользователя, я бы смотрел в сторону плагинов, установленных у пользователя в браузере. Сам по себе Firefox повлиять на js не может. Пусть отключит все плагины.
React тут не причем. Ширина устанавливается в CSS: либо через width, либо max-width.
Покажите ваш код, без него - любой ответ - это гадание на кофейной гуще.
PHP на бекэнде выступает в роли API - отвечает данными на запросы фронта (React). Сам PHP ничего не рендерит, только отдает данные как правило в формате JSON.
React.JS - это фронт, он занимается генерацией/отрисовкой страниц, отправкой запросов на бек, обработкой полученных от бека данных. Вся работа с шаблонами, страницами, CSS и анимацией происходит тут.
Если вы хотите простой ответ - добавьте на ваш сайт мобильную верстку. Как? Это вопрос выходит за рамки данного сайта. В интернете полно статей на эту тему. Если очень коротко - вам нужно изучить как применять media-запросы в рамках CSS.
const [errors, setErrors] = useState({
name: '',
teleph: '',
email: '',
});
// когда нужно устанавливается одну ошибку
setErrors({ ...errors, [name]: value })
// где name - имя ключа объекта с ошибками, value - значение ошибки