diff --git a/API.md b/API.md new file mode 100644 index 0000000..4e2f91a --- /dev/null +++ b/API.md @@ -0,0 +1,25 @@ +# API + +Endpoints: /api/*. Auth: cookie z51_token. + +## Auth +| POST | /api/auth/login | {login, password} | +| GET | /api/auth/me | Текущий пользователь | + +## Проекты +| GET | /api/projects | Список | +| GET | /api/project/:name | Данные проекта | +| PUT | /api/project/:name/settings | Настройки | + +## Письма +| PUT | /api/project/:name/letter | Сохранить (+createdBy) | +| DELETE | /api/project/:name/letter/:id | Удалить | + +## Рендер +| POST | /api/project/:name/render-email | Pug→HTML | + +## Фиды +| POST | /api/project/:name/auto-assemble | Авто-подбор | + +## Админ +| GET | /api/admin/logs | Аудит-логи | diff --git a/Architecture.md b/Architecture.md new file mode 100644 index 0000000..c92bc20 --- /dev/null +++ b/Architecture.md @@ -0,0 +1,29 @@ +# Архитектура + +## Структура +``` +aspekter/ +├── z51-pug-builder/ # Фронтенд + API +│ ├── src/App.svelte # SPA компонент +│ ├── vite.config.js # API middleware +│ └── data/{project}/ # Данные +├── email-gen/ # Pug-шаблоны +├── deploy/email-gen-api/ # Рендер-сервер +├── coin-scout/ # Подбор монет +└── docker-compose*.yml +``` + +## Поток: Pug → HTML +1. Пользователь собирает письмо из блоков +2. POST на email-gen-api с Pug-кодом +3. Валидация → temp-файл → email-templates рендер +4. Juice инлайнит CSS → HTML +5. Превью / копирование + +## Данные проекта +``` +data/{project}/ +├── block.pug, settings.json +├── draft.json, presets.json +├── letters.json + letters/*.json +``` diff --git a/Deploy.md b/Deploy.md new file mode 100644 index 0000000..38c1ac0 --- /dev/null +++ b/Deploy.md @@ -0,0 +1,25 @@ +# Деплой + +## Сервер +IP: 147.45.109.108, Ubuntu 24, Docker 29.2 + +## Запуск +```bash +cd /opt/aspekter +docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d --build +``` + +## SSL +```bash +certbot certonly --standalone -d app.aspekter.ru +certbot certonly --standalone -d coins.aspekter.ru +``` + +## Обновление +```bash +cd /opt/aspekter && git pull && docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d --build +``` + +## Картинки +- FTP/SFTP — внешний сервер +- Локально — data/images/ → https://app.aspekter.ru/images/ diff --git a/Home.md b/Home.md index caccf35..40a5fcf 100644 --- a/Home.md +++ b/Home.md @@ -1 +1,26 @@ # ASPEKTER + +Визуальный конструктор email-рассылок. + +## Ссылки + +- **Приложение:** [app.aspekter.ru](https://app.aspekter.ru) +- **Coin Scout:** [coins.aspekter.ru](https://coins.aspekter.ru) +- **Репозиторий:** [git.aspekter.ru/s.zotov/aspekter](https://git.aspekter.ru/s.zotov/aspekter) + +## Стек + +| Компонент | Описание | Порт | +|-----------|----------|------| +| z51-pug-builder | Svelte 5 SPA — редактор писем | 5173 → 5175 | +| email-gen-api | Рендерер Pug→HTML | 8787 | +| coin-scout | Подбор монет из фидов | 5180 | +| nginx | Reverse proxy + SSL | 80/443 | + +## Документация + +- [Архитектура](Architecture) +- [Деплой](Deploy) +- [API](API) +- [Безопасность](Security) +- [Пользователи](Users) diff --git a/Security.md b/Security.md new file mode 100644 index 0000000..3b728ca --- /dev/null +++ b/Security.md @@ -0,0 +1,13 @@ +# Безопасность + +## Pug Injection Protection +Валидация перед рендером: запрещены require, process, exec, eval, Function, global, fs, Buffer. + +## Конкурентность +Уникальный temp-файл на каждый запрос рендера. + +## Auth +scrypt, HttpOnly cookies, порты только 127.0.0.1, HTTPS. + +## Аудит +Все мутации логируются в JSONL (кто, когда, что, IP). Ротация 6 мес. diff --git a/Users.md b/Users.md new file mode 100644 index 0000000..c74a58e --- /dev/null +++ b/Users.md @@ -0,0 +1,9 @@ +# Пользователи + +## Роли +| admin | Все проекты, управление пользователями, логи | +| user | Только назначенные проекты | + +## Письма +- createdBy — создатель +- updatedBy — последний редактор