admin 6ecb110768 feat: добавить отзывы, milestone-платежи, портфолио, skill-tests и верификацию (фичи Upwork/Fiverr)
Фичи конкурентов внедрены:
- Reviews API + UI — система отзывов с рейтингом 1-5 звёзд
- Milestones (Upwork-style) — разделение escrow на этапы с submit/approve
- Portfolio — портфолио фрилансера с превью работ и технологиями
- Skill Tests (Upwork-style) — сертификация навыков с тестами
- Verification Badges — верификация email/phone/id/bank

Модели: Milestone, PortfolioItem, SkillTest/SkillTestResult, Verification
2026-07-03 14:03:44 +00:00

Freelancer Match — Умная площадка для фрилансеров

Площадка для фрилансеров и заказчиков с AI-подбором, escrow-гарантом сделок и рейтинговой системой.

🚀 Быстрый старт

Требования

  • Docker + Docker Compose
  • Python 3.12+ (для локальной разработки)
  • Node.js 20+ (для фронтенда)
  • PostgreSQL 16+
  • Redis 7+

Запуск через Docker Compose

# 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

cd backend
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
uvicorn app.main:app --reload --port 8000

Frontend

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
STRIPE_SECRET_KEY Ключ Stripe для escrow 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
GITHUB_CLIENT_ID + GITHUB_CLIENT_SECRET OAuth для GitHub GitHub Developer Settings → OAuth Apps

📁 Структура проекта

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

🧪 Тесты

# 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-транзакцию

🚀 Деплой на сервер

# 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

S
Description
Freelance matching platform
Readme 125 KiB
Languages
Python 75.5%
TypeScript 23.4%
Dockerfile 0.4%
CSS 0.4%
JavaScript 0.3%