Мурлыка
Задача
Создать современный и удобный сайт для мини-отеля «Мурлыка», предназначенного для временного размещения кошек и собак. На сайте нужно было представить услуги и варианты размещения, рассказать об условиях проживания животных, добавить отзывы клиентов, контактную информацию и возможность отправить заявку на бронирование.
Решение
Я разработал адаптивный сайт, который удобно использовать как на компьютере, так и на мобильных устройствах. Реализовал каталог услуг с подробными страницами, форму онлайн-бронирования, проверку доступности номеров, форму обратной связи и раздел с отзывами. Также создал защищённую административную панель, через которую можно обрабатывать заявки, управлять номерами и услугами, публиковать отзывы, изменять содержимое страниц и загружать изображения. Для разработки использовал PHP 8, SQLite, PDO, HTML, CSS по методологии BEM и нативный JavaScript.
Результат
В результате получился полноценный сайт мини-отеля с понятной навигацией и удобным процессом оформления заявки. Посетители могут быстро выбрать подходящий вариант размещения, узнать стоимость и отправить заявку, а администратор — управлять основными разделами сайта без изменения программного кода. Сайт адаптирован под разные размеры экранов, имеет аккуратный современный дизайн и предусматривает защиту пользовательских данных и административной части. Стоимость 25 000 рублей
Технологии
Скриншоты
Техническое описание
Техническое описание Сайт мини-отеля для кошек и собак «Мурлыка» — обзор проекта О проекте Сайт разработан с нуля без использования конструкторов, backend-фреймворков и сторонних UI-библиотек — только собственный код. Система позволяет владельцу питомца выбрать подходящий вид размещения и отправить заявку на нужные даты. Администратор обрабатывает заявку, назначает конкретный физический номер и контролирует его занятость через календарь. Страницы сайта Публичная часть 🏠 Главная — презентация мини-отеля, преимущества, популярные виды размещения, отзывы и контактный блок 📋 Виды размещения — каталог опубликованных услуг с ценами, вместимостью, характеристиками и фотографиями 🐾 Страница размещения — подробное описание, галерея и защищённая форма бронирования ✅ Заявка отправлена — одноразовое подтверждение успешного бронирования после редиректа ⭐ Отзывы — опубликованные отзывы клиентов с оценкой, текстом и датой 📞 Контакты — адрес, телефон, режим работы, карта OpenStreetMap и форма обратной связи 🔒 Политика конфиденциальности — информация об обработке персональных данных Административная панель Закрытая часть сайта для управления мини-отелем без участия разработчика: 📥 Заявки — поиск, фильтрация, назначение номера и изменение статуса бронирования 📋 Виды размещения — создание, редактирование, публикация, скрытие и удаление услуг 🖼 Фотографии — загрузка галереи, выбор обложки и изменение порядка изображений 🚪 Номера — управление физическими номерами, их статусами и привязкой к виду размещения 📅 Календарь — просмотр занятости по дням и месяцам, создание ручных блокировок ⭐ Отзывы — создание, редактирование, публикация, скрытие и удаление отзывов ✏️ Контент — редактирование текстов, контактов, SEO-данных и главного изображения сайта ⚙️ Настройки доступа — смена пароля и адреса административной панели Технологии и архитектура Backend Язык PHP 8.x База данных SQLite + PDO Архитектура MVC — собственная, без фреймворка Роутинг Цепочка index.php-диспетчеров по уровням URL Шаблоны .tpl-файлы, рендеринг через renderTemplate() Изображения GD Library + Fileinfo — проверка и безопасное перекодирование при загрузке Frontend JavaScript Нативный ES Modules — без фреймворков CSS Нативный CSS + методология BEM Структура CSS base / layouts / blocks / sections / utils Адаптивность Интерфейс рассчитан на мобильные, планшетные и desktop-экраны Иконки SVG — векторная графика без внешних библиотек Шрифты Локальные файлы Manrope, Inter и Unbounded — без CDN Что намеренно не использовалось Проект обходится без популярных, но избыточных для данной задачи инструментов: ✕ React / Vue ✕ jQuery ✕ Tailwind / Bootstrap / SCSS ✕ ORM / MySQL ✕ CDN / внешние UI-библиотеки ✕ Сложный ООП и лишние архитектурные абстракции Архитектура приложения Структура кода 📁 Контроллеры — один файл = одно действие, без классов и SQL-запросов 📁 Модели — глобальные функции с подготовленными SQL-запросами через PDO 📁 Сервисы — бронирование, доступность номеров, загрузка файлов, email и резервное копирование выделены в отдельный слой 📁 Валидаторы — отдельный слой проверки входных данных до записи в базу 📁 Шаблоны — только отображение данных, публичная часть и админка разделены по каталогам 📁 Core — роутер, подключение к БД, рендеринг, авторизация, helpers и обработка ошибок Безопасность 🔒 Вывод данных — функция e() для экранирования и защиты от XSS 🔒 SQL — только подготовленные запросы PDO без конкатенации пользовательских данных 🔒 Авторизация — requireAuth() на всех защищённых маршрутах и разграничение ролей admin / staff 🔒 Пароли — password_hash() и password_verify(), без хранения паролей в открытом виде 🔒 Защита входа — не более пяти неудачных попыток за 15 минут по хешам логина и IP 🔒 Формы — отдельные именованные CSRF-токены на всех POST-запросах 🔒 Антиспам — honeypot и ограничение частоты отправки публичных форм 🔒 Паттерн PRG — все POST-действия завершаются редиректом, исключая двойную отправку 🔒 Загрузка файлов — проверка MIME, размера, геометрии и содержимого JPEG/PNG с повторным кодированием через GD 🔒 HTTP — CSP, безопасные заголовки и запрет прямого доступа к БД, логам, шаблонам и внутренним каталогам 🔒 Ошибки — посетителю показывается нейтральная страница, технические детали сохраняются в закрытом журнале