# Оконный агрегатор «Окнардия» **Окнардия** — веб-сервис для сравнения цен на установку оконных конструкций в типовых многоквартирных домах России. * **Пользователь, желающий заменить окна**, вводит адрес дома → система распознаёт серию строения → выдаёт типовые размеры оконных проёмов → показывает предложения от поставщиков на установку (замену) окон, с ценами, характеристиками компонентов и условиями. Алгоритмические рейтинги защищают потенциального покупателя от возможных накруток отзывов и позволяют сравнивать предложения по объективным характеристикам. * Для **производителей и поставщиков окон** платформа — это канал прямого доступа к целевой аудитории в конкретном районе города. Они размещают свои предложения (компоненты, наборы, цены) и конкурируют на равных условиях. Масштабируемый каталог позволяет охватить множество адресов типовой застройки, а система алгоритмического рейтинга (нет отзывов клиентов, а значит накрутка отзывов невозможна) ранжирует предложения исключительно по характеристикам и условиям предложений. **Стек**: Python 3.12+ · Django 5.2+ · SQLite/MariaDB · Bootstrap 3.3 · jQuery · Yandex Maps API --- ### Переделка под Python 3.12 и Django 5.2.13 (апрель-май 2026) Сделано: * Переход проекта под Python 3.12 и Django 5.2.13, удаление устаревших зависимостей, унификация функций и хелперов. * Перехода на SQLite (возможно, после нагрузочного тестирования переход обратно на mariaDB или PostgreSQL). * Переделаны все raw SQL-запросы на ORM для лучшей поддержки разных СУБД в будущем. * Все сервисные функции из `service/` вынесены в management-команды. * Переработаны все шаблоны с целью SEO- и LLM-оптимизацим: более корректные meta-теги, разметка schema.org через `JSON-LD`, оптимизирована структура "хлебных крошек" и изменение роутинга. * Облегчение шаблона `base.html`: блок логин-логаут подгружается через AJAX только по клику, модуль авторизации вынесен в отдельный JS-файл (`/static/js/auth.js`), счетчики посещений перенесены в подгружаемый JS. * Шаблоны `report/report_last_user_visit.html` больше не требуют серверного рендеринга, а формируются на стороне клиента из кук. * Добавлены SEO-поля блогов. ### Планы, задачи, маркеры на будущее: * Оптимизация кеширования pre-render шаблонов: настроить cronjob для ежедневной/еженедельной очистки `seria_info/prepared/`. * Улучшение администрирования в блогах (Codemirror 6, Типографф). * Упаковать всё в контейнеры: бакенд Django + Gunicorn + WhiteNoise... * CI/CD через gitea + Watchtower для автоматического деплоя при пуше тега `v*.*.*` в репозиторий. * Фронтенд: перейти на новый Bootstrap 5, добавить интерактивные элементы через HTMX + Alpine, сделать адаптивность для мобильных устройств. Убрать jQuery и старые плагины, заменить на современные аналоги. * Оптимизация для мобильных устройств: адаптивный дизайн, оптимизация изображений, улучшение производительности. * Переход проекта под Python 3.14 и Django 6.x. * Нагрузочное тестирование (рпи необходимости переход с SQLite на PostgreSQL в продакшене). # См. также: * [`MANAGEMENT_RUNBOOK.md`](MANAGEMENT_RUNBOOK.md) – единый runbook по management-командам и кастом-операциям (регенерация кеша, рейтингов, sitemap и т.д.). * [`CACHE_PRERENDER_SYSTEM.md`](CACHE_PRERENDER_SYSTEM.md) – двухуровневая система кеширования страниц серий, структура статик-шаблонов, управление кешем. * [`AGENTS.md`](AGENTS.md) – контекст проекта для AI-ассистентов (архитектура, конвенции, рабочие сценарии). * [`SETUP.md`](SETUP.md) – пошаговая настройка окружения, запуск проекта и базовые команды разработки. --- Легаси-материалы старого README, которые могут быть полезны для понимания устройства проекта и его администрирования, а также для будущей реорганизации документации. ### Немного о механике кеширования: #### Кеширование картинок со схемами открывания окон Картинки со схемами открывания создаются в папках: * `public/static/img/_flap.cfg` -- большие картинки * `public/static/img/_miniflap.cfg` -- маленькие картинки (для таблиц с ценами) Эти картинки создаются автоматически. Можно не удалять. Даже если какая-то схема открывания или размер проёма станет неактуальным, лишняя картинка просто будет лежать в папке (вдруг такой проём появится снова). #### Кеширование pre-render шаблонов серий домов В папке `oknardia/templates/seria_info/prepared/` создаются пре-рендер HTML-шаблоны с информацией о сериях домов. **Архитектура (май 2026)**: Для каждой серии создаются **3 отдельных кешируемых файла** (верхняя статья НЕ кешируется): * `{seria_id}_id_static_flaps.html` — схемы открывания окон * `{seria_id}_id_static_graph.html` — график ввода в эксплуатацию * `{seria_id}_id_static_map_stats.html` — карта Яндекса и статистика **Верхняя статья рендерится динамически** из БД, поэтому изменения через админку видны без перезагрузки контейнера. Таблица оконных проёмов **не кешируется** — пересчитывается при каждом запросе, поэтому новые предложения видны пользователям сразу. **Регенерация кеша**: ```bash python manage.py regenerate_seria_prerender # все сер��и python manage.py regenerate_seria_prerender --seria-id 210 # конкретная серия ``` ⏱️ **Когда регенерировать**: Изменены координаты зданий, добавлены новые здания, обновлены годы ввода в эксплуатацию. ❌ **Когда НЕ нужна регенерация**: Добавлены новые предложения/цены (таблица обновляется автоматически), изменены статьи через админку (рендерятся динамически). **Подробности**: см. [`CACHE_PRERENDER_SYSTEM.md`](CACHE_PRERENDER_SYSTEM.md)