Jack (Jack of all trades) — это веб-приложение-мультитул для повседневной работы с файлами, документами, медиа и инженерными утилитами в одном интерфейсе.
Проект собран как монорепо:
backend/— Spring Boot 4.0.5, Java 26frontend/— Vue 3, Vite, TypeScriptassets/brand/— логотип и брендовые ассеты
Сейчас в проекте уже доступны рабочие модули:
- Viewer — просмотр изображений, документов, видео и аудио
- Converter — конвертация изображений, офисных файлов, PDF, видео и аудио
- Compression — уменьшение размера файлов с режимами
maximum reduction,target sizeи ручными настройками - PDF Toolkit — merge, split, rotate, reorder, OCR, redact, password protect/unlock
- Editor — редактор для
Markdown,HTML,CSS,JavaScript,JSON,YAMLи обычного текста - Dev Tools — кодировки, JWT, хеши, валидаторы, URL utilities, UUID/ULID и другие быстрые утилиты
Рекомендуемый способ запуска локально:
docker compose up -d --buildПосле старта будут доступны:
- frontend:
http://localhost:5173 - backend:
http://localhost:8080 - healthcheck:
http://localhost:8080/actuator/health - postgres:
localhost:5432
Остановить окружение:
docker compose downОстановить и удалить тома:
docker compose down -vДля запуска без Docker понадобятся:
- Java 26
- Node.js
^20.19.0 || >=22.12.0 - PostgreSQL
- утилиты обработки файлов в
PATH:ffmpeg,ffprobe,ImageMagick,potrace,dcraw_emu,tesseract
Backend:
cd backend
./gradlew bootRunFrontend:
cd frontend
npm install
npm run devШаблон конфигурации лежит в .env.example.
Чаще всего достаточно проверить или переопределить:
JACK_FRONTEND_PORTJACK_BACKEND_PORTJACK_DB_PORTJACK_DB_NAMEJACK_DB_USERNAMEJACK_DB_PASSWORDJACK_API_BASE_URLJACK_WEB_ALLOWED_ORIGINSJACK_PROCESSING_STORAGE_ROOTJACK_PROCESSING_SESSION_SECRET(production: случайное значение минимум 32 bytes)JACK_PROCESSING_SESSION_COOKIE_SECURE(production:trueза TLS ingress)JACK_PROCESSING_MAX_UPLOAD_SIZE_BYTES, concurrency/queue/session storage limits и TTL
Локальный backend Docker image уже включает базовый набор инструментов обработки файлов и OCR для eng, osd и rus, поэтому Docker-режим остаётся самым простым способом поднять проект на ноутбуке без ручной настройки системных зависимостей.
- Backend: Spring Boot, Spring Web MVC, Spring Data JPA, PostgreSQL
- Frontend: Vue 3, Vue Router, Pinia, Vite, TypeScript
- Тесты и качество: Vitest, Playwright/axe/visual, ESLint, Prettier, OWASP Dependency-Check, CycloneDX, Trivy и gitleaks
- Инфраструктура: Docker Compose, GHCR, k3s
File processing является backend-owned: browser управляет presentation/interaction, а backend
выполняет magic-aware intake, sanitization/conversion, bounded queue, owner checks и artifact
lifecycle. Anonymous owner хранится в signed HttpOnly cookie. Upload, job и artifact одного
browser profile недоступны другому owner id; это isolation boundary, но не account authentication.
Default policy:
- upload 64 MiB, result 128 MiB, owner storage 256 MiB;
- 4 global jobs, queue 16, не более 2 concurrent jobs на session;
- 40 MP image decode, 500 document pages, 20k rows / 400k table cells;
- archive 2048 entries, 128 MiB expanded, ratio 100, nesting depth 1;
- upload/job/artifact TTL 24 hours, scheduled cleanup физических файлов и metadata.
CSV/TSV, workbook и SQLite preview используют paged/range API; frontend удерживает не более 200 table rows в DOM. Подробные API, format fidelity и ограничения описаны в processing-platform.md, Markdown — в markdown-profile.md, модель угроз — в processing-threat-model.md.
В репозитории теперь есть production-контур:
- GitHub Actions pipeline:
.github/workflows/ci-cd.yml - Kubernetes manifests:
k8s/jack/ - bootstrap-скрипт для кластера:
scripts/deploy/jack-bootstrap-k8s.sh - production Dockerfiles:
backend/Dockerfile.prodиfrontend/Dockerfile.prod
Схема рассчитана на single-domain ingress:
https://jack.keykomi.com/-> frontendhttps://jack.keykomi.com/api/*-> backend APIhttps://jack.keykomi.com/actuator/health-> backend health endpoint
После push в GitHub workflow:
- прогоняет frontend/backend/E2E/visual/audit/Dependency-Check/SBOM gates и secret scan;
- собирает production images, блокирует publish при High/Critical Trivy finding;
- публикует SBOM/provenance и подписывает image digest keyless Cosign signature;
- публикует immutable tag
sha-<commit>;edge/mainостаются только удобными aliases default branch и не должны использоваться для контролируемого rollout.
- PostgreSQL/PVC backup и достаточно места для processing TTL window;
- TLS ingress, корректный
web-allowed-originsи namespace label для разрешённого ingress controller; jack-secretsс PostgreSQL values и случайнымprocessing-session-secret; bootstrap создаёт отсутствующий ключ и не ротирует существующий без явного operator input;- прошедшие CI images, проверенная Cosign signature и конкретный
JACK_IMAGE_TAG=sha-<commit>; - доступность Flyway migration, readiness/liveness probes и NetworkPolicy paths PostgreSQL/DNS;
- после rollout — smoke ownership, upload → job → artifact, cancel, range API и cleanup.
Пример подготовки bootstrap без выполнения deployment из этого репозитория:
export JACK_IMAGE_TAG=sha-<verified-commit>
export JACK_APP_HOST=https://jack.example.com
export JACK_PROCESSING_SESSION_SECRET="$(openssl rand -hex 32)"
# После отдельного approval оператора:
# sudo -E ./scripts/deploy/jack-bootstrap-k8s.shManifests намеренно содержат sha-RELEASE_SHA: apply без подстановки immutable release SHA не
является production rollout. Horizontal scaling требует shared object storage, distributed
queue/lease и единого cleanup coordinator.
Проект уже прошёл несколько завершённых итераций:
Завершённая программа Viewer, Editor, UI/UX, security и processing-platform зафиксирована в плане quality hardening и execution plan A–H.
| Итерация | Что было сделано |
|---|---|
0 |
Поднят bootstrap проекта, контейнерный запуск и базовый workflow |
1 |
Собрана UI foundation и единое визуальное направление продукта |
2 |
Реализован viewer для изображений, документов, видео, аудио и служебных текстовых форматов |
3 |
Реализован конвертер для изображений, office/PDF и media-сценариев |
4 |
Добавлен отдельный compression workspace с несколькими режимами сжатия |
5 |
Поднят PDF toolkit с OCR, redaction, merge/split/rotate и password flows |
6 |
Добавлен multi-format editor с live preview, diagnostics и экспортом |
7 |
Собран набор browser-native dev tools и утилит |
8 |
Проведён polish: cleaner UX, согласование терминов, cleanup policy и метрики |
9 |
Завершён A–H hardening: durable ownership, bounded formats, lifecycle, infra и supply chain |
Если нужен более технический разбор processing-платформы, он вынесен отдельно в docs/processing-platform.md. Версионированный CommonMark/GFM и Obsidian-compatible contract описан в docs/markdown-profile.md.