feat: Freelancer Match — AI-матчинг, escrow, milestones, portfolio, skill-tests, verification

This commit is contained in:
2026-07-03 15:03:30 +00:00
commit 0b785db1b3
61 changed files with 2725 additions and 0 deletions
+160
View File
@@ -0,0 +1,160 @@
# Freelancer Match — Умная площадка для фрилансеров
Площадка для фрилансеров и заказчиков с AI-подбором, escrow-гарантом сделок и рейтинговой системой.
## 🚀 Быстрый старт
### Требования
- Docker + Docker Compose
- Python 3.12+ (для локальной разработки)
- Node.js 20+ (для фронтенда)
- PostgreSQL 16+
- Redis 7+
### Запуск через Docker Compose
```bash
# 1. Скопируйте .env.example в .env и заполните переменные
cp backend/.env.example backend/.env
# 2. Запустите стек
docker compose up -d --build
# 3. Примените миграции БД
docker compose exec backend alembic upgrade head
# 4. Проверьте что всё работает
curl http://localhost:8000/api/health
```
### Локальная разработка
#### Backend
```bash
cd backend
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
uvicorn app.main:app --reload --port 8000
```
#### Frontend
```bash
cd frontend
npm ci
npm run dev
```
## 🔑 Настройка переменных окружения
Скопируйте `backend/.env.example` в `backend/.env` и заполните значения.
### Обязательные (без них не запустится)
| Переменная | Описание | Где взять |
|------------|----------|-----------|
| `DATABASE_URL` | Подключение к PostgreSQL | Создайте БД: `createdb freelancer_match` |
| `REDIS_URL` | Подключение к Redis | По умолчанию: `redis://localhost:6379/0` |
| `SECRET_KEY` | Ключ для JWT токенов | Сгенерируйте: `openssl rand -hex 32` |
### Опциональные (но нужны для полноценной работы)
| Переменная | Описание | Где взять |
|------------|----------|-----------|
| `OPENAI_API_KEY` | API ключ OpenAI для AI-матчинга | [platform.openai.com/api-keys](https://platform.openai.com/api-keys) |
| `STRIPE_SECRET_KEY` | Ключ Stripe для escrow | [dashboard.stripe.com/test/keys](https://dashboard.stripe.com/test/keys) (Test mode) |
| `STRIPE_WEBHOOK_SECRET` | Секрет для webhook Stripe | Настройте в Stripe Dashboard → Webhooks |
### Email (опционально)
| Переменная | Описание | Где взять |
|------------|----------|-----------|
| `SMTP_USER` | Email для отправки писем | Ваш email (Gmail, Mail.ru и т.д.) |
| `SMTP_PASSWORD` | Пароль SMTP | Для Gmail — используйте App Passwords (не обычный пароль) |
### OAuth (опционально, если хотите вход через Google/GitHub)
| Переменная | Описание | Где взять |
|------------|----------|-----------|
| `GOOGLE_CLIENT_ID` | OAuth client ID для входа через Google | [Google Cloud Console](https://console.cloud.google.com/apis/credentials) |
| `GITHUB_CLIENT_ID` + `GITHUB_CLIENT_SECRET` | OAuth для GitHub | [GitHub Developer Settings → OAuth Apps](https://github.com/settings/developers) |
## 📁 Структура проекта
```
freelancer-match/
├── backend/ # FastAPI бэкенд
│ ├── app/
│ │ ├── api/ # API endpoints
│ │ ├── models/ # SQLAlchemy модели
│ │ ├── schemas/ # Pydantic схемы
│ │ ├── services/ # Бизнес-логика
│ │ └── core/ # Базовые модули (БД, безопасность)
│ ├── alembic/ # Миграции БД
│ ├── tests/ # Тесты pytest
│ ├── Dockerfile
│ └── requirements.txt
├── frontend/ # Next.js фронтенд
│ ├── app/ # App Router (pages)
│ ├── components/ui/ # UI компоненты
│ ├── lib/ # Утилиты и провайдеры
│ ├── Dockerfile
│ └── package.json
├── docker-compose.yml # Стек сервисов
└── .drone.yml # CI/CD для Drone CI
```
## 🧪 Тесты
```bash
# Backend (pytest)
cd backend && pytest tests/ -v
# Frontend (linting)
cd frontend && npx next lint
```
## 🔒 Безопасность
- JWT аутентификация с refresh токенами
- Хеширование паролей через bcrypt
- CORS middleware
- Escrow-гарант сделок (Stripe интеграция)
- AI-матчинг с pgvector эмбеддингами
## 📊 API Endpoints
| Метод | Endpoint | Описание |
|-------|----------|----------|
| POST | `/api/auth/register` | Регистрация пользователя |
| POST | `/api/auth/login` | Вход (JWT) |
| GET | `/api/projects` | Список проектов |
| POST | `/api/projects` | Создать проект |
| POST | `/api/ai/match-project` | AI-подбор фрилансеров |
| POST | `/api/escrow/create` | Создать escrow-транзакцию |
## 🚀 Деплой на сервер
```bash
# 1. Настройте .env.production
cp backend/.env.example backend/.env.production
# 2. Обновите docker-compose.yml для продакшена (уберите порты, добавьте healthcheck)
# 3. Запустите через Docker Compose
docker compose -f docker-compose.prod.yml up -d --build
# 4. Примените миграции
docker compose exec backend alembic upgrade head
```
## 🤖 CI/CD (Drone CI)
Проект настроен для автоматического деплоя через Drone CI:
- `.drone.yml` — пайплайн с тестами, сборкой и деплоем
- Настроен на Gitea (`ms.webhop.me`)
- Автоматический запуск при push в main
## 📝 Лицензия
MIT © 2026 Freelancer Match