https://github.com/wo0zz1/power-paint
Web application for online collective drawing
https://github.com/wo0zz1/power-paint
access-rules auth crdt docker email nextjs nginx oidc postgresql prisma react real-time ssr websockets yjs
Last synced: 13 days ago
JSON representation
Web application for online collective drawing
- Host: GitHub
- URL: https://github.com/wo0zz1/power-paint
- Owner: Wo0zZ1
- License: mit
- Created: 2026-04-10T20:06:58.000Z (2 months ago)
- Default Branch: main
- Last Pushed: 2026-05-30T11:34:30.000Z (24 days ago)
- Last Synced: 2026-05-30T13:12:58.819Z (24 days ago)
- Topics: access-rules, auth, crdt, docker, email, nextjs, nginx, oidc, postgresql, prisma, react, real-time, ssr, websockets, yjs
- Language: Batchfile
- Homepage: http://power-paint.duckdns.org
- Size: 12.8 MB
- Stars: 1
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# 🎨 Power Paint - Real-Time Collaborative Drawing App
> Power Paint - это масштабируемое веб-приложение для совместного рисования в реальном времени, разработанное с использованием современных подходов к построению распределённых систем и фронтенд-архитектуры.
## 🚀 Основные возможности
- Совместное рисование в реальном времени
- Мгновенная синхронизация через WebSocket
- Консистентность данных с использованием CRDT движка
- Поддержка и полный контроль мультипользовательских сессий
- Интеграция безопасной аутентификации через OpenID Connect
- Темизация и интернационализация интерфейса
- Полный стек тестирования, включая E2E тесты
- Email-рассылки с кодами подтверждения
- Адаптивный интерфейс
## 🏗 Архитектура
Проект построен как **монорепозиторий**, включающий несколько независимых сервисов:
```
- nginx
- Power-Paint-E2E
- Power-Paint-Migrator
- Power-Paint-Socket
- Power-Paint-Web
```
## 🧩 Технологический стек
### Frontend
- [React](https://react.dev)
- [Next.js](https://nextjs.org)
- [TypeScript](https://www.typescriptlang.org)
- [Feature-Sliced Design](https://fsd.how)
- [TailwindCSS](https://tailwindcss.com)
- [Zustand](https://zustand-demo.pmnd.rs)
- [React Query](https://tanstack.com/query)
### Backend / Infra
- [Node.js](https://nodejs.org)
- [WebSocket](https://en.wikipedia.org/wiki/WebSocket)
- [Yjs](https://yjs.dev)
- [PostgreSQL](https://www.postgresql.org)
- [Prisma ORM](https://www.prisma.io)
### [Email](#-email-система)
- [Nodemailer](https://nodemailer.com)
- [React Email](https://react.email)
### DevOps
- [Nginx](https://www.nginx.com)
- [Docker](https://www.docker.com)
- [DuckDNS](https://www.duckdns.org)
### [Testing](#-тестирование)
- [Jest](https://jestjs.io)
- [Testing Library](https://testing-library.com)
- [Playwright](https://playwright.dev)
# Быстрый старт
### 📦 1. Клонирование репозитория
```bash
git clone --recurse-submodules https://github.com/Wo0zZ1/Power-Paint
```
### ⚙️ 2. Настройка переменных окружения
Cкопируй и заполни корневой `.env` файл.
```bash
cp .env.example .env
```
> TIP: Если же хочешь запускать сервисы по отдельности, то переменные окружения для каждого сервиса находятся в соответствующих папках (например, `Power-Paint-Web/.env`).
### 🐋 3. Запуск в Docker
Для запуска всех сервисов в продакшн-режиме:
```bash
docker compose -f docker-compose.yml --env-file .env up -d --build
```
Для запуска системы в dev-режиме и дальнейшей разработки фронтенда, развёрнутого на localhost:
```bash
docker compose -f docker-compose.web-dev.yml --env-file .env.dev up -d --build
```
Для запуска E2E тестов:
```bash
./run-e2e-tests.sh
```
> TIP: Если хочешь запустить E2E тесты в Windows, используй `run-e2e-tests.bat`.
## 🧪 Тестирование
### Unit + Integration
Запуск внутри `Power-Paint-Web`:
```bash
yarn test
```
### E2E тесты
Запуск из корневой директории монорепозитория:
> Linux / MacOS:
```bash
./run-e2e-tests.sh
```
> Windows:
```bat
run-e2e-tests.bat
```
## 🌐 Деплой
Вся инфраструктура веб-приложения развёрнута на [VPS](https://beget.com/ru)
### Let's Encrypt SSL сертификаты
Для обеспечения безопасности и шифрования данных используется SSL-сертификат от Let's Encrypt.
## 📂 Структура `Power-Paint-Web`
Структура фронтенд-приложения построена по принципам Feature-Sliced Design, что обеспечивает высокую масштабируемость и поддерживаемость кода.
```
.
├── app/ # Роутинг и инициализация
├── email/ # Шаблоны для email-рассылок
├── public/ # Статические ресурсы
└── src/
├── app # Глобальные провайдеры
├── entities # Доменные сущности
├── features # Бизнес-логика
├── shared # Общие утилиты и UI-kit
└── widgets # Композиция UI
```
Роутинг реализован с помощью [App Router](https://nextjs.org/docs/app) и вынесен в отдельный слой `/app`, что позволяет легко управлять навигацией и поддерживать чистую архитектуру, не смешивая логику со слоем `/src/app`
## 📬 Email-система
Power Paint включает в себя встроенную систему email-рассылок, которая используется для отправки кодов подтверждения при регистрации и других уведомлений. Основные компоненты системы включают:
- Шаблоны email, разработанные с помощью [React Email](https://react.email), что позволяет создавать адаптивные и красивые письма.
- Отправка писем осуществляется через SMTP-сервер с помощью [Nodemailer](https://nodemailer.com), обеспечивая надёжную доставку сообщений пользователям.
> TIP: Для E2E тестирования поднимается отдельный сервис [MailHog](https://github.com/mailhog/MailHog), который перехватывает все исходящие письма и позволяет просматривать их через веб-интерфейс, что обеспечивает удобное тестирование email-функционала без риска отправки реальных писем.
## Почему Power Paint?
> Power Paint - это не просто ещё одно приложение для рисования, а полноценная платформа для совместной работы, которая решает ключевые проблемы существующих решений на рынке. Вот почему Power Paint выделяется:
| Аналог | Ограничение | Преимущества Power Paint |
| ---------- | ----------------------- | --------------------------------------- |
| Excalidraw | Нет ролевой модели | Полный контроль над сессиями |
| Draw.io | Медленная синхронизация | Мгновенная синхронизация |
| Figma | Проприетарность | Открытый код и возможность кастомизации |
| Use case / сценарий | Power Paint | Excalidraw | Draw.io | Figma |
| -------------------------------------------- | ----------- | ---------- | ------- | ----- |
| Быстрые скетчи и идеи | ✅ | ✅ | ⚠️ | ⚠️ |
| Совместное редактирование в реальном времени | ✅ | ✅ | ⚠️ | ✅ |
| Работа в распределённых командах | ✅ | ⚠️ | ⚠️ | ✅ |
| Контроль доступа (роли, права) | ✅ | ⚠️ | ⚠️ | ✅ |
| развёртывание на своей инфраструктуре | ✅ | ✅ | ✅ | ❌ |
| Использование в обучении / преподавании | ✅ | ✅ | ⚠️ | ⚠️ |
| Brainstorming / whiteboard-сессии | ✅ | ✅ | ⚠️ | ⚠️ |
👉 Power Paint:
- Open-source
- Масштабируемый
- Контролируемый стек
- Подходит для enterprise
## Демо
### Регистрация
#### Страница регистрации, Шаг 1: Ввод email и отправка кода подтверждения

#### Страница регистрации, Шаг 2: Ввод дополнительных данных и завершение регистрации

#### Страница регистрации, Шаг 3: Ввод кода подтверждения из email

### Восстановление пароля
#### Страница восстановления пароля, Шаг 1: Ввод email и отправка кода подтверждения

#### Страница восстановления пароля, Шаг 2: Ввод кода подтверждения из email

#### Страница восстановления пароля, Шаг 3: Ввод нового пароля и завершение процесса

### Вход
#### Страница входа: Ввод email и пароля

### Главная страница
#### Тёмная тема + Интернационализация (английский язык)

#### Светлая тема + Интернационализация (русский язык)

#### Настройка доступа к рабочей области

### Email-рассылки
#### Пример письма с кодом подтверждения для регистрации

#### Пример письма с кодом подтверждения для восстановления пароля

### Рисование
#### Совместное рисование в реальном времени

### Тестирование
#### Unit&Integration-тесты

#### E2E-тесты

#### Lighthouse отчёт

#### Lighthouse метрики

## 📄 Лицензия
Проект распространяется под лицензией [MIT](LICENSE)
---
Разработано в рамках курсовой работы 2026