Updated the GalleryPanel component to adjust its height calculation, ensuring it occupies the full screen without causing dual scrollbars. Modified the GalleryBrowser to implement a fixed-size grid layout, enhancing the visual consistency of image tiles across different screen sizes. These changes improve the overall user experience and usability of the image gallery interface.
TeleWave
TeleWave — сервис онлайн-каналов: пользователи смотрят сетку каналов, видео отдаётся из хранилища на сервере, админ управляет каналами и пользователями.
Текущее состояние — рабочий вертикальный срез: вход/регистрация, роли, пользователи, админка; библиотека шоу/серий, загрузка и обработка медиа (ffmpeg → HLS), метаданные (TMDb/OMDb), каталог каналов, планировщик эфира (реклама, ТВ-заставки, weekly-override'ы) и live-раздача HLS с публичным просмотром сетки. Приложение (фронт + бек) поставляется единым Docker-образом; PostgreSQL — внешний, не поднимается через compose.
Стек
| Слой | Технологии |
|---|---|
| Backend | C# / .NET 10, ASP.NET Core Web API, Clean Architecture, CQRS (LiteCqrs.Net), EF Core |
| БД | PostgreSQL (Npgsql) |
| Auth | ASP.NET Core Identity + JWT (access + refresh, ротация) |
| Frontend | React 19 + Vite + TypeScript, TanStack Query/Router, shadcn/ui + Tailwind v4 (ретро-CRT тема) |
| Упаковка | Единый Docker-образ (API + статика SPA); PostgreSQL — внешний сервер |
Развёртывание
Postgres не входит в compose — база и пользователь создаются заранее на внешнем сервере БД:
-- на сервере БД (psql -h <хост БД> -U postgres)
CREATE USER telewave WITH PASSWORD 'change-me-strong-db-password';
CREATE DATABASE telewave OWNER telewave;
Затем на хосте с приложением:
cp .env.example .env
# заполнить ConnectionStrings__Default (хост/база/юзер/пароль БД), Jwt__SigningKey, AdminSeed__*
docker compose up -d --build
# → http://localhost:8085 (админ — логин/пароль из .env, AdminSeed__Username/Password)
Права на медиахранилище. Контейнер работает под непривилегированным пользователем (uid/gid
1654), а bind-mount пробрасывает права хоста как есть — каталог хранилища должен принадлежать
этому uid, иначе приложение стартует, но любая запись в /media упадёт с Permission denied.
Полная процедура (включая группу, через которую вы сами кладёте файлы в inbox/ и manual/) —
docs/server-storage-setup.md, шаг 5:
sudo groupadd -g 1654 telewave
sudo usermod -aG telewave "$USER" # затем перелогиниться
sudo chown -R 1654:1654 /srv/telewave/media
sudo chmod -R 750 /srv/telewave/media
sudo chmod 2775 /srv/telewave/media/inbox /srv/telewave/media/manual
Обновляетесь с версии, где контейнер работал под root? Это и есть вся миграция: остановите контейнер (
docker compose down), выполните команды выше, поднимайте новый образ.
Локальная разработка
# backend, из backend/
dotnet build && dotnet test tests/TeleWave.Domain.Tests tests/TeleWave.Application.Tests
dotnet run --project src/TeleWave.Api
# frontend, из frontend/
pnpm install
pnpm dev # проксирует /api на localhost:8080
Документация
Пример переменных окружения (сид админа, БД, JWT) — .env.example.
Инструкции для AI-ассистента (Claude Code) — в CLAUDE.md (стек, архитектурные
правила, доменные инварианты, соглашения по коду).
Лицензия
Не определена.