# Сессия 2026-07-23 — архитектурные решения для app-autotest ## Изучены эталонные проекты ### 1. `/home/naeel/tf_provider/tfflaskcrud` — эталон Flask-приложения для Nubes **Структура (минималистичная):** ``` site/ ├── app.py # ~100 строк — весь backend в одном файле ├── static/ │ ├── favicon.svg # SVG-фавикон Nubes │ ├── logo.svg # Логотип Nubes │ └── style.css # Все стили в одном файле, CSS Custom Properties └── templates/ └── index.html # Единственный шаблон — вся страница в одном файле ``` **Ключевые паттерны:** - Вся логика в одном `app.py` (монолит, без blueprints) - Один роут `"/"` с GET+POST, вся логика — в `index()` - POST-redirect-GET (никакого AJAX) - Никаких ORM — сырой SQL через `psycopg2` с параметризацией - Конфигурация только через переменные окружения (12-factor) - `VERSION` в коде, отображается в футере - No-JS (кроме `onclick="return confirm(...)"` для удаления) - Русский `` **Зависимости:** `Flask>=3.0`, `psycopg2-binary>=2.9`, `gunicorn>=21.2` ### 2. `/home/naeel/nubes/design` — дизайн-система Nubes **Цвета:** | Переменная | HEX | Роль | |---|---|---| | `--brand-primary` | `#2563eb` | Основной синий | | `--brand-primary-dark` | `#1d4ed8` | Hover | | `--brand-gray` | `#d1d5db` | Границы | | `--brand-grey-light` | `#f3f4f6` | Фон заголовков | | `--destructive` | `#ef4444` | Удаление/ошибка | | `--green` | `#22c55e` | Успех | **Типографика:** - Шрифт: `system-ui` (системный стек) - Базовый размер: `14px` - Заголовки: `16px`, `font-weight: 600` **Компоненты:** - Карточки: `border-radius: 12px`, `border: 1px solid --brand-gray`, тень - Кнопки: `height: 32px`, `border-radius: 6px`, `padding: 0 14px`, Lucide-иконки - Таблицы: `th` — серый фон + uppercase, `td` — границы, hover на строках - Формы: лейбл `text-sm`, инпут `h-9 rounded-md border` - Модальные окна: оверлей + `border-radius: 12px` + тень **Иконки:** Lucide (CDN: `unpkg.com/lucide@latest`) **CSS:** CSS Custom Properties, без препроцессоров, без Tailwind/Bootstrap, стили в `