mirror of
https://gitverse.ru/kpa39l/vesti.git
synced 2026-09-29 09:55:03 +00:00
Initial import: vesti.nixg.ru — новостной апрув-проект (web, crawler, classifier, publisher, openspec)
This commit is contained in:
@@ -0,0 +1,2 @@
|
||||
schema: spec-driven
|
||||
created: 2026-09-11
|
||||
@@ -0,0 +1,27 @@
|
||||
## Дизайн
|
||||
|
||||
### 1. Убрать HTMX (unpkg.com)
|
||||
|
||||
`web/templates/candidates.html`:
|
||||
|
||||
- Строки 50-65: `<form class="d-inline" method="post" action="/posts/{{ p.id }}/approve" hx-post=... hx-target=... hx-swap=...>` →
|
||||
`<form class="d-inline" method="post" action="/posts/{{ p.id }}/approve">`. Кнопка остаётся `type="submit"`.
|
||||
- Строка 66: `<button ... hx-post="/posts/{{ p.id }}/reject" hx-target="..." hx-swap="outerHTML">` →
|
||||
обернуть в `<form class="d-inline" method="post" action="/posts/{{ p.id }}/reject">` + `<button type="submit">`.
|
||||
- Убрать все `hx-*` атрибуты по проекту.
|
||||
|
||||
### 2. Локализовать Bootstrap
|
||||
|
||||
- Скачать: `curl -sL https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css -o web/static/bootstrap.min.css`
|
||||
- В `base.html` и `login.html` заменить `<link href="https://cdn.jsdelivr.net/...">` →
|
||||
`<link href="/static/bootstrap.min.css" rel="stylesheet">`.
|
||||
- FastAPI уже монтирует `/static` (app.mount в web/app.py:27) — STATIC_DIR существует
|
||||
(`web/static/`), сейчас пустой.
|
||||
|
||||
### 3. Проверка
|
||||
|
||||
- `grep -rn "unpkg\|jsdelivr\|cdn\." web/` → пусто.
|
||||
- `curl -s -o /dev/null -w "%{http_code}" http://127.0.0.1:8400/login` → 200.
|
||||
- Страница рендерится с локальным CSS (визуально не отличается).
|
||||
- Approve/reject работают POST-формами (редирект на /published / /candidates?status=rejected).
|
||||
- network-панель браузера: нет запросов к unpkg.com/jsdelivr.net.
|
||||
@@ -0,0 +1,38 @@
|
||||
## Why
|
||||
|
||||
Веб-интерфейс VESTI (`web/`) зависит от двух внешних CDN:
|
||||
|
||||
- `https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css` (base.html:7, login.html:7)
|
||||
- `https://unpkg.com/htmx.org@1.9.12` (base.html:8)
|
||||
|
||||
При фильтрации/действиях страница ждёт ответа от `unpkg.com` — если CDN недоступен или
|
||||
замедлен (а в РФ это распространённая проблема), браузер висит в ожидании скрипта.
|
||||
Это внешняя зависимость, которая не нужна локальному сервису: VESTI работает на bigbox
|
||||
за Caddy/TLS и не должна зависеть от сторонних доменов. Пользователь явно против ожидания
|
||||
ответа от `unpkg.com`.
|
||||
|
||||
## What Changes
|
||||
|
||||
- Убрать `https://unpkg.com/htmx.org@1.9.12` из `web/templates/base.html`.
|
||||
- Убрать `https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css` из
|
||||
`web/templates/base.html` и `web/templates/login.html`.
|
||||
- Отказаться от HTMX: кнопки «Опубликовать»/«Отклонить» перевести с `hx-post` на
|
||||
обычные `<form method="post">` (полная перезагрузка страницы — приемлемо для прототипа,
|
||||
снимает зависимость от JS).
|
||||
- Bootstrap: скачать CSS локально в `web/static/` (или, если критично, минимизировать
|
||||
использование классов и обойтись собственным минимальным CSS). Рекомендуемый вариант —
|
||||
локальный файл `web/static/bootstrap.min.css` из той же версии 5.3.3.
|
||||
- Все ссылки на внешние CDN удалить; в шаблонах не останется ни одного `http(s)://` на
|
||||
сторонние домены.
|
||||
- JS в страницах — только свой (если нужен), без `unpkg`/`jsdelivr`/`cdn.*`.
|
||||
|
||||
## Impact
|
||||
|
||||
- Файлы: `web/templates/base.html`, `web/templates/login.html`, `web/templates/candidates.html`
|
||||
(замена hx-post на form), возможно `web/templates/published.html`/`metrics.html` (если там
|
||||
есть hx-атрибуты).
|
||||
- Добавится `web/static/bootstrap.min.css` (~230 KB).
|
||||
- Поведение: approve/reject больше не будут ajax-без-перезагрузки, а будут обычными POST
|
||||
с редиректом. Для прототипа это нормально.
|
||||
- Снимается зависимость от интернета/CDN при работе веб-UI.
|
||||
- Rollback: вернуть две строки CDN в base.html + вернуть hx-post — ничего больше не меняется.
|
||||
@@ -0,0 +1,18 @@
|
||||
## 1. Локализовать Bootstrap
|
||||
|
||||
- [x] 1.1 Скачать `bootstrap@5.3.3/dist/css/bootstrap.min.css` в `web/static/`
|
||||
- [x] 1.2 Заменить CDN-ссылку на `/static/bootstrap.min.css` в `base.html` и `login.html`
|
||||
- [x] 1.3 Проверка: страница рендерится с локальным CSS, нет запросов к jsdelivr.net
|
||||
|
||||
## 2. Убрать HTMX (unpkg.com)
|
||||
|
||||
- [x] 2.1 В `candidates.html` заменить `hx-post` на обычные `<form method="post">` (approve/reject)
|
||||
- [x] 2.2 Убрать `<script src="https://unpkg.com/htmx.org@1.9.12">` из `base.html`
|
||||
- [x] 2.3 Убрать все `hx-*` атрибуты из шаблонов (grep подтверждает отсутствие)
|
||||
- [x] 2.4 Проверка: approve и reject работают полной перезагрузкой (POST + RedirectResponse)
|
||||
|
||||
## 3. Итоговая проверка
|
||||
|
||||
- [x] 3.1 `grep -rn "unpkg\|jsdelivr\|cdn\." web/` — пусто
|
||||
- [x] 3.2 В браузере network-панель: 0 внешних доменов (только свой хост и статика)
|
||||
- [x] 3.3 Полный цикл: фильтр → approve → опубликовано, без ожидания от третьих серверов
|
||||
Reference in New Issue
Block a user