Веб-платформа для проектирования частных домов онлайн с помощью искусственного интеллекта.
Пользователь описывает пожелания, ИИ-архитектор помогает с планировкой, материалами и бюджетом, а встроенный 2D-редактор и 3D-визуализатор позволяют довести проект до рабочего состояния.
┌─────────────────────────────────────┐
│ Browser (User) │
└──────────────┬──────────────────────┘
│ HTTPS
┌──────────────▼──────────────────────┐
│ Next.js 16 (Frontend) │
│ - Auth pages │
│ - 2D floor plan editor (SVG) │
│ - 3D viewer (React Three Fiber) │
│ - AI chat panel │
│ - Cost estimate panel │
└──────────────┬──────────────────────┘
│ JSON / REST
┌──────────────▼──────────────────────┐
│ FastAPI (Backend) │
│ - JWT auth │
│ - Project CRUD │
│ - AI chat & plan generation │
│ - Cost estimation │
└──────────────┬──────────────────────┘
│
┌──────────────▼──────────┐ ┌─────────▼──────────┐
│ SQLite (projects, users)│ │ OpenAI API │
└─────────────────────────┘ └────────────────────┘
| Слой | Технология |
|---|---|
| Frontend | Next.js 16, React 19, TypeScript, Tailwind CSS v4 |
| 2D/3D | SVG, React Three Fiber, Three.js |
| Backend | Python 3.9+, FastAPI, SQLAlchemy 2.0, Pydantic v2 |
| База данных | SQLite (в перспективе PostgreSQL) |
| AI | OpenAI API (gpt-4o-mini) |
| Auth | JWT (python-jose) + bcrypt |
house-designer-ai/
├── backend/ # Python FastAPI backend
│ ├── main.py # Точка входа, endpoints
│ ├── models.py # SQLAlchemy модели
│ ├── schemas.py # Pydantic схемы
│ ├── database.py # Подключение к БД и сессии
│ ├── ai_service.py # OpenAI: чат и генерация планировки
│ ├── floor_plan_generator.py # Резервная/rule-based генерация планов
│ ├── cost_estimator.py # Расчёт сметы
│ ├── requirements.txt
│ └── .env.example
├── frontend/ # Next.js frontend
│ ├── app/
│ │ ├── page.tsx # Главная: авторизация, список проектов
│ │ ├── layout.tsx # Корневой layout
│ │ └── project/
│ │ └── [id]/
│ │ └── page.tsx # Страница редактора проекта
│ ├── components/
│ │ ├── FloorPlanEditor.tsx # 2D-редактор
│ │ ├── House3DViewer.tsx # 3D-визуализатор
│ │ ├── AIChatPanel.tsx # Панель чата с ИИ
│ │ └── CostEstimatePanel.tsx # Панель сметы
│ ├── lib/
│ │ ├── api.ts # HTTP-клиент (axios) и API-методы
│ │ └── types.ts # TypeScript типы
│ ├── package.json
│ └── next.config.ts
└── README.md
User| Поле | Тип | Описание |
|---|---|---|
| id | int | Первичный ключ |
| string | Уникальный email | |
| hashed_password | string | Хеш пароля (bcrypt) |
| full_name | string | Полное имя (опционально) |
| created_at | datetime | Дата регистрации |
Project| Поле | Тип | Описание |
|---|---|---|
| id | int | Первичный ключ |
| title | string | Название проекта |
| description | text | Описание |
| parameters | JSON | Введённые пользователем параметры |
| floor_plan | JSON | Планировка (rooms, walls, doors, windows) |
| materials_estimate | JSON | Смета |
| owner_id | int | Владелец (FK → users) |
| created_at | datetime | Дата создания |
| updated_at | datetime | Дата обновления |
FloorPlan (JSON){
"rooms": [
{
"id": 1,
"name": "Гостиная",
"type": "living",
"x": 0,
"y": 0,
"width": 5,
"height": 5
}
],
"walls": [
{ "x1": 0, "y1": 0, "x2": 5, "y2": 0, "thickness": 0.2 }
],
"doors": [
{ "x": 2, "y": 0, "width": 0.9, "orientation": "horizontal", "room_id": 1 }
],
"windows": [
{ "x": 3, "y": 0, "width": 1.2, "orientation": "horizontal", "room_id": 1 }
]
}
Координаты в метрах. Начало координат — левый нижний угол дома.
Базовый URL: http://localhost:8000
| Метод | Endpoint | Описание | Auth |
|---|---|---|---|
| POST | /auth/register |
Регистрация | — |
| POST | /auth/login |
Вход, получение JWT | — |
| GET | /auth/me |
Текущий пользователь | Bearer |
| Метод | Endpoint | Описание | Auth |
|---|---|---|---|
| GET | /projects |
Список проектов пользователя | Bearer |
| POST | /projects |
Создать проект | Bearer |
| GET | /projects/{id} |
Получить проект | Bearer |
| PATCH | /projects/{id} |
Обновить проект | Bearer |
| DELETE | /projects/{id} |
Удалить проект | Bearer |
| POST | /projects/{id}/photo |
Загрузить фото участка | Bearer |
| GET | /projects/{id}/photo |
Получить фото участка | Bearer |
| POST | /projects/{id}/share |
Включить публичный доступ | Bearer |
| POST | /projects/{id}/unshare |
Отключить публичный доступ | Bearer |
| GET | /public/{token} |
Публичный проект по ссылке | — |
| POST | /projects/{id}/versions |
Сохранить версию | Bearer |
| GET | /projects/{id}/versions |
Список версий | Bearer |
| POST | /projects/{id}/versions/{idx}/restore |
Восстановить версию | Bearer |
| Метод | Endpoint | Описание | Auth |
|---|---|---|---|
| POST | /feedback |
Отправить обратную связь | — |
| Метод | Endpoint | Описание | Auth |
|---|---|---|---|
| POST | /ai/chat |
Чат с ИИ-архитектором | — |
| POST | /ai/generate-plan |
Сгенерировать планировку по запросу | — |
| POST | /ai/generate-plan-variants |
Сгенерировать несколько вариантов | — |
| POST | /ai/materials |
Рекомендации по материалам от ИИ | — |
| POST | /ai/energy |
Оценка энергоэффективности | — |
| POST | /ai/estimate |
Рассчитать смету | — |
| Метод | Endpoint | Описание | Auth |
|---|---|---|---|
| POST | /export/pdf |
Экспорт планировки в PDF | — |
| POST | /export/svg |
Экспорт планировки в SVG | — |
| POST | /export/dxf |
Экспорт планировки в DXF | — |
| POST | /export/report |
Текстовый отчёт с характеристиками | — |
| POST | /export/exec-docs |
Комплект исполнительной документации (PDF) | — |
curl -X POST http://localhost:8000/auth/register \
-H "Content-Type: application/json" \
-d '{"email":"user@example.com","password":"secret123","full_name":"Иван Иванов"}'
curl -X POST http://localhost:8000/auth/login \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "username=user@example.com&password=secret123"
curl -X POST http://localhost:8000/projects \
-H "Authorization: Bearer <TOKEN>" \
-H "Content-Type: application/json" \
-d '{"title":"Мой дом","description":"Двухэтажный коттедж"}'
curl -X POST http://localhost:8000/ai/generate-plan \
-H "Content-Type: application/json" \
-d '{
"prompt": "Современный одноэтажный дом для семьи из 4 человек",
"area": 120,
"floors": 1,
"style": "минимализм",
"rooms": ["Гостиная", "Кухня", "Спальня", "Детская", "Ванная"]
}'
curl -X POST http://localhost:8000/ai/estimate \
-H "Content-Type: application/json" \
-d '{"floor_plan": {<plan>}, "region_factor": 1.0}'
FloorPlanEditorHouse3DViewerAIChatPanel/ai/chat с контекстом проекта./ai/generate-plan и обновляет редактор./ai/generate-plan-variants и показывает 2–3 варианта на выбор./ai/materials и выводит в чат предложения по материалам с ориентировочной стоимостью./ai/energy и показывает класс, теплопотери, расходы и рекомендации.CostEstimatePanel/ai/estimate.git clone https://github.com/Skurzhansky/Skru-ART.git
cd Skru-ART
cd backend
python3 -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r requirements.txt
Создайте файл backend/.env:
DATABASE_URL=sqlite:///./house_designer.db
OPENAI_API_KEY=sk-your-openai-key-here
SECRET_KEY=your-secret-key-for-jwt
ALGORITHM=HS256
ACCESS_TOKEN_EXPIRE_MINUTES=60
Запуск:
python main.py
Сервер запустится на http://localhost:8000.
cd frontend
npm install
Создайте файл frontend/.env.local:
NEXT_PUBLIC_API_URL=http://localhost:8000
Запуск:
npm run dev
Frontend откроется на http://localhost:3000.
.env)| Переменная | Описание | По умолчанию |
|---|---|---|
DATABASE_URL |
URL базы данных SQLAlchemy | sqlite:///./house_designer.db |
OPENAI_API_KEY |
API-ключ OpenAI | — (обязательно для ИИ) |
SECRET_KEY |
Секретный ключ для подписи JWT | — |
ALGORITHM |
Алгоритм подписи JWT | HS256 |
ACCESS_TOKEN_EXPIRE_MINUTES |
Время жизни токена в минутах | 60 |
.env.local)| Переменная | Описание | По умолчанию |
|---|---|---|
NEXT_PUBLIC_API_URL |
URL backend API | http://localhost:8000 |
schemas.py.lib/api.ts, использовать в app/.lib/types.ts при изменении JSON-моделей.npm run build в frontend и python main.py в backend."use client"; серверные страницы — по умолчанию..env, venv/ и node_modules/.docker-compose up --build
Поднимает три сервиса:
backend — FastAPI на http://localhost:8000frontend — Next.js на http://localhost:3000db — PostgreSQL 16Перед запуском создай .env в корне:
OPENAI_API_KEY=sk-your-real-key
SECRET_KEY=your-strong-secret
Для полного соответствия законам РФ и независимости от зарубежных хостингов рекомендуется VPS у российского провайдера.
ssh root@твой-сервер
apt update && apt install -y docker.io docker-compose-plugin
git clone https://github.com/Skurzhansky/Skru-ART.git
cd Skru-ART
.env в корне:OPENAI_API_KEY=sk-ваш-ключ
SECRET_KEY=ваш-секретный-ключ
docker compose up -d
http://ip-вашего-сервера — сайт доступен по IP-адресуЕсли есть статический IP или возможность пробросить порты:
docker compose up -d
И открой порт 80/443 наружу.
Установи Nginx и Certbot:
apt install -y nginx certbot python3-certbot-nginx
certbot --nginx -d твой-домен.ru
Пример nginx.conf для проксирования:
server {
listen 80;
server_name твой-домен.ru;
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
}
location /api {
proxy_pass http://localhost:8000;
proxy_set_header Host $host;
}
}
Или используй CORS_ORIGINS в backend для разрешения домена frontend.
cd backend
source venv/bin/activate
pytest
Пока тесты не написаны — это следующий шаг в roadmap.
cd frontend
npm run build
npm run lint
OPENAI_API_KEY).Подходит любой хостинг с поддержкой Docker или Python + ASGI:
Пример для VPS (Ubuntu + Docker):
docker build -f backend/Dockerfile -t house-backend ./backenddocker run -p 8000:8000 -e DATABASE_URL=... house-backenddocker compose up -d из корня проектаДля соответствия законам РФ деплоить на:
npm run build && npm start)При деплое установи CORS_ORIGINS в backend с доменом frontend.
Проект разрабатывается как приватный прототип. Лицензия будет добавлена позже.