Документация
ad287bf — 2026-10-18 20:40 — Alazar
docs: sync documentation with Lab progress
2b67011 — 2026-10-17 21:09 — Alazar
Docs: обновление статуса, архитектуры и грабель после деплоя цеха (сессия 2026-10-17-б)
e0368f1 — 2026-10-17 02:26 — Alazar
Команда receive_event — мягкий merge JSON через ORM.
Команда assign_media_authors.
Миграция 0012 применена.
Папка /srv/previews/ создана.
Старые команды почищены.
bcba4ce — 2026-10-16 23:03 — Alazar
refactor: отказ от HOT/COLD, удаление старого мира, чистка import_service
7442a0a — 2026-10-16 02:29 — Alazar
docs: ARCHITECTURE §7.3, CONTEXT — znymkari-data каркас создан
- znymkari-data: git repo #2 уже существует (не план)
0c521a2 — 2026-10-16 02:24 — Alazar
docs: CHANGES/STATE — сессия 2026-10-15-б (реструктуризация, znymkari-data, 0011)
- CHANGES.md: новая запись 2026-10-15-б
- CHANGES.md: удалена 2026-10-14 (старше трёх)
- STATE.md: статусы ✅/⏳ по znymkari-data, техдолг, что работает
713a083 — 2026-10-16 01:55 — Alazar
feat(catalog): external_id, storage_root, slug для синхронизации с znymkari-data
- Event: три поля для merge ноут→VPS
- external_id: UUIDField(unique), миграция с fill для существующих
- storage_root: hot/cold, db_index
- slug: {id:04d}_{sanitized_title}, заполняется только на ноуте
- migrations 0011 — та же схема, что 0009 в znymkari-data
3ea4b48 — 2026-10-15 23:20 — Alazar
docs: реструктуризация .git → web/, обновление доков
- CHANGES.md: сессия 2026-10-15-б (git-filter-repo, бэкап на G:, .gitignore)
- STATE.md: текущий статус, техдолг, web/ как отдельный репо
- CONTEXT.md: структура D:\content_shop\ без .git в корне
- ARCHITECTURE.md §7: реструктуризация выполнена
006ceda — 2026-10-15 22:58 — Alazar
chore: перенос .gitignore в корень проекта
243d43b — 2026-10-15 21:38 — Alazar
chore: чистка проекта, webhook guard, фикс логотипа
- удалены pycache, артефакты deploy (docs_upload, web_upload), fix_docs.py, find_cyr.py
- .gitignore: разделены web/media/* и whitelist znymkari_logo.jpg
- deploy.bat: авто-очистка архивов, исключение desktop.ini
- webhook guard: check_telegram_webhook + cron каждые 10 мин
- fix: _apply_qr_watermark искал znymkari-logo.jpg (дефис) → znymkari_logo.jpg
- settings.py: LOGGING с RotatingFileHandler
- COMMANDS.md — новая шпаргалка
- доки: ревизия, формат сессий — только даты
d5d7ea7 — 2026-10-12 21:27 — Alazar
Инструкция для Олега
c912c9b — 2026-10-12 15:10 — Alazar
feat(session-20,21): telegram webhook + вход + доки
Session 20:
- Telegram webhook (/telegram/webhook/
Session 21: - Доки -> web/docs/, DOCS_ROOT = BASE_DIR / 'docs' - home.html: убит ранний return на пустой БД -> 'Войти' работает - Telegram: fallback-поиск по username при потерянном telegram_id - Soft-delete: реактивация is_active=False при Telegram-входе - Олег вошёл как tg_276794894 (client) - Превью q=85 (импорт-сервис) - Белый IP Олега: 193.176.249.24, план Схемы B обновлён
Доки: - STATE, ARCHITECTURE, CONTEXT, PRODUCTION, CHANGES — синхронизированы - SETUP_HOME — ждёт переписывания под ноут (С22)
План импорта: C -> C+ -> A -> B (см. ARCHITECTURE.md 5.1)
Техдолг: soft-delete email, /media/znymkari_logo.jpg 404, \${html(pickhref)}
d0a787c — 2026-10-12 13:26 — Alazar
feat(session-20,21): telegram webhook + вход + доки
Session 20:
- Telegram webhook (/telegram/webhook/
Session 21: - Доки → web/docs/, DOCS_ROOT = BASE_DIR / 'docs' - home.html: убит ранний return на пустой БД → 'Войти' работает - Telegram: fallback-поиск по username при потерянном telegram_id - Soft-delete: реактивация is_active=False при Telegram-входе - Олег вошёл как tg_276794894 (client)
Техдолг: soft-delete email, /media/znymkari_logo.jpg, баг \${html(pickhref)}
a46ba74 — 2026-10-11 22:46 — Alazar
docs: закрытие Сессии 18 — деплой на VPS Hetzner + SSL
84b6d7d — 2026-10-11 19:28 — Alazar
rebrand: BRAVO -> Znymkari (code + docs)
e24b67f — 2026-10-11 15:48 — Alazar
Сессия 16: Закріваем сессию. Документі, правки, Подготовка ребрендинга
cb1ea2d — 2026-10-11 03:24 — Alazar
docs: рефакторинг документации под Схему B
- CONTEXT.md — переписан: навигация + грабли по темам, без истории
- STATE.md — сокращён: статус на сегодня + техдолг + очередь
- CHANGES.md — только 3 последние сессии (13, 14, 15)
- ARCHITECTURE.md — обновлён под Схему B (VPS + дом с белым IP, DownloadToken, nginx auth_request, WireGuard)
- PRODUCTION.md — новый чек-лист до прода
- SETUP_HOME.md — новый: инструкция для Олега (оборудование, сеть)
- INTERNET.md, STORAGE.md — удалены (устарели, содержимое в SETUP_HOME)
- views.py — DOCS обновлён: 7 табов (architecture/state/context/ changes/production/setup-home/commits), убраны internet/storage
745c759 — 2026-10-11 01:41 — Alazar
Сессия 15: постеры и 10-сек превью со звуком для видео, команда generate_video_posters, дефолт-имена и стрелки next/prev (закрытие #6, #25), закрытие трекера
dcfacd9 — 2026-10-11 00:57 — Alazar
Сессия 15: дефолт-имена в модалках разметки (#25), стрелки next/prev в галерее (#6), fix URL-фильтра, закрытие трекера
b39fbe2 — 2026-10-10 23:57 — Alazar
Сессия 14: стикер Caveat, три типа офферов с applied, привязка награды, единый стиль кнопок, Cloudflare Tunnel, fix фильтра галереи
be90ea5 — 2026-10-10 16:49 — Alazar
Session 13: smart cart, media counters, cart/favorites polish
Backend: - UserEventDiscount (per-user, per-event, percent). - cart/smart/ — stateless-расчёт: правила 1-6. - Fix: убрать двойное объявление totalVideos в renderPage (клиент).
UI cart.html: - Убран чекбокс 'Умная корзина' — работает всегда. - Воздух под заголовком (26px margin-bottom .head). - Фото и видео — двумя рядами + пунктирный разделитель. - Шеврон раскрытия — в шапке группы, справа, стиль стрелки крошек. - Блок 'всего N' — кликабельная кнопка раскрытия. - Тайлы заполняют всю ширину (gapSlots=1, gap-блок = 1 слот тайла). - Итог по ивенту/корзине: 'N фото · M видео' слева серым. - Удельная цена — 'за медиа', не 'за фото'. - Offer-ссылка → стрелка в стиле крошек.
UI favorites.html: - Те же изменения: два ряда, разделитель, шеврон в шапке, блок-счётчик-кнопка, стрелка в крошках.
Fix lightbox: - collectPreviewItems теперь включает видео (тип из data-type). - Видео в лайтбоксе показывает плашку, не постороннее фото.
ce72073 — 2026-10-10 01:32 — Alazar
Session 13: BuyModal, lang (ru/uk/en/pl/crh), bot UX, app-shell
49ebc4d — 2026-10-09 22:09 — Alazar
Сессия 12: Telegram-флоу (bot, эндпоинты, UI, доки)
cd0a512 — 2026-10-08 23:53 — Alazar
12: UserProfile + TelegramLinkToken, статус в шапке, личный кабинет /accounts/profile/ с редактированием, логин по username, чистка модалки
9ec5e61 — 2026-10-08 21:44 — Alazar
11: merge-prompt (текст + «Оставить как есть» + per-user флаг), автологин после активации, кнопка «Вверх»
0e2c2ae — 2026-10-07 21:06 — Alazar
Сессия 10: app-shell, cart, cart/to-favorites, кнопки лайтбокса
fe7a3a2 — 2026-10-07 17:59 — Alazar
session 9: page-top слой, event → FavoritesModule, светлая/синяя сетка, переносы в избранное, 6 страниц на header_actions
34a41b4 — 2026-10-07 00:11 — Alazar
Сессия 8: header_actions, модуль Lightbox, favorites по стандарту, footer+sitemap
68fd8b5 — 2026-10-06 17:39 — Alazar
доки по телеграму и хвосты от вчера
e9d4415 — 2026-10-05 23:45 — Alazar
7e/7d/e1-e4/e2: избранное, серверная корзина, merge-промпт
Клиентские модули: - cart.js: корзина (аноним → localStorage, залогинен → CartItem). У анонима делегирует в FavoritesModule — у гостя корзины нет. - favorites.js: избранное (аноним → localStorage, залогинен → Favorite). - merge-prompt.js: модалка «У вас есть история до входа», флаг bravo:merge-prompt-done в sessionStorage.
Страницы: - /catalog/favorites/ + API favorites/details/ и cart/to-favorites/. - /catalog/cart/ доступна только залогиненным (редирект анонима на /catalog/favorites/). - Кнопки «В избранное» / «В избранном» в лайтбоксе event.html. - «↩ в избранное» на тайлах cart.html (рядом с «×»). - Закладка-ленточка = «в избранном» (красная — аноним, зелёная — залогинен). В корзине закладки нет.
Взаимоисключение «корзина ↔ избранное»: - Медиа не может быть одновременно в обоих списках. - Переходы — перенос, не копирование: favorites/to-cart и cart/to-favorites, оба в transaction.atomic().
Шаблоны и статика: - Все 9 шаблонов переведены на static/common.css + static/common.js. - home.html — data-spotlights-animated="1": common.js не трогает софиты и боке главной. - common.css: .bokeh через color-mix, без filter: blur (GPU-композитинг при движении).
Тесты: - test_smoke: удалён устаревший test_cart_ok (аноним теперь видит редирект). Добавлены 4 теста: cart→favorites для анонима, доступ favorites анониму, доступ cart/favorites залогиненному. - 77 тестов, все зелёные.
Доки: ARCHITECTURE / STATE / CONTEXT / CHANGES синхронизированы.
caa8bd8 — 2026-10-05 21:52 — Alazar
common: перевести все шаблоны на static (dev_links, markup, event, home) + skip buildBokeh на главной
17b4b00 — 2026-10-05 20:39 — Alazar
static/common: вынос фона, футера, карты сайта + API избранного/корзины
- settings.py: STATICFILES_DIRS + DOCS_ROOT
- static/css/common.css — фон, футер, карта сайта
- static/js/common.js — боке, софиты, sitemap, back-link
- docs.html, cameras.html, prices.html, cart.html, events_list.html — на common
- models: Favorite, CartItem
- client_api: 9 эндпоинтов favorites/* и cart/items/*
- tests: 74 (было 34)
- CSRF_TRUSTED_ORIGINS: + .ngrok-free.dev
b92a86c — 2026-10-05 19:06 — Alazar
7b: API избранного и серверной корзины + 24 теста
6b49878 — 2026-10-05 19:00 — Alazar
7a: модели Favorite и CartItem + 16 тестов
2f00052 — 2026-10-05 18:35 — Alazar
Читалка доков для staff: ARCHITECTURE / STATE / CHANGES / git log
6f6245f — 2026-10-04 22:25 — Alazar
fix #18: поиск не учитывал регистр кириллицы (SQLite icontains)
- client_api.search_events: фильтр по подстроке перенесён в Python через str.lower() — SQLite LIKE регистронезависим только для ASCII
- Проверено: «фіє» / «Фіє» / «ФІЄ» находят «Фієрія»
- CONTEXT.md: правило про счётчик деградации сессии (п.10)
- CONTEXT.md: грабля про SQLite icontains и кириллицу
- CHANGES.md, STATE.md, ARCHITECTURE.md — актуализированы
1a4898f — 2026-10-04 21:41 — Alazar
rename: timeline → markup (страница разметки)
- urls.py: /catalog/event/
/markup/ (name="markup") - views.py: markup_view, шаблон catalog/markup.html
- Файл timeline.html → markup.html
- Заголовок вкладки: «Разметка: ...»
- JS updateSitemapDynamicLinks во всех 7 шаблонах: /markup/
- dev_links.html: перестроено дерево (селектор ивента, крупный шрифт, POSTLINE-комментарии, убраны разделы API)
- test_smoke.py: test_markup_ok, test_markup_redirects_anonymous
CSS-классы .timeline-* и #timeline оставлены — отдельный рефакторинг. PAGE_TIMELINE="timeline" в Issue оставлен (значение в БД, миграция ради красоты не нужна).
2f34335 — 2026-10-04 20:01 — Alazar
tests: Django-тесты (smoke + api + issues) + удаление старого tests/
- test_smoke: URL'ы отвечают 200 (ловит TemplateSyntaxError, NoReverseMatch, TemplateDoesNotExist); аноним редиректится со staff-страниц
- test_api: клиентские API возвращают ожидаемые ключи, likes атомарны, cart/details — структура
- test_models: Issue + save_model (resolved_at/by, нормализация page_url)
- Итого 34 теста, все зелёные
- Удалён старый tests/ (мешал unittest discover)
- NOTES_OLD_CHECKOUT.md — бизнес-логика корзины из старого мира, пригодится на Этапе 3
e9af734 — 2026-10-04 19:10 — Alazar
Замечания включены в карту сайта для stuff
23142d1 — 2026-10-04 19:05 — Alazar
трекер замечаний (модель Issue + админка)
e862cf8 — 2026-10-04 17:49 — Alazar
templates: единый каркас для остальных страниц + app-shell на ивенте
- event.html: app-shell (шапка и футер фиксированы, скролл в галерее)
- timeline.html: колонка лайков + переделка под общий каркас
- cameras.html: сайтовый каркас вместо серого
- prices.html: мини-футер карточки → .card-footer
- фон: софиты статичны везде кроме главной; боке живые везде
900f832 — 2026-10-04 14:04 — Alazar
footer: {% include %} + унифицированный sitemap на клиентских страницах
- includes/footer.html — единый HTML футера с версией
- includes/sitemap.html — единая карта сайта (Клиенту / Ивенты / Администратору|Связь)
- data-event-id на всех страницах, updateSitemapDynamicLinks()
- event.html: app-shell — шапка и футер фиксированы, скролл только в галерее
c7eaaeb — 2026-10-04 00:29 — Alazar
footer: версия проекта через context_processor + футер на всех клиентских страницах
99b9506 — 2026-10-03 21:37 — Alazar
Initial commit: текущее состояние проекта